From b85b663432067f2ff6092f363d9bd0fb9df0831a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Hozman?= <tomas.hozman@pm.me>
Date: Fri, 25 Nov 2022 22:56:32 +0100
Subject: [PATCH] finished desktop version

---
 content/index.html                     |   129 +-
 content/static/css/base.css            |    72 +-
 content/static/js/jSignature.min.js    |    81 +
 content/static/js/jspdf.umd.min.js     |   398 +
 content/static/js/jspdf.umd.min.js.map |     1 +
 content/static/js/main.js              |   340 +-
 content/static/js/offices.js           | 46388 +++++++++++++++++++++++
 7 files changed, 47283 insertions(+), 126 deletions(-)
 create mode 100644 content/static/js/jSignature.min.js
 create mode 100644 content/static/js/jspdf.umd.min.js
 create mode 100644 content/static/js/jspdf.umd.min.js.map
 create mode 100644 content/static/js/offices.js

diff --git a/content/index.html b/content/index.html
index 54231a8..2515e30 100644
--- a/content/index.html
+++ b/content/index.html
@@ -3,28 +3,34 @@
 	<head>
 		<meta charset="utf-8">
 		<meta name="viewport" content="width=device-width, initial-scale=1">
-
+		
 		<!-- Author: Tomáš Valenta, https://blog.imaniti.org -->
-
+		
 		<title>Voličské průkazy</title>
 		<meta name="description" content="Vol si jak chceš, kde chceš. My ti to zjednodušíme.">
-
+		
 		<meta property="og:type" content="website">
 		<meta property="og:title" content="Voličské průkazy">
 		<meta property="og:description" content="Vol si jak chceš, kde chceš. My ti to zjednodušíme.">
 		<meta property="og:image" content="https://prukazy.pirati.cz/static/images/banner.webp">
-
+		
 		<meta name="twitter:card" content="summary_large_image">
 		<meta property="twitter:domain" content="prukazy.pirati.cz">
 		<meta name="twitter:title" content="Voličské průkazy">
 		<meta name="twitter:description" content="Vol si jak chceš, kde chceš. My ti to zjednodušíme.">
 		<meta name="twitter:image" content="https://prukazy.pirati.cz/static/images/banner.webp">
-
+		
+		<link
+			rel="preload"
+			href="static/css/geo-autocomplete.css"
+			as="style"
+		>
+		
 		<link
 			rel="stylesheet"
 			href="static/fonts/open-sans/style.css"
 		>
-
+		
 		<link
 			rel="stylesheet"
 			href="static/css/geo-autocomplete.css"
@@ -33,14 +39,17 @@
 			rel="stylesheet"
 			href="static/css/base.css"
 		>
-
+		
 		<script
-			src="static/js/geo-autocomplete.min.js"
+			src="static/js/jquery.min.js"
 		></script>
 		<script
-			src="static/js/jquery.min.js"
+			src="static/js/jSignature.min.js"
 		></script>
-
+		<script
+			src="static/js/jspdf.umd.min.js"
+		></script>
+		
 		<link
 			rel="icon"
 			href="static/images/favicon.webp"
@@ -56,12 +65,12 @@
 					width="55"
 					height="55"
 				>
-				<h1 style="font-family:'Bebas Neue'">Voličské průkazy</h1>  <!-- FIXME -->
 			</div>
 		</header>
 
 		<main>
 			<div id="step1">
+				<h1>Vyřiďte si svůj voličský průkaz na prezidentské volby!</h1>
 				<p id="intro-text">
 					Již za dva měsíce nás čekají prezidentské volby a Piráti znovu nabízí možnost, jak si vyřídit voličský průkaz - tedy potvrzení, že můžeš volit i na jiném místě, než v trvalém bydlišti.<br>
 					Vyplň náš jednoduchý formulář, stáhni si ho v PDF a pošli ho datovkou nebo dones osobně na úřad. Neboj se - vážíme si tvého soukromí, nesbíráme žádná osobní data a vše zpracovává tvůj prohlížeč.
@@ -73,13 +82,11 @@
 							type="text"
 							id="name"
 							placeholder="Jméno *"
-							value="Tomáš"
 						>
 						<input
 							type="text"
 							id="surname"
 							placeholder="Příjmení *"
-							value="Černohorský"
 						>
 					</div>
 					
@@ -91,7 +98,6 @@
 							type="date"
 							id="birth-date"
 							name="birth-date"
-							value="2004-04-25"
 						>
 					</div>
 					
@@ -99,14 +105,12 @@
 					
 					<div
 						id="address-autocomplete"
-						aria-role="textbox"
 					></div>
 					
 					<input
 						type="text"
 						id="street"
 						placeholder="Ulice, popisné a orientační č. *"
-						value="Svojsíkova 145"
 					>
 					
 					<div class="input-group input-group-2">
@@ -114,14 +118,12 @@
 							type="text"
 							id="city"
 							placeholder="Obec *"
-							value="Krupka"
 						>
 						
 						<input
 							type="text"
 							id="zip"
 							placeholder="PSČ *"
-							value="41501"
 						>
 					</div>
 					
@@ -131,7 +133,7 @@
 						<option>Vyzvednout osobně</option>
 						<option>Předat osobě, která se prokáže plnou mocí</option>
 						<option>Zaslat na adresu trvalého pobytu</option>
-						<option selected>Zaslat jinam</option>
+						<option>Zaslat jinam</option>
 					</select>
 					
 					<input
@@ -139,7 +141,6 @@
 						id="other-address-conditional"
 						placeholder="Doručovací adresa *"
 						style="display:none"
-						value="Svojsíkova 13, 415 01 Teplice"
 					>
 					
 					<select
@@ -150,7 +151,7 @@
 					</select>
 					
 					<button id="create-filled-form">
-						Vydat žádost úřadu!
+						Podepsat
 					</button>
 					
 					<small>
@@ -160,17 +161,99 @@
 			</div>
 			
 			<div id="step2">
+				<h2>Podpis</h2>
+				
+				<a
+					href="#"
+					id="show-document"
+				>
+					Zobrazit dokument
+				</a>
+				
+				<div id="signature-info-wrapper">
+					V
+					<input
+						type="text"
+						id="signature-location"
+						placeholder="Místo"
+					>
+					dne <input
+						type="text"
+						id="current-date"
+						placeholder="Datum"
+					>
+				</div>
+				
+				<div id="signature-wrapper">
+					<div id="signature"></div>
+					<div id="signature-bottom">
+						<button class="button-small" id="signature-undo">Smazat</button>
+						<i>Myší nebo prstem nakresli podpis</i>
+					</div>
+				</div>
+				
+				<button id="finish">Předat úřadu</button>
+			</div>
+			
+			<div id="step3">
+				<div id="found-office">
+					<h2>Úřad jsme našli automaticky.</h2>
+					
+					<p>
+						Měl by se nacházet na adrese
+						<b><span id="office-address-direction"></span></b>,
+						tam můžeš žádost s úředně otevřeným podpisem donést.
+						Pokud máš datovou schránku, můžeš žádost také poslat
+						na schránku úřadu s číslem
+						<b><samp id="office-ds-id-direction"></samp></b>.
+					</p>
+					
+					<p>
+						Děkujeme, že se chystáš volit a aktivně se účastnit procesu
+						demokracie!
+					</p>
+					
+					<button id="download-pdf">Stáhnout pdf</button>
+				</div>
+				<div id="not-found-office">
+					<h2>Bohužel, úřad jsme automaticky nenašli.</h2>
+					
+					<p>
+						Ve veřejných záznamech se pod jménem zadané obce nenachází.
+						Až ho ale najdeš sám, můžeš tam žádost s úředně ověřeným
+						podpisem donést. Také ho můžeš poslat na jeho datocou schránku.
+					</p>
+					
+					<p>
+						Děkujeme, že se chystáš volit a aktivně se účastnit procesu
+						demokracie!
+					</p>
+				</div>
+			</div>
+			
+			<div id="canvas-wrapper">
+				<a
+					href="#"
+					id="back-to-step2"
+				>Zpět</a>
+				
 				<canvas id="page-1-canvas" width="2480" height="3507"></canvas>
 				<canvas id="page-2-canvas" width="2480" height="3507"></canvas>
 			</div>
 		</main>
-
+		
 		<footer>
 			
 		</footer>
-
+		
+		<script
+			src="static/js/geo-autocomplete.min.js"
+		></script>
 		<script
 			src="static/js/main.js"
 		></script>
+		<script
+			src="static/js/offices.js"
+		></script>
 	</body>
 </html>
diff --git a/content/static/css/base.css b/content/static/css/base.css
index ee1e208..54bb3d8 100644
--- a/content/static/css/base.css
+++ b/content/static/css/base.css
@@ -8,6 +8,14 @@ body {
 	font-family:"Open Sans",sans-serif;
 }
 
+a {
+	color:#000
+}
+
+a:hover,a:visited {
+	color:#000
+}
+
 header {
 	height:70px;
 	padding:10px;
@@ -25,7 +33,7 @@ main {
 }
 
 
-input,[aria-role="input"],textarea,select {
+input,[aria-role="textbox"],textarea,select {
 	border:0;
 	font-size:unset;
 	padding:10px;
@@ -72,20 +80,52 @@ textarea {
 	align-items:center
 }
 
-#step1 {
+#step1,#step2,#step3,#canvas-wrapper {
 	max-width:1000px;
 	margin-left:auto;
 	margin-right:auto;
 	padding-top:40px
 }
 
+#found-office,#not-found-office {
+	display:none
+}
+
 #step2 {
 	display:none;
-	object-fit:contain
+	text-align:center
 }
 
-#step2 canvas {
-	width:100%
+#signature-info-wrapper {
+	align-items:center;
+	display:flex;
+	gap:10px;
+	justify-content:center
+}
+
+#signature-info-wrapper input,
+#signature-info-wrapper [aria-role="textbox"],
+#signature-info-wrapper textarea,
+#signature-info-wrapper select,
+#current-date {
+	background:unset;
+	border-bottom:1px dotted #000;
+	padding:12px
+}
+
+#signature-wrapper {
+	border:1px dotted #000;
+	margin-left:auto;
+	margin-right:auto;
+	margin-top:25px;
+	max-width:600px
+}
+
+#signature-bottom {
+	align-items:flex-end;
+	display:flex;
+	justify-content:space-between;
+	margin:5px
 }
 
 #intro-text {
@@ -110,10 +150,23 @@ textarea {
 	text-align:center
 }
 
-#form-preview {
-	grid-area:preview
+#show-document {
+	display:block;
+	margin-bottom:17.5px
+}
+
+#canvas-wrapper {
+	display:none;
+	object-fit:contain;
+}
+
+#canvas-wrapper canvas {
+	width:100%;
 }
 
+#finish,#download-pdf {
+	margin-top:20px
+}
 
 .input-group {
 	display:flex;
@@ -140,3 +193,8 @@ textarea {
 .input-single-with-label input {
 	flex:1 1 0px
 }
+
+.button-small {
+	font-size:small;
+	padding:4px 7px
+}
diff --git a/content/static/js/jSignature.min.js b/content/static/js/jSignature.min.js
new file mode 100644
index 0000000..b31badf
--- /dev/null
+++ b/content/static/js/jSignature.min.js
@@ -0,0 +1,81 @@
+/*
+
+jSignature v2 "2018-11-06T13:56" "commit ID 89c22b348ab2e1d92a928d8fd992f175e8bc5cbd"
+Copyright (c) 2012 Willow Systems Corp http://willow-systems.com
+Copyright (c) 2010 Brinley Ang http://www.unbolt.net
+MIT License <http://www.opensource.org/licenses/mit-license.php>
+
+
+Simplify.js BSD 
+(c) 2012, Vladimir Agafonkin
+mourner.github.com/simplify-js
+
+
+base64 encoder
+MIT, GPL
+http://phpjs.org/functions/base64_encode
++   original by: Tyler Akins (http://rumkin.com)
++   improved by: Bayron Guevara
++   improved by: Thunder.m
++   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
++   bugfixed by: Pellentesque Malesuada
++   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
++   improved by: Rafal Kukawski (http://kukawski.pl)
+
+
+jSignature v2 jSignature's Undo Button and undo functionality plugin
+
+
+jSignature v2 jSignature's custom "base30" format export and import plugins.
+
+
+jSignature v2 SVG export plugin.
+
+*/
+(function(){function q(a){var b=a.css("color"),c;a=a[0];for(var g=!1;a&&!c&&!g;){try{var d=$(a).css("background-color")}catch(l){d="transparent"}"transparent"!==d&&"rgba(0, 0, 0, 0)"!==d&&(c=d);g=a.body;a=a.parentNode}a=/rgb[a]*\((\d+),\s*(\d+),\s*(\d+)/;g=/#([AaBbCcDdEeFf\d]{2})([AaBbCcDdEeFf\d]{2})([AaBbCcDdEeFf\d]{2})/;d=void 0;if(d=b.match(a))var m={r:parseInt(d[1],10),g:parseInt(d[2],10),b:parseInt(d[3],10)};else(d=b.match(g))&&(m={r:parseInt(d[1],16),g:parseInt(d[2],16),b:parseInt(d[3],16)});
+if(c)if(d=void 0,d=c.match(a))var e={r:parseInt(d[1],10),g:parseInt(d[2],10),b:parseInt(d[3],10)};else(d=c.match(g))&&(e={r:parseInt(d[1],16),g:parseInt(d[2],16),b:parseInt(d[3],16)});else e=m?127<Math.max.apply(null,[m.r,m.g,m.b])?{r:0,g:0,b:0}:{r:255,g:255,b:255}:{r:255,g:255,b:255};d=function(a){return"rgb("+[a.r,a.g,a.b].join(", ")+")"};m&&e?(a=Math.max.apply(null,[m.r,m.g,m.b]),m=Math.max.apply(null,[e.r,e.g,e.b]),m=Math.round(m+-.75*(m-a)),m={r:m,g:m,b:m}):m?(m=Math.max.apply(null,[m.r,m.g,
+m.b]),a=1,127<m&&(a=-1),m=Math.round(m+96*a),m={r:m,g:m,b:m}):m={r:191,g:191,b:191};return{color:b,"background-color":e?d(e):c,"decor-color":d(m)}}function k(a,b){this.x=a;this.y=b;this.reverse=function(){return new this.constructor(-1*this.x,-1*this.y)};this._length=null;this.getLength=function(){this._length||(this._length=Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2)));return this._length};var c=function(a){return Math.round(a/Math.abs(a))};this.resizeTo=function(a){if(0===this.x&&0===this.y)this._length=
+0;else if(0===this.x)this._length=a,this.y=a*c(this.y);else if(0===this.y)this._length=a,this.x=a*c(this.x);else{var b=Math.abs(this.y/this.x),g=Math.sqrt(Math.pow(a,2)/(1+Math.pow(b,2)));b*=g;this._length=a;this.x=g*c(this.x);this.y=b*c(this.y)}return this};this.angleTo=function(a){var b=this.getLength()*a.getLength();return 0===b?0:Math.acos(Math.min(Math.max((this.x*a.x+this.y*a.y)/b,-1),1))/Math.PI}}function h(a,b){this.x=a;this.y=b;this.getVectorToCoordinates=function(a,b){return new k(a-this.x,
+b-this.y)};this.getVectorFromCoordinates=function(a,b){return this.getVectorToCoordinates(a,b).reverse()};this.getVectorToPoint=function(a){return new k(a.x-this.x,a.y-this.y)};this.getVectorFromPoint=function(a){return this.getVectorToPoint(a).reverse()}}function p(a,b,c,g,d){this.data=a;this.context=b;if(a.length)for(var m=a.length,e,l,f=0;f<m;f++){e=a[f];l=e.x.length;c.call(b,e);for(var t=1;t<l;t++)g.call(b,e,t);d.call(b,e)}this.changed=function(){};this.startStrokeFn=c;this.addToStrokeFn=g;this.endStrokeFn=
+d;this.inStroke=!1;this._stroke=this._lastPoint=null;this.startStroke=function(a){if(a&&"number"==typeof a.x&&"number"==typeof a.y){this._stroke={x:[a.x],y:[a.y]};this.data.push(this._stroke);this._lastPoint=a;this.inStroke=!0;var b=this._stroke,c=this.startStrokeFn,d=this.context;setTimeout(function(){c.call(d,b)},3);return a}return null};this.addToStroke=function(a){if(this.inStroke&&"number"===typeof a.x&&"number"===typeof a.y&&4<Math.abs(a.x-this._lastPoint.x)+Math.abs(a.y-this._lastPoint.y)){var b=
+this._stroke.x.length;this._stroke.x.push(a.x);this._stroke.y.push(a.y);this._lastPoint=a;var c=this._stroke,d=this.addToStrokeFn,g=this.context;setTimeout(function(){d.call(g,c,b)},3);return a}return null};this.endStroke=function(){var a=this.inStroke;this.inStroke=!1;this._lastPoint=null;if(a){var b=this._stroke,c=this.endStrokeFn,d=this.context,g=this.changed;setTimeout(function(){c.call(d,b);g.call(d)},3);return!0}return null}}function n(a,b,c,g){if("ratio"===b||"%"===b.split("")[b.length-1])this.eventTokens[c+
+".parentresized"]=g.subscribe(c+".parentresized",function(b,m,e,l){return function(){var d=m.width();if(d!==e){for(var l in b)b.hasOwnProperty(l)&&(g.unsubscribe(b[l]),delete b[l]);var f=a.settings;a.$parent.children().remove();for(l in a)a.hasOwnProperty(l)&&delete a[l];l=f.data;d=1*d/e;var r=[],D,E;var h=0;for(D=l.length;h<D;h++){var k=l[h];var n={x:[],y:[]};var p=0;for(E=k.x.length;p<E;p++)n.x.push(k.x[p]*d),n.y.push(k.y[p]*d);r.push(n)}f.data=r;m[c](f)}}}(this.eventTokens,this.$parent,this.$parent.width(),
+1*this.canvas.width/this.canvas.height))}function w(a,b,c){var g=this.$parent=$(a);a=this.eventTokens={};this.events=new u(this);var d=$.fn.jSignature("globalEvents"),e={width:"ratio",height:"ratio",sizeRatio:4,color:"#000","background-color":"#fff","decor-color":"#eee",lineWidth:0,minFatFingerCompensation:-10,showUndoButton:!1,readOnly:!1,data:[],signatureLine:!1};$.extend(e,q(g));b&&$.extend(e,b);this.settings=e;for(var f in c)c.hasOwnProperty(f)&&c[f].call(this,f);this.events.publish("jSignature.initializing");
+this.$controlbarUpper=$('<div style="padding:0 !important; margin:0 !important;width: 100% !important; height: 0 !important; -ms-touch-action: none; touch-action: none;margin-top:-1em !important; margin-bottom:1em !important;"></div>').appendTo(g);this.isCanvasEmulator=!1;b=this.canvas=this.initializeCanvas(e);c=$(b);this.$controlbarLower=$('<div style="padding:0 !important; margin:0 !important;width: 100% !important; height: 0 !important; -ms-touch-action: none; touch-action: none;margin-top:-1.5em !important; margin-bottom:1.5em !important; position: relative;"></div>').appendTo(g);
+this.canvasContext=b.getContext("2d");c.data("jSignature.this",this);e.lineWidth=function(a,b){return a?a:Math.max(Math.round(b/400),2)}(e.lineWidth,b.width);this.lineCurveThreshold=3*e.lineWidth;e.cssclass&&""!=$.trim(e.cssclass)&&c.addClass(e.cssclass);this.fatFingerCompensation=0;g=function(a){var b,c,d=function(d){d=d.changedTouches&&0<d.changedTouches.length?d.changedTouches[0]:d;return new h(Math.round(d.pageX+b),Math.round(d.pageY+c)+a.fatFingerCompensation)},g=new v(750,function(){a.dataEngine.endStroke()});
+this.drawEndHandler=function(b){if(!a.settings.readOnly){try{b.preventDefault()}catch(A){}g.clear();a.dataEngine.endStroke()}};this.drawStartHandler=function(e){if(!a.settings.readOnly){e.preventDefault();var m=$(a.canvas).offset();b=-1*m.left;c=-1*m.top;a.dataEngine.startStroke(d(e));g.kick()}};this.drawMoveHandler=function(b){a.settings.readOnly||(b.preventDefault(),a.dataEngine.inStroke&&(a.dataEngine.addToStroke(d(b)),g.kick()))};return this}.call({},this);(function(a,b,c){var d=this.canvas,g=
+$(d);if(this.isCanvasEmulator)g.bind("mousemove.jSignature",c),g.bind("mouseup.jSignature",a),g.bind("mousedown.jSignature",b);else{var m="function"===typeof d.addEventListener;this.ontouchstart=function(g){d.onmousedown=d.onmouseup=d.onmousemove=void 0;this.fatFingerCompensation=e.minFatFingerCompensation&&-3*e.lineWidth>e.minFatFingerCompensation?-3*e.lineWidth:e.minFatFingerCompensation;b(g);m?(d.addEventListener("touchend",a),d.addEventListener("touchstart",b),d.addEventListener("touchmove",c)):
+(d.ontouchend=a,d.ontouchstart=b,d.ontouchmove=c)};m?d.addEventListener("touchstart",this.ontouchstart):d.ontouchstart=ontouchstart;d.onmousedown=function(g){m?d.removeEventListener("touchstart",this.ontouchstart):d.ontouchstart=d.ontouchend=d.ontouchmove=void 0;b(g);d.onmousedown=b;d.onmouseup=a;d.onmousemove=c};window.navigator.msPointerEnabled&&(d.onmspointerdown=b,d.onmspointerup=a,d.onmspointermove=c)}}).call(this,g.drawEndHandler,g.drawStartHandler,g.drawMoveHandler);a["jSignature.windowmouseup"]=
+d.subscribe("jSignature.windowmouseup",g.drawEndHandler);this.events.publish("jSignature.attachingEventHandlers");n.call(this,this,e.width.toString(10),"jSignature",d);this.resetCanvas(e.data);this.events.publish("jSignature.initialized");return this}function x(a){if(a.getContext)return!1;var b=a.ownerDocument.parentWindow,c=b.FlashCanvas?a.ownerDocument.parentWindow.FlashCanvas:"undefined"===typeof FlashCanvas?void 0:FlashCanvas;if(c){a=c.initElement(a);c=1;b&&b.screen&&b.screen.deviceXDPI&&b.screen.logicalXDPI&&
+(c=1*b.screen.deviceXDPI/b.screen.logicalXDPI);if(1!==c)try{$(a).children("object").get(0).resize(Math.ceil(a.width*c),Math.ceil(a.height*c)),a.getContext("2d").scale(c,c)}catch(g){}return!0}throw Error("Canvas element does not support 2d context. jSignature cannot proceed.");}var v=function(a,b){var c;this.kick=function(){clearTimeout(c);c=setTimeout(b,a)};this.clear=function(){clearTimeout(c)};return this},u=function(a){this.topics={};this.context=a?a:this;this.publish=function(a,c,g,d){if(this.topics[a]){var b=
+this.topics[a],e=Array.prototype.slice.call(arguments,1),f=[],h=[],t;var k=0;for(t=b.length;k<t;k++){var r=b[k];var D=r[0];r[1]&&(r[0]=function(){},f.push(k));h.push(D)}k=0;for(t=f.length;k<t;k++)b.splice(f[k],1);k=0;for(t=h.length;k<t;k++)h[k].apply(this.context,e)}};this.subscribe=function(a,c,g){this.topics[a]?this.topics[a].push([c,g]):this.topics[a]=[[c,g]];return{topic:a,callback:c}};this.unsubscribe=function(a){if(this.topics[a.topic])for(var b=this.topics[a.topic],g=0,d=b.length;g<d;g++)b[g]&&
+b[g][0]===a.callback&&b.splice(g,1)}},y=function(a,b,c,g,d){a.beginPath();a.moveTo(b,c);a.lineTo(g,d);a.closePath();a.stroke()},C=function(a){var b=this.canvasContext,c=a.x[0];a=a.y[0];var g=this.settings.lineWidth,d=b.fillStyle;b.fillStyle=b.strokeStyle;b.fillRect(c+g/-2,a+g/-2,g,g);b.fillStyle=d},f=function(a,b){var c=new h(a.x[b-1],a.y[b-1]),g=new h(a.x[b],a.y[b]),d=c.getVectorToPoint(g);if(1<b){var e=new h(a.x[b-2],a.y[b-2]),f=e.getVectorToPoint(c);if(f.getLength()>this.lineCurveThreshold){var l=
+2<b?(new h(a.x[b-3],a.y[b-3])).getVectorToPoint(e):new k(0,0);var n=.35*f.getLength(),t=f.angleTo(l.reverse()),p=d.angleTo(f.reverse());l=(new k(l.x+f.x,l.y+f.y)).resizeTo(Math.max(.05,t)*n);var r=(new k(f.x+d.x,f.y+d.y)).reverse().resizeTo(Math.max(.05,p)*n);f=this.canvasContext;n=e.x;p=e.y;t=c.x;var D=c.y,A=e.x+l.x;e=e.y+l.y;l=c.x+r.x;r=c.y+r.y;f.beginPath();f.moveTo(n,p);f.bezierCurveTo(A,e,l,r,t,D);f.closePath();f.stroke()}}d.getLength()<=this.lineCurveThreshold&&y(this.canvasContext,c.x,c.y,
+g.x,g.y)},e=function(a){var b=a.x.length-1;if(0<b){var c=new h(a.x[b],a.y[b]),e=new h(a.x[b-1],a.y[b-1]),d=e.getVectorToPoint(c);if(d.getLength()>this.lineCurveThreshold)if(1<b){a=(new h(a.x[b-2],a.y[b-2])).getVectorToPoint(e);var f=(new k(a.x+d.x,a.y+d.y)).resizeTo(d.getLength()/2);d=this.canvasContext;a=e.x;b=e.y;var E=c.x,l=c.y,n=e.x+f.x;e=e.y+f.y;f=c.x;c=c.y;d.beginPath();d.moveTo(a,b);d.bezierCurveTo(n,e,f,c,E,l);d.closePath();d.stroke()}else y(this.canvasContext,e.x,e.y,c.x,c.y)}};w.prototype.resetCanvas=
+function(a,b){var c=this.canvas,g=this.settings,d=this.canvasContext,m=this.isCanvasEmulator,h=c.width,l=c.height;b||d.clearRect(0,0,h+30,l+30);d.shadowColor=d.fillStyle=g["background-color"];m&&d.fillRect(0,0,h+30,l+30);d.lineWidth=Math.ceil(parseInt(g.lineWidth,10));d.lineCap=d.lineJoin="round";if(g.signatureLine){if(null!=g["decor-color"]){d.strokeStyle=g["decor-color"];d.shadowOffsetX=0;d.shadowOffsetY=0;var k=Math.round(l/5);y(d,1.5*k,l-k,h-1.5*k,l-k)}m||(d.shadowColor=d.strokeStyle,d.shadowOffsetX=
+.5*d.lineWidth,d.shadowOffsetY=-.6*d.lineWidth,d.shadowBlur=0)}d.strokeStyle=g.color;a||(a=[]);d=this.dataEngine=new p(a,this,C,f,e);g.data=a;$(c).data("jSignature.data",a).data("jSignature.settings",g);d.changed=function(a,b,d){return function(){b.publish(d+".change");a.trigger("change")}}(this.$parent,this.events,"jSignature");d.changed();return!0};w.prototype.initializeCanvas=function(a){var b=document.createElement("canvas"),c=$(b);a.width===a.height&&"ratio"===a.height&&(a.width="100%");c.css({margin:0,
+padding:0,border:"none",height:"ratio"!==a.height&&a.height?a.height.toString(10):1,width:"ratio"!==a.width&&a.width?a.width.toString(10):1,"-ms-touch-action":"none","touch-action":"none","background-color":a["background-color"]});c.appendTo(this.$parent);"ratio"===a.height?c.css("height",Math.round(c.width()/a.sizeRatio)):"ratio"===a.width&&c.css("width",Math.round(c.height()*a.sizeRatio));c.addClass("jSignature");b.width=c.width();b.height=c.height();this.isCanvasEmulator=x(b);b.onselectstart=function(a){a&&
+a.preventDefault&&a.preventDefault();a&&a.stopPropagation&&a.stopPropagation();return!1};return b};(function(a){function b(a,b,d){var c=new Image,e=this;c.onload=function(){var a=e.getContext("2d"),b=a.shadowColor;a.shadowColor="transparent";a.drawImage(c,0,0,c.width<e.width?c.width:e.width,c.height<e.height?c.height:e.height);a.shadowColor=b};c.src="data:"+b+","+a}function c(a,b){this.find("canvas.jSignature").add(this.filter("canvas.jSignature")).data("jSignature.this").resetCanvas(a,b);return this}
+function e(a,b){if(void 0===b&&"string"===typeof a&&"data:"===a.substr(0,5)&&(b=a.slice(5).split(",")[0],a=a.slice(6+b.length),b===a))return;var c=this.find("canvas.jSignature").add(this.filter("canvas.jSignature"));if(l.hasOwnProperty(b))0!==c.length&&l[b].call(c[0],a,b,function(a){return function(){return a.resetCanvas.apply(a,arguments)}}(c.data("jSignature.this")));else throw Error("jSignature is unable to find import plugin with for format '"+String(b)+"'");return this}var d=new u;(function(a,
+b,c,d){var e,g=function(){a.publish(b+".parentresized")};c(d).bind("resize."+b,function(){e&&clearTimeout(e);e=setTimeout(g,500)}).bind("mouseup."+b,function(c){a.publish(b+".windowmouseup")})})(d,"jSignature",$,a);var f={},h={"default":function(a){return this.toDataURL()},"native":function(a){return a},image:function(a){a=this.toDataURL();if("string"===typeof a&&4<a.length&&"data:"===a.slice(0,5)&&-1!==a.indexOf(",")){var b=a.indexOf(",");return[a.slice(5,b),a.substr(b+1)]}return[]}},l={"native":function(a,
+b,c){c(a)},image:b,"image/png;base64":b,"image/jpeg;base64":b,"image/jpg;base64":b},k=function(a){var b=!1;for(a=a.parentNode;a&&!b;)b=a.body,a=a.parentNode;return!b},n={"export":h,"import":l,instance:f},p={init:function(a){return this.each(function(){k(this)||new w(this,a,f)})},destroy:function(){return this.each(function(){if(!k(this)){var a=$(this).find("canvas").data("jSignature.this");if(a){a.$controlbarLower.remove();a.$controlbarUpper.remove();$(a.canvas).remove();for(var b in a.eventTokens)a.eventTokens.hasOwnProperty(b)&&
+d.unsubscribe(a.eventTokens[b])}}})},getSettings:function(){return this.find("canvas.jSignature").add(this.filter("canvas.jSignature")).data("jSignature.this").settings},isModified:function(){return null!==this.find("canvas.jSignature").add(this.filter("canvas.jSignature")).data("jSignature.this").dataEngine._stroke},updateSetting:function(a,b,c){var d=this.find("canvas.jSignature").add(this.filter("canvas.jSignature")).data("jSignature.this");d.settings[a]=b;d.resetCanvas(c?null:d.settings.data,
+!0);return d.settings[a]},clear:c,reset:c,addPlugin:function(a,b,c){n.hasOwnProperty(a)&&(n[a][b]=c);return this},listPlugins:function(a){var b=[];if(n.hasOwnProperty(a)){a=n[a];for(var c in a)a.hasOwnProperty(c)&&b.push(c)}return b},getData:function(a){var b=this.find("canvas.jSignature").add(this.filter("canvas.jSignature"));void 0===a&&(a="default");if(0!==b.length&&h.hasOwnProperty(a))return h[a].call(b.get(0),b.data("jSignature.data"),b.data("jSignature.settings"))},importData:e,setData:e,globalEvents:function(){return d},
+disable:function(){this.find("input").attr("disabled",1);this.find("canvas.jSignature").addClass("disabled").data("jSignature.this").settings.readOnly=!0},enable:function(){this.find("input").removeAttr("disabled");this.find("canvas.jSignature").removeClass("disabled").data("jSignature.this").settings.readOnly=!1},events:function(){return this.find("canvas.jSignature").add(this.filter("canvas.jSignature")).data("jSignature.this").events}};$.fn.jSignature=function(a){if(a&&"object"!==typeof a){if("string"===
+typeof a&&p[a])return p[a].apply(this,Array.prototype.slice.call(arguments,1));$.error("Method "+String(a)+" does not exist on jQuery.jSignature")}else return p.init.apply(this,arguments)}})(window)})();
+(function(){function q(k,h,p){k=k.call(this);(function(h,k,p){h.events.subscribe(p+".change",function(){h.dataEngine.data.length?k.show():k.hide()})})(this,k,h);(function(h,k,p){var n=p+".undo";k.bind("click",function(){h.events.publish(n)});h.events.subscribe(n,function(){var k=h.dataEngine.data;k.length&&(k.pop(),h.resetCanvas(k))})})(this,k,this.events.topics.hasOwnProperty(h+".undo")?p:h)}$.fn.jSignature("addPlugin","instance","UndoButton",function(k){this.events.subscribe("jSignature.attachingEventHandlers",
+function(){if(this.settings[k]){var h=this.settings[k];"function"!==typeof h&&(h=function(){var h=$('<input type="button" value="Undo last stroke" style="position:absolute;display:none;margin:0 !important;top:auto" />').appendTo(this.$controlbarLower),k=h.width();h.css("left",Math.round((this.canvas.width-k)/2));k!==h.width()&&h.width(k);return h});q.call(this,h,"jSignature",k)}})})})();
+(function(){for(var q={},k={},h="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX".split(""),p=h.length/2,n=p-1;-1<n;n--)q[h[n]]=h[n+p],k[h[n+p]]=h[n];var w=function(e){e=e.split("");for(var a=e.length,b=1;b<a;b++)e[b]=q[e[b]];return e.join("")},x=function(e){for(var a=[],b=0,c=1,g=e.length,d,f,h=0;h<g;h++)d=Math.round(e[h]),f=d-b,b=d,0>f&&0<c?(c=-1,a.push("Z")):0<f&&0>c&&(c=1,a.push("Y")),d=Math.abs(f),d>=p?a.push(w(d.toString(p))):a.push(d.toString(p));return a.join("")},v=function(e){var a=
+[];e=e.split("");for(var b=e.length,c,g=1,d=[],f=0,h=0;h<b;h++)c=e[h],c in q||"Z"===c||"Y"===c?(0!==d.length&&(d=parseInt(d.join(""),p)*g+f,a.push(d),f=d),"Z"===c?(g=-1,d=[]):"Y"===c?(g=1,d=[]):d=[c]):d.push(k[c]);a.push(parseInt(d.join(""),p)*g+f);return a},u=function(e){for(var a=[],b=e.length,c,g=0;g<b;g++)c=e[g],a.push(x(c.x)),a.push(x(c.y));return a.join("_")},y=function(e){var a=[];e=e.split("_");for(var b=e.length/2,c=0;c<b;c++)a.push({x:v(e[2*c]),y:v(e[2*c+1])});return a},C=function(e){return["image/jsignature;base30",
+u(e)]},f=function(e,a,b){"string"===typeof e&&("image/jsignature;base30"===e.substring(0,23).toLowerCase()&&(e=e.substring(24)),b(y(e)))};if(null==this.jQuery)throw Error("We need jQuery for some of the functionality. jQuery is not detected. Failing to initialize...");(function(e){e=e.fn.jSignature;e("addPlugin","export","base30",C);e("addPlugin","export","image/jsignature;base30",C);e("addPlugin","import","base30",f);e("addPlugin","import","image/jsignature;base30",f)})(this.jQuery);this.jSignatureDebug&&
+(this.jSignatureDebug.base30={remapTailChars:w,compressstrokeleg:x,uncompressstrokeleg:v,compressstrokes:u,uncompressstrokes:y,charmap:q})}).call("undefined"!==typeof window?window:this);
+(function(){function q(f,e){this.x=f;this.y=e;this.reverse=function(){return new this.constructor(-1*this.x,-1*this.y)};this._length=null;this.getLength=function(){this._length||(this._length=Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2)));return this._length};var a=function(a){return Math.round(a/Math.abs(a))};this.resizeTo=function(b){if(0===this.x&&0===this.y)this._length=0;else if(0===this.x)this._length=b,this.y=b*a(this.y);else if(0===this.y)this._length=b,this.x=b*a(this.x);else{var c=Math.abs(this.y/
+this.x),e=Math.sqrt(Math.pow(b,2)/(1+Math.pow(c,2)));c*=e;this._length=b;this.x=e*a(this.x);this.y=c*a(this.y)}return this};this.angleTo=function(a){var b=this.getLength()*a.getLength();return 0===b?0:Math.acos(Math.min(Math.max((this.x*a.x+this.y*a.y)/b,-1),1))/Math.PI}}function k(f,e){this.x=f;this.y=e;this.getVectorToCoordinates=function(a,b){return new q(a-this.x,b-this.y)};this.getVectorFromCoordinates=function(a,b){return this.getVectorToCoordinates(a,b).reverse()};this.getVectorToPoint=function(a){return new q(a.x-
+this.x,a.y-this.y)};this.getVectorFromPoint=function(a){return this.getVectorToPoint(a).reverse()}}function h(f,e){var a=Math.pow(10,e);return Math.round(f*a)/a}function p(f,e,a){e+=1;var b=new k(f.x[e-1],f.y[e-1]),c=new k(f.x[e],f.y[e]);c=b.getVectorToPoint(c);var g=new k(f.x[e-2],f.y[e-2]);b=g.getVectorToPoint(b);return b.getLength()>a?(a=2<e?(new k(f.x[e-3],f.y[e-3])).getVectorToPoint(g):new q(0,0),f=.35*b.getLength(),g=b.angleTo(a.reverse()),e=c.angleTo(b.reverse()),a=(new q(a.x+b.x,a.y+b.y)).resizeTo(Math.max(.05,
+g)*f),c=(new q(b.x+c.x,b.y+c.y)).reverse().resizeTo(Math.max(.05,e)*f),c=new q(b.x+c.x,b.y+c.y),["c",h(a.x,2),h(a.y,2),h(c.x,2),h(c.y,2),h(b.x,2),h(b.y,2)]):["l",h(b.x,2),h(b.y,2)]}function n(f,e){var a=f.x.length-1,b=new k(f.x[a],f.y[a]),c=new k(f.x[a-1],f.y[a-1]);b=c.getVectorToPoint(b);if(1<a&&b.getLength()>e){a=(new k(f.x[a-2],f.y[a-2])).getVectorToPoint(c);c=b.angleTo(a.reverse());var g=.35*b.getLength();a=(new q(a.x+b.x,a.y+b.y)).resizeTo(Math.max(.05,c)*g);return["c",h(a.x,2),h(a.y,2),h(b.x,
+2),h(b.y,2),h(b.x,2),h(b.y,2)]}return["l",h(b.x,2),h(b.y,2)]}function w(f,e,a){e=["M",h(f.x[0]-e,2),h(f.y[0]-a,2)];a=1;for(var b=f.x.length-1;a<b;a++)e.push.apply(e,p(f,a,1));0<b?e.push.apply(e,n(f,a,1)):0===b&&e.push.apply(e,["l",1,1]);return e.join(" ")}function x(f){for(var e=[],a=[["fill",void 0,"none"],["stroke","color","#000000"],["stroke-width","lineWidth",2],["stroke-linecap",void 0,"round"],["stroke-linejoin",void 0,"round"]],b=a.length-1;0<=b;b--){var c=a[b][1],g=a[b][2];e.push(a[b][0]+
+'="'+(c in f&&f[c]?f[c]:g)+'"')}return e.join(" ")}function v(f,e){var a=['<?xml version="1.0" encoding="UTF-8" standalone="no"?>','<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'],b,c=f.length,g,d=[],h=[],k=g=b=0,l=0,p=[];if(0!==c){for(b=0;b<c;b++){g=f[b];var n=[],q={x:[],y:[]};l=0;for(k=g.x.length;l<k;l++)n.push({x:g.x[l],y:g.y[l]});n=simplify(n,.7,!0);l=0;for(k=n.length;l<k;l++)q.x.push(n[l].x),q.y.push(n[l].y);g=q;p.push(g);d=d.concat(g.x);h=
+h.concat(g.y)}c=Math.min.apply(null,d)-1;b=Math.max.apply(null,d)+1;d=Math.min.apply(null,h)-1;h=Math.max.apply(null,h)+1;k=0>c?0:c;l=0>d?0:d;b-=c;g=h-d}a.push('<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="'+b.toString()+'" height="'+g.toString()+'">');b=0;for(c=p.length;b<c;b++)g=p[b],a.push("<path "+x(e)+' d="'+w(g,k,l)+'"/>');a.push("</svg>");return a.join("")}function u(f,e){return["image/svg+xml",v(f,e)]}function y(f,e){return["image/svg+xml;base64",C(v(f,e))]}(function(f,e){"use strict";
+f.simplify=function(a,b,c){b=b!==e?b*b:1;if(!c){var g=a.length,d=a[0],f=[d];for(c=1;c<g;c++){var h=a[c];var k=h.x-d.x,n=h.y-d.y;k*k+n*n>b&&(f.push(h),d=h)}a=(d!==h&&f.push(h),f)}h=a;c=h.length;g=new (typeof Uint8Array!=e+""?Uint8Array:Array)(c);d=0;f=c-1;var p,q=[],r=[],y=[];for(g[d]=g[f]=1;f;){n=0;for(k=d+1;k<f;k++){var A=h[k];var z=h[d],w=h[f],u=z.x,v=z.y;z=w.x-u;var B=w.y-v;if(0!==z||0!==B){var x=((A.x-u)*z+(A.y-v)*B)/(z*z+B*B);1<x?(u=w.x,v=w.y):0<x&&(u+=z*x,v+=B*x)}A=(z=A.x-u,B=A.y-v,z*z+B*B);
+A>n&&(p=k,n=A)}n>b&&(g[p]=1,q.push(d),r.push(p),q.push(p),r.push(f));d=q.pop();f=r.pop()}for(k=0;k<c;k++)g[k]&&y.push(h[k]);return a=y,a}})(window);if("function"!==typeof C)var C=function(f){var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".split(""),a=0,b=0,c=[];do{var g=f.charCodeAt(a++);var d=f.charCodeAt(a++);var h=f.charCodeAt(a++);var k=g<<16|d<<8|h;g=k>>18&63;d=k>>12&63;h=k>>6&63;k&=63;c[b++]=e[g]+e[d]+e[h]+e[k]}while(a<f.length);e=c.join("");f=f.length%3;return(f?e.slice(0,
+f-3):e)+"===".slice(f||3)};if("undefined"===typeof $)throw Error("We need jQuery for some of the functionality. jQuery is not detected. Failing to initialize...");(function(f){f=f.fn.jSignature;f("addPlugin","export","svg",u);f("addPlugin","export","image/svg+xml",u);f("addPlugin","export","svgbase64",y);f("addPlugin","export","image/svg+xml;base64",y)})($)})();
\ No newline at end of file
diff --git a/content/static/js/jspdf.umd.min.js b/content/static/js/jspdf.umd.min.js
new file mode 100644
index 0000000..a9781f1
--- /dev/null
+++ b/content/static/js/jspdf.umd.min.js
@@ -0,0 +1,398 @@
+/** @license
+ *
+ * jsPDF - PDF Document creation from JavaScript
+ * Version 2.5.1 Built on 2022-01-28T15:37:57.789Z
+ *                      CommitID 00000000
+ *
+ * Copyright (c) 2010-2021 James Hall <james@parall.ax>, https://github.com/MrRio/jsPDF
+ *               2015-2021 yWorks GmbH, http://www.yworks.com
+ *               2015-2021 Lukas Holländer <lukas.hollaender@yworks.com>, https://github.com/HackbrettXXX
+ *               2016-2018 Aras Abbasi <aras.abbasi@gmail.com>
+ *               2010 Aaron Spike, https://github.com/acspike
+ *               2012 Willow Systems Corporation, https://github.com/willowsystems
+ *               2012 Pablo Hess, https://github.com/pablohess
+ *               2012 Florian Jenett, https://github.com/fjenett
+ *               2013 Warren Weckesser, https://github.com/warrenweckesser
+ *               2013 Youssef Beddad, https://github.com/lifof
+ *               2013 Lee Driscoll, https://github.com/lsdriscoll
+ *               2013 Stefan Slonevskiy, https://github.com/stefslon
+ *               2013 Jeremy Morel, https://github.com/jmorel
+ *               2013 Christoph Hartmann, https://github.com/chris-rock
+ *               2014 Juan Pablo Gaviria, https://github.com/juanpgaviria
+ *               2014 James Makes, https://github.com/dollaruw
+ *               2014 Diego Casorran, https://github.com/diegocr
+ *               2014 Steven Spungin, https://github.com/Flamenco
+ *               2014 Kenneth Glassey, https://github.com/Gavvers
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Contributor(s):
+ *    siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango,
+ *    kim3er, mfo, alnorth, Flamenco
+ */
+
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).jspdf={})}(this,(function(t){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var r=function(){return"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this}();function n(){r.console&&"function"==typeof r.console.log&&r.console.log.apply(r.console,arguments)}var i={log:n,warn:function(t){r.console&&("function"==typeof r.console.warn?r.console.warn.apply(r.console,arguments):n.call(null,arguments))},error:function(t){r.console&&("function"==typeof r.console.error?r.console.error.apply(r.console,arguments):n(t))}};function a(t,e,r){var n=new XMLHttpRequest;n.open("GET",t),n.responseType="blob",n.onload=function(){l(n.response,e,r)},n.onerror=function(){i.error("could not download file")},n.send()}function o(t){var e=new XMLHttpRequest;e.open("HEAD",t,!1);try{e.send()}catch(t){}return e.status>=200&&e.status<=299}function s(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(r){var e=document.createEvent("MouseEvents");e.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(e)}}var c,u,l=r.saveAs||("object"!==("undefined"==typeof window?"undefined":e(window))||window!==r?function(){}:"undefined"!=typeof HTMLAnchorElement&&"download"in HTMLAnchorElement.prototype?function(t,e,n){var i=r.URL||r.webkitURL,c=document.createElement("a");e=e||t.name||"download",c.download=e,c.rel="noopener","string"==typeof t?(c.href=t,c.origin!==location.origin?o(c.href)?a(t,e,n):s(c,c.target="_blank"):s(c)):(c.href=i.createObjectURL(t),setTimeout((function(){i.revokeObjectURL(c.href)}),4e4),setTimeout((function(){s(c)}),0))}:"msSaveOrOpenBlob"in navigator?function(t,r,n){if(r=r||t.name||"download","string"==typeof t)if(o(t))a(t,r,n);else{var c=document.createElement("a");c.href=t,c.target="_blank",setTimeout((function(){s(c)}))}else navigator.msSaveOrOpenBlob(function(t,r){return void 0===r?r={autoBom:!1}:"object"!==e(r)&&(i.warn("Deprecated: Expected third argument to be a object"),r={autoBom:!r}),r.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob([String.fromCharCode(65279),t],{type:t.type}):t}(t,n),r)}:function(t,n,i,o){if((o=o||open("","_blank"))&&(o.document.title=o.document.body.innerText="downloading..."),"string"==typeof t)return a(t,n,i);var s="application/octet-stream"===t.type,c=/constructor/i.test(r.HTMLElement)||r.safari,u=/CriOS\/[\d]+/.test(navigator.userAgent);if((u||s&&c)&&"object"===("undefined"==typeof FileReader?"undefined":e(FileReader))){var l=new FileReader;l.onloadend=function(){var t=l.result;t=u?t:t.replace(/^data:[^;]*;/,"data:attachment/file;"),o?o.location.href=t:location=t,o=null},l.readAsDataURL(t)}else{var h=r.URL||r.webkitURL,f=h.createObjectURL(t);o?o.location=f:location.href=f,o=null,setTimeout((function(){h.revokeObjectURL(f)}),4e4)}});
+/**
+   * A class to parse color values
+   * @author Stoyan Stefanov <sstoo@gmail.com>
+   * {@link   http://www.phpied.com/rgb-color-parser-in-javascript/}
+   * @license Use it if you like it
+   */function h(t){var e;t=t||"",this.ok=!1,"#"==t.charAt(0)&&(t=t.substr(1,6));t={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"}[t=(t=t.replace(/ /g,"")).toLowerCase()]||t;for(var r=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(t){return[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}],n=0;n<r.length;n++){var i=r[n].re,a=r[n].process,o=i.exec(t);o&&(e=a(o),this.r=e[0],this.g=e[1],this.b=e[2],this.ok=!0)}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"},this.toHex=function(){var t=this.r.toString(16),e=this.g.toString(16),r=this.b.toString(16);return 1==t.length&&(t="0"+t),1==e.length&&(e="0"+e),1==r.length&&(r="0"+r),"#"+t+e+r}}
+/**
+   * @license
+   * Joseph Myers does not specify a particular license for his work.
+   *
+   * Author: Joseph Myers
+   * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js
+   *
+   * Modified by: Owen Leong
+   */
+function f(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];r=p(r,n,i,a,e[0],7,-680876936),a=p(a,r,n,i,e[1],12,-389564586),i=p(i,a,r,n,e[2],17,606105819),n=p(n,i,a,r,e[3],22,-1044525330),r=p(r,n,i,a,e[4],7,-176418897),a=p(a,r,n,i,e[5],12,1200080426),i=p(i,a,r,n,e[6],17,-1473231341),n=p(n,i,a,r,e[7],22,-45705983),r=p(r,n,i,a,e[8],7,1770035416),a=p(a,r,n,i,e[9],12,-1958414417),i=p(i,a,r,n,e[10],17,-42063),n=p(n,i,a,r,e[11],22,-1990404162),r=p(r,n,i,a,e[12],7,1804603682),a=p(a,r,n,i,e[13],12,-40341101),i=p(i,a,r,n,e[14],17,-1502002290),r=g(r,n=p(n,i,a,r,e[15],22,1236535329),i,a,e[1],5,-165796510),a=g(a,r,n,i,e[6],9,-1069501632),i=g(i,a,r,n,e[11],14,643717713),n=g(n,i,a,r,e[0],20,-373897302),r=g(r,n,i,a,e[5],5,-701558691),a=g(a,r,n,i,e[10],9,38016083),i=g(i,a,r,n,e[15],14,-660478335),n=g(n,i,a,r,e[4],20,-405537848),r=g(r,n,i,a,e[9],5,568446438),a=g(a,r,n,i,e[14],9,-1019803690),i=g(i,a,r,n,e[3],14,-187363961),n=g(n,i,a,r,e[8],20,1163531501),r=g(r,n,i,a,e[13],5,-1444681467),a=g(a,r,n,i,e[2],9,-51403784),i=g(i,a,r,n,e[7],14,1735328473),r=m(r,n=g(n,i,a,r,e[12],20,-1926607734),i,a,e[5],4,-378558),a=m(a,r,n,i,e[8],11,-2022574463),i=m(i,a,r,n,e[11],16,1839030562),n=m(n,i,a,r,e[14],23,-35309556),r=m(r,n,i,a,e[1],4,-1530992060),a=m(a,r,n,i,e[4],11,1272893353),i=m(i,a,r,n,e[7],16,-155497632),n=m(n,i,a,r,e[10],23,-1094730640),r=m(r,n,i,a,e[13],4,681279174),a=m(a,r,n,i,e[0],11,-358537222),i=m(i,a,r,n,e[3],16,-722521979),n=m(n,i,a,r,e[6],23,76029189),r=m(r,n,i,a,e[9],4,-640364487),a=m(a,r,n,i,e[12],11,-421815835),i=m(i,a,r,n,e[15],16,530742520),r=v(r,n=m(n,i,a,r,e[2],23,-995338651),i,a,e[0],6,-198630844),a=v(a,r,n,i,e[7],10,1126891415),i=v(i,a,r,n,e[14],15,-1416354905),n=v(n,i,a,r,e[5],21,-57434055),r=v(r,n,i,a,e[12],6,1700485571),a=v(a,r,n,i,e[3],10,-1894986606),i=v(i,a,r,n,e[10],15,-1051523),n=v(n,i,a,r,e[1],21,-2054922799),r=v(r,n,i,a,e[8],6,1873313359),a=v(a,r,n,i,e[15],10,-30611744),i=v(i,a,r,n,e[6],15,-1560198380),n=v(n,i,a,r,e[13],21,1309151649),r=v(r,n,i,a,e[4],6,-145523070),a=v(a,r,n,i,e[11],10,-1120210379),i=v(i,a,r,n,e[2],15,718787259),n=v(n,i,a,r,e[9],21,-343485551),t[0]=S(r,t[0]),t[1]=S(n,t[1]),t[2]=S(i,t[2]),t[3]=S(a,t[3])}function d(t,e,r,n,i,a){return e=S(S(e,t),S(n,a)),S(e<<i|e>>>32-i,r)}function p(t,e,r,n,i,a,o){return d(e&r|~e&n,t,e,i,a,o)}function g(t,e,r,n,i,a,o){return d(e&n|r&~n,t,e,i,a,o)}function m(t,e,r,n,i,a,o){return d(e^r^n,t,e,i,a,o)}function v(t,e,r,n,i,a,o){return d(r^(e|~n),t,e,i,a,o)}function b(t){var e,r=t.length,n=[1732584193,-271733879,-1732584194,271733878];for(e=64;e<=t.length;e+=64)f(n,y(t.substring(e-64,e)));t=t.substring(e-64);var i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(e=0;e<t.length;e++)i[e>>2]|=t.charCodeAt(e)<<(e%4<<3);if(i[e>>2]|=128<<(e%4<<3),e>55)for(f(n,i),e=0;e<16;e++)i[e]=0;return i[14]=8*r,f(n,i),n}function y(t){var e,r=[];for(e=0;e<64;e+=4)r[e>>2]=t.charCodeAt(e)+(t.charCodeAt(e+1)<<8)+(t.charCodeAt(e+2)<<16)+(t.charCodeAt(e+3)<<24);return r}c=r.atob.bind(r),u=r.btoa.bind(r);var w="0123456789abcdef".split("");function N(t){for(var e="",r=0;r<4;r++)e+=w[t>>8*r+4&15]+w[t>>8*r&15];return e}function L(t){return String.fromCharCode((255&t)>>0,(65280&t)>>8,(16711680&t)>>16,(4278190080&t)>>24)}function A(t){return function(t){return t.map(L).join("")}(b(t))}var x="5d41402abc4b2a76b9719d911017c592"!=function(t){for(var e=0;e<t.length;e++)t[e]=N(t[e]);return t.join("")}(b("hello"));function S(t,e){if(x){var r=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(r>>16)<<16|65535&r}return t+e&4294967295}
+/**
+   * @license
+   * FPDF is released under a permissive license: there is no usage restriction.
+   * You may embed it freely in your application (commercial or not), with or
+   * without modifications.
+   *
+   * Reference: http://www.fpdf.org/en/script/script37.php
+   */function _(t,e){var r,n,i,a;if(t!==r){for(var o=(i=t,a=1+(256/t.length>>0),new Array(a+1).join(i)),s=[],c=0;c<256;c++)s[c]=c;var u=0;for(c=0;c<256;c++){var l=s[c];u=(u+l+o.charCodeAt(c))%256,s[c]=s[u],s[u]=l}r=t,n=s}else s=n;var h=e.length,f=0,d=0,p="";for(c=0;c<h;c++)d=(d+(l=s[f=(f+1)%256]))%256,s[f]=s[d],s[d]=l,o=s[(s[f]+s[d])%256],p+=String.fromCharCode(e.charCodeAt(c)^o);return p}
+/**
+   * @license
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   * Author: Owen Leong (@owenl131)
+   * Date: 15 Oct 2020
+   * References:
+   * https://www.cs.cmu.edu/~dst/Adobe/Gallery/anon21jul01-pdf-encryption.txt
+   * https://github.com/foliojs/pdfkit/blob/master/lib/security.js
+   * http://www.fpdf.org/en/script/script37.php
+   */var P={print:4,modify:8,copy:16,"annot-forms":32};function k(t,e,r,n){this.v=1,this.r=2;var i=192;t.forEach((function(t){if(void 0!==P.perm)throw new Error("Invalid permission: "+t);i+=P[t]})),this.padding="(¿N^NuŠAd\0NVÿú\b..\0¶Ðh>€/\f©þdSiz";var a=(e+this.padding).substr(0,32),o=(r+this.padding).substr(0,32);this.O=this.processOwnerPassword(a,o),this.P=-(1+(255^i)),this.encryptionKey=A(a+this.O+this.lsbFirstWord(this.P)+this.hexToBytes(n)).substr(0,5),this.U=_(this.encryptionKey,this.padding)}function F(t){if(/[^\u0000-\u00ff]/.test(t))throw new Error("Invalid PDF Name Object: "+t+", Only accept ASCII characters.");for(var e="",r=t.length,n=0;n<r;n++){var i=t.charCodeAt(n);if(i<33||35===i||37===i||40===i||41===i||47===i||60===i||62===i||91===i||93===i||123===i||125===i||i>126)e+="#"+("0"+i.toString(16)).slice(-2);else e+=t[n]}return e}function I(t){if("object"!==e(t))throw new Error("Invalid Context passed to initialize PubSub (jsPDF-module)");var n={};this.subscribe=function(t,e,r){if(r=r||!1,"string"!=typeof t||"function"!=typeof e||"boolean"!=typeof r)throw new Error("Invalid arguments passed to PubSub.subscribe (jsPDF-module)");n.hasOwnProperty(t)||(n[t]={});var i=Math.random().toString(35);return n[t][i]=[e,!!r],i},this.unsubscribe=function(t){for(var e in n)if(n[e][t])return delete n[e][t],0===Object.keys(n[e]).length&&delete n[e],!0;return!1},this.publish=function(e){if(n.hasOwnProperty(e)){var a=Array.prototype.slice.call(arguments,1),o=[];for(var s in n[e]){var c=n[e][s];try{c[0].apply(t,a)}catch(t){r.console&&i.error("jsPDF PubSub Error",t.message,t)}c[1]&&o.push(s)}o.length&&o.forEach(this.unsubscribe)}},this.getTopics=function(){return n}}function C(t){if(!(this instanceof C))return new C(t);var e="opacity,stroke-opacity".split(",");for(var r in t)t.hasOwnProperty(r)&&e.indexOf(r)>=0&&(this[r]=t[r]);this.id="",this.objectNumber=-1}function j(t,e){this.gState=t,this.matrix=e,this.id="",this.objectNumber=-1}function O(t,e,r,n,i){if(!(this instanceof O))return new O(t,e,r,n,i);this.type="axial"===t?2:3,this.coords=e,this.colors=r,j.call(this,n,i)}function B(t,e,r,n,i){if(!(this instanceof B))return new B(t,e,r,n,i);this.boundingBox=t,this.xStep=e,this.yStep=r,this.stream="",this.cloneIndex=0,j.call(this,n,i)}function M(t){var n,a="string"==typeof arguments[0]?arguments[0]:"p",o=arguments[1],s=arguments[2],c=arguments[3],f=[],d=1,p=16,g="S",m=null;"object"===e(t=t||{})&&(a=t.orientation,o=t.unit||o,s=t.format||s,c=t.compress||t.compressPdf||c,null!==(m=t.encryption||null)&&(m.userPassword=m.userPassword||"",m.ownerPassword=m.ownerPassword||"",m.userPermissions=m.userPermissions||[]),d="number"==typeof t.userUnit?Math.abs(t.userUnit):1,void 0!==t.precision&&(n=t.precision),void 0!==t.floatPrecision&&(p=t.floatPrecision),g=t.defaultPathOperation||"S"),f=t.filters||(!0===c?["FlateEncode"]:f),o=o||"mm",a=(""+(a||"P")).toLowerCase();var v=t.putOnlyUsedFonts||!1,b={},y={internal:{},__private__:{}};y.__private__.PubSub=I;var w="1.3",N=y.__private__.getPdfVersion=function(){return w};y.__private__.setPdfVersion=function(t){w=t};var L={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],"government-letter":[576,756],legal:[612,1008],"junior-legal":[576,360],ledger:[1224,792],tabloid:[792,1224],"credit-card":[153,243]};y.__private__.getPageFormats=function(){return L};var A=y.__private__.getPageFormat=function(t){return L[t]};s=s||"a4";var x={COMPAT:"compat",ADVANCED:"advanced"},S=x.COMPAT;function _(){this.saveGraphicsState(),ht(new Vt(_t,0,0,-_t,0,Rr()*_t).toString()+" cm"),this.setFontSize(this.getFontSize()/_t),g="n",S=x.ADVANCED}function P(){this.restoreGraphicsState(),g="S",S=x.COMPAT}var j=y.__private__.combineFontStyleAndFontWeight=function(t,e){if("bold"==t&&"normal"==e||"bold"==t&&400==e||"normal"==t&&"italic"==e||"bold"==t&&"italic"==e)throw new Error("Invalid Combination of fontweight and fontstyle");return e&&(t=400==e||"normal"===e?"italic"===t?"italic":"normal":700!=e&&"bold"!==e||"normal"!==t?(700==e?"bold":e)+""+t:"bold"),t};y.advancedAPI=function(t){var e=S===x.COMPAT;return e&&_.call(this),"function"!=typeof t||(t(this),e&&P.call(this)),this},y.compatAPI=function(t){var e=S===x.ADVANCED;return e&&P.call(this),"function"!=typeof t||(t(this),e&&_.call(this)),this},y.isAdvancedAPI=function(){return S===x.ADVANCED};var E,q=function(t){if(S!==x.ADVANCED)throw new Error(t+" is only available in 'advanced' API mode. You need to call advancedAPI() first.")},D=y.roundToPrecision=y.__private__.roundToPrecision=function(t,e){var r=n||e;if(isNaN(t)||isNaN(r))throw new Error("Invalid argument passed to jsPDF.roundToPrecision");return t.toFixed(r).replace(/0+$/,"")};E=y.hpf=y.__private__.hpf="number"==typeof p?function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.hpf");return D(t,p)}:"smart"===p?function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.hpf");return D(t,t>-1&&t<1?16:5)}:function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.hpf");return D(t,16)};var R=y.f2=y.__private__.f2=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.f2");return D(t,2)},T=y.__private__.f3=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.f3");return D(t,3)},U=y.scale=y.__private__.scale=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.scale");return S===x.COMPAT?t*_t:S===x.ADVANCED?t:void 0},z=function(t){return S===x.COMPAT?Rr()-t:S===x.ADVANCED?t:void 0},H=function(t){return U(z(t))};y.__private__.setPrecision=y.setPrecision=function(t){"number"==typeof parseInt(t,10)&&(n=parseInt(t,10))};var W,V="00000000000000000000000000000000",G=y.__private__.getFileId=function(){return V},Y=y.__private__.setFileId=function(t){return V=void 0!==t&&/^[a-fA-F0-9]{32}$/.test(t)?t.toUpperCase():V.split("").map((function(){return"ABCDEF0123456789".charAt(Math.floor(16*Math.random()))})).join(""),null!==m&&(Ye=new k(m.userPermissions,m.userPassword,m.ownerPassword,V)),V};y.setFileId=function(t){return Y(t),this},y.getFileId=function(){return G()};var J=y.__private__.convertDateToPDFDate=function(t){var e=t.getTimezoneOffset(),r=e<0?"+":"-",n=Math.floor(Math.abs(e/60)),i=Math.abs(e%60),a=[r,Q(n),"'",Q(i),"'"].join("");return["D:",t.getFullYear(),Q(t.getMonth()+1),Q(t.getDate()),Q(t.getHours()),Q(t.getMinutes()),Q(t.getSeconds()),a].join("")},X=y.__private__.convertPDFDateToDate=function(t){var e=parseInt(t.substr(2,4),10),r=parseInt(t.substr(6,2),10)-1,n=parseInt(t.substr(8,2),10),i=parseInt(t.substr(10,2),10),a=parseInt(t.substr(12,2),10),o=parseInt(t.substr(14,2),10);return new Date(e,r,n,i,a,o,0)},K=y.__private__.setCreationDate=function(t){var e;if(void 0===t&&(t=new Date),t instanceof Date)e=J(t);else{if(!/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/.test(t))throw new Error("Invalid argument passed to jsPDF.setCreationDate");e=t}return W=e},Z=y.__private__.getCreationDate=function(t){var e=W;return"jsDate"===t&&(e=X(W)),e};y.setCreationDate=function(t){return K(t),this},y.getCreationDate=function(t){return Z(t)};var $,Q=y.__private__.padd2=function(t){return("0"+parseInt(t)).slice(-2)},tt=y.__private__.padd2Hex=function(t){return("00"+(t=t.toString())).substr(t.length)},et=0,rt=[],nt=[],it=0,at=[],ot=[],st=!1,ct=nt,ut=function(){et=0,it=0,nt=[],rt=[],at=[],Qt=Kt(),te=Kt()};y.__private__.setCustomOutputDestination=function(t){st=!0,ct=t};var lt=function(t){st||(ct=t)};y.__private__.resetCustomOutputDestination=function(){st=!1,ct=nt};var ht=y.__private__.out=function(t){return t=t.toString(),it+=t.length+1,ct.push(t),ct},ft=y.__private__.write=function(t){return ht(1===arguments.length?t.toString():Array.prototype.join.call(arguments," "))},dt=y.__private__.getArrayBuffer=function(t){for(var e=t.length,r=new ArrayBuffer(e),n=new Uint8Array(r);e--;)n[e]=t.charCodeAt(e);return r},pt=[["Helvetica","helvetica","normal","WinAnsiEncoding"],["Helvetica-Bold","helvetica","bold","WinAnsiEncoding"],["Helvetica-Oblique","helvetica","italic","WinAnsiEncoding"],["Helvetica-BoldOblique","helvetica","bolditalic","WinAnsiEncoding"],["Courier","courier","normal","WinAnsiEncoding"],["Courier-Bold","courier","bold","WinAnsiEncoding"],["Courier-Oblique","courier","italic","WinAnsiEncoding"],["Courier-BoldOblique","courier","bolditalic","WinAnsiEncoding"],["Times-Roman","times","normal","WinAnsiEncoding"],["Times-Bold","times","bold","WinAnsiEncoding"],["Times-Italic","times","italic","WinAnsiEncoding"],["Times-BoldItalic","times","bolditalic","WinAnsiEncoding"],["ZapfDingbats","zapfdingbats","normal",null],["Symbol","symbol","normal",null]];y.__private__.getStandardFonts=function(){return pt};var gt=t.fontSize||16;y.__private__.setFontSize=y.setFontSize=function(t){return gt=S===x.ADVANCED?t/_t:t,this};var mt,vt=y.__private__.getFontSize=y.getFontSize=function(){return S===x.COMPAT?gt:gt*_t},bt=t.R2L||!1;y.__private__.setR2L=y.setR2L=function(t){return bt=t,this},y.__private__.getR2L=y.getR2L=function(){return bt};var yt,wt=y.__private__.setZoomMode=function(t){var e=[void 0,null,"fullwidth","fullheight","fullpage","original"];if(/^(?:\d+\.\d*|\d*\.\d+|\d+)%$/.test(t))mt=t;else if(isNaN(t)){if(-1===e.indexOf(t))throw new Error('zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. "'+t+'" is not recognized.');mt=t}else mt=parseInt(t,10)};y.__private__.getZoomMode=function(){return mt};var Nt,Lt=y.__private__.setPageMode=function(t){if(-1==[void 0,null,"UseNone","UseOutlines","UseThumbs","FullScreen"].indexOf(t))throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. "'+t+'" is not recognized.');yt=t};y.__private__.getPageMode=function(){return yt};var At=y.__private__.setLayoutMode=function(t){if(-1==[void 0,null,"continuous","single","twoleft","tworight","two"].indexOf(t))throw new Error('Layout mode must be one of continuous, single, twoleft, tworight. "'+t+'" is not recognized.');Nt=t};y.__private__.getLayoutMode=function(){return Nt},y.__private__.setDisplayMode=y.setDisplayMode=function(t,e,r){return wt(t),At(e),Lt(r),this};var xt={title:"",subject:"",author:"",keywords:"",creator:""};y.__private__.getDocumentProperty=function(t){if(-1===Object.keys(xt).indexOf(t))throw new Error("Invalid argument passed to jsPDF.getDocumentProperty");return xt[t]},y.__private__.getDocumentProperties=function(){return xt},y.__private__.setDocumentProperties=y.setProperties=y.setDocumentProperties=function(t){for(var e in xt)xt.hasOwnProperty(e)&&t[e]&&(xt[e]=t[e]);return this},y.__private__.setDocumentProperty=function(t,e){if(-1===Object.keys(xt).indexOf(t))throw new Error("Invalid arguments passed to jsPDF.setDocumentProperty");return xt[t]=e};var St,_t,Pt,kt,Ft,It={},Ct={},jt=[],Ot={},Bt={},Mt={},Et={},qt=null,Dt=0,Rt=[],Tt=new I(y),Ut=t.hotfixes||[],zt={},Ht={},Wt=[],Vt=function t(e,r,n,i,a,o){if(!(this instanceof t))return new t(e,r,n,i,a,o);isNaN(e)&&(e=1),isNaN(r)&&(r=0),isNaN(n)&&(n=0),isNaN(i)&&(i=1),isNaN(a)&&(a=0),isNaN(o)&&(o=0),this._matrix=[e,r,n,i,a,o]};Object.defineProperty(Vt.prototype,"sx",{get:function(){return this._matrix[0]},set:function(t){this._matrix[0]=t}}),Object.defineProperty(Vt.prototype,"shy",{get:function(){return this._matrix[1]},set:function(t){this._matrix[1]=t}}),Object.defineProperty(Vt.prototype,"shx",{get:function(){return this._matrix[2]},set:function(t){this._matrix[2]=t}}),Object.defineProperty(Vt.prototype,"sy",{get:function(){return this._matrix[3]},set:function(t){this._matrix[3]=t}}),Object.defineProperty(Vt.prototype,"tx",{get:function(){return this._matrix[4]},set:function(t){this._matrix[4]=t}}),Object.defineProperty(Vt.prototype,"ty",{get:function(){return this._matrix[5]},set:function(t){this._matrix[5]=t}}),Object.defineProperty(Vt.prototype,"a",{get:function(){return this._matrix[0]},set:function(t){this._matrix[0]=t}}),Object.defineProperty(Vt.prototype,"b",{get:function(){return this._matrix[1]},set:function(t){this._matrix[1]=t}}),Object.defineProperty(Vt.prototype,"c",{get:function(){return this._matrix[2]},set:function(t){this._matrix[2]=t}}),Object.defineProperty(Vt.prototype,"d",{get:function(){return this._matrix[3]},set:function(t){this._matrix[3]=t}}),Object.defineProperty(Vt.prototype,"e",{get:function(){return this._matrix[4]},set:function(t){this._matrix[4]=t}}),Object.defineProperty(Vt.prototype,"f",{get:function(){return this._matrix[5]},set:function(t){this._matrix[5]=t}}),Object.defineProperty(Vt.prototype,"rotation",{get:function(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(Vt.prototype,"scaleX",{get:function(){return this.decompose().scale.sx}}),Object.defineProperty(Vt.prototype,"scaleY",{get:function(){return this.decompose().scale.sy}}),Object.defineProperty(Vt.prototype,"isIdentity",{get:function(){return 1===this.sx&&(0===this.shy&&(0===this.shx&&(1===this.sy&&(0===this.tx&&0===this.ty))))}}),Vt.prototype.join=function(t){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(E).join(t)},Vt.prototype.multiply=function(t){var e=t.sx*this.sx+t.shy*this.shx,r=t.sx*this.shy+t.shy*this.sy,n=t.shx*this.sx+t.sy*this.shx,i=t.shx*this.shy+t.sy*this.sy,a=t.tx*this.sx+t.ty*this.shx+this.tx,o=t.tx*this.shy+t.ty*this.sy+this.ty;return new Vt(e,r,n,i,a,o)},Vt.prototype.decompose=function(){var t=this.sx,e=this.shy,r=this.shx,n=this.sy,i=this.tx,a=this.ty,o=Math.sqrt(t*t+e*e),s=(t/=o)*r+(e/=o)*n;r-=t*s,n-=e*s;var c=Math.sqrt(r*r+n*n);return s/=c,t*(n/=c)<e*(r/=c)&&(t=-t,e=-e,s=-s,o=-o),{scale:new Vt(o,0,0,c,0,0),translate:new Vt(1,0,0,1,i,a),rotate:new Vt(t,e,-e,t,0,0),skew:new Vt(1,0,s,1,0,0)}},Vt.prototype.toString=function(t){return this.join(" ")},Vt.prototype.inversed=function(){var t=this.sx,e=this.shy,r=this.shx,n=this.sy,i=this.tx,a=this.ty,o=1/(t*n-e*r),s=n*o,c=-e*o,u=-r*o,l=t*o;return new Vt(s,c,u,l,-s*i-u*a,-c*i-l*a)},Vt.prototype.applyToPoint=function(t){var e=t.x*this.sx+t.y*this.shx+this.tx,r=t.x*this.shy+t.y*this.sy+this.ty;return new Cr(e,r)},Vt.prototype.applyToRectangle=function(t){var e=this.applyToPoint(t),r=this.applyToPoint(new Cr(t.x+t.w,t.y+t.h));return new jr(e.x,e.y,r.x-e.x,r.y-e.y)},Vt.prototype.clone=function(){var t=this.sx,e=this.shy,r=this.shx,n=this.sy,i=this.tx,a=this.ty;return new Vt(t,e,r,n,i,a)},y.Matrix=Vt;var Gt=y.matrixMult=function(t,e){return e.multiply(t)},Yt=new Vt(1,0,0,1,0,0);y.unitMatrix=y.identityMatrix=Yt;var Jt=function(t,e){if(!Bt[t]){var r=(e instanceof O?"Sh":"P")+(Object.keys(Ot).length+1).toString(10);e.id=r,Bt[t]=r,Ot[r]=e,Tt.publish("addPattern",e)}};y.ShadingPattern=O,y.TilingPattern=B,y.addShadingPattern=function(t,e){return q("addShadingPattern()"),Jt(t,e),this},y.beginTilingPattern=function(t){q("beginTilingPattern()"),Br(t.boundingBox[0],t.boundingBox[1],t.boundingBox[2]-t.boundingBox[0],t.boundingBox[3]-t.boundingBox[1],t.matrix)},y.endTilingPattern=function(t,e){q("endTilingPattern()"),e.stream=ot[$].join("\n"),Jt(t,e),Tt.publish("endTilingPattern",e),Wt.pop().restore()};var Xt=y.__private__.newObject=function(){var t=Kt();return Zt(t,!0),t},Kt=y.__private__.newObjectDeferred=function(){return et++,rt[et]=function(){return it},et},Zt=function(t,e){return e="boolean"==typeof e&&e,rt[t]=it,e&&ht(t+" 0 obj"),t},$t=y.__private__.newAdditionalObject=function(){var t={objId:Kt(),content:""};return at.push(t),t},Qt=Kt(),te=Kt(),ee=y.__private__.decodeColorString=function(t){var e=t.split(" ");if(2!==e.length||"g"!==e[1]&&"G"!==e[1]){if(5===e.length&&("k"===e[4]||"K"===e[4])){e=[(1-e[0])*(1-e[3]),(1-e[1])*(1-e[3]),(1-e[2])*(1-e[3]),"r"]}}else{var r=parseFloat(e[0]);e=[r,r,r,"r"]}for(var n="#",i=0;i<3;i++)n+=("0"+Math.floor(255*parseFloat(e[i])).toString(16)).slice(-2);return n},re=y.__private__.encodeColorString=function(t){var r;"string"==typeof t&&(t={ch1:t});var n=t.ch1,i=t.ch2,a=t.ch3,o=t.ch4,s="draw"===t.pdfColorType?["G","RG","K"]:["g","rg","k"];if("string"==typeof n&&"#"!==n.charAt(0)){var c=new h(n);if(c.ok)n=c.toHex();else if(!/^\d*\.?\d*$/.test(n))throw new Error('Invalid color "'+n+'" passed to jsPDF.encodeColorString.')}if("string"==typeof n&&/^#[0-9A-Fa-f]{3}$/.test(n)&&(n="#"+n[1]+n[1]+n[2]+n[2]+n[3]+n[3]),"string"==typeof n&&/^#[0-9A-Fa-f]{6}$/.test(n)){var u=parseInt(n.substr(1),16);n=u>>16&255,i=u>>8&255,a=255&u}if(void 0===i||void 0===o&&n===i&&i===a)if("string"==typeof n)r=n+" "+s[0];else switch(t.precision){case 2:r=R(n/255)+" "+s[0];break;case 3:default:r=T(n/255)+" "+s[0]}else if(void 0===o||"object"===e(o)){if(o&&!isNaN(o.a)&&0===o.a)return r=["1.","1.","1.",s[1]].join(" ");if("string"==typeof n)r=[n,i,a,s[1]].join(" ");else switch(t.precision){case 2:r=[R(n/255),R(i/255),R(a/255),s[1]].join(" ");break;default:case 3:r=[T(n/255),T(i/255),T(a/255),s[1]].join(" ")}}else if("string"==typeof n)r=[n,i,a,o,s[2]].join(" ");else switch(t.precision){case 2:r=[R(n),R(i),R(a),R(o),s[2]].join(" ");break;case 3:default:r=[T(n),T(i),T(a),T(o),s[2]].join(" ")}return r},ne=y.__private__.getFilters=function(){return f},ie=y.__private__.putStream=function(t){var e=(t=t||{}).data||"",r=t.filters||ne(),n=t.alreadyAppliedFilters||[],i=t.addLength1||!1,a=e.length,o=t.objectId,s=function(t){return t};if(null!==m&&void 0===o)throw new Error("ObjectId must be passed to putStream for file encryption");null!==m&&(s=Ye.encryptor(o,0));var c={};!0===r&&(r=["FlateEncode"]);var u=t.additionalKeyValues||[],l=(c=void 0!==M.API.processDataByFilters?M.API.processDataByFilters(e,r):{data:e,reverseChain:[]}).reverseChain+(Array.isArray(n)?n.join(" "):n.toString());if(0!==c.data.length&&(u.push({key:"Length",value:c.data.length}),!0===i&&u.push({key:"Length1",value:a})),0!=l.length)if(l.split("/").length-1==1)u.push({key:"Filter",value:l});else{u.push({key:"Filter",value:"["+l+"]"});for(var h=0;h<u.length;h+=1)if("DecodeParms"===u[h].key){for(var f=[],d=0;d<c.reverseChain.split("/").length-1;d+=1)f.push("null");f.push(u[h].value),u[h].value="["+f.join(" ")+"]"}}ht("<<");for(var p=0;p<u.length;p++)ht("/"+u[p].key+" "+u[p].value);ht(">>"),0!==c.data.length&&(ht("stream"),ht(s(c.data)),ht("endstream"))},ae=y.__private__.putPage=function(t){var e=t.number,r=t.data,n=t.objId,i=t.contentsObjId;Zt(n,!0),ht("<</Type /Page"),ht("/Parent "+t.rootDictionaryObjId+" 0 R"),ht("/Resources "+t.resourceDictionaryObjId+" 0 R"),ht("/MediaBox ["+parseFloat(E(t.mediaBox.bottomLeftX))+" "+parseFloat(E(t.mediaBox.bottomLeftY))+" "+E(t.mediaBox.topRightX)+" "+E(t.mediaBox.topRightY)+"]"),null!==t.cropBox&&ht("/CropBox ["+E(t.cropBox.bottomLeftX)+" "+E(t.cropBox.bottomLeftY)+" "+E(t.cropBox.topRightX)+" "+E(t.cropBox.topRightY)+"]"),null!==t.bleedBox&&ht("/BleedBox ["+E(t.bleedBox.bottomLeftX)+" "+E(t.bleedBox.bottomLeftY)+" "+E(t.bleedBox.topRightX)+" "+E(t.bleedBox.topRightY)+"]"),null!==t.trimBox&&ht("/TrimBox ["+E(t.trimBox.bottomLeftX)+" "+E(t.trimBox.bottomLeftY)+" "+E(t.trimBox.topRightX)+" "+E(t.trimBox.topRightY)+"]"),null!==t.artBox&&ht("/ArtBox ["+E(t.artBox.bottomLeftX)+" "+E(t.artBox.bottomLeftY)+" "+E(t.artBox.topRightX)+" "+E(t.artBox.topRightY)+"]"),"number"==typeof t.userUnit&&1!==t.userUnit&&ht("/UserUnit "+t.userUnit),Tt.publish("putPage",{objId:n,pageContext:Rt[e],pageNumber:e,page:r}),ht("/Contents "+i+" 0 R"),ht(">>"),ht("endobj");var a=r.join("\n");return S===x.ADVANCED&&(a+="\nQ"),Zt(i,!0),ie({data:a,filters:ne(),objectId:i}),ht("endobj"),n},oe=y.__private__.putPages=function(){var t,e,r=[];for(t=1;t<=Dt;t++)Rt[t].objId=Kt(),Rt[t].contentsObjId=Kt();for(t=1;t<=Dt;t++)r.push(ae({number:t,data:ot[t],objId:Rt[t].objId,contentsObjId:Rt[t].contentsObjId,mediaBox:Rt[t].mediaBox,cropBox:Rt[t].cropBox,bleedBox:Rt[t].bleedBox,trimBox:Rt[t].trimBox,artBox:Rt[t].artBox,userUnit:Rt[t].userUnit,rootDictionaryObjId:Qt,resourceDictionaryObjId:te}));Zt(Qt,!0),ht("<</Type /Pages");var n="/Kids [";for(e=0;e<Dt;e++)n+=r[e]+" 0 R ";ht(n+"]"),ht("/Count "+Dt),ht(">>"),ht("endobj"),Tt.publish("postPutPages")},se=function(t){Tt.publish("putFont",{font:t,out:ht,newObject:Xt,putStream:ie}),!0!==t.isAlreadyPutted&&(t.objectNumber=Xt(),ht("<<"),ht("/Type /Font"),ht("/BaseFont /"+F(t.postScriptName)),ht("/Subtype /Type1"),"string"==typeof t.encoding&&ht("/Encoding /"+t.encoding),ht("/FirstChar 32"),ht("/LastChar 255"),ht(">>"),ht("endobj"))},ce=function(){for(var t in It)It.hasOwnProperty(t)&&(!1===v||!0===v&&b.hasOwnProperty(t))&&se(It[t])},ue=function(t){t.objectNumber=Xt();var e=[];e.push({key:"Type",value:"/XObject"}),e.push({key:"Subtype",value:"/Form"}),e.push({key:"BBox",value:"["+[E(t.x),E(t.y),E(t.x+t.width),E(t.y+t.height)].join(" ")+"]"}),e.push({key:"Matrix",value:"["+t.matrix.toString()+"]"});var r=t.pages[1].join("\n");ie({data:r,additionalKeyValues:e,objectId:t.objectNumber}),ht("endobj")},le=function(){for(var t in zt)zt.hasOwnProperty(t)&&ue(zt[t])},he=function(t,e){var r,n=[],i=1/(e-1);for(r=0;r<1;r+=i)n.push(r);if(n.push(1),0!=t[0].offset){var a={offset:0,color:t[0].color};t.unshift(a)}if(1!=t[t.length-1].offset){var o={offset:1,color:t[t.length-1].color};t.push(o)}for(var s="",c=0,u=0;u<n.length;u++){for(r=n[u];r>t[c+1].offset;)c++;var l=t[c].offset,h=(r-l)/(t[c+1].offset-l),f=t[c].color,d=t[c+1].color;s+=tt(Math.round((1-h)*f[0]+h*d[0]).toString(16))+tt(Math.round((1-h)*f[1]+h*d[1]).toString(16))+tt(Math.round((1-h)*f[2]+h*d[2]).toString(16))}return s.trim()},fe=function(t,e){e||(e=21);var r=Xt(),n=he(t.colors,e),i=[];i.push({key:"FunctionType",value:"0"}),i.push({key:"Domain",value:"[0.0 1.0]"}),i.push({key:"Size",value:"["+e+"]"}),i.push({key:"BitsPerSample",value:"8"}),i.push({key:"Range",value:"[0.0 1.0 0.0 1.0 0.0 1.0]"}),i.push({key:"Decode",value:"[0.0 1.0 0.0 1.0 0.0 1.0]"}),ie({data:n,additionalKeyValues:i,alreadyAppliedFilters:["/ASCIIHexDecode"],objectId:r}),ht("endobj"),t.objectNumber=Xt(),ht("<< /ShadingType "+t.type),ht("/ColorSpace /DeviceRGB");var a="/Coords ["+E(parseFloat(t.coords[0]))+" "+E(parseFloat(t.coords[1]))+" ";2===t.type?a+=E(parseFloat(t.coords[2]))+" "+E(parseFloat(t.coords[3])):a+=E(parseFloat(t.coords[2]))+" "+E(parseFloat(t.coords[3]))+" "+E(parseFloat(t.coords[4]))+" "+E(parseFloat(t.coords[5])),ht(a+="]"),t.matrix&&ht("/Matrix ["+t.matrix.toString()+"]"),ht("/Function "+r+" 0 R"),ht("/Extend [true true]"),ht(">>"),ht("endobj")},de=function(t,e){var r=Kt(),n=Xt();e.push({resourcesOid:r,objectOid:n}),t.objectNumber=n;var i=[];i.push({key:"Type",value:"/Pattern"}),i.push({key:"PatternType",value:"1"}),i.push({key:"PaintType",value:"1"}),i.push({key:"TilingType",value:"1"}),i.push({key:"BBox",value:"["+t.boundingBox.map(E).join(" ")+"]"}),i.push({key:"XStep",value:E(t.xStep)}),i.push({key:"YStep",value:E(t.yStep)}),i.push({key:"Resources",value:r+" 0 R"}),t.matrix&&i.push({key:"Matrix",value:"["+t.matrix.toString()+"]"}),ie({data:t.stream,additionalKeyValues:i,objectId:t.objectNumber}),ht("endobj")},pe=function(t){var e;for(e in Ot)Ot.hasOwnProperty(e)&&(Ot[e]instanceof O?fe(Ot[e]):Ot[e]instanceof B&&de(Ot[e],t))},ge=function(t){for(var e in t.objectNumber=Xt(),ht("<<"),t)switch(e){case"opacity":ht("/ca "+R(t[e]));break;case"stroke-opacity":ht("/CA "+R(t[e]))}ht(">>"),ht("endobj")},me=function(){var t;for(t in Mt)Mt.hasOwnProperty(t)&&ge(Mt[t])},ve=function(){for(var t in ht("/XObject <<"),zt)zt.hasOwnProperty(t)&&zt[t].objectNumber>=0&&ht("/"+t+" "+zt[t].objectNumber+" 0 R");Tt.publish("putXobjectDict"),ht(">>")},be=function(){Ye.oid=Xt(),ht("<<"),ht("/Filter /Standard"),ht("/V "+Ye.v),ht("/R "+Ye.r),ht("/U <"+Ye.toHexString(Ye.U)+">"),ht("/O <"+Ye.toHexString(Ye.O)+">"),ht("/P "+Ye.P),ht(">>"),ht("endobj")},ye=function(){for(var t in ht("/Font <<"),It)It.hasOwnProperty(t)&&(!1===v||!0===v&&b.hasOwnProperty(t))&&ht("/"+t+" "+It[t].objectNumber+" 0 R");ht(">>")},we=function(){if(Object.keys(Ot).length>0){for(var t in ht("/Shading <<"),Ot)Ot.hasOwnProperty(t)&&Ot[t]instanceof O&&Ot[t].objectNumber>=0&&ht("/"+t+" "+Ot[t].objectNumber+" 0 R");Tt.publish("putShadingPatternDict"),ht(">>")}},Ne=function(t){if(Object.keys(Ot).length>0){for(var e in ht("/Pattern <<"),Ot)Ot.hasOwnProperty(e)&&Ot[e]instanceof y.TilingPattern&&Ot[e].objectNumber>=0&&Ot[e].objectNumber<t&&ht("/"+e+" "+Ot[e].objectNumber+" 0 R");Tt.publish("putTilingPatternDict"),ht(">>")}},Le=function(){if(Object.keys(Mt).length>0){var t;for(t in ht("/ExtGState <<"),Mt)Mt.hasOwnProperty(t)&&Mt[t].objectNumber>=0&&ht("/"+t+" "+Mt[t].objectNumber+" 0 R");Tt.publish("putGStateDict"),ht(">>")}},Ae=function(t){Zt(t.resourcesOid,!0),ht("<<"),ht("/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]"),ye(),we(),Ne(t.objectOid),Le(),ve(),ht(">>"),ht("endobj")},xe=function(){var t=[];ce(),me(),le(),pe(t),Tt.publish("putResources"),t.forEach(Ae),Ae({resourcesOid:te,objectOid:Number.MAX_SAFE_INTEGER}),Tt.publish("postPutResources")},Se=function(){Tt.publish("putAdditionalObjects");for(var t=0;t<at.length;t++){var e=at[t];Zt(e.objId,!0),ht(e.content),ht("endobj")}Tt.publish("postPutAdditionalObjects")},_e=function(t){Ct[t.fontName]=Ct[t.fontName]||{},Ct[t.fontName][t.fontStyle]=t.id},Pe=function(t,e,r,n,i){var a={id:"F"+(Object.keys(It).length+1).toString(10),postScriptName:t,fontName:e,fontStyle:r,encoding:n,isStandardFont:i||!1,metadata:{}};return Tt.publish("addFont",{font:a,instance:this}),It[a.id]=a,_e(a),a.id},ke=function(t){for(var e=0,r=pt.length;e<r;e++){var n=Pe.call(this,t[e][0],t[e][1],t[e][2],pt[e][3],!0);!1===v&&(b[n]=!0);var i=t[e][0].split("-");_e({id:n,fontName:i[0],fontStyle:i[1]||""})}Tt.publish("addFonts",{fonts:It,dictionary:Ct})},Fe=function(t){return t.foo=function(){try{return t.apply(this,arguments)}catch(t){var e=t.stack||"";~e.indexOf(" at ")&&(e=e.split(" at ")[1]);var n="Error in function "+e.split("\n")[0].split("<")[0]+": "+t.message;if(!r.console)throw new Error(n);r.console.error(n,t),r.alert&&alert(n)}},t.foo.bar=t,t.foo},Ie=function(t,e){var r,n,i,a,o,s,c,u,l;if(i=(e=e||{}).sourceEncoding||"Unicode",o=e.outputEncoding,(e.autoencode||o)&&It[St].metadata&&It[St].metadata[i]&&It[St].metadata[i].encoding&&(a=It[St].metadata[i].encoding,!o&&It[St].encoding&&(o=It[St].encoding),!o&&a.codePages&&(o=a.codePages[0]),"string"==typeof o&&(o=a[o]),o)){for(c=!1,s=[],r=0,n=t.length;r<n;r++)(u=o[t.charCodeAt(r)])?s.push(String.fromCharCode(u)):s.push(t[r]),s[r].charCodeAt(0)>>8&&(c=!0);t=s.join("")}for(r=t.length;void 0===c&&0!==r;)t.charCodeAt(r-1)>>8&&(c=!0),r--;if(!c)return t;for(s=e.noBOM?[]:[254,255],r=0,n=t.length;r<n;r++){if((l=(u=t.charCodeAt(r))>>8)>>8)throw new Error("Character at position "+r+" of string '"+t+"' exceeds 16bits. Cannot be encoded into UCS-2 BE");s.push(l),s.push(u-(l<<8))}return String.fromCharCode.apply(void 0,s)},Ce=y.__private__.pdfEscape=y.pdfEscape=function(t,e){return Ie(t,e).replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)")},je=y.__private__.beginPage=function(t){ot[++Dt]=[],Rt[Dt]={objId:0,contentsObjId:0,userUnit:Number(d),artBox:null,bleedBox:null,cropBox:null,trimBox:null,mediaBox:{bottomLeftX:0,bottomLeftY:0,topRightX:Number(t[0]),topRightY:Number(t[1])}},Me(Dt),lt(ot[$])},Oe=function(t,e){var r,n,o;switch(a=e||a,"string"==typeof t&&(r=A(t.toLowerCase()),Array.isArray(r)&&(n=r[0],o=r[1])),Array.isArray(t)&&(n=t[0]*_t,o=t[1]*_t),isNaN(n)&&(n=s[0],o=s[1]),(n>14400||o>14400)&&(i.warn("A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400"),n=Math.min(14400,n),o=Math.min(14400,o)),s=[n,o],a.substr(0,1)){case"l":o>n&&(s=[o,n]);break;case"p":n>o&&(s=[o,n])}je(s),pr(fr),ht(Lr),0!==kr&&ht(kr+" J"),0!==Fr&&ht(Fr+" j"),Tt.publish("addPage",{pageNumber:Dt})},Be=function(t){t>0&&t<=Dt&&(ot.splice(t,1),Rt.splice(t,1),Dt--,$>Dt&&($=Dt),this.setPage($))},Me=function(t){t>0&&t<=Dt&&($=t)},Ee=y.__private__.getNumberOfPages=y.getNumberOfPages=function(){return ot.length-1},qe=function(t,e,r){var n,a=void 0;return r=r||{},t=void 0!==t?t:It[St].fontName,e=void 0!==e?e:It[St].fontStyle,n=t.toLowerCase(),void 0!==Ct[n]&&void 0!==Ct[n][e]?a=Ct[n][e]:void 0!==Ct[t]&&void 0!==Ct[t][e]?a=Ct[t][e]:!1===r.disableWarning&&i.warn("Unable to look up font label for font '"+t+"', '"+e+"'. Refer to getFontList() for available fonts."),a||r.noFallback||null==(a=Ct.times[e])&&(a=Ct.times.normal),a},De=y.__private__.putInfo=function(){var t=Xt(),e=function(t){return t};for(var r in null!==m&&(e=Ye.encryptor(t,0)),ht("<<"),ht("/Producer ("+Ce(e("jsPDF "+M.version))+")"),xt)xt.hasOwnProperty(r)&&xt[r]&&ht("/"+r.substr(0,1).toUpperCase()+r.substr(1)+" ("+Ce(e(xt[r]))+")");ht("/CreationDate ("+Ce(e(W))+")"),ht(">>"),ht("endobj")},Re=y.__private__.putCatalog=function(t){var e=(t=t||{}).rootDictionaryObjId||Qt;switch(Xt(),ht("<<"),ht("/Type /Catalog"),ht("/Pages "+e+" 0 R"),mt||(mt="fullwidth"),mt){case"fullwidth":ht("/OpenAction [3 0 R /FitH null]");break;case"fullheight":ht("/OpenAction [3 0 R /FitV null]");break;case"fullpage":ht("/OpenAction [3 0 R /Fit]");break;case"original":ht("/OpenAction [3 0 R /XYZ null null 1]");break;default:var r=""+mt;"%"===r.substr(r.length-1)&&(mt=parseInt(mt)/100),"number"==typeof mt&&ht("/OpenAction [3 0 R /XYZ null null "+R(mt)+"]")}switch(Nt||(Nt="continuous"),Nt){case"continuous":ht("/PageLayout /OneColumn");break;case"single":ht("/PageLayout /SinglePage");break;case"two":case"twoleft":ht("/PageLayout /TwoColumnLeft");break;case"tworight":ht("/PageLayout /TwoColumnRight")}yt&&ht("/PageMode /"+yt),Tt.publish("putCatalog"),ht(">>"),ht("endobj")},Te=y.__private__.putTrailer=function(){ht("trailer"),ht("<<"),ht("/Size "+(et+1)),ht("/Root "+et+" 0 R"),ht("/Info "+(et-1)+" 0 R"),null!==m&&ht("/Encrypt "+Ye.oid+" 0 R"),ht("/ID [ <"+V+"> <"+V+"> ]"),ht(">>")},Ue=y.__private__.putHeader=function(){ht("%PDF-"+w),ht("%ºß¬à")},ze=y.__private__.putXRef=function(){var t="0000000000";ht("xref"),ht("0 "+(et+1)),ht("0000000000 65535 f ");for(var e=1;e<=et;e++){"function"==typeof rt[e]?ht((t+rt[e]()).slice(-10)+" 00000 n "):void 0!==rt[e]?ht((t+rt[e]).slice(-10)+" 00000 n "):ht("0000000000 00000 n ")}},He=y.__private__.buildDocument=function(){ut(),lt(nt),Tt.publish("buildDocument"),Ue(),oe(),Se(),xe(),null!==m&&be(),De(),Re();var t=it;return ze(),Te(),ht("startxref"),ht(""+t),ht("%%EOF"),lt(ot[$]),nt.join("\n")},We=y.__private__.getBlob=function(t){return new Blob([dt(t)],{type:"application/pdf"})},Ve=y.output=y.__private__.output=Fe((function(t,e){switch("string"==typeof(e=e||{})?e={filename:e}:e.filename=e.filename||"generated.pdf",t){case void 0:return He();case"save":y.save(e.filename);break;case"arraybuffer":return dt(He());case"blob":return We(He());case"bloburi":case"bloburl":if(void 0!==r.URL&&"function"==typeof r.URL.createObjectURL)return r.URL&&r.URL.createObjectURL(We(He()))||void 0;i.warn("bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.");break;case"datauristring":case"dataurlstring":var n="",a=He();try{n=u(a)}catch(t){n=u(unescape(encodeURIComponent(a)))}return"data:application/pdf;filename="+e.filename+";base64,"+n;case"pdfobjectnewwindow":if("[object Window]"===Object.prototype.toString.call(r)){var o="https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js",s=' integrity="sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==" crossorigin="anonymous"';e.pdfObjectUrl&&(o=e.pdfObjectUrl,s="");var c='<html><style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  </style><body><script src="'+o+'"'+s+'><\/script><script >PDFObject.embed("'+this.output("dataurlstring")+'", '+JSON.stringify(e)+");<\/script></body></html>",l=r.open();return null!==l&&l.document.write(c),l}throw new Error("The option pdfobjectnewwindow just works in a browser-environment.");case"pdfjsnewwindow":if("[object Window]"===Object.prototype.toString.call(r)){var h='<html><style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  </style><body><iframe id="pdfViewer" src="'+(e.pdfJsUrl||"examples/PDF.js/web/viewer.html")+"?file=&downloadName="+e.filename+'" width="500px" height="400px" /></body></html>',f=r.open();if(null!==f){f.document.write(h);var d=this;f.document.documentElement.querySelector("#pdfViewer").onload=function(){f.document.title=e.filename,f.document.documentElement.querySelector("#pdfViewer").contentWindow.PDFViewerApplication.open(d.output("bloburl"))}}return f}throw new Error("The option pdfjsnewwindow just works in a browser-environment.");case"dataurlnewwindow":if("[object Window]"!==Object.prototype.toString.call(r))throw new Error("The option dataurlnewwindow just works in a browser-environment.");var p='<html><style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  </style><body><iframe src="'+this.output("datauristring",e)+'"></iframe></body></html>',g=r.open();if(null!==g&&(g.document.write(p),g.document.title=e.filename),g||"undefined"==typeof safari)return g;break;case"datauri":case"dataurl":return r.document.location.href=this.output("datauristring",e);default:return null}})),Ge=function(t){return!0===Array.isArray(Ut)&&Ut.indexOf(t)>-1};switch(o){case"pt":_t=1;break;case"mm":_t=72/25.4;break;case"cm":_t=72/2.54;break;case"in":_t=72;break;case"px":_t=1==Ge("px_scaling")?.75:96/72;break;case"pc":case"em":_t=12;break;case"ex":_t=6;break;default:if("number"!=typeof o)throw new Error("Invalid unit: "+o);_t=o}var Ye=null;K(),Y();var Je=function(t){return null!==m?Ye.encryptor(t,0):function(t){return t}},Xe=y.__private__.getPageInfo=y.getPageInfo=function(t){if(isNaN(t)||t%1!=0)throw new Error("Invalid argument passed to jsPDF.getPageInfo");return{objId:Rt[t].objId,pageNumber:t,pageContext:Rt[t]}},Ke=y.__private__.getPageInfoByObjId=function(t){if(isNaN(t)||t%1!=0)throw new Error("Invalid argument passed to jsPDF.getPageInfoByObjId");for(var e in Rt)if(Rt[e].objId===t)break;return Xe(e)},Ze=y.__private__.getCurrentPageInfo=y.getCurrentPageInfo=function(){return{objId:Rt[$].objId,pageNumber:$,pageContext:Rt[$]}};y.addPage=function(){return Oe.apply(this,arguments),this},y.setPage=function(){return Me.apply(this,arguments),lt.call(this,ot[$]),this},y.insertPage=function(t){return this.addPage(),this.movePage($,t),this},y.movePage=function(t,e){var r,n;if(t>e){r=ot[t],n=Rt[t];for(var i=t;i>e;i--)ot[i]=ot[i-1],Rt[i]=Rt[i-1];ot[e]=r,Rt[e]=n,this.setPage(e)}else if(t<e){r=ot[t],n=Rt[t];for(var a=t;a<e;a++)ot[a]=ot[a+1],Rt[a]=Rt[a+1];ot[e]=r,Rt[e]=n,this.setPage(e)}return this},y.deletePage=function(){return Be.apply(this,arguments),this},y.__private__.text=y.text=function(t,r,n,i,a){var o,s,c,u,l,h,f,d,p,g=(i=i||{}).scope||this;if("number"==typeof t&&"number"==typeof r&&("string"==typeof n||Array.isArray(n))){var m=n;n=r,r=t,t=m}if(arguments[3]instanceof Vt==!1?(c=arguments[4],u=arguments[5],"object"===e(f=arguments[3])&&null!==f||("string"==typeof c&&(u=c,c=null),"string"==typeof f&&(u=f,f=null),"number"==typeof f&&(c=f,f=null),i={flags:f,angle:c,align:u})):(q("The transform parameter of text() with a Matrix value"),p=a),isNaN(r)||isNaN(n)||null==t)throw new Error("Invalid arguments passed to jsPDF.text");if(0===t.length)return g;var v="",y=!1,w="number"==typeof i.lineHeightFactor?i.lineHeightFactor:hr,N=g.internal.scaleFactor;function L(t){return t=t.split("\t").join(Array(i.TabLen||9).join(" ")),Ce(t,f)}function A(t){for(var e,r=t.concat(),n=[],i=r.length;i--;)"string"==typeof(e=r.shift())?n.push(e):Array.isArray(t)&&(1===e.length||void 0===e[1]&&void 0===e[2])?n.push(e[0]):n.push([e[0],e[1],e[2]]);return n}function _(t,e){var r;if("string"==typeof t)r=e(t)[0];else if(Array.isArray(t)){for(var n,i,a=t.concat(),o=[],s=a.length;s--;)"string"==typeof(n=a.shift())?o.push(e(n)[0]):Array.isArray(n)&&"string"==typeof n[0]&&(i=e(n[0],n[1],n[2]),o.push([i[0],i[1],i[2]]));r=o}return r}var P=!1,k=!0;if("string"==typeof t)P=!0;else if(Array.isArray(t)){var F=t.concat();s=[];for(var I,C=F.length;C--;)("string"!=typeof(I=F.shift())||Array.isArray(I)&&"string"!=typeof I[0])&&(k=!1);P=k}if(!1===P)throw new Error('Type of text must be string or Array. "'+t+'" is not recognized.');"string"==typeof t&&(t=t.match(/[\r?\n]/)?t.split(/\r\n|\r|\n/g):[t]);var j=gt/g.internal.scaleFactor,O=j*(w-1);switch(i.baseline){case"bottom":n-=O;break;case"top":n+=j-O;break;case"hanging":n+=j-2*O;break;case"middle":n+=j/2-O}if((h=i.maxWidth||0)>0&&("string"==typeof t?t=g.splitTextToSize(t,h):"[object Array]"===Object.prototype.toString.call(t)&&(t=t.reduce((function(t,e){return t.concat(g.splitTextToSize(e,h))}),[]))),o={text:t,x:r,y:n,options:i,mutex:{pdfEscape:Ce,activeFontKey:St,fonts:It,activeFontSize:gt}},Tt.publish("preProcessText",o),t=o.text,c=(i=o.options).angle,p instanceof Vt==!1&&c&&"number"==typeof c){c*=Math.PI/180,0===i.rotationDirection&&(c=-c),S===x.ADVANCED&&(c=-c);var B=Math.cos(c),M=Math.sin(c);p=new Vt(B,M,-M,B,0,0)}else c&&c instanceof Vt&&(p=c);S!==x.ADVANCED||p||(p=Yt),void 0!==(l=i.charSpace||_r)&&(v+=E(U(l))+" Tc\n",this.setCharSpace(this.getCharSpace()||0)),void 0!==(d=i.horizontalScale)&&(v+=E(100*d)+" Tz\n");i.lang;var D=-1,R=void 0!==i.renderingMode?i.renderingMode:i.stroke,T=g.internal.getCurrentPageInfo().pageContext;switch(R){case 0:case!1:case"fill":D=0;break;case 1:case!0:case"stroke":D=1;break;case 2:case"fillThenStroke":D=2;break;case 3:case"invisible":D=3;break;case 4:case"fillAndAddForClipping":D=4;break;case 5:case"strokeAndAddPathForClipping":D=5;break;case 6:case"fillThenStrokeAndAddToPathForClipping":D=6;break;case 7:case"addToPathForClipping":D=7}var z=void 0!==T.usedRenderingMode?T.usedRenderingMode:-1;-1!==D?v+=D+" Tr\n":-1!==z&&(v+="0 Tr\n"),-1!==D&&(T.usedRenderingMode=D),u=i.align||"left";var H,W=gt*w,V=g.internal.pageSize.getWidth(),G=It[St];l=i.charSpace||_r,h=i.maxWidth||0,f=Object.assign({autoencode:!0,noBOM:!0},i.flags);var Y=[];if("[object Array]"===Object.prototype.toString.call(t)){var J;s=A(t),"left"!==u&&(H=s.map((function(t){return g.getStringUnitWidth(t,{font:G,charSpace:l,fontSize:gt,doKerning:!1})*gt/N})));var X,K=0;if("right"===u){r-=H[0],t=[],C=s.length;for(var Z=0;Z<C;Z++)0===Z?(X=br(r),J=yr(n)):(X=U(K-H[Z]),J=-W),t.push([s[Z],X,J]),K=H[Z]}else if("center"===u){r-=H[0]/2,t=[],C=s.length;for(var $=0;$<C;$++)0===$?(X=br(r),J=yr(n)):(X=U((K-H[$])/2),J=-W),t.push([s[$],X,J]),K=H[$]}else if("left"===u){t=[],C=s.length;for(var Q=0;Q<C;Q++)t.push(s[Q])}else{if("justify"!==u)throw new Error('Unrecognized alignment option, use "left", "center", "right" or "justify".');t=[],C=s.length,h=0!==h?h:V;for(var tt=0;tt<C;tt++)J=0===tt?yr(n):-W,X=0===tt?br(r):0,tt<C-1?Y.push(E(U((h-H[tt])/(s[tt].split(" ").length-1)))):Y.push(0),t.push([s[tt],X,J])}}var et="boolean"==typeof i.R2L?i.R2L:bt;!0===et&&(t=_(t,(function(t,e,r){return[t.split("").reverse().join(""),e,r]}))),o={text:t,x:r,y:n,options:i,mutex:{pdfEscape:Ce,activeFontKey:St,fonts:It,activeFontSize:gt}},Tt.publish("postProcessText",o),t=o.text,y=o.mutex.isHex||!1;var rt=It[St].encoding;"WinAnsiEncoding"!==rt&&"StandardEncoding"!==rt||(t=_(t,(function(t,e,r){return[L(t),e,r]}))),s=A(t),t=[];for(var nt,it,at,ot=0,st=1,ct=Array.isArray(s[0])?st:ot,ut="",lt=function(t,e,r){var n="";return r instanceof Vt?(r="number"==typeof i.angle?Gt(r,new Vt(1,0,0,1,t,e)):Gt(new Vt(1,0,0,1,t,e),r),S===x.ADVANCED&&(r=Gt(new Vt(1,0,0,-1,0,0),r)),n=r.join(" ")+" Tm\n"):n=E(t)+" "+E(e)+" Td\n",n},ft=0;ft<s.length;ft++){switch(ut="",ct){case st:at=(y?"<":"(")+s[ft][0]+(y?">":")"),nt=parseFloat(s[ft][1]),it=parseFloat(s[ft][2]);break;case ot:at=(y?"<":"(")+s[ft]+(y?">":")"),nt=br(r),it=yr(n)}void 0!==Y&&void 0!==Y[ft]&&(ut=Y[ft]+" Tw\n"),0===ft?t.push(ut+lt(nt,it,p)+at):ct===ot?t.push(ut+at):ct===st&&t.push(ut+lt(nt,it,p)+at)}t=ct===ot?t.join(" Tj\nT* "):t.join(" Tj\n"),t+=" Tj\n";var dt="BT\n/";return dt+=St+" "+gt+" Tf\n",dt+=E(gt*w)+" TL\n",dt+=xr+"\n",dt+=v,dt+=t,ht(dt+="ET"),b[St]=!0,g};var $e=y.__private__.clip=y.clip=function(t){return ht("evenodd"===t?"W*":"W"),this};y.clipEvenOdd=function(){return $e("evenodd")},y.__private__.discardPath=y.discardPath=function(){return ht("n"),this};var Qe=y.__private__.isValidStyle=function(t){var e=!1;return-1!==[void 0,null,"S","D","F","DF","FD","f","f*","B","B*","n"].indexOf(t)&&(e=!0),e};y.__private__.setDefaultPathOperation=y.setDefaultPathOperation=function(t){return Qe(t)&&(g=t),this};var tr=y.__private__.getStyle=y.getStyle=function(t){var e=g;switch(t){case"D":case"S":e="S";break;case"F":e="f";break;case"FD":case"DF":e="B";break;case"f":case"f*":case"B":case"B*":e=t}return e},er=y.close=function(){return ht("h"),this};y.stroke=function(){return ht("S"),this},y.fill=function(t){return rr("f",t),this},y.fillEvenOdd=function(t){return rr("f*",t),this},y.fillStroke=function(t){return rr("B",t),this},y.fillStrokeEvenOdd=function(t){return rr("B*",t),this};var rr=function(t,r){"object"===e(r)?ar(r,t):ht(t)},nr=function(t){null===t||S===x.ADVANCED&&void 0===t||(t=tr(t),ht(t))};function ir(t,e,r,n,i){var a=new B(e||this.boundingBox,r||this.xStep,n||this.yStep,this.gState,i||this.matrix);a.stream=this.stream;var o=t+"$$"+this.cloneIndex+++"$$";return Jt(o,a),a}var ar=function(t,e){var r=Bt[t.key],n=Ot[r];if(n instanceof O)ht("q"),ht(or(e)),n.gState&&y.setGState(n.gState),ht(t.matrix.toString()+" cm"),ht("/"+r+" sh"),ht("Q");else if(n instanceof B){var i=new Vt(1,0,0,-1,0,Rr());t.matrix&&(i=i.multiply(t.matrix||Yt),r=ir.call(n,t.key,t.boundingBox,t.xStep,t.yStep,i).id),ht("q"),ht("/Pattern cs"),ht("/"+r+" scn"),n.gState&&y.setGState(n.gState),ht(e),ht("Q")}},or=function(t){switch(t){case"f":case"F":return"W n";case"f*":return"W* n";case"B":return"W S";case"B*":return"W* S";case"S":return"W S";case"n":return"W n"}},sr=y.moveTo=function(t,e){return ht(E(U(t))+" "+E(H(e))+" m"),this},cr=y.lineTo=function(t,e){return ht(E(U(t))+" "+E(H(e))+" l"),this},ur=y.curveTo=function(t,e,r,n,i,a){return ht([E(U(t)),E(H(e)),E(U(r)),E(H(n)),E(U(i)),E(H(a)),"c"].join(" ")),this};y.__private__.line=y.line=function(t,e,r,n,i){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||!Qe(i))throw new Error("Invalid arguments passed to jsPDF.line");return S===x.COMPAT?this.lines([[r-t,n-e]],t,e,[1,1],i||"S"):this.lines([[r-t,n-e]],t,e,[1,1]).stroke()},y.__private__.lines=y.lines=function(t,e,r,n,i,a){var o,s,c,u,l,h,f,d,p,g,m,v;if("number"==typeof t&&(v=r,r=e,e=t,t=v),n=n||[1,1],a=a||!1,isNaN(e)||isNaN(r)||!Array.isArray(t)||!Array.isArray(n)||!Qe(i)||"boolean"!=typeof a)throw new Error("Invalid arguments passed to jsPDF.lines");for(sr(e,r),o=n[0],s=n[1],u=t.length,g=e,m=r,c=0;c<u;c++)2===(l=t[c]).length?(g=l[0]*o+g,m=l[1]*s+m,cr(g,m)):(h=l[0]*o+g,f=l[1]*s+m,d=l[2]*o+g,p=l[3]*s+m,g=l[4]*o+g,m=l[5]*s+m,ur(h,f,d,p,g,m));return a&&er(),nr(i),this},y.path=function(t){for(var e=0;e<t.length;e++){var r=t[e],n=r.c;switch(r.op){case"m":sr(n[0],n[1]);break;case"l":cr(n[0],n[1]);break;case"c":ur.apply(this,n);break;case"h":er()}}return this},y.__private__.rect=y.rect=function(t,e,r,n,i){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||!Qe(i))throw new Error("Invalid arguments passed to jsPDF.rect");return S===x.COMPAT&&(n=-n),ht([E(U(t)),E(H(e)),E(U(r)),E(U(n)),"re"].join(" ")),nr(i),this},y.__private__.triangle=y.triangle=function(t,e,r,n,i,a,o){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||isNaN(i)||isNaN(a)||!Qe(o))throw new Error("Invalid arguments passed to jsPDF.triangle");return this.lines([[r-t,n-e],[i-r,a-n],[t-i,e-a]],t,e,[1,1],o,!0),this},y.__private__.roundedRect=y.roundedRect=function(t,e,r,n,i,a,o){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||isNaN(i)||isNaN(a)||!Qe(o))throw new Error("Invalid arguments passed to jsPDF.roundedRect");var s=4/3*(Math.SQRT2-1);return i=Math.min(i,.5*r),a=Math.min(a,.5*n),this.lines([[r-2*i,0],[i*s,0,i,a-a*s,i,a],[0,n-2*a],[0,a*s,-i*s,a,-i,a],[2*i-r,0],[-i*s,0,-i,-a*s,-i,-a],[0,2*a-n],[0,-a*s,i*s,-a,i,-a]],t+i,e,[1,1],o,!0),this},y.__private__.ellipse=y.ellipse=function(t,e,r,n,i){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||!Qe(i))throw new Error("Invalid arguments passed to jsPDF.ellipse");var a=4/3*(Math.SQRT2-1)*r,o=4/3*(Math.SQRT2-1)*n;return sr(t+r,e),ur(t+r,e-o,t+a,e-n,t,e-n),ur(t-a,e-n,t-r,e-o,t-r,e),ur(t-r,e+o,t-a,e+n,t,e+n),ur(t+a,e+n,t+r,e+o,t+r,e),nr(i),this},y.__private__.circle=y.circle=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||!Qe(n))throw new Error("Invalid arguments passed to jsPDF.circle");return this.ellipse(t,e,r,r,n)},y.setFont=function(t,e,r){return r&&(e=j(e,r)),St=qe(t,e,{disableWarning:!1}),this};var lr=y.__private__.getFont=y.getFont=function(){return It[qe.apply(y,arguments)]};y.__private__.getFontList=y.getFontList=function(){var t,e,r={};for(t in Ct)if(Ct.hasOwnProperty(t))for(e in r[t]=[],Ct[t])Ct[t].hasOwnProperty(e)&&r[t].push(e);return r},y.addFont=function(t,e,r,n,i){var a=["StandardEncoding","MacRomanEncoding","Identity-H","WinAnsiEncoding"];return arguments[3]&&-1!==a.indexOf(arguments[3])?i=arguments[3]:arguments[3]&&-1==a.indexOf(arguments[3])&&(r=j(r,n)),i=i||"Identity-H",Pe.call(this,t,e,r,i)};var hr,fr=t.lineWidth||.200025,dr=y.__private__.getLineWidth=y.getLineWidth=function(){return fr},pr=y.__private__.setLineWidth=y.setLineWidth=function(t){return fr=t,ht(E(U(t))+" w"),this};y.__private__.setLineDash=M.API.setLineDash=M.API.setLineDashPattern=function(t,e){if(t=t||[],e=e||0,isNaN(e)||!Array.isArray(t))throw new Error("Invalid arguments passed to jsPDF.setLineDash");return t=t.map((function(t){return E(U(t))})).join(" "),e=E(U(e)),ht("["+t+"] "+e+" d"),this};var gr=y.__private__.getLineHeight=y.getLineHeight=function(){return gt*hr};y.__private__.getLineHeight=y.getLineHeight=function(){return gt*hr};var mr=y.__private__.setLineHeightFactor=y.setLineHeightFactor=function(t){return"number"==typeof(t=t||1.15)&&(hr=t),this},vr=y.__private__.getLineHeightFactor=y.getLineHeightFactor=function(){return hr};mr(t.lineHeight);var br=y.__private__.getHorizontalCoordinate=function(t){return U(t)},yr=y.__private__.getVerticalCoordinate=function(t){return S===x.ADVANCED?t:Rt[$].mediaBox.topRightY-Rt[$].mediaBox.bottomLeftY-U(t)},wr=y.__private__.getHorizontalCoordinateString=y.getHorizontalCoordinateString=function(t){return E(br(t))},Nr=y.__private__.getVerticalCoordinateString=y.getVerticalCoordinateString=function(t){return E(yr(t))},Lr=t.strokeColor||"0 G";y.__private__.getStrokeColor=y.getDrawColor=function(){return ee(Lr)},y.__private__.setStrokeColor=y.setDrawColor=function(t,e,r,n){return Lr=re({ch1:t,ch2:e,ch3:r,ch4:n,pdfColorType:"draw",precision:2}),ht(Lr),this};var Ar=t.fillColor||"0 g";y.__private__.getFillColor=y.getFillColor=function(){return ee(Ar)},y.__private__.setFillColor=y.setFillColor=function(t,e,r,n){return Ar=re({ch1:t,ch2:e,ch3:r,ch4:n,pdfColorType:"fill",precision:2}),ht(Ar),this};var xr=t.textColor||"0 g",Sr=y.__private__.getTextColor=y.getTextColor=function(){return ee(xr)};y.__private__.setTextColor=y.setTextColor=function(t,e,r,n){return xr=re({ch1:t,ch2:e,ch3:r,ch4:n,pdfColorType:"text",precision:3}),this};var _r=t.charSpace,Pr=y.__private__.getCharSpace=y.getCharSpace=function(){return parseFloat(_r||0)};y.__private__.setCharSpace=y.setCharSpace=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.setCharSpace");return _r=t,this};var kr=0;y.CapJoinStyles={0:0,butt:0,but:0,miter:0,1:1,round:1,rounded:1,circle:1,2:2,projecting:2,project:2,square:2,bevel:2},y.__private__.setLineCap=y.setLineCap=function(t){var e=y.CapJoinStyles[t];if(void 0===e)throw new Error("Line cap style of '"+t+"' is not recognized. See or extend .CapJoinStyles property for valid styles");return kr=e,ht(e+" J"),this};var Fr=0;y.__private__.setLineJoin=y.setLineJoin=function(t){var e=y.CapJoinStyles[t];if(void 0===e)throw new Error("Line join style of '"+t+"' is not recognized. See or extend .CapJoinStyles property for valid styles");return Fr=e,ht(e+" j"),this},y.__private__.setLineMiterLimit=y.__private__.setMiterLimit=y.setLineMiterLimit=y.setMiterLimit=function(t){if(t=t||0,isNaN(t))throw new Error("Invalid argument passed to jsPDF.setLineMiterLimit");return ht(E(U(t))+" M"),this},y.GState=C,y.setGState=function(t){(t="string"==typeof t?Mt[Et[t]]:Ir(null,t)).equals(qt)||(ht("/"+t.id+" gs"),qt=t)};var Ir=function(t,e){if(!t||!Et[t]){var r=!1;for(var n in Mt)if(Mt.hasOwnProperty(n)&&Mt[n].equals(e)){r=!0;break}if(r)e=Mt[n];else{var i="GS"+(Object.keys(Mt).length+1).toString(10);Mt[i]=e,e.id=i}return t&&(Et[t]=e.id),Tt.publish("addGState",e),e}};y.addGState=function(t,e){return Ir(t,e),this},y.saveGraphicsState=function(){return ht("q"),jt.push({key:St,size:gt,color:xr}),this},y.restoreGraphicsState=function(){ht("Q");var t=jt.pop();return St=t.key,gt=t.size,xr=t.color,qt=null,this},y.setCurrentTransformationMatrix=function(t){return ht(t.toString()+" cm"),this},y.comment=function(t){return ht("#"+t),this};var Cr=function(t,e){var r=t||0;Object.defineProperty(this,"x",{enumerable:!0,get:function(){return r},set:function(t){isNaN(t)||(r=parseFloat(t))}});var n=e||0;Object.defineProperty(this,"y",{enumerable:!0,get:function(){return n},set:function(t){isNaN(t)||(n=parseFloat(t))}});var i="pt";return Object.defineProperty(this,"type",{enumerable:!0,get:function(){return i},set:function(t){i=t.toString()}}),this},jr=function(t,e,r,n){Cr.call(this,t,e),this.type="rect";var i=r||0;Object.defineProperty(this,"w",{enumerable:!0,get:function(){return i},set:function(t){isNaN(t)||(i=parseFloat(t))}});var a=n||0;return Object.defineProperty(this,"h",{enumerable:!0,get:function(){return a},set:function(t){isNaN(t)||(a=parseFloat(t))}}),this},Or=function(){this.page=Dt,this.currentPage=$,this.pages=ot.slice(0),this.pagesContext=Rt.slice(0),this.x=Pt,this.y=kt,this.matrix=Ft,this.width=qr($),this.height=Rr($),this.outputDestination=ct,this.id="",this.objectNumber=-1};Or.prototype.restore=function(){Dt=this.page,$=this.currentPage,Rt=this.pagesContext,ot=this.pages,Pt=this.x,kt=this.y,Ft=this.matrix,Dr($,this.width),Tr($,this.height),ct=this.outputDestination};var Br=function(t,e,r,n,i){Wt.push(new Or),Dt=$=0,ot=[],Pt=t,kt=e,Ft=i,je([r,n])},Mr=function(t){if(Ht[t])Wt.pop().restore();else{var e=new Or,r="Xo"+(Object.keys(zt).length+1).toString(10);e.id=r,Ht[t]=r,zt[r]=e,Tt.publish("addFormObject",e),Wt.pop().restore()}};for(var Er in y.beginFormObject=function(t,e,r,n,i){return Br(t,e,r,n,i),this},y.endFormObject=function(t){return Mr(t),this},y.doFormObject=function(t,e){var r=zt[Ht[t]];return ht("q"),ht(e.toString()+" cm"),ht("/"+r.id+" Do"),ht("Q"),this},y.getFormObject=function(t){var e=zt[Ht[t]];return{x:e.x,y:e.y,width:e.width,height:e.height,matrix:e.matrix}},y.save=function(t,e){return t=t||"generated.pdf",(e=e||{}).returnPromise=e.returnPromise||!1,!1===e.returnPromise?(l(We(He()),t),"function"==typeof l.unload&&r.setTimeout&&setTimeout(l.unload,911),this):new Promise((function(e,n){try{var i=l(We(He()),t);"function"==typeof l.unload&&r.setTimeout&&setTimeout(l.unload,911),e(i)}catch(t){n(t.message)}}))},M.API)M.API.hasOwnProperty(Er)&&("events"===Er&&M.API.events.length?function(t,e){var r,n,i;for(i=e.length-1;-1!==i;i--)r=e[i][0],n=e[i][1],t.subscribe.apply(t,[r].concat("function"==typeof n?[n]:n))}(Tt,M.API.events):y[Er]=M.API[Er]);var qr=y.getPageWidth=function(t){return(Rt[t=t||$].mediaBox.topRightX-Rt[t].mediaBox.bottomLeftX)/_t},Dr=y.setPageWidth=function(t,e){Rt[t].mediaBox.topRightX=e*_t+Rt[t].mediaBox.bottomLeftX},Rr=y.getPageHeight=function(t){return(Rt[t=t||$].mediaBox.topRightY-Rt[t].mediaBox.bottomLeftY)/_t},Tr=y.setPageHeight=function(t,e){Rt[t].mediaBox.topRightY=e*_t+Rt[t].mediaBox.bottomLeftY};return y.internal={pdfEscape:Ce,getStyle:tr,getFont:lr,getFontSize:vt,getCharSpace:Pr,getTextColor:Sr,getLineHeight:gr,getLineHeightFactor:vr,getLineWidth:dr,write:ft,getHorizontalCoordinate:br,getVerticalCoordinate:yr,getCoordinateString:wr,getVerticalCoordinateString:Nr,collections:{},newObject:Xt,newAdditionalObject:$t,newObjectDeferred:Kt,newObjectDeferredBegin:Zt,getFilters:ne,putStream:ie,events:Tt,scaleFactor:_t,pageSize:{getWidth:function(){return qr($)},setWidth:function(t){Dr($,t)},getHeight:function(){return Rr($)},setHeight:function(t){Tr($,t)}},encryptionOptions:m,encryption:Ye,getEncryptor:Je,output:Ve,getNumberOfPages:Ee,pages:ot,out:ht,f2:R,f3:T,getPageInfo:Xe,getPageInfoByObjId:Ke,getCurrentPageInfo:Ze,getPDFVersion:N,Point:Cr,Rectangle:jr,Matrix:Vt,hasHotfix:Ge},Object.defineProperty(y.internal.pageSize,"width",{get:function(){return qr($)},set:function(t){Dr($,t)},enumerable:!0,configurable:!0}),Object.defineProperty(y.internal.pageSize,"height",{get:function(){return Rr($)},set:function(t){Tr($,t)},enumerable:!0,configurable:!0}),ke.call(y,pt),St="F1",Oe(s,a),Tt.publish("initialized"),y}k.prototype.lsbFirstWord=function(t){return String.fromCharCode(t>>0&255,t>>8&255,t>>16&255,t>>24&255)},k.prototype.toHexString=function(t){return t.split("").map((function(t){return("0"+(255&t.charCodeAt(0)).toString(16)).slice(-2)})).join("")},k.prototype.hexToBytes=function(t){for(var e=[],r=0;r<t.length;r+=2)e.push(String.fromCharCode(parseInt(t.substr(r,2),16)));return e.join("")},k.prototype.processOwnerPassword=function(t,e){return _(A(e).substr(0,5),t)},k.prototype.encryptor=function(t,e){var r=A(this.encryptionKey+String.fromCharCode(255&t,t>>8&255,t>>16&255,255&e,e>>8&255)).substr(0,10);return function(t){return _(r,t)}},C.prototype.equals=function(t){var r,n="id,objectNumber,equals";if(!t||e(t)!==e(this))return!1;var i=0;for(r in this)if(!(n.indexOf(r)>=0)){if(this.hasOwnProperty(r)&&!t.hasOwnProperty(r))return!1;if(this[r]!==t[r])return!1;i++}for(r in t)t.hasOwnProperty(r)&&n.indexOf(r)<0&&i--;return 0===i},M.API={events:[]},M.version="2.5.1";var E=M.API,q=1,D=function(t){return t.replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)")},R=function(t){return t.replace(/\\\\/g,"\\").replace(/\\\(/g,"(").replace(/\\\)/g,")")},T=function(t){return t.toFixed(2)},U=function(t){return t.toFixed(5)};E.__acroform__={};var z=function(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t},H=function(t){return t*q},W=function(t){var e=new ct,r=Lt.internal.getHeight(t)||0,n=Lt.internal.getWidth(t)||0;return e.BBox=[0,0,Number(T(n)),Number(T(r))],e},V=E.__acroform__.setBit=function(t,e){if(t=t||0,e=e||0,isNaN(t)||isNaN(e))throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.setBit");return t|=1<<e},G=E.__acroform__.clearBit=function(t,e){if(t=t||0,e=e||0,isNaN(t)||isNaN(e))throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.clearBit");return t&=~(1<<e)},Y=E.__acroform__.getBit=function(t,e){if(isNaN(t)||isNaN(e))throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.getBit");return 0==(t&1<<e)?0:1},J=E.__acroform__.getBitForPdf=function(t,e){if(isNaN(t)||isNaN(e))throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf");return Y(t,e-1)},X=E.__acroform__.setBitForPdf=function(t,e){if(isNaN(t)||isNaN(e))throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf");return V(t,e-1)},K=E.__acroform__.clearBitForPdf=function(t,e){if(isNaN(t)||isNaN(e))throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf");return G(t,e-1)},Z=E.__acroform__.calculateCoordinates=function(t,e){var r=e.internal.getHorizontalCoordinate,n=e.internal.getVerticalCoordinate,i=t[0],a=t[1],o=t[2],s=t[3],c={};return c.lowerLeft_X=r(i)||0,c.lowerLeft_Y=n(a+s)||0,c.upperRight_X=r(i+o)||0,c.upperRight_Y=n(a)||0,[Number(T(c.lowerLeft_X)),Number(T(c.lowerLeft_Y)),Number(T(c.upperRight_X)),Number(T(c.upperRight_Y))]},$=function(t){if(t.appearanceStreamContent)return t.appearanceStreamContent;if(t.V||t.DV){var e=[],r=t._V||t.DV,n=Q(t,r),i=t.scope.internal.getFont(t.fontName,t.fontStyle).id;e.push("/Tx BMC"),e.push("q"),e.push("BT"),e.push(t.scope.__private__.encodeColorString(t.color)),e.push("/"+i+" "+T(n.fontSize)+" Tf"),e.push("1 0 0 1 0 0 Tm"),e.push(n.text),e.push("ET"),e.push("Q"),e.push("EMC");var a=W(t);return a.scope=t.scope,a.stream=e.join("\n"),a}},Q=function(t,e){var r=0===t.fontSize?t.maxFontSize:t.fontSize,n={text:"",fontSize:""},i=(e=")"==(e="("==e.substr(0,1)?e.substr(1):e).substr(e.length-1)?e.substr(0,e.length-1):e).split(" ");i=t.multiline?i.map((function(t){return t.split("\n")})):i.map((function(t){return[t]}));var a=r,o=Lt.internal.getHeight(t)||0;o=o<0?-o:o;var s=Lt.internal.getWidth(t)||0;s=s<0?-s:s;var c=function(e,r,n){if(e+1<i.length){var a=r+" "+i[e+1][0];return tt(a,t,n).width<=s-4}return!1};a++;t:for(;a>0;){e="",a--;var u,l,h=tt("3",t,a).height,f=t.multiline?o-a:(o-h)/2,d=f+=2,p=0,g=0,m=0;if(a<=0){e="(...) Tj\n",e+="% Width of Text: "+tt(e,t,a=12).width+", FieldWidth:"+s+"\n";break}for(var v="",b=0,y=0;y<i.length;y++)if(i.hasOwnProperty(y)){var w=!1;if(1!==i[y].length&&m!==i[y].length-1){if((h+2)*(b+2)+2>o)continue t;v+=i[y][m],w=!0,g=y,y--}else{v=" "==(v+=i[y][m]+" ").substr(v.length-1)?v.substr(0,v.length-1):v;var N=parseInt(y),L=c(N,v,a),A=y>=i.length-1;if(L&&!A){v+=" ",m=0;continue}if(L||A){if(A)g=N;else if(t.multiline&&(h+2)*(b+2)+2>o)continue t}else{if(!t.multiline)continue t;if((h+2)*(b+2)+2>o)continue t;g=N}}for(var x="",S=p;S<=g;S++){var _=i[S];if(t.multiline){if(S===g){x+=_[m]+" ",m=(m+1)%_.length;continue}if(S===p){x+=_[_.length-1]+" ";continue}}x+=_[0]+" "}switch(x=" "==x.substr(x.length-1)?x.substr(0,x.length-1):x,l=tt(x,t,a).width,t.textAlign){case"right":u=s-l-2;break;case"center":u=(s-l)/2;break;case"left":default:u=2}e+=T(u)+" "+T(d)+" Td\n",e+="("+D(x)+") Tj\n",e+=-T(u)+" 0 Td\n",d=-(a+2),l=0,p=w?g:g+1,b++,v=""}else;break}return n.text=e,n.fontSize=a,n},tt=function(t,e,r){var n=e.scope.internal.getFont(e.fontName,e.fontStyle),i=e.scope.getStringUnitWidth(t,{font:n,fontSize:parseFloat(r),charSpace:0})*parseFloat(r);return{height:e.scope.getStringUnitWidth("3",{font:n,fontSize:parseFloat(r),charSpace:0})*parseFloat(r)*1.5,width:i}},et={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1},rt=function(t,e){var r={type:"reference",object:t};void 0===e.internal.getPageInfo(t.page).pageContext.annotations.find((function(t){return t.type===r.type&&t.object===r.object}))&&e.internal.getPageInfo(t.page).pageContext.annotations.push(r)},nt=function(t,r){for(var n in t)if(t.hasOwnProperty(n)){var i=n,a=t[n];r.internal.newObjectDeferredBegin(a.objId,!0),"object"===e(a)&&"function"==typeof a.putStream&&a.putStream(),delete t[i]}},it=function(t,r){if(r.scope=t,void 0!==t.internal&&(void 0===t.internal.acroformPlugin||!1===t.internal.acroformPlugin.isInitialized)){if(lt.FieldNum=0,t.internal.acroformPlugin=JSON.parse(JSON.stringify(et)),t.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error("Exception while creating AcroformDictionary");q=t.internal.scaleFactor,t.internal.acroformPlugin.acroFormDictionaryRoot=new ut,t.internal.acroformPlugin.acroFormDictionaryRoot.scope=t,t.internal.acroformPlugin.acroFormDictionaryRoot._eventID=t.internal.events.subscribe("postPutResources",(function(){!function(t){t.internal.events.unsubscribe(t.internal.acroformPlugin.acroFormDictionaryRoot._eventID),delete t.internal.acroformPlugin.acroFormDictionaryRoot._eventID,t.internal.acroformPlugin.printedOut=!0}(t)})),t.internal.events.subscribe("buildDocument",(function(){!function(t){t.internal.acroformPlugin.acroFormDictionaryRoot.objId=void 0;var e=t.internal.acroformPlugin.acroFormDictionaryRoot.Fields;for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];n.objId=void 0,n.hasAnnotation&&rt(n,t)}}(t)})),t.internal.events.subscribe("putCatalog",(function(){!function(t){if(void 0===t.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error("putCatalogCallback: Root missing.");t.internal.write("/AcroForm "+t.internal.acroformPlugin.acroFormDictionaryRoot.objId+" 0 R")}(t)})),t.internal.events.subscribe("postPutPages",(function(r){!function(t,r){var n=!t;for(var i in t||(r.internal.newObjectDeferredBegin(r.internal.acroformPlugin.acroFormDictionaryRoot.objId,!0),r.internal.acroformPlugin.acroFormDictionaryRoot.putStream()),t=t||r.internal.acroformPlugin.acroFormDictionaryRoot.Kids)if(t.hasOwnProperty(i)){var a=t[i],o=[],s=a.Rect;if(a.Rect&&(a.Rect=Z(a.Rect,r)),r.internal.newObjectDeferredBegin(a.objId,!0),a.DA=Lt.createDefaultAppearanceStream(a),"object"===e(a)&&"function"==typeof a.getKeyValueListForStream&&(o=a.getKeyValueListForStream()),a.Rect=s,a.hasAppearanceStream&&!a.appearanceStreamContent){var c=$(a);o.push({key:"AP",value:"<</N "+c+">>"}),r.internal.acroformPlugin.xForms.push(c)}if(a.appearanceStreamContent){var u="";for(var l in a.appearanceStreamContent)if(a.appearanceStreamContent.hasOwnProperty(l)){var h=a.appearanceStreamContent[l];if(u+="/"+l+" ",u+="<<",Object.keys(h).length>=1||Array.isArray(h)){for(var i in h)if(h.hasOwnProperty(i)){var f=h[i];"function"==typeof f&&(f=f.call(r,a)),u+="/"+i+" "+f+" ",r.internal.acroformPlugin.xForms.indexOf(f)>=0||r.internal.acroformPlugin.xForms.push(f)}}else"function"==typeof(f=h)&&(f=f.call(r,a)),u+="/"+i+" "+f,r.internal.acroformPlugin.xForms.indexOf(f)>=0||r.internal.acroformPlugin.xForms.push(f);u+=">>"}o.push({key:"AP",value:"<<\n"+u+">>"})}r.internal.putStream({additionalKeyValues:o,objectId:a.objId}),r.internal.out("endobj")}n&&nt(r.internal.acroformPlugin.xForms,r)}(r,t)})),t.internal.acroformPlugin.isInitialized=!0}},at=E.__acroform__.arrayToPdfArray=function(t,r,n){var i=function(t){return t};if(Array.isArray(t)){for(var a="[",o=0;o<t.length;o++)switch(0!==o&&(a+=" "),e(t[o])){case"boolean":case"number":case"object":a+=t[o].toString();break;case"string":"/"!==t[o].substr(0,1)?(void 0!==r&&n&&(i=n.internal.getEncryptor(r)),a+="("+D(i(t[o].toString()))+")"):a+=t[o].toString()}return a+="]"}throw new Error("Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray")};var ot=function(t,e,r){var n=function(t){return t};return void 0!==e&&r&&(n=r.internal.getEncryptor(e)),(t=t||"").toString(),t="("+D(n(t))+")"},st=function(){this._objId=void 0,this._scope=void 0,Object.defineProperty(this,"objId",{get:function(){if(void 0===this._objId){if(void 0===this.scope)return;this._objId=this.scope.internal.newObjectDeferred()}return this._objId},set:function(t){this._objId=t}}),Object.defineProperty(this,"scope",{value:this._scope,writable:!0})};st.prototype.toString=function(){return this.objId+" 0 R"},st.prototype.putStream=function(){var t=this.getKeyValueListForStream();this.scope.internal.putStream({data:this.stream,additionalKeyValues:t,objectId:this.objId}),this.scope.internal.out("endobj")},st.prototype.getKeyValueListForStream=function(){var t=[],e=Object.getOwnPropertyNames(this).filter((function(t){return"content"!=t&&"appearanceStreamContent"!=t&&"scope"!=t&&"objId"!=t&&"_"!=t.substring(0,1)}));for(var r in e)if(!1===Object.getOwnPropertyDescriptor(this,e[r]).configurable){var n=e[r],i=this[n];i&&(Array.isArray(i)?t.push({key:n,value:at(i,this.objId,this.scope)}):i instanceof st?(i.scope=this.scope,t.push({key:n,value:i.objId+" 0 R"})):"function"!=typeof i&&t.push({key:n,value:i}))}return t};var ct=function(){st.call(this),Object.defineProperty(this,"Type",{value:"/XObject",configurable:!1,writable:!0}),Object.defineProperty(this,"Subtype",{value:"/Form",configurable:!1,writable:!0}),Object.defineProperty(this,"FormType",{value:1,configurable:!1,writable:!0});var t,e=[];Object.defineProperty(this,"BBox",{configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,"Resources",{value:"2 0 R",configurable:!1,writable:!0}),Object.defineProperty(this,"stream",{enumerable:!1,configurable:!0,set:function(e){t=e.trim()},get:function(){return t||null}})};z(ct,st);var ut=function(){st.call(this);var t,e=[];Object.defineProperty(this,"Kids",{enumerable:!1,configurable:!0,get:function(){return e.length>0?e:void 0}}),Object.defineProperty(this,"Fields",{enumerable:!1,configurable:!1,get:function(){return e}}),Object.defineProperty(this,"DA",{enumerable:!1,configurable:!1,get:function(){if(t){var e=function(t){return t};return this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),"("+D(e(t))+")"}},set:function(e){t=e}})};z(ut,st);var lt=function t(){st.call(this);var e=4;Object.defineProperty(this,"F",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){if(isNaN(t))throw new Error('Invalid value "'+t+'" for attribute F supplied.');e=t}}),Object.defineProperty(this,"showWhenPrinted",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(e,3))},set:function(t){!0===Boolean(t)?this.F=X(e,3):this.F=K(e,3)}});var r=0;Object.defineProperty(this,"Ff",{enumerable:!1,configurable:!1,get:function(){return r},set:function(t){if(isNaN(t))throw new Error('Invalid value "'+t+'" for attribute Ff supplied.');r=t}});var n=[];Object.defineProperty(this,"Rect",{enumerable:!1,configurable:!1,get:function(){if(0!==n.length)return n},set:function(t){n=void 0!==t?t:[]}}),Object.defineProperty(this,"x",{enumerable:!0,configurable:!0,get:function(){return!n||isNaN(n[0])?0:n[0]},set:function(t){n[0]=t}}),Object.defineProperty(this,"y",{enumerable:!0,configurable:!0,get:function(){return!n||isNaN(n[1])?0:n[1]},set:function(t){n[1]=t}}),Object.defineProperty(this,"width",{enumerable:!0,configurable:!0,get:function(){return!n||isNaN(n[2])?0:n[2]},set:function(t){n[2]=t}}),Object.defineProperty(this,"height",{enumerable:!0,configurable:!0,get:function(){return!n||isNaN(n[3])?0:n[3]},set:function(t){n[3]=t}});var i="";Object.defineProperty(this,"FT",{enumerable:!0,configurable:!1,get:function(){return i},set:function(t){switch(t){case"/Btn":case"/Tx":case"/Ch":case"/Sig":i=t;break;default:throw new Error('Invalid value "'+t+'" for attribute FT supplied.')}}});var a=null;Object.defineProperty(this,"T",{enumerable:!0,configurable:!1,get:function(){if(!a||a.length<1){if(this instanceof bt)return;a="FieldObject"+t.FieldNum++}var e=function(t){return t};return this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),"("+D(e(a))+")"},set:function(t){a=t.toString()}}),Object.defineProperty(this,"fieldName",{configurable:!0,enumerable:!0,get:function(){return a},set:function(t){a=t}});var o="helvetica";Object.defineProperty(this,"fontName",{enumerable:!0,configurable:!0,get:function(){return o},set:function(t){o=t}});var s="normal";Object.defineProperty(this,"fontStyle",{enumerable:!0,configurable:!0,get:function(){return s},set:function(t){s=t}});var c=0;Object.defineProperty(this,"fontSize",{enumerable:!0,configurable:!0,get:function(){return c},set:function(t){c=t}});var u=void 0;Object.defineProperty(this,"maxFontSize",{enumerable:!0,configurable:!0,get:function(){return void 0===u?50/q:u},set:function(t){u=t}});var l="black";Object.defineProperty(this,"color",{enumerable:!0,configurable:!0,get:function(){return l},set:function(t){l=t}});var h="/F1 0 Tf 0 g";Object.defineProperty(this,"DA",{enumerable:!0,configurable:!1,get:function(){if(!(!h||this instanceof bt||this instanceof wt))return ot(h,this.objId,this.scope)},set:function(t){t=t.toString(),h=t}});var f=null;Object.defineProperty(this,"DV",{enumerable:!1,configurable:!1,get:function(){if(f)return this instanceof gt==!1?ot(f,this.objId,this.scope):f},set:function(t){t=t.toString(),f=this instanceof gt==!1?"("===t.substr(0,1)?R(t.substr(1,t.length-2)):R(t):t}}),Object.defineProperty(this,"defaultValue",{enumerable:!0,configurable:!0,get:function(){return this instanceof gt==!0?R(f.substr(1,f.length-1)):f},set:function(t){t=t.toString(),f=this instanceof gt==!0?"/"+t:t}});var d=null;Object.defineProperty(this,"_V",{enumerable:!1,configurable:!1,get:function(){if(d)return d},set:function(t){this.V=t}}),Object.defineProperty(this,"V",{enumerable:!1,configurable:!1,get:function(){if(d)return this instanceof gt==!1?ot(d,this.objId,this.scope):d},set:function(t){t=t.toString(),d=this instanceof gt==!1?"("===t.substr(0,1)?R(t.substr(1,t.length-2)):R(t):t}}),Object.defineProperty(this,"value",{enumerable:!0,configurable:!0,get:function(){return this instanceof gt==!0?R(d.substr(1,d.length-1)):d},set:function(t){t=t.toString(),d=this instanceof gt==!0?"/"+t:t}}),Object.defineProperty(this,"hasAnnotation",{enumerable:!0,configurable:!0,get:function(){return this.Rect}}),Object.defineProperty(this,"Type",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?"/Annot":null}}),Object.defineProperty(this,"Subtype",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?"/Widget":null}});var p,g=!1;Object.defineProperty(this,"hasAppearanceStream",{enumerable:!0,configurable:!0,get:function(){return g},set:function(t){t=Boolean(t),g=t}}),Object.defineProperty(this,"page",{enumerable:!0,configurable:!0,get:function(){if(p)return p},set:function(t){p=t}}),Object.defineProperty(this,"readOnly",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,1))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,1):this.Ff=K(this.Ff,1)}}),Object.defineProperty(this,"required",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,2))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,2):this.Ff=K(this.Ff,2)}}),Object.defineProperty(this,"noExport",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,3))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,3):this.Ff=K(this.Ff,3)}});var m=null;Object.defineProperty(this,"Q",{enumerable:!0,configurable:!1,get:function(){if(null!==m)return m},set:function(t){if(-1===[0,1,2].indexOf(t))throw new Error('Invalid value "'+t+'" for attribute Q supplied.');m=t}}),Object.defineProperty(this,"textAlign",{get:function(){var t;switch(m){case 0:default:t="left";break;case 1:t="center";break;case 2:t="right"}return t},configurable:!0,enumerable:!0,set:function(t){switch(t){case"right":case 2:m=2;break;case"center":case 1:m=1;break;case"left":case 0:default:m=0}}})};z(lt,st);var ht=function(){lt.call(this),this.FT="/Ch",this.V="()",this.fontName="zapfdingbats";var t=0;Object.defineProperty(this,"TI",{enumerable:!0,configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,"topIndex",{enumerable:!0,configurable:!0,get:function(){return t},set:function(e){t=e}});var e=[];Object.defineProperty(this,"Opt",{enumerable:!0,configurable:!1,get:function(){return at(e,this.objId,this.scope)},set:function(t){var r,n;n=[],"string"==typeof(r=t)&&(n=function(t,e,r){r||(r=1);for(var n,i=[];n=e.exec(t);)i.push(n[r]);return i}(r,/\((.*?)\)/g)),e=n}}),this.getOptions=function(){return e},this.setOptions=function(t){e=t,this.sort&&e.sort()},this.addOption=function(t){t=(t=t||"").toString(),e.push(t),this.sort&&e.sort()},this.removeOption=function(t,r){for(r=r||!1,t=(t=t||"").toString();-1!==e.indexOf(t)&&(e.splice(e.indexOf(t),1),!1!==r););},Object.defineProperty(this,"combo",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,18))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,18):this.Ff=K(this.Ff,18)}}),Object.defineProperty(this,"edit",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,19))},set:function(t){!0===this.combo&&(!0===Boolean(t)?this.Ff=X(this.Ff,19):this.Ff=K(this.Ff,19))}}),Object.defineProperty(this,"sort",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,20))},set:function(t){!0===Boolean(t)?(this.Ff=X(this.Ff,20),e.sort()):this.Ff=K(this.Ff,20)}}),Object.defineProperty(this,"multiSelect",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,22))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,22):this.Ff=K(this.Ff,22)}}),Object.defineProperty(this,"doNotSpellCheck",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,23))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,23):this.Ff=K(this.Ff,23)}}),Object.defineProperty(this,"commitOnSelChange",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,27))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,27):this.Ff=K(this.Ff,27)}}),this.hasAppearanceStream=!1};z(ht,lt);var ft=function(){ht.call(this),this.fontName="helvetica",this.combo=!1};z(ft,ht);var dt=function(){ft.call(this),this.combo=!0};z(dt,ft);var pt=function(){dt.call(this),this.edit=!0};z(pt,dt);var gt=function(){lt.call(this),this.FT="/Btn",Object.defineProperty(this,"noToggleToOff",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,15))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,15):this.Ff=K(this.Ff,15)}}),Object.defineProperty(this,"radio",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,16))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,16):this.Ff=K(this.Ff,16)}}),Object.defineProperty(this,"pushButton",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,17))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,17):this.Ff=K(this.Ff,17)}}),Object.defineProperty(this,"radioIsUnison",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,26))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,26):this.Ff=K(this.Ff,26)}});var t,r={};Object.defineProperty(this,"MK",{enumerable:!1,configurable:!1,get:function(){var t=function(t){return t};if(this.scope&&(t=this.scope.internal.getEncryptor(this.objId)),0!==Object.keys(r).length){var e,n=[];for(e in n.push("<<"),r)n.push("/"+e+" ("+D(t(r[e]))+")");return n.push(">>"),n.join("\n")}},set:function(t){"object"===e(t)&&(r=t)}}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,get:function(){return r.CA||""},set:function(t){"string"==typeof t&&(r.CA=t)}}),Object.defineProperty(this,"AS",{enumerable:!1,configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,"appearanceState",{enumerable:!0,configurable:!0,get:function(){return t.substr(1,t.length-1)},set:function(e){t="/"+e}})};z(gt,lt);var mt=function(){gt.call(this),this.pushButton=!0};z(mt,gt);var vt=function(){gt.call(this),this.radio=!0,this.pushButton=!1;var t=[];Object.defineProperty(this,"Kids",{enumerable:!0,configurable:!1,get:function(){return t},set:function(e){t=void 0!==e?e:[]}})};z(vt,gt);var bt=function(){var t,r;lt.call(this),Object.defineProperty(this,"Parent",{enumerable:!1,configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,"optionName",{enumerable:!1,configurable:!0,get:function(){return r},set:function(t){r=t}});var n,i={};Object.defineProperty(this,"MK",{enumerable:!1,configurable:!1,get:function(){var t=function(t){return t};this.scope&&(t=this.scope.internal.getEncryptor(this.objId));var e,r=[];for(e in r.push("<<"),i)r.push("/"+e+" ("+D(t(i[e]))+")");return r.push(">>"),r.join("\n")},set:function(t){"object"===e(t)&&(i=t)}}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,get:function(){return i.CA||""},set:function(t){"string"==typeof t&&(i.CA=t)}}),Object.defineProperty(this,"AS",{enumerable:!1,configurable:!1,get:function(){return n},set:function(t){n=t}}),Object.defineProperty(this,"appearanceState",{enumerable:!0,configurable:!0,get:function(){return n.substr(1,n.length-1)},set:function(t){n="/"+t}}),this.caption="l",this.appearanceState="Off",this._AppearanceType=Lt.RadioButton.Circle,this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(this.optionName)};z(bt,lt),vt.prototype.setAppearance=function(t){if(!("createAppearanceStream"in t)||!("getCA"in t))throw new Error("Couldn't assign Appearance to RadioButton. Appearance was Invalid!");for(var e in this.Kids)if(this.Kids.hasOwnProperty(e)){var r=this.Kids[e];r.appearanceStreamContent=t.createAppearanceStream(r.optionName),r.caption=t.getCA()}},vt.prototype.createOption=function(t){var e=new bt;return e.Parent=this,e.optionName=t,this.Kids.push(e),At.call(this.scope,e),e};var yt=function(){gt.call(this),this.fontName="zapfdingbats",this.caption="3",this.appearanceState="On",this.value="On",this.textAlign="center",this.appearanceStreamContent=Lt.CheckBox.createAppearanceStream()};z(yt,gt);var wt=function(){lt.call(this),this.FT="/Tx",Object.defineProperty(this,"multiline",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,13))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,13):this.Ff=K(this.Ff,13)}}),Object.defineProperty(this,"fileSelect",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,21))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,21):this.Ff=K(this.Ff,21)}}),Object.defineProperty(this,"doNotSpellCheck",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,23))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,23):this.Ff=K(this.Ff,23)}}),Object.defineProperty(this,"doNotScroll",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,24))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,24):this.Ff=K(this.Ff,24)}}),Object.defineProperty(this,"comb",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,25))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,25):this.Ff=K(this.Ff,25)}}),Object.defineProperty(this,"richText",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,26))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,26):this.Ff=K(this.Ff,26)}});var t=null;Object.defineProperty(this,"MaxLen",{enumerable:!0,configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,"maxLength",{enumerable:!0,configurable:!0,get:function(){return t},set:function(e){Number.isInteger(e)&&(t=e)}}),Object.defineProperty(this,"hasAppearanceStream",{enumerable:!0,configurable:!0,get:function(){return this.V||this.DV}})};z(wt,lt);var Nt=function(){wt.call(this),Object.defineProperty(this,"password",{enumerable:!0,configurable:!0,get:function(){return Boolean(J(this.Ff,14))},set:function(t){!0===Boolean(t)?this.Ff=X(this.Ff,14):this.Ff=K(this.Ff,14)}}),this.password=!0};z(Nt,wt);var Lt={CheckBox:{createAppearanceStream:function(){return{N:{On:Lt.CheckBox.YesNormal},D:{On:Lt.CheckBox.YesPushDown,Off:Lt.CheckBox.OffPushDown}}},YesPushDown:function(t){var e=W(t);e.scope=t.scope;var r=[],n=t.scope.internal.getFont(t.fontName,t.fontStyle).id,i=t.scope.__private__.encodeColorString(t.color),a=Q(t,t.caption);return r.push("0.749023 g"),r.push("0 0 "+T(Lt.internal.getWidth(t))+" "+T(Lt.internal.getHeight(t))+" re"),r.push("f"),r.push("BMC"),r.push("q"),r.push("0 0 1 rg"),r.push("/"+n+" "+T(a.fontSize)+" Tf "+i),r.push("BT"),r.push(a.text),r.push("ET"),r.push("Q"),r.push("EMC"),e.stream=r.join("\n"),e},YesNormal:function(t){var e=W(t);e.scope=t.scope;var r=t.scope.internal.getFont(t.fontName,t.fontStyle).id,n=t.scope.__private__.encodeColorString(t.color),i=[],a=Lt.internal.getHeight(t),o=Lt.internal.getWidth(t),s=Q(t,t.caption);return i.push("1 g"),i.push("0 0 "+T(o)+" "+T(a)+" re"),i.push("f"),i.push("q"),i.push("0 0 1 rg"),i.push("0 0 "+T(o-1)+" "+T(a-1)+" re"),i.push("W"),i.push("n"),i.push("0 g"),i.push("BT"),i.push("/"+r+" "+T(s.fontSize)+" Tf "+n),i.push(s.text),i.push("ET"),i.push("Q"),e.stream=i.join("\n"),e},OffPushDown:function(t){var e=W(t);e.scope=t.scope;var r=[];return r.push("0.749023 g"),r.push("0 0 "+T(Lt.internal.getWidth(t))+" "+T(Lt.internal.getHeight(t))+" re"),r.push("f"),e.stream=r.join("\n"),e}},RadioButton:{Circle:{createAppearanceStream:function(t){var e={D:{Off:Lt.RadioButton.Circle.OffPushDown},N:{}};return e.N[t]=Lt.RadioButton.Circle.YesNormal,e.D[t]=Lt.RadioButton.Circle.YesPushDown,e},getCA:function(){return"l"},YesNormal:function(t){var e=W(t);e.scope=t.scope;var r=[],n=Lt.internal.getWidth(t)<=Lt.internal.getHeight(t)?Lt.internal.getWidth(t)/4:Lt.internal.getHeight(t)/4;n=Number((.9*n).toFixed(5));var i=Lt.internal.Bezier_C,a=Number((n*i).toFixed(5));return r.push("q"),r.push("1 0 0 1 "+U(Lt.internal.getWidth(t)/2)+" "+U(Lt.internal.getHeight(t)/2)+" cm"),r.push(n+" 0 m"),r.push(n+" "+a+" "+a+" "+n+" 0 "+n+" c"),r.push("-"+a+" "+n+" -"+n+" "+a+" -"+n+" 0 c"),r.push("-"+n+" -"+a+" -"+a+" -"+n+" 0 -"+n+" c"),r.push(a+" -"+n+" "+n+" -"+a+" "+n+" 0 c"),r.push("f"),r.push("Q"),e.stream=r.join("\n"),e},YesPushDown:function(t){var e=W(t);e.scope=t.scope;var r=[],n=Lt.internal.getWidth(t)<=Lt.internal.getHeight(t)?Lt.internal.getWidth(t)/4:Lt.internal.getHeight(t)/4;n=Number((.9*n).toFixed(5));var i=Number((2*n).toFixed(5)),a=Number((i*Lt.internal.Bezier_C).toFixed(5)),o=Number((n*Lt.internal.Bezier_C).toFixed(5));return r.push("0.749023 g"),r.push("q"),r.push("1 0 0 1 "+U(Lt.internal.getWidth(t)/2)+" "+U(Lt.internal.getHeight(t)/2)+" cm"),r.push(i+" 0 m"),r.push(i+" "+a+" "+a+" "+i+" 0 "+i+" c"),r.push("-"+a+" "+i+" -"+i+" "+a+" -"+i+" 0 c"),r.push("-"+i+" -"+a+" -"+a+" -"+i+" 0 -"+i+" c"),r.push(a+" -"+i+" "+i+" -"+a+" "+i+" 0 c"),r.push("f"),r.push("Q"),r.push("0 g"),r.push("q"),r.push("1 0 0 1 "+U(Lt.internal.getWidth(t)/2)+" "+U(Lt.internal.getHeight(t)/2)+" cm"),r.push(n+" 0 m"),r.push(n+" "+o+" "+o+" "+n+" 0 "+n+" c"),r.push("-"+o+" "+n+" -"+n+" "+o+" -"+n+" 0 c"),r.push("-"+n+" -"+o+" -"+o+" -"+n+" 0 -"+n+" c"),r.push(o+" -"+n+" "+n+" -"+o+" "+n+" 0 c"),r.push("f"),r.push("Q"),e.stream=r.join("\n"),e},OffPushDown:function(t){var e=W(t);e.scope=t.scope;var r=[],n=Lt.internal.getWidth(t)<=Lt.internal.getHeight(t)?Lt.internal.getWidth(t)/4:Lt.internal.getHeight(t)/4;n=Number((.9*n).toFixed(5));var i=Number((2*n).toFixed(5)),a=Number((i*Lt.internal.Bezier_C).toFixed(5));return r.push("0.749023 g"),r.push("q"),r.push("1 0 0 1 "+U(Lt.internal.getWidth(t)/2)+" "+U(Lt.internal.getHeight(t)/2)+" cm"),r.push(i+" 0 m"),r.push(i+" "+a+" "+a+" "+i+" 0 "+i+" c"),r.push("-"+a+" "+i+" -"+i+" "+a+" -"+i+" 0 c"),r.push("-"+i+" -"+a+" -"+a+" -"+i+" 0 -"+i+" c"),r.push(a+" -"+i+" "+i+" -"+a+" "+i+" 0 c"),r.push("f"),r.push("Q"),e.stream=r.join("\n"),e}},Cross:{createAppearanceStream:function(t){var e={D:{Off:Lt.RadioButton.Cross.OffPushDown},N:{}};return e.N[t]=Lt.RadioButton.Cross.YesNormal,e.D[t]=Lt.RadioButton.Cross.YesPushDown,e},getCA:function(){return"8"},YesNormal:function(t){var e=W(t);e.scope=t.scope;var r=[],n=Lt.internal.calculateCross(t);return r.push("q"),r.push("1 1 "+T(Lt.internal.getWidth(t)-2)+" "+T(Lt.internal.getHeight(t)-2)+" re"),r.push("W"),r.push("n"),r.push(T(n.x1.x)+" "+T(n.x1.y)+" m"),r.push(T(n.x2.x)+" "+T(n.x2.y)+" l"),r.push(T(n.x4.x)+" "+T(n.x4.y)+" m"),r.push(T(n.x3.x)+" "+T(n.x3.y)+" l"),r.push("s"),r.push("Q"),e.stream=r.join("\n"),e},YesPushDown:function(t){var e=W(t);e.scope=t.scope;var r=Lt.internal.calculateCross(t),n=[];return n.push("0.749023 g"),n.push("0 0 "+T(Lt.internal.getWidth(t))+" "+T(Lt.internal.getHeight(t))+" re"),n.push("f"),n.push("q"),n.push("1 1 "+T(Lt.internal.getWidth(t)-2)+" "+T(Lt.internal.getHeight(t)-2)+" re"),n.push("W"),n.push("n"),n.push(T(r.x1.x)+" "+T(r.x1.y)+" m"),n.push(T(r.x2.x)+" "+T(r.x2.y)+" l"),n.push(T(r.x4.x)+" "+T(r.x4.y)+" m"),n.push(T(r.x3.x)+" "+T(r.x3.y)+" l"),n.push("s"),n.push("Q"),e.stream=n.join("\n"),e},OffPushDown:function(t){var e=W(t);e.scope=t.scope;var r=[];return r.push("0.749023 g"),r.push("0 0 "+T(Lt.internal.getWidth(t))+" "+T(Lt.internal.getHeight(t))+" re"),r.push("f"),e.stream=r.join("\n"),e}}},createDefaultAppearanceStream:function(t){var e=t.scope.internal.getFont(t.fontName,t.fontStyle).id,r=t.scope.__private__.encodeColorString(t.color);return"/"+e+" "+t.fontSize+" Tf "+r}};Lt.internal={Bezier_C:.551915024494,calculateCross:function(t){var e=Lt.internal.getWidth(t),r=Lt.internal.getHeight(t),n=Math.min(e,r);return{x1:{x:(e-n)/2,y:(r-n)/2+n},x2:{x:(e-n)/2+n,y:(r-n)/2},x3:{x:(e-n)/2,y:(r-n)/2},x4:{x:(e-n)/2+n,y:(r-n)/2+n}}}},Lt.internal.getWidth=function(t){var r=0;return"object"===e(t)&&(r=H(t.Rect[2])),r},Lt.internal.getHeight=function(t){var r=0;return"object"===e(t)&&(r=H(t.Rect[3])),r};var At=E.addField=function(t){if(it(this,t),!(t instanceof lt))throw new Error("Invalid argument passed to jsPDF.addField.");var e;return(e=t).scope.internal.acroformPlugin.printedOut&&(e.scope.internal.acroformPlugin.printedOut=!1,e.scope.internal.acroformPlugin.acroFormDictionaryRoot=null),e.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(e),t.page=t.scope.internal.getCurrentPageInfo().pageNumber,this};E.AcroFormChoiceField=ht,E.AcroFormListBox=ft,E.AcroFormComboBox=dt,E.AcroFormEditBox=pt,E.AcroFormButton=gt,E.AcroFormPushButton=mt,E.AcroFormRadioButton=vt,E.AcroFormCheckBox=yt,E.AcroFormTextField=wt,E.AcroFormPasswordField=Nt,E.AcroFormAppearance=Lt,E.AcroForm={ChoiceField:ht,ListBox:ft,ComboBox:dt,EditBox:pt,Button:gt,PushButton:mt,RadioButton:vt,CheckBox:yt,TextField:wt,PasswordField:Nt,Appearance:Lt},M.AcroForm={ChoiceField:ht,ListBox:ft,ComboBox:dt,EditBox:pt,Button:gt,PushButton:mt,RadioButton:vt,CheckBox:yt,TextField:wt,PasswordField:Nt,Appearance:Lt};var xt=M.AcroForm;function St(t){return t.reduce((function(t,e,r){return t[e]=r,t}),{})}!function(t){t.__addimage__={};var r="UNKNOWN",n={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0],[255,216,255,219],[255,216,255,238]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],WEBP:[[82,73,70,70,void 0,void 0,void 0,void 0,87,69,66,80]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]},i=t.__addimage__.getImageFileTypeByImageData=function(t,e){var i,a,o,s,c,u=r;if("RGBA"===(e=e||r)||void 0!==t.data&&t.data instanceof Uint8ClampedArray&&"height"in t&&"width"in t)return"RGBA";if(x(t))for(c in n)for(o=n[c],i=0;i<o.length;i+=1){for(s=!0,a=0;a<o[i].length;a+=1)if(void 0!==o[i][a]&&o[i][a]!==t[a]){s=!1;break}if(!0===s){u=c;break}}else for(c in n)for(o=n[c],i=0;i<o.length;i+=1){for(s=!0,a=0;a<o[i].length;a+=1)if(void 0!==o[i][a]&&o[i][a]!==t.charCodeAt(a)){s=!1;break}if(!0===s){u=c;break}}return u===r&&e!==r&&(u=e),u},a=function t(e){for(var r=this.internal.write,n=this.internal.putStream,i=(0,this.internal.getFilters)();-1!==i.indexOf("FlateEncode");)i.splice(i.indexOf("FlateEncode"),1);e.objectId=this.internal.newObject();var a=[];if(a.push({key:"Type",value:"/XObject"}),a.push({key:"Subtype",value:"/Image"}),a.push({key:"Width",value:e.width}),a.push({key:"Height",value:e.height}),e.colorSpace===b.INDEXED?a.push({key:"ColorSpace",value:"[/Indexed /DeviceRGB "+(e.palette.length/3-1)+" "+("sMask"in e&&void 0!==e.sMask?e.objectId+2:e.objectId+1)+" 0 R]"}):(a.push({key:"ColorSpace",value:"/"+e.colorSpace}),e.colorSpace===b.DEVICE_CMYK&&a.push({key:"Decode",value:"[1 0 1 0 1 0 1 0]"})),a.push({key:"BitsPerComponent",value:e.bitsPerComponent}),"decodeParameters"in e&&void 0!==e.decodeParameters&&a.push({key:"DecodeParms",value:"<<"+e.decodeParameters+">>"}),"transparency"in e&&Array.isArray(e.transparency)){for(var o="",s=0,c=e.transparency.length;s<c;s++)o+=e.transparency[s]+" "+e.transparency[s]+" ";a.push({key:"Mask",value:"["+o+"]"})}void 0!==e.sMask&&a.push({key:"SMask",value:e.objectId+1+" 0 R"});var u=void 0!==e.filter?["/"+e.filter]:void 0;if(n({data:e.data,additionalKeyValues:a,alreadyAppliedFilters:u,objectId:e.objectId}),r("endobj"),"sMask"in e&&void 0!==e.sMask){var l="/Predictor "+e.predictor+" /Colors 1 /BitsPerComponent "+e.bitsPerComponent+" /Columns "+e.width,h={width:e.width,height:e.height,colorSpace:"DeviceGray",bitsPerComponent:e.bitsPerComponent,decodeParameters:l,data:e.sMask};"filter"in e&&(h.filter=e.filter),t.call(this,h)}if(e.colorSpace===b.INDEXED){var f=this.internal.newObject();n({data:_(new Uint8Array(e.palette)),objectId:f}),r("endobj")}},o=function(){var t=this.internal.collections.addImage_images;for(var e in t)a.call(this,t[e])},s=function(){var t,e=this.internal.collections.addImage_images,r=this.internal.write;for(var n in e)r("/I"+(t=e[n]).index,t.objectId,"0","R")},u=function(){this.internal.collections.addImage_images||(this.internal.collections.addImage_images={},this.internal.events.subscribe("putResources",o),this.internal.events.subscribe("putXobjectDict",s))},l=function(){var t=this.internal.collections.addImage_images;return u.call(this),t},h=function(){return Object.keys(this.internal.collections.addImage_images).length},f=function(e){return"function"==typeof t["process"+e.toUpperCase()]},d=function(t){return"object"===e(t)&&1===t.nodeType},p=function(e,r){if("IMG"===e.nodeName&&e.hasAttribute("src")){var n=""+e.getAttribute("src");if(0===n.indexOf("data:image/"))return c(unescape(n).split("base64,").pop());var i=t.loadFile(n,!0);if(void 0!==i)return i}if("CANVAS"===e.nodeName){if(0===e.width||0===e.height)throw new Error("Given canvas must have data. Canvas width: "+e.width+", height: "+e.height);var a;switch(r){case"PNG":a="image/png";break;case"WEBP":a="image/webp";break;case"JPEG":case"JPG":default:a="image/jpeg"}return c(e.toDataURL(a,1).split("base64,").pop())}},g=function(t){var e=this.internal.collections.addImage_images;if(e)for(var r in e)if(t===e[r].alias)return e[r]},m=function(t,e,r){return t||e||(t=-96,e=-96),t<0&&(t=-1*r.width*72/t/this.internal.scaleFactor),e<0&&(e=-1*r.height*72/e/this.internal.scaleFactor),0===t&&(t=e*r.width/r.height),0===e&&(e=t*r.height/r.width),[t,e]},v=function(t,e,r,n,i,a){var o=m.call(this,r,n,i),s=this.internal.getCoordinateString,c=this.internal.getVerticalCoordinateString,u=l.call(this);if(r=o[0],n=o[1],u[i.index]=i,a){a*=Math.PI/180;var h=Math.cos(a),f=Math.sin(a),d=function(t){return t.toFixed(4)},p=[d(h),d(f),d(-1*f),d(h),0,0,"cm"]}this.internal.write("q"),a?(this.internal.write([1,"0","0",1,s(t),c(e+n),"cm"].join(" ")),this.internal.write(p.join(" ")),this.internal.write([s(r),"0","0",s(n),"0","0","cm"].join(" "))):this.internal.write([s(r),"0","0",s(n),s(t),c(e+n),"cm"].join(" ")),this.isAdvancedAPI()&&this.internal.write([1,0,0,-1,0,0,"cm"].join(" ")),this.internal.write("/I"+i.index+" Do"),this.internal.write("Q")},b=t.color_spaces={DEVICE_RGB:"DeviceRGB",DEVICE_GRAY:"DeviceGray",DEVICE_CMYK:"DeviceCMYK",CAL_GREY:"CalGray",CAL_RGB:"CalRGB",LAB:"Lab",ICC_BASED:"ICCBased",INDEXED:"Indexed",PATTERN:"Pattern",SEPARATION:"Separation",DEVICE_N:"DeviceN"};t.decode={DCT_DECODE:"DCTDecode",FLATE_DECODE:"FlateDecode",LZW_DECODE:"LZWDecode",JPX_DECODE:"JPXDecode",JBIG2_DECODE:"JBIG2Decode",ASCII85_DECODE:"ASCII85Decode",ASCII_HEX_DECODE:"ASCIIHexDecode",RUN_LENGTH_DECODE:"RunLengthDecode",CCITT_FAX_DECODE:"CCITTFaxDecode"};var y=t.image_compression={NONE:"NONE",FAST:"FAST",MEDIUM:"MEDIUM",SLOW:"SLOW"},w=t.__addimage__.sHashCode=function(t){var e,r,n=0;if("string"==typeof t)for(r=t.length,e=0;e<r;e++)n=(n<<5)-n+t.charCodeAt(e),n|=0;else if(x(t))for(r=t.byteLength/2,e=0;e<r;e++)n=(n<<5)-n+t[e],n|=0;return n},N=t.__addimage__.validateStringAsBase64=function(t){(t=t||"").toString().trim();var e=!0;return 0===t.length&&(e=!1),t.length%4!=0&&(e=!1),!1===/^[A-Za-z0-9+/]+$/.test(t.substr(0,t.length-2))&&(e=!1),!1===/^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(t.substr(-2))&&(e=!1),e},L=t.__addimage__.extractImageFromDataUrl=function(t){var e=(t=t||"").split("base64,"),r=null;if(2===e.length){var n=/^data:(\w*\/\w*);*(charset=(?!charset=)[\w=-]*)*;*$/.exec(e[0]);Array.isArray(n)&&(r={mimeType:n[1],charset:n[2],data:e[1]})}return r},A=t.__addimage__.supportsArrayBuffer=function(){return"undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array};t.__addimage__.isArrayBuffer=function(t){return A()&&t instanceof ArrayBuffer};var x=t.__addimage__.isArrayBufferView=function(t){return A()&&"undefined"!=typeof Uint32Array&&(t instanceof Int8Array||t instanceof Uint8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)},S=t.__addimage__.binaryStringToUint8Array=function(t){for(var e=t.length,r=new Uint8Array(e),n=0;n<e;n++)r[n]=t.charCodeAt(n);return r},_=t.__addimage__.arrayBufferToBinaryString=function(t){for(var e="",r=x(t)?t:new Uint8Array(t),n=0;n<r.length;n+=8192)e+=String.fromCharCode.apply(null,r.subarray(n,n+8192));return e};t.addImage=function(){var t,n,i,a,o,s,c,l,h;if("number"==typeof arguments[1]?(n=r,i=arguments[1],a=arguments[2],o=arguments[3],s=arguments[4],c=arguments[5],l=arguments[6],h=arguments[7]):(n=arguments[1],i=arguments[2],a=arguments[3],o=arguments[4],s=arguments[5],c=arguments[6],l=arguments[7],h=arguments[8]),"object"===e(t=arguments[0])&&!d(t)&&"imageData"in t){var f=t;t=f.imageData,n=f.format||n||r,i=f.x||i||0,a=f.y||a||0,o=f.w||f.width||o,s=f.h||f.height||s,c=f.alias||c,l=f.compression||l,h=f.rotation||f.angle||h}var p=this.internal.getFilters();if(void 0===l&&-1!==p.indexOf("FlateEncode")&&(l="SLOW"),isNaN(i)||isNaN(a))throw new Error("Invalid coordinates passed to jsPDF.addImage");u.call(this);var g=P.call(this,t,n,c,l);return v.call(this,i,a,o,s,g,h),this};var P=function(e,n,a,o){var s,c,u;if("string"==typeof e&&i(e)===r){e=unescape(e);var l=k(e,!1);(""!==l||void 0!==(l=t.loadFile(e,!0)))&&(e=l)}if(d(e)&&(e=p(e,n)),n=i(e,n),!f(n))throw new Error("addImage does not support files of type '"+n+"', please ensure that a plugin for '"+n+"' support is added.");if((null==(u=a)||0===u.length)&&(a=function(t){return"string"==typeof t||x(t)?w(t):x(t.data)?w(t.data):null}(e)),(s=g.call(this,a))||(A()&&(e instanceof Uint8Array||"RGBA"===n||(c=e,e=S(e))),s=this["process"+n.toUpperCase()](e,h.call(this),a,function(e){return e&&"string"==typeof e&&(e=e.toUpperCase()),e in t.image_compression?e:y.NONE}(o),c)),!s)throw new Error("An unknown error occurred whilst processing the image.");return s},k=t.__addimage__.convertBase64ToBinaryString=function(t,e){var r;e="boolean"!=typeof e||e;var n,i="";if("string"==typeof t){n=null!==(r=L(t))?r.data:t;try{i=c(n)}catch(t){if(e)throw N(n)?new Error("atob-Error in jsPDF.convertBase64ToBinaryString "+t.message):new Error("Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString ")}}return i};t.getImageProperties=function(e){var n,a,o="";if(d(e)&&(e=p(e)),"string"==typeof e&&i(e)===r&&(""===(o=k(e,!1))&&(o=t.loadFile(e)||""),e=o),a=i(e),!f(a))throw new Error("addImage does not support files of type '"+a+"', please ensure that a plugin for '"+a+"' support is added.");if(!A()||e instanceof Uint8Array||(e=S(e)),!(n=this["process"+a.toUpperCase()](e)))throw new Error("An unknown error occurred whilst processing the image");return n.fileType=a,n}}(M.API),
+/**
+   * @license
+   * Copyright (c) 2014 Steven Spungin (TwelveTone LLC)  steven@twelvetone.tv
+   *
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */
+function(t){var e=function(t){if(void 0!==t&&""!=t)return!0};M.API.events.push(["addPage",function(t){this.internal.getPageInfo(t.pageNumber).pageContext.annotations=[]}]),t.events.push(["putPage",function(t){for(var r,n,i,a=this.internal.getCoordinateString,o=this.internal.getVerticalCoordinateString,s=this.internal.getPageInfoByObjId(t.objId),c=t.pageContext.annotations,u=!1,l=0;l<c.length&&!u;l++)switch((r=c[l]).type){case"link":(e(r.options.url)||e(r.options.pageNumber))&&(u=!0);break;case"reference":case"text":case"freetext":u=!0}if(0!=u){this.internal.write("/Annots [");for(var h=0;h<c.length;h++){r=c[h];var f=this.internal.pdfEscape,d=this.internal.getEncryptor(t.objId);switch(r.type){case"reference":this.internal.write(" "+r.object.objId+" 0 R ");break;case"text":var p=this.internal.newAdditionalObject(),g=this.internal.newAdditionalObject(),m=this.internal.getEncryptor(p.objId),v=r.title||"Note";i="<</Type /Annot /Subtype /Text "+(n="/Rect ["+a(r.bounds.x)+" "+o(r.bounds.y+r.bounds.h)+" "+a(r.bounds.x+r.bounds.w)+" "+o(r.bounds.y)+"] ")+"/Contents ("+f(m(r.contents))+")",i+=" /Popup "+g.objId+" 0 R",i+=" /P "+s.objId+" 0 R",i+=" /T ("+f(m(v))+") >>",p.content=i;var b=p.objId+" 0 R";i="<</Type /Annot /Subtype /Popup "+(n="/Rect ["+a(r.bounds.x+30)+" "+o(r.bounds.y+r.bounds.h)+" "+a(r.bounds.x+r.bounds.w+30)+" "+o(r.bounds.y)+"] ")+" /Parent "+b,r.open&&(i+=" /Open true"),i+=" >>",g.content=i,this.internal.write(p.objId,"0 R",g.objId,"0 R");break;case"freetext":n="/Rect ["+a(r.bounds.x)+" "+o(r.bounds.y)+" "+a(r.bounds.x+r.bounds.w)+" "+o(r.bounds.y+r.bounds.h)+"] ";var y=r.color||"#000000";i="<</Type /Annot /Subtype /FreeText "+n+"/Contents ("+f(d(r.contents))+")",i+=" /DS(font: Helvetica,sans-serif 12.0pt; text-align:left; color:#"+y+")",i+=" /Border [0 0 0]",i+=" >>",this.internal.write(i);break;case"link":if(r.options.name){var w=this.annotations._nameMap[r.options.name];r.options.pageNumber=w.page,r.options.top=w.y}else r.options.top||(r.options.top=0);if(n="/Rect ["+r.finalBounds.x+" "+r.finalBounds.y+" "+r.finalBounds.w+" "+r.finalBounds.h+"] ",i="",r.options.url)i="<</Type /Annot /Subtype /Link "+n+"/Border [0 0 0] /A <</S /URI /URI ("+f(d(r.options.url))+") >>";else if(r.options.pageNumber){switch(i="<</Type /Annot /Subtype /Link "+n+"/Border [0 0 0] /Dest ["+this.internal.getPageInfo(r.options.pageNumber).objId+" 0 R",r.options.magFactor=r.options.magFactor||"XYZ",r.options.magFactor){case"Fit":i+=" /Fit]";break;case"FitH":i+=" /FitH "+r.options.top+"]";break;case"FitV":r.options.left=r.options.left||0,i+=" /FitV "+r.options.left+"]";break;case"XYZ":default:var N=o(r.options.top);r.options.left=r.options.left||0,void 0===r.options.zoom&&(r.options.zoom=0),i+=" /XYZ "+r.options.left+" "+N+" "+r.options.zoom+"]"}}""!=i&&(i+=" >>",this.internal.write(i))}}this.internal.write("]")}}]),t.createAnnotation=function(t){var e=this.internal.getCurrentPageInfo();switch(t.type){case"link":this.link(t.bounds.x,t.bounds.y,t.bounds.w,t.bounds.h,t);break;case"text":case"freetext":e.pageContext.annotations.push(t)}},t.link=function(t,e,r,n,i){var a=this.internal.getCurrentPageInfo(),o=this.internal.getCoordinateString,s=this.internal.getVerticalCoordinateString;a.pageContext.annotations.push({finalBounds:{x:o(t),y:s(e),w:o(t+r),h:s(e+n)},options:i,type:"link"})},t.textWithLink=function(t,e,r,n){var i,a,o=this.getTextWidth(t),s=this.internal.getLineHeight()/this.internal.scaleFactor;if(void 0!==n.maxWidth){a=n.maxWidth;var c=this.splitTextToSize(t,a).length;i=Math.ceil(s*c)}else a=o,i=s;return this.text(t,e,r,n),r+=.2*s,"center"===n.align&&(e-=o/2),"right"===n.align&&(e-=o),this.link(e,r-s,a,i,n),o},t.getTextWidth=function(t){var e=this.internal.getFontSize();return this.getStringUnitWidth(t)*e/this.internal.scaleFactor}}(M.API),
+/**
+   * @license
+   * Copyright (c) 2017 Aras Abbasi
+   *
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */
+function(t){var e={1569:[65152],1570:[65153,65154],1571:[65155,65156],1572:[65157,65158],1573:[65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194],1584:[65195,65196],1585:[65197,65198],1586:[65199,65200],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},r={65247:{65154:65269,65156:65271,65160:65273,65166:65275},65248:{65154:65270,65156:65272,65160:65274,65166:65276},65165:{65247:{65248:{65258:65010}}},1617:{1612:64606,1613:64607,1614:64608,1615:64609,1616:64610}},n={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},i=[1570,1571,1573,1575];t.__arabicParser__={};var a=t.__arabicParser__.isInArabicSubstitutionA=function(t){return void 0!==e[t.charCodeAt(0)]},o=t.__arabicParser__.isArabicLetter=function(t){return"string"==typeof t&&/^[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]+$/.test(t)},s=t.__arabicParser__.isArabicEndLetter=function(t){return o(t)&&a(t)&&e[t.charCodeAt(0)].length<=2},c=t.__arabicParser__.isArabicAlfLetter=function(t){return o(t)&&i.indexOf(t.charCodeAt(0))>=0};t.__arabicParser__.arabicLetterHasIsolatedForm=function(t){return o(t)&&a(t)&&e[t.charCodeAt(0)].length>=1};var u=t.__arabicParser__.arabicLetterHasFinalForm=function(t){return o(t)&&a(t)&&e[t.charCodeAt(0)].length>=2};t.__arabicParser__.arabicLetterHasInitialForm=function(t){return o(t)&&a(t)&&e[t.charCodeAt(0)].length>=3};var l=t.__arabicParser__.arabicLetterHasMedialForm=function(t){return o(t)&&a(t)&&4==e[t.charCodeAt(0)].length},h=t.__arabicParser__.resolveLigatures=function(t){var e=0,n=r,i="",a=0;for(e=0;e<t.length;e+=1)void 0!==n[t.charCodeAt(e)]?(a++,"number"==typeof(n=n[t.charCodeAt(e)])&&(i+=String.fromCharCode(n),n=r,a=0),e===t.length-1&&(n=r,i+=t.charAt(e-(a-1)),e-=a-1,a=0)):(n=r,i+=t.charAt(e-a),e-=a,a=0);return i};t.__arabicParser__.isArabicDiacritic=function(t){return void 0!==t&&void 0!==n[t.charCodeAt(0)]};var f=t.__arabicParser__.getCorrectForm=function(t,e,r){return o(t)?!1===a(t)?-1:!u(t)||!o(e)&&!o(r)||!o(r)&&s(e)||s(t)&&!o(e)||s(t)&&c(e)||s(t)&&s(e)?0:l(t)&&o(e)&&!s(e)&&o(r)&&u(r)?3:s(t)||!o(r)?1:2:-1},d=function(t){var r=0,n=0,i=0,a="",s="",c="",u=(t=t||"").split("\\s+"),l=[];for(r=0;r<u.length;r+=1){for(l.push(""),n=0;n<u[r].length;n+=1)a=u[r][n],s=u[r][n-1],c=u[r][n+1],o(a)?(i=f(a,s,c),l[r]+=-1!==i?String.fromCharCode(e[a.charCodeAt(0)][i]):a):l[r]+=a;l[r]=h(l[r])}return l.join(" ")},p=t.__arabicParser__.processArabic=t.processArabic=function(){var t,e="string"==typeof arguments[0]?arguments[0]:arguments[0].text,r=[];if(Array.isArray(e)){var n=0;for(r=[],n=0;n<e.length;n+=1)Array.isArray(e[n])?r.push([d(e[n][0]),e[n][1],e[n][2]]):r.push([d(e[n])]);t=r}else t=d(e);return"string"==typeof arguments[0]?t:(arguments[0].text=t,arguments[0])};t.events.push(["preProcessText",p])}(M.API),
+/** @license
+   * jsPDF Autoprint Plugin
+   *
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */
+function(t){t.autoPrint=function(t){var e;switch((t=t||{}).variant=t.variant||"non-conform",t.variant){case"javascript":this.addJS("print({});");break;case"non-conform":default:this.internal.events.subscribe("postPutResources",(function(){e=this.internal.newObject(),this.internal.out("<<"),this.internal.out("/S /Named"),this.internal.out("/Type /Action"),this.internal.out("/N /Print"),this.internal.out(">>"),this.internal.out("endobj")})),this.internal.events.subscribe("putCatalog",(function(){this.internal.out("/OpenAction "+e+" 0 R")}))}return this}}(M.API),
+/**
+   * @license
+   * Copyright (c) 2014 Steven Spungin (TwelveTone LLC)  steven@twelvetone.tv
+   *
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */
+function(t){var e=function(){var t=void 0;Object.defineProperty(this,"pdf",{get:function(){return t},set:function(e){t=e}});var e=150;Object.defineProperty(this,"width",{get:function(){return e},set:function(t){e=isNaN(t)||!1===Number.isInteger(t)||t<0?150:t,this.getContext("2d").pageWrapXEnabled&&(this.getContext("2d").pageWrapX=e+1)}});var r=300;Object.defineProperty(this,"height",{get:function(){return r},set:function(t){r=isNaN(t)||!1===Number.isInteger(t)||t<0?300:t,this.getContext("2d").pageWrapYEnabled&&(this.getContext("2d").pageWrapY=r+1)}});var n=[];Object.defineProperty(this,"childNodes",{get:function(){return n},set:function(t){n=t}});var i={};Object.defineProperty(this,"style",{get:function(){return i},set:function(t){i=t}}),Object.defineProperty(this,"parentNode",{})};e.prototype.getContext=function(t,e){var r;if("2d"!==(t=t||"2d"))return null;for(r in e)this.pdf.context2d.hasOwnProperty(r)&&(this.pdf.context2d[r]=e[r]);return this.pdf.context2d._canvas=this,this.pdf.context2d},e.prototype.toDataURL=function(){throw new Error("toDataURL is not implemented.")},t.events.push(["initialized",function(){this.canvas=new e,this.canvas.pdf=this}])}(M.API),function(t){var r={left:0,top:0,bottom:0,right:0},n=!1,i=function(){void 0===this.internal.__cell__&&(this.internal.__cell__={},this.internal.__cell__.padding=3,this.internal.__cell__.headerFunction=void 0,this.internal.__cell__.margins=Object.assign({},r),this.internal.__cell__.margins.width=this.getPageWidth(),a.call(this))},a=function(){this.internal.__cell__.lastCell=new o,this.internal.__cell__.pages=1},o=function(){var t=arguments[0];Object.defineProperty(this,"x",{enumerable:!0,get:function(){return t},set:function(e){t=e}});var e=arguments[1];Object.defineProperty(this,"y",{enumerable:!0,get:function(){return e},set:function(t){e=t}});var r=arguments[2];Object.defineProperty(this,"width",{enumerable:!0,get:function(){return r},set:function(t){r=t}});var n=arguments[3];Object.defineProperty(this,"height",{enumerable:!0,get:function(){return n},set:function(t){n=t}});var i=arguments[4];Object.defineProperty(this,"text",{enumerable:!0,get:function(){return i},set:function(t){i=t}});var a=arguments[5];Object.defineProperty(this,"lineNumber",{enumerable:!0,get:function(){return a},set:function(t){a=t}});var o=arguments[6];return Object.defineProperty(this,"align",{enumerable:!0,get:function(){return o},set:function(t){o=t}}),this};o.prototype.clone=function(){return new o(this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align)},o.prototype.toArray=function(){return[this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align]},t.setHeaderFunction=function(t){return i.call(this),this.internal.__cell__.headerFunction="function"==typeof t?t:void 0,this},t.getTextDimensions=function(t,e){i.call(this);var r=(e=e||{}).fontSize||this.getFontSize(),n=e.font||this.getFont(),a=e.scaleFactor||this.internal.scaleFactor,o=0,s=0,c=0,u=this;if(!Array.isArray(t)&&"string"!=typeof t){if("number"!=typeof t)throw new Error("getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.");t=String(t)}var l=e.maxWidth;l>0?"string"==typeof t?t=this.splitTextToSize(t,l):"[object Array]"===Object.prototype.toString.call(t)&&(t=t.reduce((function(t,e){return t.concat(u.splitTextToSize(e,l))}),[])):t=Array.isArray(t)?t:[t];for(var h=0;h<t.length;h++)o<(c=this.getStringUnitWidth(t[h],{font:n})*r)&&(o=c);return 0!==o&&(s=t.length),{w:o/=a,h:Math.max((s*r*this.getLineHeightFactor()-r*(this.getLineHeightFactor()-1))/a,0)}},t.cellAddPage=function(){i.call(this),this.addPage();var t=this.internal.__cell__.margins||r;return this.internal.__cell__.lastCell=new o(t.left,t.top,void 0,void 0),this.internal.__cell__.pages+=1,this};var s=t.cell=function(){var t;t=arguments[0]instanceof o?arguments[0]:new o(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]),i.call(this);var e=this.internal.__cell__.lastCell,a=this.internal.__cell__.padding,s=this.internal.__cell__.margins||r,c=this.internal.__cell__.tableHeaderRow,u=this.internal.__cell__.printHeaders;return void 0!==e.lineNumber&&(e.lineNumber===t.lineNumber?(t.x=(e.x||0)+(e.width||0),t.y=e.y||0):e.y+e.height+t.height+s.bottom>this.getPageHeight()?(this.cellAddPage(),t.y=s.top,u&&c&&(this.printHeaderRow(t.lineNumber,!0),t.y+=c[0].height)):t.y=e.y+e.height||t.y),void 0!==t.text[0]&&(this.rect(t.x,t.y,t.width,t.height,!0===n?"FD":void 0),"right"===t.align?this.text(t.text,t.x+t.width-a,t.y+a,{align:"right",baseline:"top"}):"center"===t.align?this.text(t.text,t.x+t.width/2,t.y+a,{align:"center",baseline:"top",maxWidth:t.width-a-a}):this.text(t.text,t.x+a,t.y+a,{align:"left",baseline:"top",maxWidth:t.width-a-a})),this.internal.__cell__.lastCell=t,this};t.table=function(t,n,u,l,h){if(i.call(this),!u)throw new Error("No data for PDF table.");var f,d,p,g,m=[],v=[],b=[],y={},w={},N=[],L=[],A=(h=h||{}).autoSize||!1,x=!1!==h.printHeaders,S=h.css&&void 0!==h.css["font-size"]?16*h.css["font-size"]:h.fontSize||12,_=h.margins||Object.assign({width:this.getPageWidth()},r),P="number"==typeof h.padding?h.padding:3,k=h.headerBackgroundColor||"#c8c8c8",F=h.headerTextColor||"#000";if(a.call(this),this.internal.__cell__.printHeaders=x,this.internal.__cell__.margins=_,this.internal.__cell__.table_font_size=S,this.internal.__cell__.padding=P,this.internal.__cell__.headerBackgroundColor=k,this.internal.__cell__.headerTextColor=F,this.setFontSize(S),null==l)v=m=Object.keys(u[0]),b=m.map((function(){return"left"}));else if(Array.isArray(l)&&"object"===e(l[0]))for(m=l.map((function(t){return t.name})),v=l.map((function(t){return t.prompt||t.name||""})),b=l.map((function(t){return t.align||"left"})),f=0;f<l.length;f+=1)w[l[f].name]=l[f].width*(19.049976/25.4);else Array.isArray(l)&&"string"==typeof l[0]&&(v=m=l,b=m.map((function(){return"left"})));if(A||Array.isArray(l)&&"string"==typeof l[0])for(f=0;f<m.length;f+=1){for(y[g=m[f]]=u.map((function(t){return t[g]})),this.setFont(void 0,"bold"),N.push(this.getTextDimensions(v[f],{fontSize:this.internal.__cell__.table_font_size,scaleFactor:this.internal.scaleFactor}).w),d=y[g],this.setFont(void 0,"normal"),p=0;p<d.length;p+=1)N.push(this.getTextDimensions(d[p],{fontSize:this.internal.__cell__.table_font_size,scaleFactor:this.internal.scaleFactor}).w);w[g]=Math.max.apply(null,N)+P+P,N=[]}if(x){var I={};for(f=0;f<m.length;f+=1)I[m[f]]={},I[m[f]].text=v[f],I[m[f]].align=b[f];var C=c.call(this,I,w);L=m.map((function(e){return new o(t,n,w[e],C,I[e].text,void 0,I[e].align)})),this.setTableHeaderRow(L),this.printHeaderRow(1,!1)}var j=l.reduce((function(t,e){return t[e.name]=e.align,t}),{});for(f=0;f<u.length;f+=1){"rowStart"in h&&h.rowStart instanceof Function&&h.rowStart({row:f,data:u[f]},this);var O=c.call(this,u[f],w);for(p=0;p<m.length;p+=1){var B=u[f][m[p]];"cellStart"in h&&h.cellStart instanceof Function&&h.cellStart({row:f,col:p,data:B},this),s.call(this,new o(t,n,w[m[p]],O,B,f+2,j[m[p]]))}}return this.internal.__cell__.table_x=t,this.internal.__cell__.table_y=n,this};var c=function(t,e){var r=this.internal.__cell__.padding,n=this.internal.__cell__.table_font_size,i=this.internal.scaleFactor;return Object.keys(t).map((function(n){var i=t[n];return this.splitTextToSize(i.hasOwnProperty("text")?i.text:i,e[n]-r-r)}),this).map((function(t){return this.getLineHeightFactor()*t.length*n/i+r+r}),this).reduce((function(t,e){return Math.max(t,e)}),0)};t.setTableHeaderRow=function(t){i.call(this),this.internal.__cell__.tableHeaderRow=t},t.printHeaderRow=function(t,e){if(i.call(this),!this.internal.__cell__.tableHeaderRow)throw new Error("Property tableHeaderRow does not exist.");var r;if(n=!0,"function"==typeof this.internal.__cell__.headerFunction){var a=this.internal.__cell__.headerFunction(this,this.internal.__cell__.pages);this.internal.__cell__.lastCell=new o(a[0],a[1],a[2],a[3],void 0,-1)}this.setFont(void 0,"bold");for(var c=[],u=0;u<this.internal.__cell__.tableHeaderRow.length;u+=1){r=this.internal.__cell__.tableHeaderRow[u].clone(),e&&(r.y=this.internal.__cell__.margins.top||0,c.push(r)),r.lineNumber=t;var l=this.getTextColor();this.setTextColor(this.internal.__cell__.headerTextColor),this.setFillColor(this.internal.__cell__.headerBackgroundColor),s.call(this,r),this.setTextColor(l)}c.length>0&&this.setTableHeaderRow(c),this.setFont(void 0,"normal"),n=!1}}(M.API);var _t={italic:["italic","oblique","normal"],oblique:["oblique","italic","normal"],normal:["normal","oblique","italic"]},Pt=["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded"],kt=St(Pt),Ft=[100,200,300,400,500,600,700,800,900],It=St(Ft);function Ct(t){var e=t.family.replace(/"|'/g,"").toLowerCase(),r=function(t){return _t[t=t||"normal"]?t:"normal"}(t.style),n=function(t){if(!t)return 400;if("number"==typeof t)return t>=100&&t<=900&&t%100==0?t:400;if(/^\d00$/.test(t))return parseInt(t);switch(t){case"bold":return 700;case"normal":default:return 400}}(t.weight),i=function(t){return"number"==typeof kt[t=t||"normal"]?t:"normal"}(t.stretch);return{family:e,style:r,weight:n,stretch:i,src:t.src||[],ref:t.ref||{name:e,style:[i,r,n].join(" ")}}}function jt(t,e,r,n){var i;for(i=r;i>=0&&i<e.length;i+=n)if(t[e[i]])return t[e[i]];for(i=r;i>=0&&i<e.length;i-=n)if(t[e[i]])return t[e[i]]}var Ot={"sans-serif":"helvetica",fixed:"courier",monospace:"courier",terminal:"courier",cursive:"times",fantasy:"times",serif:"times"},Bt={caption:"times",icon:"times",menu:"times","message-box":"times","small-caption":"times","status-bar":"times"};function Mt(t){return[t.stretch,t.style,t.weight,t.family].join(" ")}function Et(t,e,r){for(var n=(r=r||{}).defaultFontFamily||"times",i=Object.assign({},Ot,r.genericFontFamilies||{}),a=null,o=null,s=0;s<e.length;++s)if(i[(a=Ct(e[s])).family]&&(a.family=i[a.family]),t.hasOwnProperty(a.family)){o=t[a.family];break}if(!(o=o||t[n]))throw new Error("Could not find a font-family for the rule '"+Mt(a)+"' and default family '"+n+"'.");if(o=function(t,e){if(e[t])return e[t];var r=kt[t],n=r<=kt.normal?-1:1,i=jt(e,Pt,r,n);if(!i)throw new Error("Could not find a matching font-stretch value for "+t);return i}(a.stretch,o),o=function(t,e){if(e[t])return e[t];for(var r=_t[t],n=0;n<r.length;++n)if(e[r[n]])return e[r[n]];throw new Error("Could not find a matching font-style for "+t)}(a.style,o),!(o=function(t,e){if(e[t])return e[t];if(400===t&&e[500])return e[500];if(500===t&&e[400])return e[400];var r=It[t],n=jt(e,Ft,r,t<400?-1:1);if(!n)throw new Error("Could not find a matching font-weight for value "+t);return n}(a.weight,o)))throw new Error("Failed to resolve a font for the rule '"+Mt(a)+"'.");return o}function qt(t){return t.trimLeft()}function Dt(t,e){for(var r=0;r<t.length;){if(t.charAt(r)===e)return[t.substring(0,r),t.substring(r+1)];r+=1}return null}function Rt(t){var e=t.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i);return null===e?null:[e[0],t.substring(e[0].length)]}var Tt=["times"];!function(t){var r,n,a,o,s,c,u,l,f,d=function(t){return t=t||{},this.isStrokeTransparent=t.isStrokeTransparent||!1,this.strokeOpacity=t.strokeOpacity||1,this.strokeStyle=t.strokeStyle||"#000000",this.fillStyle=t.fillStyle||"#000000",this.isFillTransparent=t.isFillTransparent||!1,this.fillOpacity=t.fillOpacity||1,this.font=t.font||"10px sans-serif",this.textBaseline=t.textBaseline||"alphabetic",this.textAlign=t.textAlign||"left",this.lineWidth=t.lineWidth||1,this.lineJoin=t.lineJoin||"miter",this.lineCap=t.lineCap||"butt",this.path=t.path||[],this.transform=void 0!==t.transform?t.transform.clone():new l,this.globalCompositeOperation=t.globalCompositeOperation||"normal",this.globalAlpha=t.globalAlpha||1,this.clip_path=t.clip_path||[],this.currentPoint=t.currentPoint||new c,this.miterLimit=t.miterLimit||10,this.lastPoint=t.lastPoint||new c,this.lineDashOffset=t.lineDashOffset||0,this.lineDash=t.lineDash||[],this.margin=t.margin||[0,0,0,0],this.prevPageLastElemOffset=t.prevPageLastElemOffset||0,this.ignoreClearRect="boolean"!=typeof t.ignoreClearRect||t.ignoreClearRect,this};t.events.push(["initialized",function(){this.context2d=new p(this),r=this.internal.f2,n=this.internal.getCoordinateString,a=this.internal.getVerticalCoordinateString,o=this.internal.getHorizontalCoordinate,s=this.internal.getVerticalCoordinate,c=this.internal.Point,u=this.internal.Rectangle,l=this.internal.Matrix,f=new d}]);var p=function(t){Object.defineProperty(this,"canvas",{get:function(){return{parentNode:!1,style:!1}}});var e=t;Object.defineProperty(this,"pdf",{get:function(){return e}});var r=!1;Object.defineProperty(this,"pageWrapXEnabled",{get:function(){return r},set:function(t){r=Boolean(t)}});var n=!1;Object.defineProperty(this,"pageWrapYEnabled",{get:function(){return n},set:function(t){n=Boolean(t)}});var i=0;Object.defineProperty(this,"posX",{get:function(){return i},set:function(t){isNaN(t)||(i=t)}});var a=0;Object.defineProperty(this,"posY",{get:function(){return a},set:function(t){isNaN(t)||(a=t)}}),Object.defineProperty(this,"margin",{get:function(){return f.margin},set:function(t){var e;"number"==typeof t?e=[t,t,t,t]:((e=new Array(4))[0]=t[0],e[1]=t.length>=2?t[1]:e[0],e[2]=t.length>=3?t[2]:e[0],e[3]=t.length>=4?t[3]:e[1]),f.margin=e}});var o=!1;Object.defineProperty(this,"autoPaging",{get:function(){return o},set:function(t){o=t}});var s=0;Object.defineProperty(this,"lastBreak",{get:function(){return s},set:function(t){s=t}});var c=[];Object.defineProperty(this,"pageBreaks",{get:function(){return c},set:function(t){c=t}}),Object.defineProperty(this,"ctx",{get:function(){return f},set:function(t){t instanceof d&&(f=t)}}),Object.defineProperty(this,"path",{get:function(){return f.path},set:function(t){f.path=t}});var u=[];Object.defineProperty(this,"ctxStack",{get:function(){return u},set:function(t){u=t}}),Object.defineProperty(this,"fillStyle",{get:function(){return this.ctx.fillStyle},set:function(t){var e;e=g(t),this.ctx.fillStyle=e.style,this.ctx.isFillTransparent=0===e.a,this.ctx.fillOpacity=e.a,this.pdf.setFillColor(e.r,e.g,e.b,{a:e.a}),this.pdf.setTextColor(e.r,e.g,e.b,{a:e.a})}}),Object.defineProperty(this,"strokeStyle",{get:function(){return this.ctx.strokeStyle},set:function(t){var e=g(t);this.ctx.strokeStyle=e.style,this.ctx.isStrokeTransparent=0===e.a,this.ctx.strokeOpacity=e.a,0===e.a?this.pdf.setDrawColor(255,255,255):(e.a,this.pdf.setDrawColor(e.r,e.g,e.b))}}),Object.defineProperty(this,"lineCap",{get:function(){return this.ctx.lineCap},set:function(t){-1!==["butt","round","square"].indexOf(t)&&(this.ctx.lineCap=t,this.pdf.setLineCap(t))}}),Object.defineProperty(this,"lineWidth",{get:function(){return this.ctx.lineWidth},set:function(t){isNaN(t)||(this.ctx.lineWidth=t,this.pdf.setLineWidth(t))}}),Object.defineProperty(this,"lineJoin",{get:function(){return this.ctx.lineJoin},set:function(t){-1!==["bevel","round","miter"].indexOf(t)&&(this.ctx.lineJoin=t,this.pdf.setLineJoin(t))}}),Object.defineProperty(this,"miterLimit",{get:function(){return this.ctx.miterLimit},set:function(t){isNaN(t)||(this.ctx.miterLimit=t,this.pdf.setMiterLimit(t))}}),Object.defineProperty(this,"textBaseline",{get:function(){return this.ctx.textBaseline},set:function(t){this.ctx.textBaseline=t}}),Object.defineProperty(this,"textAlign",{get:function(){return this.ctx.textAlign},set:function(t){-1!==["right","end","center","left","start"].indexOf(t)&&(this.ctx.textAlign=t)}});var l=null;function h(t,e){if(null===l){var r=function(t){var e=[];return Object.keys(t).forEach((function(r){t[r].forEach((function(t){var n=null;switch(t){case"bold":n={family:r,weight:"bold"};break;case"italic":n={family:r,style:"italic"};break;case"bolditalic":n={family:r,weight:"bold",style:"italic"};break;case"":case"normal":n={family:r}}null!==n&&(n.ref={name:r,style:t},e.push(n))}))})),e}(t.getFontList());l=function(t){for(var e={},r=0;r<t.length;++r){var n=Ct(t[r]),i=n.family,a=n.stretch,o=n.style,s=n.weight;e[i]=e[i]||{},e[i][a]=e[i][a]||{},e[i][a][o]=e[i][a][o]||{},e[i][a][o][s]=n}return e}(r.concat(e))}return l}var p=null;Object.defineProperty(this,"fontFaces",{get:function(){return p},set:function(t){l=null,p=t}}),Object.defineProperty(this,"font",{get:function(){return this.ctx.font},set:function(t){var e;if(this.ctx.font=t,null!==(e=/^\s*(?=(?:(?:[-a-z]+\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\1|\2|\3)\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\d]+(?:\%|in|[cem]m|ex|p[ctx]))(?:\s*\/\s*(normal|[.\d]+(?:\%|in|[cem]m|ex|p[ctx])))?\s*([-_,\"\'\sa-z]+?)\s*$/i.exec(t))){var r=e[1],n=(e[2],e[3]),i=e[4],a=(e[5],e[6]),o=/^([.\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i.exec(i)[2];i="px"===o?Math.floor(parseFloat(i)*this.pdf.internal.scaleFactor):"em"===o?Math.floor(parseFloat(i)*this.pdf.getFontSize()):Math.floor(parseFloat(i)*this.pdf.internal.scaleFactor),this.pdf.setFontSize(i);var s=function(t){var e,r,n=[],i=t.trim();if(""===i)return Tt;if(i in Bt)return[Bt[i]];for(;""!==i;){switch(r=null,e=(i=qt(i)).charAt(0)){case'"':case"'":r=Dt(i.substring(1),e);break;default:r=Rt(i)}if(null===r)return Tt;if(n.push(r[0]),""!==(i=qt(r[1]))&&","!==i.charAt(0))return Tt;i=i.replace(/^,/,"")}return n}(a);if(this.fontFaces){var c=Et(h(this.pdf,this.fontFaces),s.map((function(t){return{family:t,stretch:"normal",weight:n,style:r}})));this.pdf.setFont(c.ref.name,c.ref.style)}else{var u="";("bold"===n||parseInt(n,10)>=700||"bold"===r)&&(u="bold"),"italic"===r&&(u+="italic"),0===u.length&&(u="normal");for(var l="",f={arial:"Helvetica",Arial:"Helvetica",verdana:"Helvetica",Verdana:"Helvetica",helvetica:"Helvetica",Helvetica:"Helvetica","sans-serif":"Helvetica",fixed:"Courier",monospace:"Courier",terminal:"Courier",cursive:"Times",fantasy:"Times",serif:"Times"},d=0;d<s.length;d++){if(void 0!==this.pdf.internal.getFont(s[d],u,{noFallback:!0,disableWarning:!0})){l=s[d];break}if("bolditalic"===u&&void 0!==this.pdf.internal.getFont(s[d],"bold",{noFallback:!0,disableWarning:!0}))l=s[d],u="bold";else if(void 0!==this.pdf.internal.getFont(s[d],"normal",{noFallback:!0,disableWarning:!0})){l=s[d],u="normal";break}}if(""===l)for(var p=0;p<s.length;p++)if(f[s[p]]){l=f[s[p]];break}l=""===l?"Times":l,this.pdf.setFont(l,u)}}}}),Object.defineProperty(this,"globalCompositeOperation",{get:function(){return this.ctx.globalCompositeOperation},set:function(t){this.ctx.globalCompositeOperation=t}}),Object.defineProperty(this,"globalAlpha",{get:function(){return this.ctx.globalAlpha},set:function(t){this.ctx.globalAlpha=t}}),Object.defineProperty(this,"lineDashOffset",{get:function(){return this.ctx.lineDashOffset},set:function(t){this.ctx.lineDashOffset=t,T.call(this)}}),Object.defineProperty(this,"lineDash",{get:function(){return this.ctx.lineDash},set:function(t){this.ctx.lineDash=t,T.call(this)}}),Object.defineProperty(this,"ignoreClearRect",{get:function(){return this.ctx.ignoreClearRect},set:function(t){this.ctx.ignoreClearRect=Boolean(t)}})};p.prototype.setLineDash=function(t){this.lineDash=t},p.prototype.getLineDash=function(){return this.lineDash.length%2?this.lineDash.concat(this.lineDash):this.lineDash.slice()},p.prototype.fill=function(){A.call(this,"fill",!1)},p.prototype.stroke=function(){A.call(this,"stroke",!1)},p.prototype.beginPath=function(){this.path=[{type:"begin"}]},p.prototype.moveTo=function(t,e){if(isNaN(t)||isNaN(e))throw i.error("jsPDF.context2d.moveTo: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.moveTo");var r=this.ctx.transform.applyToPoint(new c(t,e));this.path.push({type:"mt",x:r.x,y:r.y}),this.ctx.lastPoint=new c(t,e)},p.prototype.closePath=function(){var t=new c(0,0),r=0;for(r=this.path.length-1;-1!==r;r--)if("begin"===this.path[r].type&&"object"===e(this.path[r+1])&&"number"==typeof this.path[r+1].x){t=new c(this.path[r+1].x,this.path[r+1].y);break}this.path.push({type:"close"}),this.ctx.lastPoint=new c(t.x,t.y)},p.prototype.lineTo=function(t,e){if(isNaN(t)||isNaN(e))throw i.error("jsPDF.context2d.lineTo: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.lineTo");var r=this.ctx.transform.applyToPoint(new c(t,e));this.path.push({type:"lt",x:r.x,y:r.y}),this.ctx.lastPoint=new c(r.x,r.y)},p.prototype.clip=function(){this.ctx.clip_path=JSON.parse(JSON.stringify(this.path)),A.call(this,null,!0)},p.prototype.quadraticCurveTo=function(t,e,r,n){if(isNaN(r)||isNaN(n)||isNaN(t)||isNaN(e))throw i.error("jsPDF.context2d.quadraticCurveTo: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.quadraticCurveTo");var a=this.ctx.transform.applyToPoint(new c(r,n)),o=this.ctx.transform.applyToPoint(new c(t,e));this.path.push({type:"qct",x1:o.x,y1:o.y,x:a.x,y:a.y}),this.ctx.lastPoint=new c(a.x,a.y)},p.prototype.bezierCurveTo=function(t,e,r,n,a,o){if(isNaN(a)||isNaN(o)||isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw i.error("jsPDF.context2d.bezierCurveTo: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.bezierCurveTo");var s=this.ctx.transform.applyToPoint(new c(a,o)),u=this.ctx.transform.applyToPoint(new c(t,e)),l=this.ctx.transform.applyToPoint(new c(r,n));this.path.push({type:"bct",x1:u.x,y1:u.y,x2:l.x,y2:l.y,x:s.x,y:s.y}),this.ctx.lastPoint=new c(s.x,s.y)},p.prototype.arc=function(t,e,r,n,a,o){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||isNaN(a))throw i.error("jsPDF.context2d.arc: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.arc");if(o=Boolean(o),!this.ctx.transform.isIdentity){var s=this.ctx.transform.applyToPoint(new c(t,e));t=s.x,e=s.y;var u=this.ctx.transform.applyToPoint(new c(0,r)),l=this.ctx.transform.applyToPoint(new c(0,0));r=Math.sqrt(Math.pow(u.x-l.x,2)+Math.pow(u.y-l.y,2))}Math.abs(a-n)>=2*Math.PI&&(n=0,a=2*Math.PI),this.path.push({type:"arc",x:t,y:e,radius:r,startAngle:n,endAngle:a,counterclockwise:o})},p.prototype.arcTo=function(t,e,r,n,i){throw new Error("arcTo not implemented.")},p.prototype.rect=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw i.error("jsPDF.context2d.rect: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.rect");this.moveTo(t,e),this.lineTo(t+r,e),this.lineTo(t+r,e+n),this.lineTo(t,e+n),this.lineTo(t,e),this.lineTo(t+r,e),this.lineTo(t,e)},p.prototype.fillRect=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw i.error("jsPDF.context2d.fillRect: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.fillRect");if(!m.call(this)){var a={};"butt"!==this.lineCap&&(a.lineCap=this.lineCap,this.lineCap="butt"),"miter"!==this.lineJoin&&(a.lineJoin=this.lineJoin,this.lineJoin="miter"),this.beginPath(),this.rect(t,e,r,n),this.fill(),a.hasOwnProperty("lineCap")&&(this.lineCap=a.lineCap),a.hasOwnProperty("lineJoin")&&(this.lineJoin=a.lineJoin)}},p.prototype.strokeRect=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw i.error("jsPDF.context2d.strokeRect: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.strokeRect");v.call(this)||(this.beginPath(),this.rect(t,e,r,n),this.stroke())},p.prototype.clearRect=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw i.error("jsPDF.context2d.clearRect: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.clearRect");this.ignoreClearRect||(this.fillStyle="#ffffff",this.fillRect(t,e,r,n))},p.prototype.save=function(t){t="boolean"!=typeof t||t;for(var e=this.pdf.internal.getCurrentPageInfo().pageNumber,r=0;r<this.pdf.internal.getNumberOfPages();r++)this.pdf.setPage(r+1),this.pdf.internal.out("q");if(this.pdf.setPage(e),t){this.ctx.fontSize=this.pdf.internal.getFontSize();var n=new d(this.ctx);this.ctxStack.push(this.ctx),this.ctx=n}},p.prototype.restore=function(t){t="boolean"!=typeof t||t;for(var e=this.pdf.internal.getCurrentPageInfo().pageNumber,r=0;r<this.pdf.internal.getNumberOfPages();r++)this.pdf.setPage(r+1),this.pdf.internal.out("Q");this.pdf.setPage(e),t&&0!==this.ctxStack.length&&(this.ctx=this.ctxStack.pop(),this.fillStyle=this.ctx.fillStyle,this.strokeStyle=this.ctx.strokeStyle,this.font=this.ctx.font,this.lineCap=this.ctx.lineCap,this.lineWidth=this.ctx.lineWidth,this.lineJoin=this.ctx.lineJoin,this.lineDash=this.ctx.lineDash,this.lineDashOffset=this.ctx.lineDashOffset)},p.prototype.toDataURL=function(){throw new Error("toDataUrl not implemented.")};var g=function(t){var e,r,n,i;if(!0===t.isCanvasGradient&&(t=t.getColor()),!t)return{r:0,g:0,b:0,a:0,style:t};if(/transparent|rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*0+\s*\)/.test(t))e=0,r=0,n=0,i=0;else{var a=/rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/.exec(t);if(null!==a)e=parseInt(a[1]),r=parseInt(a[2]),n=parseInt(a[3]),i=1;else if(null!==(a=/rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d.]+)\s*\)/.exec(t)))e=parseInt(a[1]),r=parseInt(a[2]),n=parseInt(a[3]),i=parseFloat(a[4]);else{if(i=1,"string"==typeof t&&"#"!==t.charAt(0)){var o=new h(t);t=o.ok?o.toHex():"#000000"}4===t.length?(e=t.substring(1,2),e+=e,r=t.substring(2,3),r+=r,n=t.substring(3,4),n+=n):(e=t.substring(1,3),r=t.substring(3,5),n=t.substring(5,7)),e=parseInt(e,16),r=parseInt(r,16),n=parseInt(n,16)}}return{r:e,g:r,b:n,a:i,style:t}},m=function(){return this.ctx.isFillTransparent||0==this.globalAlpha},v=function(){return Boolean(this.ctx.isStrokeTransparent||0==this.globalAlpha)};p.prototype.fillText=function(t,e,r,n){if(isNaN(e)||isNaN(r)||"string"!=typeof t)throw i.error("jsPDF.context2d.fillText: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.fillText");if(n=isNaN(n)?void 0:n,!m.call(this)){var a=q(this.ctx.transform.rotation),o=this.ctx.transform.scaleX;C.call(this,{text:t,x:e,y:r,scale:o,angle:a,align:this.textAlign,maxWidth:n})}},p.prototype.strokeText=function(t,e,r,n){if(isNaN(e)||isNaN(r)||"string"!=typeof t)throw i.error("jsPDF.context2d.strokeText: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.strokeText");if(!v.call(this)){n=isNaN(n)?void 0:n;var a=q(this.ctx.transform.rotation),o=this.ctx.transform.scaleX;C.call(this,{text:t,x:e,y:r,scale:o,renderingMode:"stroke",angle:a,align:this.textAlign,maxWidth:n})}},p.prototype.measureText=function(t){if("string"!=typeof t)throw i.error("jsPDF.context2d.measureText: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.measureText");var e=this.pdf,r=this.pdf.internal.scaleFactor,n=e.internal.getFontSize(),a=e.getStringUnitWidth(t)*n/e.internal.scaleFactor,o=function(t){var e=(t=t||{}).width||0;return Object.defineProperty(this,"width",{get:function(){return e}}),this};return new o({width:a*=Math.round(96*r/72*1e4)/1e4})},p.prototype.scale=function(t,e){if(isNaN(t)||isNaN(e))throw i.error("jsPDF.context2d.scale: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.scale");var r=new l(t,0,0,e,0,0);this.ctx.transform=this.ctx.transform.multiply(r)},p.prototype.rotate=function(t){if(isNaN(t))throw i.error("jsPDF.context2d.rotate: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.rotate");var e=new l(Math.cos(t),Math.sin(t),-Math.sin(t),Math.cos(t),0,0);this.ctx.transform=this.ctx.transform.multiply(e)},p.prototype.translate=function(t,e){if(isNaN(t)||isNaN(e))throw i.error("jsPDF.context2d.translate: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.translate");var r=new l(1,0,0,1,t,e);this.ctx.transform=this.ctx.transform.multiply(r)},p.prototype.transform=function(t,e,r,n,a,o){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||isNaN(a)||isNaN(o))throw i.error("jsPDF.context2d.transform: Invalid arguments",arguments),new Error("Invalid arguments passed to jsPDF.context2d.transform");var s=new l(t,e,r,n,a,o);this.ctx.transform=this.ctx.transform.multiply(s)},p.prototype.setTransform=function(t,e,r,n,i,a){t=isNaN(t)?1:t,e=isNaN(e)?0:e,r=isNaN(r)?0:r,n=isNaN(n)?1:n,i=isNaN(i)?0:i,a=isNaN(a)?0:a,this.ctx.transform=new l(t,e,r,n,i,a)};var b=function(){return this.margin[0]>0||this.margin[1]>0||this.margin[2]>0||this.margin[3]>0};p.prototype.drawImage=function(t,e,r,n,i,a,o,s,c){var h=this.pdf.getImageProperties(t),f=1,d=1,p=1,g=1;void 0!==n&&void 0!==s&&(p=s/n,g=c/i,f=h.width/n*s/n,d=h.height/i*c/i),void 0===a&&(a=e,o=r,e=0,r=0),void 0!==n&&void 0===s&&(s=n,c=i),void 0===n&&void 0===s&&(s=h.width,c=h.height);for(var m,v=this.ctx.transform.decompose(),w=q(v.rotate.shx),A=new l,S=(A=(A=(A=A.multiply(v.translate)).multiply(v.skew)).multiply(v.scale)).applyToRectangle(new u(a-e*p,o-r*g,n*f,i*d)),_=y.call(this,S),P=[],k=0;k<_.length;k+=1)-1===P.indexOf(_[k])&&P.push(_[k]);if(L(P),this.autoPaging)for(var F=P[0],I=P[P.length-1],C=F;C<I+1;C++){this.pdf.setPage(C);var j=this.pdf.internal.pageSize.width-this.margin[3]-this.margin[1],O=1===C?this.posY+this.margin[0]:this.margin[0],B=this.pdf.internal.pageSize.height-this.posY-this.margin[0]-this.margin[2],M=this.pdf.internal.pageSize.height-this.margin[0]-this.margin[2],E=1===C?0:B+(C-2)*M;if(0!==this.ctx.clip_path.length){var D=this.path;m=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=N(m,this.posX+this.margin[3],-E+O+this.ctx.prevPageLastElemOffset),x.call(this,"fill",!0),this.path=D}var R=JSON.parse(JSON.stringify(S));R=N([R],this.posX+this.margin[3],-E+O+this.ctx.prevPageLastElemOffset)[0];var T=(C>F||C<I)&&b.call(this);T&&(this.pdf.saveGraphicsState(),this.pdf.rect(this.margin[3],this.margin[0],j,M,null).clip().discardPath()),this.pdf.addImage(t,"JPEG",R.x,R.y,R.w,R.h,null,null,w),T&&this.pdf.restoreGraphicsState()}else this.pdf.addImage(t,"JPEG",S.x,S.y,S.w,S.h,null,null,w)};var y=function(t,e,r){var n=[];e=e||this.pdf.internal.pageSize.width,r=r||this.pdf.internal.pageSize.height-this.margin[0]-this.margin[2];var i=this.posY+this.ctx.prevPageLastElemOffset;switch(t.type){default:case"mt":case"lt":n.push(Math.floor((t.y+i)/r)+1);break;case"arc":n.push(Math.floor((t.y+i-t.radius)/r)+1),n.push(Math.floor((t.y+i+t.radius)/r)+1);break;case"qct":var a=D(this.ctx.lastPoint.x,this.ctx.lastPoint.y,t.x1,t.y1,t.x,t.y);n.push(Math.floor((a.y+i)/r)+1),n.push(Math.floor((a.y+a.h+i)/r)+1);break;case"bct":var o=R(this.ctx.lastPoint.x,this.ctx.lastPoint.y,t.x1,t.y1,t.x2,t.y2,t.x,t.y);n.push(Math.floor((o.y+i)/r)+1),n.push(Math.floor((o.y+o.h+i)/r)+1);break;case"rect":n.push(Math.floor((t.y+i)/r)+1),n.push(Math.floor((t.y+t.h+i)/r)+1)}for(var s=0;s<n.length;s+=1)for(;this.pdf.internal.getNumberOfPages()<n[s];)w.call(this);return n},w=function(){var t=this.fillStyle,e=this.strokeStyle,r=this.font,n=this.lineCap,i=this.lineWidth,a=this.lineJoin;this.pdf.addPage(),this.fillStyle=t,this.strokeStyle=e,this.font=r,this.lineCap=n,this.lineWidth=i,this.lineJoin=a},N=function(t,e,r){for(var n=0;n<t.length;n++)switch(t[n].type){case"bct":t[n].x2+=e,t[n].y2+=r;case"qct":t[n].x1+=e,t[n].y1+=r;case"mt":case"lt":case"arc":default:t[n].x+=e,t[n].y+=r}return t},L=function(t){return t.sort((function(t,e){return t-e}))},A=function(t,e){for(var r,n,i=this.fillStyle,a=this.strokeStyle,o=this.lineCap,s=this.lineWidth,c=Math.abs(s*this.ctx.transform.scaleX),u=this.lineJoin,l=JSON.parse(JSON.stringify(this.path)),h=JSON.parse(JSON.stringify(this.path)),f=[],d=0;d<h.length;d++)if(void 0!==h[d].x)for(var p=y.call(this,h[d]),g=0;g<p.length;g+=1)-1===f.indexOf(p[g])&&f.push(p[g]);for(var m=0;m<f.length;m++)for(;this.pdf.internal.getNumberOfPages()<f[m];)w.call(this);if(L(f),this.autoPaging)for(var v=f[0],A=f[f.length-1],S=v;S<A+1;S++){this.pdf.setPage(S),this.fillStyle=i,this.strokeStyle=a,this.lineCap=o,this.lineWidth=c,this.lineJoin=u;var _=this.pdf.internal.pageSize.width-this.margin[3]-this.margin[1],P=1===S?this.posY+this.margin[0]:this.margin[0],k=this.pdf.internal.pageSize.height-this.posY-this.margin[0]-this.margin[2],F=this.pdf.internal.pageSize.height-this.margin[0]-this.margin[2],I=1===S?0:k+(S-2)*F;if(0!==this.ctx.clip_path.length){var C=this.path;r=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=N(r,this.posX+this.margin[3],-I+P+this.ctx.prevPageLastElemOffset),x.call(this,t,!0),this.path=C}if(n=JSON.parse(JSON.stringify(l)),this.path=N(n,this.posX+this.margin[3],-I+P+this.ctx.prevPageLastElemOffset),!1===e||0===S){var j=(S>v||S<A)&&b.call(this);j&&(this.pdf.saveGraphicsState(),this.pdf.rect(this.margin[3],this.margin[0],_,F,null).clip().discardPath()),x.call(this,t,e),j&&this.pdf.restoreGraphicsState()}this.lineWidth=s}else this.lineWidth=c,x.call(this,t,e),this.lineWidth=s;this.path=l},x=function(t,e){if(("stroke"!==t||e||!v.call(this))&&("stroke"===t||e||!m.call(this))){for(var r,n,i=[],a=this.path,o=0;o<a.length;o++){var s=a[o];switch(s.type){case"begin":i.push({begin:!0});break;case"close":i.push({close:!0});break;case"mt":i.push({start:s,deltas:[],abs:[]});break;case"lt":var c=i.length;if(a[o-1]&&!isNaN(a[o-1].x)&&(r=[s.x-a[o-1].x,s.y-a[o-1].y],c>0))for(;c>=0;c--)if(!0!==i[c-1].close&&!0!==i[c-1].begin){i[c-1].deltas.push(r),i[c-1].abs.push(s);break}break;case"bct":r=[s.x1-a[o-1].x,s.y1-a[o-1].y,s.x2-a[o-1].x,s.y2-a[o-1].y,s.x-a[o-1].x,s.y-a[o-1].y],i[i.length-1].deltas.push(r);break;case"qct":var u=a[o-1].x+2/3*(s.x1-a[o-1].x),l=a[o-1].y+2/3*(s.y1-a[o-1].y),h=s.x+2/3*(s.x1-s.x),f=s.y+2/3*(s.y1-s.y),d=s.x,p=s.y;r=[u-a[o-1].x,l-a[o-1].y,h-a[o-1].x,f-a[o-1].y,d-a[o-1].x,p-a[o-1].y],i[i.length-1].deltas.push(r);break;case"arc":i.push({deltas:[],abs:[],arc:!0}),Array.isArray(i[i.length-1].abs)&&i[i.length-1].abs.push(s)}}n=e?null:"stroke"===t?"stroke":"fill";for(var g=!1,b=0;b<i.length;b++)if(i[b].arc)for(var y=i[b].abs,w=0;w<y.length;w++){var N=y[w];"arc"===N.type?P.call(this,N.x,N.y,N.radius,N.startAngle,N.endAngle,N.counterclockwise,void 0,e,!g):j.call(this,N.x,N.y),g=!0}else if(!0===i[b].close)this.pdf.internal.out("h"),g=!1;else if(!0!==i[b].begin){var L=i[b].start.x,A=i[b].start.y;O.call(this,i[b].deltas,L,A),g=!0}n&&k.call(this,n),e&&F.call(this)}},S=function(t){var e=this.pdf.internal.getFontSize()/this.pdf.internal.scaleFactor,r=e*(this.pdf.internal.getLineHeightFactor()-1);switch(this.ctx.textBaseline){case"bottom":return t-r;case"top":return t+e-r;case"hanging":return t+e-2*r;case"middle":return t+e/2-r;case"ideographic":return t;case"alphabetic":default:return t}},_=function(t){return t+this.pdf.internal.getFontSize()/this.pdf.internal.scaleFactor*(this.pdf.internal.getLineHeightFactor()-1)};p.prototype.createLinearGradient=function(){var t=function(){};return t.colorStops=[],t.addColorStop=function(t,e){this.colorStops.push([t,e])},t.getColor=function(){return 0===this.colorStops.length?"#000000":this.colorStops[0][1]},t.isCanvasGradient=!0,t},p.prototype.createPattern=function(){return this.createLinearGradient()},p.prototype.createRadialGradient=function(){return this.createLinearGradient()};var P=function(t,e,r,n,i,a,o,s,c){for(var u=M.call(this,r,n,i,a),l=0;l<u.length;l++){var h=u[l];0===l&&(c?I.call(this,h.x1+t,h.y1+e):j.call(this,h.x1+t,h.y1+e)),B.call(this,t,e,h.x2,h.y2,h.x3,h.y3,h.x4,h.y4)}s?F.call(this):k.call(this,o)},k=function(t){switch(t){case"stroke":this.pdf.internal.out("S");break;case"fill":this.pdf.internal.out("f")}},F=function(){this.pdf.clip(),this.pdf.discardPath()},I=function(t,e){this.pdf.internal.out(n(t)+" "+a(e)+" m")},C=function(t){var e;switch(t.align){case"right":case"end":e="right";break;case"center":e="center";break;case"left":case"start":default:e="left"}var r=this.pdf.getTextDimensions(t.text),n=S.call(this,t.y),i=_.call(this,n)-r.h,a=this.ctx.transform.applyToPoint(new c(t.x,n)),o=this.ctx.transform.decompose(),s=new l;s=(s=(s=s.multiply(o.translate)).multiply(o.skew)).multiply(o.scale);for(var h,f,d,p=this.ctx.transform.applyToRectangle(new u(t.x,n,r.w,r.h)),g=s.applyToRectangle(new u(t.x,i,r.w,r.h)),m=y.call(this,g),v=[],w=0;w<m.length;w+=1)-1===v.indexOf(m[w])&&v.push(m[w]);if(L(v),this.autoPaging)for(var A=v[0],P=v[v.length-1],k=A;k<P+1;k++){this.pdf.setPage(k);var F=1===k?this.posY+this.margin[0]:this.margin[0],I=this.pdf.internal.pageSize.height-this.posY-this.margin[0]-this.margin[2],C=this.pdf.internal.pageSize.height-this.margin[2],j=C-this.margin[0],O=this.pdf.internal.pageSize.width-this.margin[1],B=O-this.margin[3],M=1===k?0:I+(k-2)*j;if(0!==this.ctx.clip_path.length){var E=this.path;h=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=N(h,this.posX+this.margin[3],-1*M+F),x.call(this,"fill",!0),this.path=E}var q=N([JSON.parse(JSON.stringify(g))],this.posX+this.margin[3],-M+F+this.ctx.prevPageLastElemOffset)[0];t.scale>=.01&&(f=this.pdf.internal.getFontSize(),this.pdf.setFontSize(f*t.scale),d=this.lineWidth,this.lineWidth=d*t.scale);var D="text"!==this.autoPaging;if(D||q.y+q.h<=C){if(D||q.y>=F&&q.x<=O){var R=D?t.text:this.pdf.splitTextToSize(t.text,t.maxWidth||O-q.x)[0],T=N([JSON.parse(JSON.stringify(p))],this.posX+this.margin[3],-M+F+this.ctx.prevPageLastElemOffset)[0],U=D&&(k>A||k<P)&&b.call(this);U&&(this.pdf.saveGraphicsState(),this.pdf.rect(this.margin[3],this.margin[0],B,j,null).clip().discardPath()),this.pdf.text(R,T.x,T.y,{angle:t.angle,align:e,renderingMode:t.renderingMode}),U&&this.pdf.restoreGraphicsState()}}else q.y<C&&(this.ctx.prevPageLastElemOffset+=C-q.y);t.scale>=.01&&(this.pdf.setFontSize(f),this.lineWidth=d)}else t.scale>=.01&&(f=this.pdf.internal.getFontSize(),this.pdf.setFontSize(f*t.scale),d=this.lineWidth,this.lineWidth=d*t.scale),this.pdf.text(t.text,a.x+this.posX,a.y+this.posY,{angle:t.angle,align:e,renderingMode:t.renderingMode,maxWidth:t.maxWidth}),t.scale>=.01&&(this.pdf.setFontSize(f),this.lineWidth=d)},j=function(t,e,r,i){r=r||0,i=i||0,this.pdf.internal.out(n(t+r)+" "+a(e+i)+" l")},O=function(t,e,r){return this.pdf.lines(t,e,r,null,null)},B=function(t,e,n,i,a,c,u,l){this.pdf.internal.out([r(o(n+t)),r(s(i+e)),r(o(a+t)),r(s(c+e)),r(o(u+t)),r(s(l+e)),"c"].join(" "))},M=function(t,e,r,n){for(var i=2*Math.PI,a=Math.PI/2;e>r;)e-=i;var o=Math.abs(r-e);o<i&&n&&(o=i-o);for(var s=[],c=n?-1:1,u=e;o>1e-5;){var l=u+c*Math.min(o,a);s.push(E.call(this,t,u,l)),o-=Math.abs(l-u),u=l}return s},E=function(t,e,r){var n=(r-e)/2,i=t*Math.cos(n),a=t*Math.sin(n),o=i,s=-a,c=o*o+s*s,u=c+o*i+s*a,l=4/3*(Math.sqrt(2*c*u)-u)/(o*a-s*i),h=o-l*s,f=s+l*o,d=h,p=-f,g=n+e,m=Math.cos(g),v=Math.sin(g);return{x1:t*Math.cos(e),y1:t*Math.sin(e),x2:h*m-f*v,y2:h*v+f*m,x3:d*m-p*v,y3:d*v+p*m,x4:t*Math.cos(r),y4:t*Math.sin(r)}},q=function(t){return 180*t/Math.PI},D=function(t,e,r,n,i,a){var o=t+.5*(r-t),s=e+.5*(n-e),c=i+.5*(r-i),l=a+.5*(n-a),h=Math.min(t,i,o,c),f=Math.max(t,i,o,c),d=Math.min(e,a,s,l),p=Math.max(e,a,s,l);return new u(h,d,f-h,p-d)},R=function(t,e,r,n,i,a,o,s){var c,l,h,f,d,p,g,m,v,b,y,w,N,L,A=r-t,x=n-e,S=i-r,_=a-n,P=o-i,k=s-a;for(l=0;l<41;l++)v=(g=(h=t+(c=l/40)*A)+c*((d=r+c*S)-h))+c*(d+c*(i+c*P-d)-g),b=(m=(f=e+c*x)+c*((p=n+c*_)-f))+c*(p+c*(a+c*k-p)-m),0==l?(y=v,w=b,N=v,L=b):(y=Math.min(y,v),w=Math.min(w,b),N=Math.max(N,v),L=Math.max(L,b));return new u(Math.round(y),Math.round(w),Math.round(N-y),Math.round(L-w))},T=function(){if(this.prevLineDash||this.ctx.lineDash.length||this.ctx.lineDashOffset){var t,e,r=(t=this.ctx.lineDash,e=this.ctx.lineDashOffset,JSON.stringify({lineDash:t,lineDashOffset:e}));this.prevLineDash!==r&&(this.pdf.setLineDash(this.ctx.lineDash,this.ctx.lineDashOffset),this.prevLineDash=r)}}}(M.API);try{require("worker_threads").Worker}catch(t){}var Ut=Uint8Array,zt=Uint16Array,Ht=Uint32Array,Wt=new Ut([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Vt=new Ut([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Gt=new Ut([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Yt=function(t,e){for(var r=new zt(31),n=0;n<31;++n)r[n]=e+=1<<t[n-1];var i=new Ht(r[30]);for(n=1;n<30;++n)for(var a=r[n];a<r[n+1];++a)i[a]=a-r[n]<<5|n;return[r,i]},Jt=Yt(Wt,2),Xt=Jt[0],Kt=Jt[1];Xt[28]=258,Kt[258]=28;for(var Zt=Yt(Vt,0),$t=Zt[0],Qt=Zt[1],te=new zt(32768),ee=0;ee<32768;++ee){var re=(43690&ee)>>>1|(21845&ee)<<1;re=(61680&(re=(52428&re)>>>2|(13107&re)<<2))>>>4|(3855&re)<<4,te[ee]=((65280&re)>>>8|(255&re)<<8)>>>1}var ne=function(t,e,r){for(var n=t.length,i=0,a=new zt(e);i<n;++i)++a[t[i]-1];var o,s=new zt(e);for(i=0;i<e;++i)s[i]=s[i-1]+a[i-1]<<1;if(r){o=new zt(1<<e);var c=15-e;for(i=0;i<n;++i)if(t[i])for(var u=i<<4|t[i],l=e-t[i],h=s[t[i]-1]++<<l,f=h|(1<<l)-1;h<=f;++h)o[te[h]>>>c]=u}else for(o=new zt(n),i=0;i<n;++i)o[i]=te[s[t[i]-1]++]>>>15-t[i];return o},ie=new Ut(288);for(ee=0;ee<144;++ee)ie[ee]=8;for(ee=144;ee<256;++ee)ie[ee]=9;for(ee=256;ee<280;++ee)ie[ee]=7;for(ee=280;ee<288;++ee)ie[ee]=8;var ae=new Ut(32);for(ee=0;ee<32;++ee)ae[ee]=5;var oe=ne(ie,9,0),se=ne(ie,9,1),ce=ne(ae,5,0),ue=ne(ae,5,1),le=function(t){for(var e=t[0],r=1;r<t.length;++r)t[r]>e&&(e=t[r]);return e},he=function(t,e,r){var n=e/8>>0;return(t[n]|t[n+1]<<8)>>>(7&e)&r},fe=function(t,e){var r=e/8>>0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>>(7&e)},de=function(t){return(t/8>>0)+(7&t&&1)},pe=function(t,e,r){(null==e||e<0)&&(e=0),(null==r||r>t.length)&&(r=t.length);var n=new(t instanceof zt?zt:t instanceof Ht?Ht:Ut)(r-e);return n.set(t.subarray(e,r)),n},ge=function(t,e,r){r<<=7&e;var n=e/8>>0;t[n]|=r,t[n+1]|=r>>>8},me=function(t,e,r){r<<=7&e;var n=e/8>>0;t[n]|=r,t[n+1]|=r>>>8,t[n+2]|=r>>>16},ve=function(t,e){for(var r=[],n=0;n<t.length;++n)t[n]&&r.push({s:n,f:t[n]});var i=r.length,a=r.slice();if(!i)return[new Ut(0),0];if(1==i){var o=new Ut(r[0].s+1);return o[r[0].s]=1,[o,1]}r.sort((function(t,e){return t.f-e.f})),r.push({s:-1,f:25001});var s=r[0],c=r[1],u=0,l=1,h=2;for(r[0]={s:-1,f:s.f+c.f,l:s,r:c};l!=i-1;)s=r[r[u].f<r[h].f?u++:h++],c=r[u!=l&&r[u].f<r[h].f?u++:h++],r[l++]={s:-1,f:s.f+c.f,l:s,r:c};var f=a[0].s;for(n=1;n<i;++n)a[n].s>f&&(f=a[n].s);var d=new zt(f+1),p=be(r[l-1],d,0);if(p>e){n=0;var g=0,m=p-e,v=1<<m;for(a.sort((function(t,e){return d[e.s]-d[t.s]||t.f-e.f}));n<i;++n){var b=a[n].s;if(!(d[b]>e))break;g+=v-(1<<p-d[b]),d[b]=e}for(g>>>=m;g>0;){var y=a[n].s;d[y]<e?g-=1<<e-d[y]++-1:++n}for(;n>=0&&g;--n){var w=a[n].s;d[w]==e&&(--d[w],++g)}p=e}return[new Ut(d),p]},be=function(t,e,r){return-1==t.s?Math.max(be(t.l,e,r+1),be(t.r,e,r+1)):e[t.s]=r},ye=function(t){for(var e=t.length;e&&!t[--e];);for(var r=new zt(++e),n=0,i=t[0],a=1,o=function(t){r[n++]=t},s=1;s<=e;++s)if(t[s]==i&&s!=e)++a;else{if(!i&&a>2){for(;a>138;a-=138)o(32754);a>2&&(o(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(o(i),--a;a>6;a-=6)o(8304);a>2&&(o(a-3<<5|8208),a=0)}for(;a--;)o(i);a=1,i=t[s]}return[r.subarray(0,n),e]},we=function(t,e){for(var r=0,n=0;n<e.length;++n)r+=t[n]*e[n];return r},Ne=function(t,e,r){var n=r.length,i=de(e+2);t[i]=255&n,t[i+1]=n>>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a<n;++a)t[i+a+4]=r[a];return 8*(i+4+n)},Le=function(t,e,r,n,i,a,o,s,c,u,l){ge(e,l++,r),++i[256];for(var h=ve(i,15),f=h[0],d=h[1],p=ve(a,15),g=p[0],m=p[1],v=ye(f),b=v[0],y=v[1],w=ye(g),N=w[0],L=w[1],A=new zt(19),x=0;x<b.length;++x)A[31&b[x]]++;for(x=0;x<N.length;++x)A[31&N[x]]++;for(var S=ve(A,7),_=S[0],P=S[1],k=19;k>4&&!_[Gt[k-1]];--k);var F,I,C,j,O=u+5<<3,B=we(i,ie)+we(a,ae)+o,M=we(i,f)+we(a,g)+o+14+3*k+we(A,_)+(2*A[16]+3*A[17]+7*A[18]);if(O<=B&&O<=M)return Ne(e,l,t.subarray(c,c+u));if(ge(e,l,1+(M<B)),l+=2,M<B){F=ne(f,d,0),I=f,C=ne(g,m,0),j=g;var E=ne(_,P,0);ge(e,l,y-257),ge(e,l+5,L-1),ge(e,l+10,k-4),l+=14;for(x=0;x<k;++x)ge(e,l+3*x,_[Gt[x]]);l+=3*k;for(var q=[b,N],D=0;D<2;++D){var R=q[D];for(x=0;x<R.length;++x){var T=31&R[x];ge(e,l,E[T]),l+=_[T],T>15&&(ge(e,l,R[x]>>>5&127),l+=R[x]>>>12)}}}else F=oe,I=ie,C=ce,j=ae;for(x=0;x<s;++x)if(n[x]>255){T=n[x]>>>18&31;me(e,l,F[T+257]),l+=I[T+257],T>7&&(ge(e,l,n[x]>>>23&31),l+=Wt[T]);var U=31&n[x];me(e,l,C[U]),l+=j[U],U>3&&(me(e,l,n[x]>>>5&8191),l+=Vt[U])}else me(e,l,F[n[x]]),l+=I[n[x]];return me(e,l,F[256]),l+I[256]},Ae=new Ht([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),xe=new Ut(0),Se=function(t,e,r,n,i){return function(t,e,r,n,i,a){var o=t.length,s=new Ut(n+o+5*(1+Math.floor(o/7e3))+i),c=s.subarray(n,s.length-i),u=0;if(!e||o<8)for(var l=0;l<=o;l+=65535){var h=l+65535;h<o?u=Ne(c,u,t.subarray(l,h)):(c[l]=a,u=Ne(c,u,t.subarray(l,o)))}else{for(var f=Ae[e-1],d=f>>>13,p=8191&f,g=(1<<r)-1,m=new zt(32768),v=new zt(g+1),b=Math.ceil(r/3),y=2*b,w=function(e){return(t[e]^t[e+1]<<b^t[e+2]<<y)&g},N=new Ht(25e3),L=new zt(288),A=new zt(32),x=0,S=0,_=(l=0,0),P=0,k=0;l<o;++l){var F=w(l),I=32767&l,C=v[F];if(m[I]=C,v[F]=I,P<=l){var j=o-l;if((x>7e3||_>24576)&&j>423){u=Le(t,c,0,N,L,A,S,_,k,l-k,u),_=x=S=0,k=l;for(var O=0;O<286;++O)L[O]=0;for(O=0;O<30;++O)A[O]=0}var B=2,M=0,E=p,q=I-C&32767;if(j>2&&F==w(l-q))for(var D=Math.min(d,j)-1,R=Math.min(32767,l),T=Math.min(258,j);q<=R&&--E&&I!=C;){if(t[l+B]==t[l+B-q]){for(var U=0;U<T&&t[l+U]==t[l+U-q];++U);if(U>B){if(B=U,M=q,U>D)break;var z=Math.min(q,U-2),H=0;for(O=0;O<z;++O){var W=l-q+O+32768&32767,V=W-m[W]+32768&32767;V>H&&(H=V,C=W)}}}q+=(I=C)-(C=m[I])+32768&32767}if(M){N[_++]=268435456|Kt[B]<<18|Qt[M];var G=31&Kt[B],Y=31&Qt[M];S+=Wt[G]+Vt[Y],++L[257+G],++A[Y],P=l+B,++x}else N[_++]=t[l],++L[t[l]]}}u=Le(t,c,a,N,L,A,S,_,k,l-k,u),a||(u=Ne(c,u,xe))}return pe(s,0,n+de(u)+i)}(t,null==e.level?6:e.level,null==e.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(t.length)))):12+e.mem,r,n,!i)};function _e(t,e){void 0===e&&(e={});var r=function(){var t=1,e=0;return{p:function(r){for(var n=t,i=e,a=r.length,o=0;o!=a;){for(var s=Math.min(o+5552,a);o<s;++o)i+=n+=r[o];n%=65521,i%=65521}t=n,e=i},d:function(){return(t>>>8<<16|(255&e)<<8|e>>>8)+2*((255&t)<<23)}}}();r.p(t);var n=Se(t,e,2,4);return function(t,e){var r=e.level,n=0==r?0:r<6?1:9==r?3:2;t[0]=120,t[1]=n<<6|(n?32-2*n:1)}(n,e),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(n,n.length-4,r.d()),n}function Pe(t,e){return function(t,e,r){var n=t.length,i=!e||r,a=!r||r.i;r||(r={}),e||(e=new Ut(3*n));var o=function(t){var r=e.length;if(t>r){var n=new Ut(Math.max(2*r,t));n.set(e),e=n}},s=r.f||0,c=r.p||0,u=r.b||0,l=r.l,h=r.d,f=r.m,d=r.n,p=8*n;do{if(!l){r.f=s=he(t,c,1);var g=he(t,c+1,3);if(c+=3,!g){var m=t[(P=de(c)+4)-4]|t[P-3]<<8,v=P+m;if(v>n){if(a)throw"unexpected EOF";break}i&&o(u+m),e.set(t.subarray(P,v),u),r.b=u+=m,r.p=c=8*v;continue}if(1==g)l=se,h=ue,f=9,d=5;else{if(2!=g)throw"invalid block type";var b=he(t,c,31)+257,y=he(t,c+10,15)+4,w=b+he(t,c+5,31)+1;c+=14;for(var N=new Ut(w),L=new Ut(19),A=0;A<y;++A)L[Gt[A]]=he(t,c+3*A,7);c+=3*y;var x=le(L),S=(1<<x)-1;if(!a&&c+w*(x+7)>p)break;var _=ne(L,x,1);for(A=0;A<w;){var P,k=_[he(t,c,S)];if(c+=15&k,(P=k>>>4)<16)N[A++]=P;else{var F=0,I=0;for(16==P?(I=3+he(t,c,3),c+=2,F=N[A-1]):17==P?(I=3+he(t,c,7),c+=3):18==P&&(I=11+he(t,c,127),c+=7);I--;)N[A++]=F}}var C=N.subarray(0,b),j=N.subarray(b);f=le(C),d=le(j),l=ne(C,f,1),h=ne(j,d,1)}if(c>p)throw"unexpected EOF"}i&&o(u+131072);for(var O=(1<<f)-1,B=(1<<d)-1,M=f+d+18;a||c+M<p;){var E=(F=l[fe(t,c)&O])>>>4;if((c+=15&F)>p)throw"unexpected EOF";if(!F)throw"invalid length/literal";if(E<256)e[u++]=E;else{if(256==E){l=null;break}var q=E-254;if(E>264){var D=Wt[A=E-257];q=he(t,c,(1<<D)-1)+Xt[A],c+=D}var R=h[fe(t,c)&B],T=R>>>4;if(!R)throw"invalid distance";c+=15&R;j=$t[T];if(T>3){D=Vt[T];j+=fe(t,c)&(1<<D)-1,c+=D}if(c>p)throw"unexpected EOF";i&&o(u+131072);for(var U=u+q;u<U;u+=4)e[u]=e[u-j],e[u+1]=e[u+1-j],e[u+2]=e[u+2-j],e[u+3]=e[u+3-j];u=U}}r.l=l,r.p=c,r.b=u,l&&(s=1,r.m=f,r.d=h,r.n=d)}while(!s);return u==e.length?e:pe(e,0,u)}((function(t){if(8!=(15&t[0])||t[0]>>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(t),t.subarray(2,-4)),e)}
+/**
+   * @license
+   * jsPDF filters PlugIn
+   * Copyright (c) 2014 Aras Abbasi
+   *
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */!function(t){var e=function(t){var e,r,n,i,a,o,s,c,u,l;for(/[^\x00-\xFF]/.test(t),r=[],n=0,i=(t+=e="\0\0\0\0".slice(t.length%4||4)).length;i>n;n+=4)0!==(a=(t.charCodeAt(n)<<24)+(t.charCodeAt(n+1)<<16)+(t.charCodeAt(n+2)<<8)+t.charCodeAt(n+3))?(o=(a=((a=((a=((a=(a-(l=a%85))/85)-(u=a%85))/85)-(c=a%85))/85)-(s=a%85))/85)%85,r.push(o+33,s+33,c+33,u+33,l+33)):r.push(122);return function(t,e){for(var r=e;r>0;r--)t.pop()}(r,e.length),String.fromCharCode.apply(String,r)+"~>"},r=function(t){var e,r,n,i,a,o=String,s="length",c=255,u="charCodeAt",l="slice",h="replace";for(t[l](-2),t=t[l](0,-2)[h](/\s/g,"")[h]("z","!!!!!"),n=[],i=0,a=(t+=e="uuuuu"[l](t[s]%5||5))[s];a>i;i+=5)r=52200625*(t[u](i)-33)+614125*(t[u](i+1)-33)+7225*(t[u](i+2)-33)+85*(t[u](i+3)-33)+(t[u](i+4)-33),n.push(c&r>>24,c&r>>16,c&r>>8,c&r);return function(t,e){for(var r=e;r>0;r--)t.pop()}(n,e[s]),o.fromCharCode.apply(o,n)},n=function(t){var e=new RegExp(/^([0-9A-Fa-f]{2})+$/);if(-1!==(t=t.replace(/\s/g,"")).indexOf(">")&&(t=t.substr(0,t.indexOf(">"))),t.length%2&&(t+="0"),!1===e.test(t))return"";for(var r="",n=0;n<t.length;n+=2)r+=String.fromCharCode("0x"+(t[n]+t[n+1]));return r},i=function(t){for(var e=new Uint8Array(t.length),r=t.length;r--;)e[r]=t.charCodeAt(r);return t=(e=_e(e)).reduce((function(t,e){return t+String.fromCharCode(e)}),"")};t.processDataByFilters=function(t,a){var o=0,s=t||"",c=[];for("string"==typeof(a=a||[])&&(a=[a]),o=0;o<a.length;o+=1)switch(a[o]){case"ASCII85Decode":case"/ASCII85Decode":s=r(s),c.push("/ASCII85Encode");break;case"ASCII85Encode":case"/ASCII85Encode":s=e(s),c.push("/ASCII85Decode");break;case"ASCIIHexDecode":case"/ASCIIHexDecode":s=n(s),c.push("/ASCIIHexEncode");break;case"ASCIIHexEncode":case"/ASCIIHexEncode":s=s.split("").map((function(t){return("0"+t.charCodeAt().toString(16)).slice(-2)})).join("")+">",c.push("/ASCIIHexDecode");break;case"FlateEncode":case"/FlateEncode":s=i(s),c.push("/FlateDecode");break;default:throw new Error('The filter: "'+a[o]+'" is not implemented')}return{data:s,reverseChain:c.reverse().join(" ")}}}(M.API),
+/**
+   * @license
+   * jsPDF fileloading PlugIn
+   * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)
+   *
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */
+function(t){t.loadFile=function(t,e,r){return function(t,e,r){e=!1!==e,r="function"==typeof r?r:function(){};var n=void 0;try{n=function(t,e,r){var n=new XMLHttpRequest,i=0,a=function(t){var e=t.length,r=[],n=String.fromCharCode;for(i=0;i<e;i+=1)r.push(n(255&t.charCodeAt(i)));return r.join("")};if(n.open("GET",t,!e),n.overrideMimeType("text/plain; charset=x-user-defined"),!1===e&&(n.onload=function(){200===n.status?r(a(this.responseText)):r(void 0)}),n.send(null),e&&200===n.status)return a(n.responseText)}(t,e,r)}catch(t){}return n}(t,e,r)},t.loadImageFile=t.loadFile}(M.API),function(n){function i(){return(r.html2canvas?Promise.resolve(r.html2canvas):"object"===(void 0===t?"undefined":e(t))&&"undefined"!=typeof module?new Promise((function(t,e){try{t(require("html2canvas"))}catch(t){e(t)}})):"function"==typeof define&&define.amd?new Promise((function(t,e){try{require(["html2canvas"],t)}catch(t){e(t)}})):Promise.reject(new Error("Could not load html2canvas"))).catch((function(t){return Promise.reject(new Error("Could not load html2canvas: "+t))})).then((function(t){return t.default?t.default:t}))}function a(){return(r.DOMPurify?Promise.resolve(r.DOMPurify):"object"===(void 0===t?"undefined":e(t))&&"undefined"!=typeof module?new Promise((function(t,e){try{t(require("dompurify"))}catch(t){e(t)}})):"function"==typeof define&&define.amd?new Promise((function(t,e){try{require(["dompurify"],t)}catch(t){e(t)}})):Promise.reject(new Error("Could not load dompurify"))).catch((function(t){return Promise.reject(new Error("Could not load dompurify: "+t))})).then((function(t){return t.default?t.default:t}))}var o=function(t){var r=e(t);return"undefined"===r?"undefined":"string"===r||t instanceof String?"string":"number"===r||t instanceof Number?"number":"function"===r||t instanceof Function?"function":t&&t.constructor===Array?"array":t&&1===t.nodeType?"element":"object"===r?"object":"unknown"},s=function(t,e){var r=document.createElement(t);for(var n in e.className&&(r.className=e.className),e.innerHTML&&e.dompurify&&(r.innerHTML=e.dompurify.sanitize(e.innerHTML)),e.style)r.style[n]=e.style[n];return r},c=function t(e){var r=Object.assign(t.convert(Promise.resolve()),JSON.parse(JSON.stringify(t.template))),n=t.convert(Promise.resolve(),r);return n=(n=n.setProgress(1,t,1,[t])).set(e)};(c.prototype=Object.create(Promise.prototype)).constructor=c,c.convert=function(t,e){return t.__proto__=e||c.prototype,t},c.template={prop:{src:null,container:null,overlay:null,canvas:null,img:null,pdf:null,pageSize:null,callback:function(){}},progress:{val:0,state:null,n:0,stack:[]},opt:{filename:"file.pdf",margin:[0,0,0,0],enableLinks:!0,x:0,y:0,html2canvas:{},jsPDF:{},backgroundColor:"transparent"}},c.prototype.from=function(t,e){return this.then((function(){switch(e=e||function(t){switch(o(t)){case"string":return"string";case"element":return"canvas"===t.nodeName.toLowerCase()?"canvas":"element";default:return"unknown"}}(t)){case"string":return this.then(a).then((function(e){return this.set({src:s("div",{innerHTML:t,dompurify:e})})}));case"element":return this.set({src:t});case"canvas":return this.set({canvas:t});case"img":return this.set({img:t});default:return this.error("Unknown source type.")}}))},c.prototype.to=function(t){switch(t){case"container":return this.toContainer();case"canvas":return this.toCanvas();case"img":return this.toImg();case"pdf":return this.toPdf();default:return this.error("Invalid target.")}},c.prototype.toContainer=function(){return this.thenList([function(){return this.prop.src||this.error("Cannot duplicate - no source HTML.")},function(){return this.prop.pageSize||this.setPageSize()}]).then((function(){var t={position:"relative",display:"inline-block",width:("number"!=typeof this.opt.width||isNaN(this.opt.width)||"number"!=typeof this.opt.windowWidth||isNaN(this.opt.windowWidth)?Math.max(this.prop.src.clientWidth,this.prop.src.scrollWidth,this.prop.src.offsetWidth):this.opt.windowWidth)+"px",left:0,right:0,top:0,margin:"auto",backgroundColor:this.opt.backgroundColor},e=function t(e,r){for(var n=3===e.nodeType?document.createTextNode(e.nodeValue):e.cloneNode(!1),i=e.firstChild;i;i=i.nextSibling)!0!==r&&1===i.nodeType&&"SCRIPT"===i.nodeName||n.appendChild(t(i,r));return 1===e.nodeType&&("CANVAS"===e.nodeName?(n.width=e.width,n.height=e.height,n.getContext("2d").drawImage(e,0,0)):"TEXTAREA"!==e.nodeName&&"SELECT"!==e.nodeName||(n.value=e.value),n.addEventListener("load",(function(){n.scrollTop=e.scrollTop,n.scrollLeft=e.scrollLeft}),!0)),n}(this.prop.src,this.opt.html2canvas.javascriptEnabled);"BODY"===e.tagName&&(t.height=Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)+"px"),this.prop.overlay=s("div",{className:"html2pdf__overlay",style:{position:"fixed",overflow:"hidden",zIndex:1e3,left:"-100000px",right:0,bottom:0,top:0}}),this.prop.container=s("div",{className:"html2pdf__container",style:t}),this.prop.container.appendChild(e),this.prop.container.firstChild.appendChild(s("div",{style:{clear:"both",border:"0 none transparent",margin:0,padding:0,height:0}})),this.prop.container.style.float="none",this.prop.overlay.appendChild(this.prop.container),document.body.appendChild(this.prop.overlay),this.prop.container.firstChild.style.position="relative",this.prop.container.height=Math.max(this.prop.container.firstChild.clientHeight,this.prop.container.firstChild.scrollHeight,this.prop.container.firstChild.offsetHeight)+"px"}))},c.prototype.toCanvas=function(){var t=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(t).then(i).then((function(t){var e=Object.assign({},this.opt.html2canvas);return delete e.onrendered,t(this.prop.container,e)})).then((function(t){(this.opt.html2canvas.onrendered||function(){})(t),this.prop.canvas=t,document.body.removeChild(this.prop.overlay)}))},c.prototype.toContext2d=function(){var t=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(t).then(i).then((function(t){var e=this.opt.jsPDF,r=this.opt.fontFaces,n="number"!=typeof this.opt.width||isNaN(this.opt.width)||"number"!=typeof this.opt.windowWidth||isNaN(this.opt.windowWidth)?1:this.opt.width/this.opt.windowWidth,i=Object.assign({async:!0,allowTaint:!0,scale:n,scrollX:this.opt.scrollX||0,scrollY:this.opt.scrollY||0,backgroundColor:"#ffffff",imageTimeout:15e3,logging:!0,proxy:null,removeContainer:!0,foreignObjectRendering:!1,useCORS:!1},this.opt.html2canvas);if(delete i.onrendered,e.context2d.autoPaging=void 0===this.opt.autoPaging||this.opt.autoPaging,e.context2d.posX=this.opt.x,e.context2d.posY=this.opt.y,e.context2d.margin=this.opt.margin,e.context2d.fontFaces=r,r)for(var a=0;a<r.length;++a){var o=r[a],s=o.src.find((function(t){return"truetype"===t.format}));s&&e.addFont(s.url,o.ref.name,o.ref.style)}return i.windowHeight=i.windowHeight||0,i.windowHeight=0==i.windowHeight?Math.max(this.prop.container.clientHeight,this.prop.container.scrollHeight,this.prop.container.offsetHeight):i.windowHeight,e.context2d.save(!0),t(this.prop.container,i)})).then((function(t){this.opt.jsPDF.context2d.restore(!0),(this.opt.html2canvas.onrendered||function(){})(t),this.prop.canvas=t,document.body.removeChild(this.prop.overlay)}))},c.prototype.toImg=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then((function(){var t=this.prop.canvas.toDataURL("image/"+this.opt.image.type,this.opt.image.quality);this.prop.img=document.createElement("img"),this.prop.img.src=t}))},c.prototype.toPdf=function(){return this.thenList([function(){return this.toContext2d()}]).then((function(){this.prop.pdf=this.prop.pdf||this.opt.jsPDF}))},c.prototype.output=function(t,e,r){return"img"===(r=r||"pdf").toLowerCase()||"image"===r.toLowerCase()?this.outputImg(t,e):this.outputPdf(t,e)},c.prototype.outputPdf=function(t,e){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then((function(){return this.prop.pdf.output(t,e)}))},c.prototype.outputImg=function(t){return this.thenList([function(){return this.prop.img||this.toImg()}]).then((function(){switch(t){case void 0:case"img":return this.prop.img;case"datauristring":case"dataurlstring":return this.prop.img.src;case"datauri":case"dataurl":return document.location.href=this.prop.img.src;default:throw'Image output type "'+t+'" is not supported.'}}))},c.prototype.save=function(t){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).set(t?{filename:t}:null).then((function(){this.prop.pdf.save(this.opt.filename)}))},c.prototype.doCallback=function(){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then((function(){this.prop.callback(this.prop.pdf)}))},c.prototype.set=function(t){if("object"!==o(t))return this;var e=Object.keys(t||{}).map((function(e){if(e in c.template.prop)return function(){this.prop[e]=t[e]};switch(e){case"margin":return this.setMargin.bind(this,t.margin);case"jsPDF":return function(){return this.opt.jsPDF=t.jsPDF,this.setPageSize()};case"pageSize":return this.setPageSize.bind(this,t.pageSize);default:return function(){this.opt[e]=t[e]}}}),this);return this.then((function(){return this.thenList(e)}))},c.prototype.get=function(t,e){return this.then((function(){var r=t in c.template.prop?this.prop[t]:this.opt[t];return e?e(r):r}))},c.prototype.setMargin=function(t){return this.then((function(){switch(o(t)){case"number":t=[t,t,t,t];case"array":if(2===t.length&&(t=[t[0],t[1],t[0],t[1]]),4===t.length)break;default:return this.error("Invalid margin array.")}this.opt.margin=t})).then(this.setPageSize)},c.prototype.setPageSize=function(t){function e(t,e){return Math.floor(t*e/72*96)}return this.then((function(){(t=t||M.getPageSize(this.opt.jsPDF)).hasOwnProperty("inner")||(t.inner={width:t.width-this.opt.margin[1]-this.opt.margin[3],height:t.height-this.opt.margin[0]-this.opt.margin[2]},t.inner.px={width:e(t.inner.width,t.k),height:e(t.inner.height,t.k)},t.inner.ratio=t.inner.height/t.inner.width),this.prop.pageSize=t}))},c.prototype.setProgress=function(t,e,r,n){return null!=t&&(this.progress.val=t),null!=e&&(this.progress.state=e),null!=r&&(this.progress.n=r),null!=n&&(this.progress.stack=n),this.progress.ratio=this.progress.val/this.progress.state,this},c.prototype.updateProgress=function(t,e,r,n){return this.setProgress(t?this.progress.val+t:null,e||null,r?this.progress.n+r:null,n?this.progress.stack.concat(n):null)},c.prototype.then=function(t,e){var r=this;return this.thenCore(t,e,(function(t,e){return r.updateProgress(null,null,1,[t]),Promise.prototype.then.call(this,(function(e){return r.updateProgress(null,t),e})).then(t,e).then((function(t){return r.updateProgress(1),t}))}))},c.prototype.thenCore=function(t,e,r){r=r||Promise.prototype.then;t&&(t=t.bind(this)),e&&(e=e.bind(this));var n=-1!==Promise.toString().indexOf("[native code]")&&"Promise"===Promise.name?this:c.convert(Object.assign({},this),Promise.prototype),i=r.call(n,t,e);return c.convert(i,this.__proto__)},c.prototype.thenExternal=function(t,e){return Promise.prototype.then.call(this,t,e)},c.prototype.thenList=function(t){var e=this;return t.forEach((function(t){e=e.thenCore(t)})),e},c.prototype.catch=function(t){t&&(t=t.bind(this));var e=Promise.prototype.catch.call(this,t);return c.convert(e,this)},c.prototype.catchExternal=function(t){return Promise.prototype.catch.call(this,t)},c.prototype.error=function(t){return this.then((function(){throw new Error(t)}))},c.prototype.using=c.prototype.set,c.prototype.saveAs=c.prototype.save,c.prototype.export=c.prototype.output,c.prototype.run=c.prototype.then,M.getPageSize=function(t,r,n){if("object"===e(t)){var i=t;t=i.orientation,r=i.unit||r,n=i.format||n}r=r||"mm",n=n||"a4",t=(""+(t||"P")).toLowerCase();var a,o=(""+n).toLowerCase(),s={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],"government-letter":[576,756],legal:[612,1008],"junior-legal":[576,360],ledger:[1224,792],tabloid:[792,1224],"credit-card":[153,243]};switch(r){case"pt":a=1;break;case"mm":a=72/25.4;break;case"cm":a=72/2.54;break;case"in":a=72;break;case"px":a=.75;break;case"pc":case"em":a=12;break;case"ex":a=6;break;default:throw"Invalid unit: "+r}var c,u=0,l=0;if(s.hasOwnProperty(o))u=s[o][1]/a,l=s[o][0]/a;else try{u=n[1],l=n[0]}catch(t){throw new Error("Invalid format: "+n)}if("p"===t||"portrait"===t)t="p",l>u&&(c=l,l=u,u=c);else{if("l"!==t&&"landscape"!==t)throw"Invalid orientation: "+t;t="l",u>l&&(c=l,l=u,u=c)}return{width:l,height:u,unit:r,k:a,orientation:t}},n.html=function(t,e){(e=e||{}).callback=e.callback||function(){},e.html2canvas=e.html2canvas||{},e.html2canvas.canvas=e.html2canvas.canvas||this.canvas,e.jsPDF=e.jsPDF||this,e.fontFaces=e.fontFaces?e.fontFaces.map(Ct):null;var r=new c(e);return e.worker?r:r.from(t).doCallback()}}(M.API),
+/**
+   * @license
+   * ====================================================================
+   * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com
+   *
+   * Permission is hereby granted, free of charge, to any person obtaining
+   * a copy of this software and associated documentation files (the
+   * "Software"), to deal in the Software without restriction, including
+   * without limitation the rights to use, copy, modify, merge, publish,
+   * distribute, sublicense, and/or sell copies of the Software, and to
+   * permit persons to whom the Software is furnished to do so, subject to
+   * the following conditions:
+   *
+   * The above copyright notice and this permission notice shall be
+   * included in all copies or substantial portions of the Software.
+   *
+   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+   * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+   * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+   * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   * ====================================================================
+   */
+function(t){var e,r,n;t.addJS=function(t){return n=t,this.internal.events.subscribe("postPutResources",(function(){e=this.internal.newObject(),this.internal.out("<<"),this.internal.out("/Names [(EmbeddedJS) "+(e+1)+" 0 R]"),this.internal.out(">>"),this.internal.out("endobj"),r=this.internal.newObject(),this.internal.out("<<"),this.internal.out("/S /JavaScript"),this.internal.out("/JS ("+n+")"),this.internal.out(">>"),this.internal.out("endobj")})),this.internal.events.subscribe("putCatalog",(function(){void 0!==e&&void 0!==r&&this.internal.out("/Names <</JavaScript "+e+" 0 R>>")})),this}}(M.API),
+/**
+   * @license
+   * Copyright (c) 2014 Steven Spungin (TwelveTone LLC)  steven@twelvetone.tv
+   *
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */
+function(t){var e;t.events.push(["postPutResources",function(){var t=this,r=/^(\d+) 0 obj$/;if(this.outline.root.children.length>0)for(var n=t.outline.render().split(/\r\n/),i=0;i<n.length;i++){var a=n[i],o=r.exec(a);if(null!=o){var s=o[1];t.internal.newObjectDeferredBegin(s,!1)}t.internal.write(a)}if(this.outline.createNamedDestinations){var c=this.internal.pages.length,u=[];for(i=0;i<c;i++){var l=t.internal.newObject();u.push(l);var h=t.internal.getPageInfo(i+1);t.internal.write("<< /D["+h.objId+" 0 R /XYZ null null null]>> endobj")}var f=t.internal.newObject();t.internal.write("<< /Names [ ");for(i=0;i<u.length;i++)t.internal.write("(page_"+(i+1)+")"+u[i]+" 0 R");t.internal.write(" ] >>","endobj"),e=t.internal.newObject(),t.internal.write("<< /Dests "+f+" 0 R"),t.internal.write(">>","endobj")}}]),t.events.push(["putCatalog",function(){this.outline.root.children.length>0&&(this.internal.write("/Outlines",this.outline.makeRef(this.outline.root)),this.outline.createNamedDestinations&&this.internal.write("/Names "+e+" 0 R"))}]),t.events.push(["initialized",function(){var t=this;t.outline={createNamedDestinations:!1,root:{children:[]}},t.outline.add=function(t,e,r){var n={title:e,options:r,children:[]};return null==t&&(t=this.root),t.children.push(n),n},t.outline.render=function(){return this.ctx={},this.ctx.val="",this.ctx.pdf=t,this.genIds_r(this.root),this.renderRoot(this.root),this.renderItems(this.root),this.ctx.val},t.outline.genIds_r=function(e){e.id=t.internal.newObjectDeferred();for(var r=0;r<e.children.length;r++)this.genIds_r(e.children[r])},t.outline.renderRoot=function(t){this.objStart(t),this.line("/Type /Outlines"),t.children.length>0&&(this.line("/First "+this.makeRef(t.children[0])),this.line("/Last "+this.makeRef(t.children[t.children.length-1]))),this.line("/Count "+this.count_r({count:0},t)),this.objEnd()},t.outline.renderItems=function(e){for(var r=this.ctx.pdf.internal.getVerticalCoordinateString,n=0;n<e.children.length;n++){var i=e.children[n];this.objStart(i),this.line("/Title "+this.makeString(i.title)),this.line("/Parent "+this.makeRef(e)),n>0&&this.line("/Prev "+this.makeRef(e.children[n-1])),n<e.children.length-1&&this.line("/Next "+this.makeRef(e.children[n+1])),i.children.length>0&&(this.line("/First "+this.makeRef(i.children[0])),this.line("/Last "+this.makeRef(i.children[i.children.length-1])));var a=this.count=this.count_r({count:0},i);if(a>0&&this.line("/Count "+a),i.options&&i.options.pageNumber){var o=t.internal.getPageInfo(i.options.pageNumber);this.line("/Dest ["+o.objId+" 0 R /XYZ 0 "+r(0)+" 0]")}this.objEnd()}for(var s=0;s<e.children.length;s++)this.renderItems(e.children[s])},t.outline.line=function(t){this.ctx.val+=t+"\r\n"},t.outline.makeRef=function(t){return t.id+" 0 R"},t.outline.makeString=function(e){return"("+t.internal.pdfEscape(e)+")"},t.outline.objStart=function(t){this.ctx.val+="\r\n"+t.id+" 0 obj\r\n<<\r\n"},t.outline.objEnd=function(){this.ctx.val+=">> \r\nendobj\r\n"},t.outline.count_r=function(t,e){for(var r=0;r<e.children.length;r++)t.count++,this.count_r(t,e.children[r]);return t.count}}])}(M.API),
+/**
+   * @license
+   *
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */
+function(t){var e=[192,193,194,195,196,197,198,199];t.processJPEG=function(t,r,n,i,a,o){var s,c=this.decode.DCT_DECODE,u=null;if("string"==typeof t||this.__addimage__.isArrayBuffer(t)||this.__addimage__.isArrayBufferView(t)){switch(t=a||t,t=this.__addimage__.isArrayBuffer(t)?new Uint8Array(t):t,(s=function(t){for(var r,n=256*t.charCodeAt(4)+t.charCodeAt(5),i=t.length,a={width:0,height:0,numcomponents:1},o=4;o<i;o+=2){if(o+=n,-1!==e.indexOf(t.charCodeAt(o+1))){r=256*t.charCodeAt(o+5)+t.charCodeAt(o+6),a={width:256*t.charCodeAt(o+7)+t.charCodeAt(o+8),height:r,numcomponents:t.charCodeAt(o+9)};break}n=256*t.charCodeAt(o+2)+t.charCodeAt(o+3)}return a}(t=this.__addimage__.isArrayBufferView(t)?this.__addimage__.arrayBufferToBinaryString(t):t)).numcomponents){case 1:o=this.color_spaces.DEVICE_GRAY;break;case 4:o=this.color_spaces.DEVICE_CMYK;break;case 3:o=this.color_spaces.DEVICE_RGB}u={data:t,width:s.width,height:s.height,colorSpace:o,bitsPerComponent:8,filter:c,index:r,alias:n}}return u}}(M.API);var ke,Fe,Ie,Ce,je,Oe=function(){var t,e,n;function i(t){var e,r,n,i,a,o,s,c,u,l,h,f,d,p;for(this.data=t,this.pos=8,this.palette=[],this.imgData=[],this.transparency={},this.animation=null,this.text={},o=null;;){switch(e=this.readUInt32(),u=function(){var t,e;for(e=[],t=0;t<4;++t)e.push(String.fromCharCode(this.data[this.pos++]));return e}.call(this).join("")){case"IHDR":this.width=this.readUInt32(),this.height=this.readUInt32(),this.bits=this.data[this.pos++],this.colorType=this.data[this.pos++],this.compressionMethod=this.data[this.pos++],this.filterMethod=this.data[this.pos++],this.interlaceMethod=this.data[this.pos++];break;case"acTL":this.animation={numFrames:this.readUInt32(),numPlays:this.readUInt32()||1/0,frames:[]};break;case"PLTE":this.palette=this.read(e);break;case"fcTL":o&&this.animation.frames.push(o),this.pos+=4,o={width:this.readUInt32(),height:this.readUInt32(),xOffset:this.readUInt32(),yOffset:this.readUInt32()},a=this.readUInt16(),i=this.readUInt16()||100,o.delay=1e3*a/i,o.disposeOp=this.data[this.pos++],o.blendOp=this.data[this.pos++],o.data=[];break;case"IDAT":case"fdAT":for("fdAT"===u&&(this.pos+=4,e-=4),t=(null!=o?o.data:void 0)||this.imgData,f=0;0<=e?f<e:f>e;0<=e?++f:--f)t.push(this.data[this.pos++]);break;case"tRNS":switch(this.transparency={},this.colorType){case 3:if(n=this.palette.length/3,this.transparency.indexed=this.read(e),this.transparency.indexed.length>n)throw new Error("More transparent colors than palette size");if((l=n-this.transparency.indexed.length)>0)for(d=0;0<=l?d<l:d>l;0<=l?++d:--d)this.transparency.indexed.push(255);break;case 0:this.transparency.grayscale=this.read(e)[0];break;case 2:this.transparency.rgb=this.read(e)}break;case"tEXt":s=(h=this.read(e)).indexOf(0),c=String.fromCharCode.apply(String,h.slice(0,s)),this.text[c]=String.fromCharCode.apply(String,h.slice(s+1));break;case"IEND":return o&&this.animation.frames.push(o),this.colors=function(){switch(this.colorType){case 0:case 3:case 4:return 1;case 2:case 6:return 3}}.call(this),this.hasAlphaChannel=4===(p=this.colorType)||6===p,r=this.colors+(this.hasAlphaChannel?1:0),this.pixelBitlength=this.bits*r,this.colorSpace=function(){switch(this.colors){case 1:return"DeviceGray";case 3:return"DeviceRGB"}}.call(this),void(this.imgData=new Uint8Array(this.imgData));default:this.pos+=e}if(this.pos+=4,this.pos>this.data.length)throw new Error("Incomplete or corrupt PNG file")}}i.prototype.read=function(t){var e,r;for(r=[],e=0;0<=t?e<t:e>t;0<=t?++e:--e)r.push(this.data[this.pos++]);return r},i.prototype.readUInt32=function(){return this.data[this.pos++]<<24|this.data[this.pos++]<<16|this.data[this.pos++]<<8|this.data[this.pos++]},i.prototype.readUInt16=function(){return this.data[this.pos++]<<8|this.data[this.pos++]},i.prototype.decodePixels=function(t){var e=this.pixelBitlength/8,r=new Uint8Array(this.width*this.height*e),n=0,i=this;if(null==t&&(t=this.imgData),0===t.length)return new Uint8Array(0);function a(a,o,s,c){var u,l,h,f,d,p,g,m,v,b,y,w,N,L,A,x,S,_,P,k,F,I=Math.ceil((i.width-a)/s),C=Math.ceil((i.height-o)/c),j=i.width==I&&i.height==C;for(L=e*I,w=j?r:new Uint8Array(L*C),p=t.length,N=0,l=0;N<C&&n<p;){switch(t[n++]){case 0:for(f=S=0;S<L;f=S+=1)w[l++]=t[n++];break;case 1:for(f=_=0;_<L;f=_+=1)u=t[n++],d=f<e?0:w[l-e],w[l++]=(u+d)%256;break;case 2:for(f=P=0;P<L;f=P+=1)u=t[n++],h=(f-f%e)/e,A=N&&w[(N-1)*L+h*e+f%e],w[l++]=(A+u)%256;break;case 3:for(f=k=0;k<L;f=k+=1)u=t[n++],h=(f-f%e)/e,d=f<e?0:w[l-e],A=N&&w[(N-1)*L+h*e+f%e],w[l++]=(u+Math.floor((d+A)/2))%256;break;case 4:for(f=F=0;F<L;f=F+=1)u=t[n++],h=(f-f%e)/e,d=f<e?0:w[l-e],0===N?A=x=0:(A=w[(N-1)*L+h*e+f%e],x=h&&w[(N-1)*L+(h-1)*e+f%e]),g=d+A-x,m=Math.abs(g-d),b=Math.abs(g-A),y=Math.abs(g-x),v=m<=b&&m<=y?d:b<=y?A:x,w[l++]=(u+v)%256;break;default:throw new Error("Invalid filter algorithm: "+t[n-1])}if(!j){var O=((o+N*c)*i.width+a)*e,B=N*L;for(f=0;f<I;f+=1){for(var M=0;M<e;M+=1)r[O++]=w[B++];O+=(s-1)*e}}N++}}return t=Pe(t),1==i.interlaceMethod?(a(0,0,8,8),a(4,0,8,8),a(0,4,4,8),a(2,0,4,4),a(0,2,2,4),a(1,0,2,2),a(0,1,1,2)):a(0,0,1,1),r},i.prototype.decodePalette=function(){var t,e,r,n,i,a,o,s,c;for(r=this.palette,a=this.transparency.indexed||[],i=new Uint8Array((a.length||0)+r.length),n=0,t=0,e=o=0,s=r.length;o<s;e=o+=3)i[n++]=r[e],i[n++]=r[e+1],i[n++]=r[e+2],i[n++]=null!=(c=a[t++])?c:255;return i},i.prototype.copyToImageData=function(t,e){var r,n,i,a,o,s,c,u,l,h,f;if(n=this.colors,l=null,r=this.hasAlphaChannel,this.palette.length&&(l=null!=(f=this._decodedPalette)?f:this._decodedPalette=this.decodePalette(),n=4,r=!0),u=(i=t.data||t).length,o=l||e,a=s=0,1===n)for(;a<u;)c=l?4*e[a/4]:s,h=o[c++],i[a++]=h,i[a++]=h,i[a++]=h,i[a++]=r?o[c++]:255,s=c;else for(;a<u;)c=l?4*e[a/4]:s,i[a++]=o[c++],i[a++]=o[c++],i[a++]=o[c++],i[a++]=r?o[c++]:255,s=c},i.prototype.decode=function(){var t;return t=new Uint8Array(this.width*this.height*4),this.copyToImageData(t,this.decodePixels()),t};var a=function(){if("[object Window]"===Object.prototype.toString.call(r)){try{e=r.document.createElement("canvas"),n=e.getContext("2d")}catch(t){return!1}return!0}return!1};return a(),t=function(t){var r;if(!0===a())return n.width=t.width,n.height=t.height,n.clearRect(0,0,t.width,t.height),n.putImageData(t,0,0),(r=new Image).src=e.toDataURL(),r;throw new Error("This method requires a Browser with Canvas-capability.")},i.prototype.decodeFrames=function(e){var r,n,i,a,o,s,c,u;if(this.animation){for(u=[],n=o=0,s=(c=this.animation.frames).length;o<s;n=++o)r=c[n],i=e.createImageData(r.width,r.height),a=this.decodePixels(new Uint8Array(r.data)),this.copyToImageData(i,a),r.imageData=i,u.push(r.image=t(i));return u}},i.prototype.renderFrame=function(t,e){var r,n,i;return r=(n=this.animation.frames)[e],i=n[e-1],0===e&&t.clearRect(0,0,this.width,this.height),1===(null!=i?i.disposeOp:void 0)?t.clearRect(i.xOffset,i.yOffset,i.width,i.height):2===(null!=i?i.disposeOp:void 0)&&t.putImageData(i.imageData,i.xOffset,i.yOffset),0===r.blendOp&&t.clearRect(r.xOffset,r.yOffset,r.width,r.height),t.drawImage(r.image,r.xOffset,r.yOffset)},i.prototype.animate=function(t){var e,r,n,i,a,o,s=this;return r=0,o=this.animation,i=o.numFrames,n=o.frames,a=o.numPlays,(e=function(){var o,c;if(o=r++%i,c=n[o],s.renderFrame(t,o),i>1&&r/i<a)return s.animation._timeout=setTimeout(e,c.delay)})()},i.prototype.stopAnimation=function(){var t;return clearTimeout(null!=(t=this.animation)?t._timeout:void 0)},i.prototype.render=function(t){var e,r;return t._png&&t._png.stopAnimation(),t._png=this,t.width=this.width,t.height=this.height,e=t.getContext("2d"),this.animation?(this.decodeFrames(e),this.animate(e)):(r=e.createImageData(this.width,this.height),this.copyToImageData(r,this.decodePixels()),e.putImageData(r,0,0))},i}();
+/**
+   * @license
+   *
+   * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb
+   *
+   * Permission is hereby granted, free of charge, to any person obtaining
+   * a copy of this software and associated documentation files (the
+   * "Software"), to deal in the Software without restriction, including
+   * without limitation the rights to use, copy, modify, merge, publish,
+   * distribute, sublicense, and/or sell copies of the Software, and to
+   * permit persons to whom the Software is furnished to do so, subject to
+   * the following conditions:
+   *
+   * The above copyright notice and this permission notice shall be
+   * included in all copies or substantial portions of the Software.
+   *
+   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+   * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+   * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+   * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   * ====================================================================
+   */
+/**
+   * @license
+   * (c) Dean McNamee <dean@gmail.com>, 2013.
+   *
+   * https://github.com/deanm/omggif
+   *
+   * Permission is hereby granted, free of charge, to any person obtaining a copy
+   * of this software and associated documentation files (the "Software"), to
+   * deal in the Software without restriction, including without limitation the
+   * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+   * sell copies of the Software, and to permit persons to whom the Software is
+   * furnished to do so, subject to the following conditions:
+   *
+   * The above copyright notice and this permission notice shall be included in
+   * all copies or substantial portions of the Software.
+   *
+   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+   * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+   * IN THE SOFTWARE.
+   *
+   * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,
+   * including animation and compression.  It does not rely on any specific
+   * underlying system, so should run in the browser, Node, or Plask.
+   */
+function Be(t){var e=0;if(71!==t[e++]||73!==t[e++]||70!==t[e++]||56!==t[e++]||56!=(t[e++]+1&253)||97!==t[e++])throw new Error("Invalid GIF 87a/89a header.");var r=t[e++]|t[e++]<<8,n=t[e++]|t[e++]<<8,i=t[e++],a=i>>7,o=1<<(7&i)+1;t[e++];t[e++];var s=null,c=null;a&&(s=e,c=o,e+=3*o);var u=!0,l=[],h=0,f=null,d=0,p=null;for(this.width=r,this.height=n;u&&e<t.length;)switch(t[e++]){case 33:switch(t[e++]){case 255:if(11!==t[e]||78==t[e+1]&&69==t[e+2]&&84==t[e+3]&&83==t[e+4]&&67==t[e+5]&&65==t[e+6]&&80==t[e+7]&&69==t[e+8]&&50==t[e+9]&&46==t[e+10]&&48==t[e+11]&&3==t[e+12]&&1==t[e+13]&&0==t[e+16])e+=14,p=t[e++]|t[e++]<<8,e++;else for(e+=12;;){if(!((P=t[e++])>=0))throw Error("Invalid block size");if(0===P)break;e+=P}break;case 249:if(4!==t[e++]||0!==t[e+4])throw new Error("Invalid graphics extension block.");var g=t[e++];h=t[e++]|t[e++]<<8,f=t[e++],0==(1&g)&&(f=null),d=g>>2&7,e++;break;case 254:for(;;){if(!((P=t[e++])>=0))throw Error("Invalid block size");if(0===P)break;e+=P}break;default:throw new Error("Unknown graphic control label: 0x"+t[e-1].toString(16))}break;case 44:var m=t[e++]|t[e++]<<8,v=t[e++]|t[e++]<<8,b=t[e++]|t[e++]<<8,y=t[e++]|t[e++]<<8,w=t[e++],N=w>>6&1,L=1<<(7&w)+1,A=s,x=c,S=!1;if(w>>7){S=!0;A=e,x=L,e+=3*L}var _=e;for(e++;;){var P;if(!((P=t[e++])>=0))throw Error("Invalid block size");if(0===P)break;e+=P}l.push({x:m,y:v,width:b,height:y,has_local_palette:S,palette_offset:A,palette_size:x,data_offset:_,data_length:e-_,transparent_index:f,interlaced:!!N,delay:h,disposal:d});break;case 59:u=!1;break;default:throw new Error("Unknown gif block: 0x"+t[e-1].toString(16))}this.numFrames=function(){return l.length},this.loopCount=function(){return p},this.frameInfo=function(t){if(t<0||t>=l.length)throw new Error("Frame index out of range.");return l[t]},this.decodeAndBlitFrameBGRA=function(e,n){var i=this.frameInfo(e),a=i.width*i.height,o=new Uint8Array(a);Me(t,i.data_offset,o,a);var s=i.palette_offset,c=i.transparent_index;null===c&&(c=256);var u=i.width,l=r-u,h=u,f=4*(i.y*r+i.x),d=4*((i.y+i.height)*r+i.x),p=f,g=4*l;!0===i.interlaced&&(g+=4*r*7);for(var m=8,v=0,b=o.length;v<b;++v){var y=o[v];if(0===h&&(h=u,(p+=g)>=d&&(g=4*l+4*r*(m-1),p=f+(u+l)*(m<<1),m>>=1)),y===c)p+=4;else{var w=t[s+3*y],N=t[s+3*y+1],L=t[s+3*y+2];n[p++]=L,n[p++]=N,n[p++]=w,n[p++]=255}--h}},this.decodeAndBlitFrameRGBA=function(e,n){var i=this.frameInfo(e),a=i.width*i.height,o=new Uint8Array(a);Me(t,i.data_offset,o,a);var s=i.palette_offset,c=i.transparent_index;null===c&&(c=256);var u=i.width,l=r-u,h=u,f=4*(i.y*r+i.x),d=4*((i.y+i.height)*r+i.x),p=f,g=4*l;!0===i.interlaced&&(g+=4*r*7);for(var m=8,v=0,b=o.length;v<b;++v){var y=o[v];if(0===h&&(h=u,(p+=g)>=d&&(g=4*l+4*r*(m-1),p=f+(u+l)*(m<<1),m>>=1)),y===c)p+=4;else{var w=t[s+3*y],N=t[s+3*y+1],L=t[s+3*y+2];n[p++]=w,n[p++]=N,n[p++]=L,n[p++]=255}--h}}}function Me(t,e,r,n){for(var a=t[e++],o=1<<a,s=o+1,c=s+1,u=a+1,l=(1<<u)-1,h=0,f=0,d=0,p=t[e++],g=new Int32Array(4096),m=null;;){for(;h<16&&0!==p;)f|=t[e++]<<h,h+=8,1===p?p=t[e++]:--p;if(h<u)break;var v=f&l;if(f>>=u,h-=u,v!==o){if(v===s)break;for(var b=v<c?v:m,y=0,w=b;w>o;)w=g[w]>>8,++y;var N=w;if(d+y+(b!==v?1:0)>n)return void i.log("Warning, gif stream longer than expected.");r[d++]=N;var L=d+=y;for(b!==v&&(r[d++]=N),w=b;y--;)w=g[w],r[--L]=255&w,w>>=8;null!==m&&c<4096&&(g[c++]=m<<8|N,c>=l+1&&u<12&&(++u,l=l<<1|1)),m=v}else c=s+1,l=(1<<(u=a+1))-1,m=null}return d!==n&&i.log("Warning, gif stream shorter than expected."),r}
+/**
+   * @license
+    Copyright (c) 2008, Adobe Systems Incorporated
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without 
+    modification, are permitted provided that the following conditions are
+    met:
+
+    * Redistributions of source code must retain the above copyright notice, 
+      this list of conditions and the following disclaimer.
+    
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the 
+      documentation and/or other materials provided with the distribution.
+    
+    * Neither the name of Adobe Systems Incorporated nor the names of its 
+      contributors may be used to endorse or promote products derived from 
+      this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+    IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+    THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
+    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  */function Ee(t){var e,r,n,i,a,o=Math.floor,s=new Array(64),c=new Array(64),u=new Array(64),l=new Array(64),h=new Array(65535),f=new Array(65535),d=new Array(64),p=new Array(64),g=[],m=0,v=7,b=new Array(64),y=new Array(64),w=new Array(64),N=new Array(256),L=new Array(2048),A=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],x=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],S=[0,1,2,3,4,5,6,7,8,9,10,11],_=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],P=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],k=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],F=[0,1,2,3,4,5,6,7,8,9,10,11],I=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],C=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function j(t,e){for(var r=0,n=0,i=new Array,a=1;a<=16;a++){for(var o=1;o<=t[a];o++)i[e[n]]=[],i[e[n]][0]=r,i[e[n]][1]=a,n++,r++;r*=2}return i}function O(t){for(var e=t[0],r=t[1]-1;r>=0;)e&1<<r&&(m|=1<<v),r--,--v<0&&(255==m?(B(255),B(0)):B(m),v=7,m=0)}function B(t){g.push(t)}function M(t){B(t>>8&255),B(255&t)}function E(t,e,r,n,i){for(var a,o=i[0],s=i[240],c=function(t,e){var r,n,i,a,o,s,c,u,l,h,f=0;for(l=0;l<8;++l){r=t[f],n=t[f+1],i=t[f+2],a=t[f+3],o=t[f+4],s=t[f+5],c=t[f+6];var p=r+(u=t[f+7]),g=r-u,m=n+c,v=n-c,b=i+s,y=i-s,w=a+o,N=a-o,L=p+w,A=p-w,x=m+b,S=m-b;t[f]=L+x,t[f+4]=L-x;var _=.707106781*(S+A);t[f+2]=A+_,t[f+6]=A-_;var P=.382683433*((L=N+y)-(S=v+g)),k=.5411961*L+P,F=1.306562965*S+P,I=.707106781*(x=y+v),C=g+I,j=g-I;t[f+5]=j+k,t[f+3]=j-k,t[f+1]=C+F,t[f+7]=C-F,f+=8}for(f=0,l=0;l<8;++l){r=t[f],n=t[f+8],i=t[f+16],a=t[f+24],o=t[f+32],s=t[f+40],c=t[f+48];var O=r+(u=t[f+56]),B=r-u,M=n+c,E=n-c,q=i+s,D=i-s,R=a+o,T=a-o,U=O+R,z=O-R,H=M+q,W=M-q;t[f]=U+H,t[f+32]=U-H;var V=.707106781*(W+z);t[f+16]=z+V,t[f+48]=z-V;var G=.382683433*((U=T+D)-(W=E+B)),Y=.5411961*U+G,J=1.306562965*W+G,X=.707106781*(H=D+E),K=B+X,Z=B-X;t[f+40]=Z+Y,t[f+24]=Z-Y,t[f+8]=K+J,t[f+56]=K-J,f++}for(l=0;l<64;++l)h=t[l]*e[l],d[l]=h>0?h+.5|0:h-.5|0;return d}(t,e),u=0;u<64;++u)p[A[u]]=c[u];var l=p[0]-r;r=p[0],0==l?O(n[0]):(O(n[f[a=32767+l]]),O(h[a]));for(var g=63;g>0&&0==p[g];)g--;if(0==g)return O(o),r;for(var m,v=1;v<=g;){for(var b=v;0==p[v]&&v<=g;)++v;var y=v-b;if(y>=16){m=y>>4;for(var w=1;w<=m;++w)O(s);y&=15}a=32767+p[v],O(i[(y<<4)+f[a]]),O(h[a]),v++}return 63!=g&&O(o),r}function q(t){(t=Math.min(Math.max(t,1),100),a!=t)&&(!function(t){for(var e=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],r=0;r<64;r++){var n=o((e[r]*t+50)/100);n=Math.min(Math.max(n,1),255),s[A[r]]=n}for(var i=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],a=0;a<64;a++){var h=o((i[a]*t+50)/100);h=Math.min(Math.max(h,1),255),c[A[a]]=h}for(var f=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],d=0,p=0;p<8;p++)for(var g=0;g<8;g++)u[d]=1/(s[A[d]]*f[p]*f[g]*8),l[d]=1/(c[A[d]]*f[p]*f[g]*8),d++}(t<50?Math.floor(5e3/t):Math.floor(200-2*t)),a=t)}this.encode=function(t,a){a&&q(a),g=new Array,m=0,v=7,M(65496),M(65504),M(16),B(74),B(70),B(73),B(70),B(0),B(1),B(1),B(0),M(1),M(1),B(0),B(0),function(){M(65499),M(132),B(0);for(var t=0;t<64;t++)B(s[t]);B(1);for(var e=0;e<64;e++)B(c[e])}(),function(t,e){M(65472),M(17),B(8),M(e),M(t),B(3),B(1),B(17),B(0),B(2),B(17),B(1),B(3),B(17),B(1)}(t.width,t.height),function(){M(65476),M(418),B(0);for(var t=0;t<16;t++)B(x[t+1]);for(var e=0;e<=11;e++)B(S[e]);B(16);for(var r=0;r<16;r++)B(_[r+1]);for(var n=0;n<=161;n++)B(P[n]);B(1);for(var i=0;i<16;i++)B(k[i+1]);for(var a=0;a<=11;a++)B(F[a]);B(17);for(var o=0;o<16;o++)B(I[o+1]);for(var s=0;s<=161;s++)B(C[s])}(),M(65498),M(12),B(3),B(1),B(0),B(2),B(17),B(3),B(17),B(0),B(63),B(0);var o=0,h=0,f=0;m=0,v=7,this.encode.displayName="_encode_";for(var d,p,N,A,j,D,R,T,U,z=t.data,H=t.width,W=t.height,V=4*H,G=0;G<W;){for(d=0;d<V;){for(j=V*G+d,R=-1,T=0,U=0;U<64;U++)D=j+(T=U>>3)*V+(R=4*(7&U)),G+T>=W&&(D-=V*(G+1+T-W)),d+R>=V&&(D-=d+R-V+4),p=z[D++],N=z[D++],A=z[D++],b[U]=(L[p]+L[N+256>>0]+L[A+512>>0]>>16)-128,y[U]=(L[p+768>>0]+L[N+1024>>0]+L[A+1280>>0]>>16)-128,w[U]=(L[p+1280>>0]+L[N+1536>>0]+L[A+1792>>0]>>16)-128;o=E(b,u,o,e,n),h=E(y,l,h,r,i),f=E(w,l,f,r,i),d+=32}G+=8}if(v>=0){var Y=[];Y[1]=v+1,Y[0]=(1<<v+1)-1,O(Y)}return M(65497),new Uint8Array(g)},t=t||50,function(){for(var t=String.fromCharCode,e=0;e<256;e++)N[e]=t(e)}(),e=j(x,S),r=j(k,F),n=j(_,P),i=j(I,C),function(){for(var t=1,e=2,r=1;r<=15;r++){for(var n=t;n<e;n++)f[32767+n]=r,h[32767+n]=[],h[32767+n][1]=r,h[32767+n][0]=n;for(var i=-(e-1);i<=-t;i++)f[32767+i]=r,h[32767+i]=[],h[32767+i][1]=r,h[32767+i][0]=e-1+i;t<<=1,e<<=1}}(),function(){for(var t=0;t<256;t++)L[t]=19595*t,L[t+256>>0]=38470*t,L[t+512>>0]=7471*t+32768,L[t+768>>0]=-11059*t,L[t+1024>>0]=-21709*t,L[t+1280>>0]=32768*t+8421375,L[t+1536>>0]=-27439*t,L[t+1792>>0]=-5329*t}(),q(t)}
+/**
+   * @license
+   * Copyright (c) 2017 Aras Abbasi
+   *
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */function qe(t,e){if(this.pos=0,this.buffer=t,this.datav=new DataView(t.buffer),this.is_with_alpha=!!e,this.bottom_up=!0,this.flag=String.fromCharCode(this.buffer[0])+String.fromCharCode(this.buffer[1]),this.pos+=2,-1===["BM","BA","CI","CP","IC","PT"].indexOf(this.flag))throw new Error("Invalid BMP File");this.parseHeader(),this.parseBGR()}function De(t){function e(t){if(!t)throw Error("assert :P")}function r(t,e,r){for(var n=0;4>n;n++)if(t[e+n]!=r.charCodeAt(n))return!0;return!1}function n(t,e,r,n,i){for(var a=0;a<i;a++)t[e+a]=r[n+a]}function i(t,e,r,n){for(var i=0;i<n;i++)t[e+i]=r}function a(t){return new Int32Array(t)}function o(t,e){for(var r=[],n=0;n<t;n++)r.push(new e);return r}function s(t,e){var r=[];return function t(r,n,i){for(var a=i[n],o=0;o<a&&(r.push(i.length>n+1?[]:new e),!(i.length<n+1));o++)t(r[o],n+1,i)}(r,0,t),r}var c=function(){var t=this;function c(t,e){for(var r=1<<e-1>>>0;t&r;)r>>>=1;return r?(t&r-1)+r:t}function u(t,r,n,i,a){e(!(i%n));do{t[r+(i-=n)]=a}while(0<i)}function l(t,r,n,i,o){if(e(2328>=o),512>=o)var s=a(512);else if(null==(s=a(o)))return 0;return function(t,r,n,i,o,s){var l,f,d=r,p=1<<n,g=a(16),m=a(16);for(e(0!=o),e(null!=i),e(null!=t),e(0<n),f=0;f<o;++f){if(15<i[f])return 0;++g[i[f]]}if(g[0]==o)return 0;for(m[1]=0,l=1;15>l;++l){if(g[l]>1<<l)return 0;m[l+1]=m[l]+g[l]}for(f=0;f<o;++f)l=i[f],0<i[f]&&(s[m[l]++]=f);if(1==m[15])return(i=new h).g=0,i.value=s[0],u(t,d,1,p,i),p;var v,b=-1,y=p-1,w=0,N=1,L=1,A=1<<n;for(f=0,l=1,o=2;l<=n;++l,o<<=1){if(N+=L<<=1,0>(L-=g[l]))return 0;for(;0<g[l];--g[l])(i=new h).g=l,i.value=s[f++],u(t,d+w,o,A,i),w=c(w,l)}for(l=n+1,o=2;15>=l;++l,o<<=1){if(N+=L<<=1,0>(L-=g[l]))return 0;for(;0<g[l];--g[l]){if(i=new h,(w&y)!=b){for(d+=A,v=1<<(b=l)-n;15>b&&!(0>=(v-=g[b]));)++b,v<<=1;p+=A=1<<(v=b-n),t[r+(b=w&y)].g=v+n,t[r+b].value=d-r-b}i.g=l-n,i.value=s[f++],u(t,d+(w>>n),o,A,i),w=c(w,l)}}return N!=2*m[15]-1?0:p}(t,r,n,i,o,s)}function h(){this.value=this.g=0}function f(){this.value=this.g=0}function d(){this.G=o(5,h),this.H=a(5),this.jc=this.Qb=this.qb=this.nd=0,this.pd=o(Dr,f)}function p(t,r,n,i){e(null!=t),e(null!=r),e(2147483648>i),t.Ca=254,t.I=0,t.b=-8,t.Ka=0,t.oa=r,t.pa=n,t.Jd=r,t.Yc=n+i,t.Zc=4<=i?n+i-4+1:n,_(t)}function g(t,e){for(var r=0;0<e--;)r|=k(t,128)<<e;return r}function m(t,e){var r=g(t,e);return P(t)?-r:r}function v(t,r,n,i){var a,o=0;for(e(null!=t),e(null!=r),e(4294967288>i),t.Sb=i,t.Ra=0,t.u=0,t.h=0,4<i&&(i=4),a=0;a<i;++a)o+=r[n+a]<<8*a;t.Ra=o,t.bb=i,t.oa=r,t.pa=n}function b(t){for(;8<=t.u&&t.bb<t.Sb;)t.Ra>>>=8,t.Ra+=t.oa[t.pa+t.bb]<<Ur-8>>>0,++t.bb,t.u-=8;A(t)&&(t.h=1,t.u=0)}function y(t,r){if(e(0<=r),!t.h&&r<=Tr){var n=L(t)&Rr[r];return t.u+=r,b(t),n}return t.h=1,t.u=0}function w(){this.b=this.Ca=this.I=0,this.oa=[],this.pa=0,this.Jd=[],this.Yc=0,this.Zc=[],this.Ka=0}function N(){this.Ra=0,this.oa=[],this.h=this.u=this.bb=this.Sb=this.pa=0}function L(t){return t.Ra>>>(t.u&Ur-1)>>>0}function A(t){return e(t.bb<=t.Sb),t.h||t.bb==t.Sb&&t.u>Ur}function x(t,e){t.u=e,t.h=A(t)}function S(t){t.u>=zr&&(e(t.u>=zr),b(t))}function _(t){e(null!=t&&null!=t.oa),t.pa<t.Zc?(t.I=(t.oa[t.pa++]|t.I<<8)>>>0,t.b+=8):(e(null!=t&&null!=t.oa),t.pa<t.Yc?(t.b+=8,t.I=t.oa[t.pa++]|t.I<<8):t.Ka?t.b=0:(t.I<<=8,t.b+=8,t.Ka=1))}function P(t){return g(t,1)}function k(t,e){var r=t.Ca;0>t.b&&_(t);var n=t.b,i=r*e>>>8,a=(t.I>>>n>i)+0;for(a?(r-=i,t.I-=i+1<<n>>>0):r=i+1,n=r,i=0;256<=n;)i+=8,n>>=8;return n=7^i+Hr[n],t.b-=n,t.Ca=(r<<n)-1,a}function F(t,e,r){t[e+0]=r>>24&255,t[e+1]=r>>16&255,t[e+2]=r>>8&255,t[e+3]=r>>0&255}function I(t,e){return t[e+0]<<0|t[e+1]<<8}function C(t,e){return I(t,e)|t[e+2]<<16}function j(t,e){return I(t,e)|I(t,e+2)<<16}function O(t,r){var n=1<<r;return e(null!=t),e(0<r),t.X=a(n),null==t.X?0:(t.Mb=32-r,t.Xa=r,1)}function B(t,r){e(null!=t),e(null!=r),e(t.Xa==r.Xa),n(r.X,0,t.X,0,1<<r.Xa)}function M(){this.X=[],this.Xa=this.Mb=0}function E(t,r,n,i){e(null!=n),e(null!=i);var a=n[0],o=i[0];return 0==a&&(a=(t*o+r/2)/r),0==o&&(o=(r*a+t/2)/t),0>=a||0>=o?0:(n[0]=a,i[0]=o,1)}function q(t,e){return t+(1<<e)-1>>>e}function D(t,e){return((4278255360&t)+(4278255360&e)>>>0&4278255360)+((16711935&t)+(16711935&e)>>>0&16711935)>>>0}function R(e,r){t[r]=function(r,n,i,a,o,s,c){var u;for(u=0;u<o;++u){var l=t[e](s[c+u-1],i,a+u);s[c+u]=D(r[n+u],l)}}}function T(){this.ud=this.hd=this.jd=0}function U(t,e){return((4278124286&(t^e))>>>1)+(t&e)>>>0}function z(t){return 0<=t&&256>t?t:0>t?0:255<t?255:void 0}function H(t,e){return z(t+(t-e+.5>>1))}function W(t,e,r){return Math.abs(e-r)-Math.abs(t-r)}function V(t,e,r,n,i,a,o){for(n=a[o-1],r=0;r<i;++r)a[o+r]=n=D(t[e+r],n)}function G(t,e,r,n,i){var a;for(a=0;a<r;++a){var o=t[e+a],s=o>>8&255,c=16711935&(c=(c=16711935&o)+((s<<16)+s));n[i+a]=(4278255360&o)+c>>>0}}function Y(t,e){e.jd=t>>0&255,e.hd=t>>8&255,e.ud=t>>16&255}function J(t,e,r,n,i,a){var o;for(o=0;o<n;++o){var s=e[r+o],c=s>>>8,u=s,l=255&(l=(l=s>>>16)+((t.jd<<24>>24)*(c<<24>>24)>>>5));u=255&(u=(u=u+((t.hd<<24>>24)*(c<<24>>24)>>>5))+((t.ud<<24>>24)*(l<<24>>24)>>>5));i[a+o]=(4278255360&s)+(l<<16)+u}}function X(e,r,n,i,a){t[r]=function(t,e,r,n,o,s,c,u,l){for(n=c;n<u;++n)for(c=0;c<l;++c)o[s++]=a(r[i(t[e++])])},t[e]=function(e,r,o,s,c,u,l){var h=8>>e.b,f=e.Ea,d=e.K[0],p=e.w;if(8>h)for(e=(1<<e.b)-1,p=(1<<h)-1;r<o;++r){var g,m=0;for(g=0;g<f;++g)g&e||(m=i(s[c++])),u[l++]=a(d[m&p]),m>>=h}else t["VP8LMapColor"+n](s,c,d,p,u,l,r,o,f)}}function K(t,e,r,n,i){for(r=e+r;e<r;){var a=t[e++];n[i++]=a>>16&255,n[i++]=a>>8&255,n[i++]=a>>0&255}}function Z(t,e,r,n,i){for(r=e+r;e<r;){var a=t[e++];n[i++]=a>>16&255,n[i++]=a>>8&255,n[i++]=a>>0&255,n[i++]=a>>24&255}}function $(t,e,r,n,i){for(r=e+r;e<r;){var a=(o=t[e++])>>16&240|o>>12&15,o=o>>0&240|o>>28&15;n[i++]=a,n[i++]=o}}function Q(t,e,r,n,i){for(r=e+r;e<r;){var a=(o=t[e++])>>16&248|o>>13&7,o=o>>5&224|o>>3&31;n[i++]=a,n[i++]=o}}function tt(t,e,r,n,i){for(r=e+r;e<r;){var a=t[e++];n[i++]=a>>0&255,n[i++]=a>>8&255,n[i++]=a>>16&255}}function et(t,e,r,i,a,o){if(0==o)for(r=e+r;e<r;)F(i,((o=t[e++])[0]>>24|o[1]>>8&65280|o[2]<<8&16711680|o[3]<<24)>>>0),a+=32;else n(i,a,t,e,r)}function rt(e,r){t[r][0]=t[e+"0"],t[r][1]=t[e+"1"],t[r][2]=t[e+"2"],t[r][3]=t[e+"3"],t[r][4]=t[e+"4"],t[r][5]=t[e+"5"],t[r][6]=t[e+"6"],t[r][7]=t[e+"7"],t[r][8]=t[e+"8"],t[r][9]=t[e+"9"],t[r][10]=t[e+"10"],t[r][11]=t[e+"11"],t[r][12]=t[e+"12"],t[r][13]=t[e+"13"],t[r][14]=t[e+"0"],t[r][15]=t[e+"0"]}function nt(t){return t==Hn||t==Wn||t==Vn||t==Gn}function it(){this.eb=[],this.size=this.A=this.fb=0}function at(){this.y=[],this.f=[],this.ea=[],this.F=[],this.Tc=this.Ed=this.Cd=this.Fd=this.lb=this.Db=this.Ab=this.fa=this.J=this.W=this.N=this.O=0}function ot(){this.Rd=this.height=this.width=this.S=0,this.f={},this.f.RGBA=new it,this.f.kb=new at,this.sd=null}function st(){this.width=[0],this.height=[0],this.Pd=[0],this.Qd=[0],this.format=[0]}function ct(){this.Id=this.fd=this.Md=this.hb=this.ib=this.da=this.bd=this.cd=this.j=this.v=this.Da=this.Sd=this.ob=0}function ut(t){return alert("todo:WebPSamplerProcessPlane"),t.T}function lt(t,e){var r=t.T,i=e.ba.f.RGBA,a=i.eb,o=i.fb+t.ka*i.A,s=vi[e.ba.S],c=t.y,u=t.O,l=t.f,h=t.N,f=t.ea,d=t.W,p=e.cc,g=e.dc,m=e.Mc,v=e.Nc,b=t.ka,y=t.ka+t.T,w=t.U,N=w+1>>1;for(0==b?s(c,u,null,null,l,h,f,d,l,h,f,d,a,o,null,null,w):(s(e.ec,e.fc,c,u,p,g,m,v,l,h,f,d,a,o-i.A,a,o,w),++r);b+2<y;b+=2)p=l,g=h,m=f,v=d,h+=t.Rc,d+=t.Rc,o+=2*i.A,s(c,(u+=2*t.fa)-t.fa,c,u,p,g,m,v,l,h,f,d,a,o-i.A,a,o,w);return u+=t.fa,t.j+y<t.o?(n(e.ec,e.fc,c,u,w),n(e.cc,e.dc,l,h,N),n(e.Mc,e.Nc,f,d,N),r--):1&y||s(c,u,null,null,l,h,f,d,l,h,f,d,a,o+i.A,null,null,w),r}function ht(t,r,n){var i=t.F,a=[t.J];if(null!=i){var o=t.U,s=r.ba.S,c=s==Tn||s==Vn;r=r.ba.f.RGBA;var u=[0],l=t.ka;u[0]=t.T,t.Kb&&(0==l?--u[0]:(--l,a[0]-=t.width),t.j+t.ka+t.T==t.o&&(u[0]=t.o-t.j-l));var h=r.eb;l=r.fb+l*r.A;t=Sn(i,a[0],t.width,o,u,h,l+(c?0:3),r.A),e(n==u),t&&nt(s)&&An(h,l,c,o,u,r.A)}return 0}function ft(t){var e=t.ma,r=e.ba.S,n=11>r,i=r==qn||r==Rn||r==Tn||r==Un||12==r||nt(r);if(e.memory=null,e.Ib=null,e.Jb=null,e.Nd=null,!Mr(e.Oa,t,i?11:12))return 0;if(i&&nt(r)&&br(),t.da)alert("todo:use_scaling");else{if(n){if(e.Ib=ut,t.Kb){if(r=t.U+1>>1,e.memory=a(t.U+2*r),null==e.memory)return 0;e.ec=e.memory,e.fc=0,e.cc=e.ec,e.dc=e.fc+t.U,e.Mc=e.cc,e.Nc=e.dc+r,e.Ib=lt,br()}}else alert("todo:EmitYUV");i&&(e.Jb=ht,n&&mr())}if(n&&!Ci){for(t=0;256>t;++t)ji[t]=89858*(t-128)+_i>>Si,Mi[t]=-22014*(t-128)+_i,Bi[t]=-45773*(t-128),Oi[t]=113618*(t-128)+_i>>Si;for(t=Pi;t<ki;++t)e=76283*(t-16)+_i>>Si,Ei[t-Pi]=Vt(e,255),qi[t-Pi]=Vt(e+8>>4,15);Ci=1}return 1}function dt(t){var r=t.ma,n=t.U,i=t.T;return e(!(1&t.ka)),0>=n||0>=i?0:(n=r.Ib(t,r),null!=r.Jb&&r.Jb(t,r,n),r.Dc+=n,1)}function pt(t){t.ma.memory=null}function gt(t,e,r,n){return 47!=y(t,8)?0:(e[0]=y(t,14)+1,r[0]=y(t,14)+1,n[0]=y(t,1),0!=y(t,3)?0:!t.h)}function mt(t,e){if(4>t)return t+1;var r=t-2>>1;return(2+(1&t)<<r)+y(e,r)+1}function vt(t,e){return 120<e?e-120:1<=(r=((r=$n[e-1])>>4)*t+(8-(15&r)))?r:1;var r}function bt(t,e,r){var n=L(r),i=t[e+=255&n].g-8;return 0<i&&(x(r,r.u+8),n=L(r),e+=t[e].value,e+=n&(1<<i)-1),x(r,r.u+t[e].g),t[e].value}function yt(t,r,n){return n.g+=t.g,n.value+=t.value<<r>>>0,e(8>=n.g),t.g}function wt(t,r,n){var i=t.xc;return e((r=0==i?0:t.vc[t.md*(n>>i)+(r>>i)])<t.Wb),t.Ya[r]}function Nt(t,r,i,a){var o=t.ab,s=t.c*r,c=t.C;r=c+r;var u=i,l=a;for(a=t.Ta,i=t.Ua;0<o--;){var h=t.gc[o],f=c,d=r,p=u,g=l,m=(l=a,u=i,h.Ea);switch(e(f<d),e(d<=h.nc),h.hc){case 2:Gr(p,g,(d-f)*m,l,u);break;case 0:var v=f,b=d,y=l,w=u,N=(_=h).Ea;0==v&&(Wr(p,g,null,null,1,y,w),V(p,g+1,0,0,N-1,y,w+1),g+=N,w+=N,++v);for(var L=1<<_.b,A=L-1,x=q(N,_.b),S=_.K,_=_.w+(v>>_.b)*x;v<b;){var P=S,k=_,F=1;for(Vr(p,g,y,w-N,1,y,w);F<N;){var I=(F&~A)+L;I>N&&(I=N),(0,Zr[P[k++]>>8&15])(p,g+ +F,y,w+F-N,I-F,y,w+F),F=I}g+=N,w+=N,++v&A||(_+=x)}d!=h.nc&&n(l,u-m,l,u+(d-f-1)*m,m);break;case 1:for(m=p,b=g,N=(p=h.Ea)-(w=p&~(y=(g=1<<h.b)-1)),v=q(p,h.b),L=h.K,h=h.w+(f>>h.b)*v;f<d;){for(A=L,x=h,S=new T,_=b+w,P=b+p;b<_;)Y(A[x++],S),$r(S,m,b,g,l,u),b+=g,u+=g;b<P&&(Y(A[x++],S),$r(S,m,b,N,l,u),b+=N,u+=N),++f&y||(h+=v)}break;case 3:if(p==l&&g==u&&0<h.b){for(b=l,p=m=u+(d-f)*m-(w=(d-f)*q(h.Ea,h.b)),g=l,y=u,v=[],w=(N=w)-1;0<=w;--w)v[w]=g[y+w];for(w=N-1;0<=w;--w)b[p+w]=v[w];Yr(h,f,d,l,m,l,u)}else Yr(h,f,d,p,g,l,u)}u=a,l=i}l!=i&&n(a,i,u,l,s)}function Lt(t,r){var n=t.V,i=t.Ba+t.c*t.C,a=r-t.C;if(e(r<=t.l.o),e(16>=a),0<a){var o=t.l,s=t.Ta,c=t.Ua,u=o.width;if(Nt(t,a,n,i),a=c=[c],e((n=t.C)<(i=r)),e(o.v<o.va),i>o.o&&(i=o.o),n<o.j){var l=o.j-n;n=o.j;a[0]+=l*u}if(n>=i?n=0:(a[0]+=4*o.v,o.ka=n-o.j,o.U=o.va-o.v,o.T=i-n,n=1),n){if(c=c[0],11>(n=t.ca).S){var h=n.f.RGBA,f=(i=n.S,a=o.U,o=o.T,l=h.eb,h.A),d=o;for(h=h.fb+t.Ma*h.A;0<d--;){var p=s,g=c,m=a,v=l,b=h;switch(i){case En:Qr(p,g,m,v,b);break;case qn:tn(p,g,m,v,b);break;case Hn:tn(p,g,m,v,b),An(v,b,0,m,1,0);break;case Dn:nn(p,g,m,v,b);break;case Rn:et(p,g,m,v,b,1);break;case Wn:et(p,g,m,v,b,1),An(v,b,0,m,1,0);break;case Tn:et(p,g,m,v,b,0);break;case Vn:et(p,g,m,v,b,0),An(v,b,1,m,1,0);break;case Un:en(p,g,m,v,b);break;case Gn:en(p,g,m,v,b),xn(v,b,m,1,0);break;case zn:rn(p,g,m,v,b);break;default:e(0)}c+=u,h+=f}t.Ma+=o}else alert("todo:EmitRescaledRowsYUVA");e(t.Ma<=n.height)}}t.C=r,e(t.C<=t.i)}function At(t){var e;if(0<t.ua)return 0;for(e=0;e<t.Wb;++e){var r=t.Ya[e].G,n=t.Ya[e].H;if(0<r[1][n[1]+0].g||0<r[2][n[2]+0].g||0<r[3][n[3]+0].g)return 0}return 1}function xt(t,r,n,i,a,o){if(0!=t.Z){var s=t.qd,c=t.rd;for(e(null!=mi[t.Z]);r<n;++r)mi[t.Z](s,c,i,a,i,a,o),s=i,c=a,a+=o;t.qd=s,t.rd=c}}function St(t,r){var n=t.l.ma,i=0==n.Z||1==n.Z?t.l.j:t.C;i=t.C<i?i:t.C;if(e(r<=t.l.o),r>i){var a=t.l.width,o=n.ca,s=n.tb+a*i,c=t.V,u=t.Ba+t.c*i,l=t.gc;e(1==t.ab),e(3==l[0].hc),Xr(l[0],i,r,c,u,o,s),xt(n,i,r,o,s,a)}t.C=t.Ma=r}function _t(t,r,n,i,a,o,s){var c=t.$/i,u=t.$%i,l=t.m,h=t.s,f=n+t.$,d=f;a=n+i*a;var p=n+i*o,g=280+h.ua,m=t.Pb?c:16777216,v=0<h.ua?h.Wa:null,b=h.wc,y=f<p?wt(h,u,c):null;e(t.C<o),e(p<=a);var w=!1;t:for(;;){for(;w||f<p;){var N=0;if(c>=m){var _=f-n;e((m=t).Pb),m.wd=m.m,m.xd=_,0<m.s.ua&&B(m.s.Wa,m.s.vb),m=c+ti}if(u&b||(y=wt(h,u,c)),e(null!=y),y.Qb&&(r[f]=y.qb,w=!0),!w)if(S(l),y.jc){N=l,_=r;var P=f,k=y.pd[L(N)&Dr-1];e(y.jc),256>k.g?(x(N,N.u+k.g),_[P]=k.value,N=0):(x(N,N.u+k.g-256),e(256<=k.value),N=k.value),0==N&&(w=!0)}else N=bt(y.G[0],y.H[0],l);if(l.h)break;if(w||256>N){if(!w)if(y.nd)r[f]=(y.qb|N<<8)>>>0;else{if(S(l),w=bt(y.G[1],y.H[1],l),S(l),_=bt(y.G[2],y.H[2],l),P=bt(y.G[3],y.H[3],l),l.h)break;r[f]=(P<<24|w<<16|N<<8|_)>>>0}if(w=!1,++f,++u>=i&&(u=0,++c,null!=s&&c<=o&&!(c%16)&&s(t,c),null!=v))for(;d<f;)N=r[d++],v.X[(506832829*N&4294967295)>>>v.Mb]=N}else if(280>N){if(N=mt(N-256,l),_=bt(y.G[4],y.H[4],l),S(l),_=vt(i,_=mt(_,l)),l.h)break;if(f-n<_||a-f<N)break t;for(P=0;P<N;++P)r[f+P]=r[f+P-_];for(f+=N,u+=N;u>=i;)u-=i,++c,null!=s&&c<=o&&!(c%16)&&s(t,c);if(e(f<=a),u&b&&(y=wt(h,u,c)),null!=v)for(;d<f;)N=r[d++],v.X[(506832829*N&4294967295)>>>v.Mb]=N}else{if(!(N<g))break t;for(w=N-280,e(null!=v);d<f;)N=r[d++],v.X[(506832829*N&4294967295)>>>v.Mb]=N;N=f,e(!(w>>>(_=v).Xa)),r[N]=_.X[w],w=!0}w||e(l.h==A(l))}if(t.Pb&&l.h&&f<a)e(t.m.h),t.a=5,t.m=t.wd,t.$=t.xd,0<t.s.ua&&B(t.s.vb,t.s.Wa);else{if(l.h)break t;null!=s&&s(t,c>o?o:c),t.a=0,t.$=f-n}return 1}return t.a=3,0}function Pt(t){e(null!=t),t.vc=null,t.yc=null,t.Ya=null;var r=t.Wa;null!=r&&(r.X=null),t.vb=null,e(null!=t)}function kt(){var e=new or;return null==e?null:(e.a=0,e.xb=gi,rt("Predictor","VP8LPredictors"),rt("Predictor","VP8LPredictors_C"),rt("PredictorAdd","VP8LPredictorsAdd"),rt("PredictorAdd","VP8LPredictorsAdd_C"),Gr=G,$r=J,Qr=K,tn=Z,en=$,rn=Q,nn=tt,t.VP8LMapColor32b=Jr,t.VP8LMapColor8b=Kr,e)}function Ft(t,r,n,s,c){var u=1,f=[t],p=[r],g=s.m,m=s.s,v=null,b=0;t:for(;;){if(n)for(;u&&y(g,1);){var w=f,N=p,A=s,_=1,P=A.m,k=A.gc[A.ab],F=y(P,2);if(A.Oc&1<<F)u=0;else{switch(A.Oc|=1<<F,k.hc=F,k.Ea=w[0],k.nc=N[0],k.K=[null],++A.ab,e(4>=A.ab),F){case 0:case 1:k.b=y(P,3)+2,_=Ft(q(k.Ea,k.b),q(k.nc,k.b),0,A,k.K),k.K=k.K[0];break;case 3:var I,C=y(P,8)+1,j=16<C?0:4<C?1:2<C?2:3;if(w[0]=q(k.Ea,j),k.b=j,I=_=Ft(C,1,0,A,k.K)){var B,M=C,E=k,R=1<<(8>>E.b),T=a(R);if(null==T)I=0;else{var U=E.K[0],z=E.w;for(T[0]=E.K[0][0],B=1;B<1*M;++B)T[B]=D(U[z+B],T[B-1]);for(;B<4*R;++B)T[B]=0;E.K[0]=null,E.K[0]=T,I=1}}_=I;break;case 2:break;default:e(0)}u=_}}if(f=f[0],p=p[0],u&&y(g,1)&&!(u=1<=(b=y(g,4))&&11>=b)){s.a=3;break t}var H;if(H=u)e:{var W,V,G,Y=s,J=f,X=p,K=b,Z=n,$=Y.m,Q=Y.s,tt=[null],et=1,rt=0,nt=Qn[K];r:for(;;){if(Z&&y($,1)){var it=y($,3)+2,at=q(J,it),ot=q(X,it),st=at*ot;if(!Ft(at,ot,0,Y,tt))break r;for(tt=tt[0],Q.xc=it,W=0;W<st;++W){var ct=tt[W]>>8&65535;tt[W]=ct,ct>=et&&(et=ct+1)}}if($.h)break r;for(V=0;5>V;++V){var ut=Xn[V];!V&&0<K&&(ut+=1<<K),rt<ut&&(rt=ut)}var lt=o(et*nt,h),ht=et,ft=o(ht,d);if(null==ft)var dt=null;else e(65536>=ht),dt=ft;var pt=a(rt);if(null==dt||null==pt||null==lt){Y.a=1;break r}var gt=lt;for(W=G=0;W<et;++W){var mt=dt[W],vt=mt.G,bt=mt.H,wt=0,Nt=1,Lt=0;for(V=0;5>V;++V){ut=Xn[V],vt[V]=gt,bt[V]=G,!V&&0<K&&(ut+=1<<K);n:{var At,xt=ut,St=Y,kt=pt,It=gt,Ct=G,jt=0,Ot=St.m,Bt=y(Ot,1);if(i(kt,0,0,xt),Bt){var Mt=y(Ot,1)+1,Et=y(Ot,1),qt=y(Ot,0==Et?1:8);kt[qt]=1,2==Mt&&(kt[qt=y(Ot,8)]=1);var Dt=1}else{var Rt=a(19),Tt=y(Ot,4)+4;if(19<Tt){St.a=3;var Ut=0;break n}for(At=0;At<Tt;++At)Rt[Zn[At]]=y(Ot,3);var zt=void 0,Ht=void 0,Wt=St,Vt=Rt,Gt=xt,Yt=kt,Jt=0,Xt=Wt.m,Kt=8,Zt=o(128,h);i:for(;l(Zt,0,7,Vt,19);){if(y(Xt,1)){var $t=2+2*y(Xt,3);if((zt=2+y(Xt,$t))>Gt)break i}else zt=Gt;for(Ht=0;Ht<Gt&&zt--;){S(Xt);var Qt=Zt[0+(127&L(Xt))];x(Xt,Xt.u+Qt.g);var te=Qt.value;if(16>te)Yt[Ht++]=te,0!=te&&(Kt=te);else{var ee=16==te,re=te-16,ne=Jn[re],ie=y(Xt,Yn[re])+ne;if(Ht+ie>Gt)break i;for(var ae=ee?Kt:0;0<ie--;)Yt[Ht++]=ae}}Jt=1;break i}Jt||(Wt.a=3),Dt=Jt}(Dt=Dt&&!Ot.h)&&(jt=l(It,Ct,8,kt,xt)),Dt&&0!=jt?Ut=jt:(St.a=3,Ut=0)}if(0==Ut)break r;if(Nt&&1==Kn[V]&&(Nt=0==gt[G].g),wt+=gt[G].g,G+=Ut,3>=V){var oe,se=pt[0];for(oe=1;oe<ut;++oe)pt[oe]>se&&(se=pt[oe]);Lt+=se}}if(mt.nd=Nt,mt.Qb=0,Nt&&(mt.qb=(vt[3][bt[3]+0].value<<24|vt[1][bt[1]+0].value<<16|vt[2][bt[2]+0].value)>>>0,0==wt&&256>vt[0][bt[0]+0].value&&(mt.Qb=1,mt.qb+=vt[0][bt[0]+0].value<<8)),mt.jc=!mt.Qb&&6>Lt,mt.jc){var ce,ue=mt;for(ce=0;ce<Dr;++ce){var le=ce,he=ue.pd[le],fe=ue.G[0][ue.H[0]+le];256<=fe.value?(he.g=fe.g+256,he.value=fe.value):(he.g=0,he.value=0,le>>=yt(fe,8,he),le>>=yt(ue.G[1][ue.H[1]+le],16,he),le>>=yt(ue.G[2][ue.H[2]+le],0,he),yt(ue.G[3][ue.H[3]+le],24,he))}}}Q.vc=tt,Q.Wb=et,Q.Ya=dt,Q.yc=lt,H=1;break e}H=0}if(!(u=H)){s.a=3;break t}if(0<b){if(m.ua=1<<b,!O(m.Wa,b)){s.a=1,u=0;break t}}else m.ua=0;var de=s,pe=f,ge=p,me=de.s,ve=me.xc;if(de.c=pe,de.i=ge,me.md=q(pe,ve),me.wc=0==ve?-1:(1<<ve)-1,n){s.xb=pi;break t}if(null==(v=a(f*p))){s.a=1,u=0;break t}u=(u=_t(s,v,0,f,p,p,null))&&!g.h;break t}return u?(null!=c?c[0]=v:(e(null==v),e(n)),s.$=0,n||Pt(m)):Pt(m),u}function It(t,r){var n=t.c*t.i,i=n+r+16*r;return e(t.c<=r),t.V=a(i),null==t.V?(t.Ta=null,t.Ua=0,t.a=1,0):(t.Ta=t.V,t.Ua=t.Ba+n+r,1)}function Ct(t,r){var n=t.C,i=r-n,a=t.V,o=t.Ba+t.c*n;for(e(r<=t.l.o);0<i;){var s=16<i?16:i,c=t.l.ma,u=t.l.width,l=u*s,h=c.ca,f=c.tb+u*n,d=t.Ta,p=t.Ua;Nt(t,s,a,o),_n(d,p,h,f,l),xt(c,n,n+s,h,f,u),i-=s,a+=s*t.c,n+=s}e(n==r),t.C=t.Ma=r}function jt(){this.ub=this.yd=this.td=this.Rb=0}function Ot(){this.Kd=this.Ld=this.Ud=this.Td=this.i=this.c=0}function Bt(){this.Fb=this.Bb=this.Cb=0,this.Zb=a(4),this.Lb=a(4)}function Mt(){this.Yb=function(){var t=[];return function t(e,r,n){for(var i=n[r],a=0;a<i&&(e.push(n.length>r+1?[]:0),!(n.length<r+1));a++)t(e[a],r+1,n)}(t,0,[3,11]),t}()}function Et(){this.jb=a(3),this.Wc=s([4,8],Mt),this.Xc=s([4,17],Mt)}function qt(){this.Pc=this.wb=this.Tb=this.zd=0,this.vd=new a(4),this.od=new a(4)}function Dt(){this.ld=this.La=this.dd=this.tc=0}function Rt(){this.Na=this.la=0}function Tt(){this.Sc=[0,0],this.Eb=[0,0],this.Qc=[0,0],this.ia=this.lc=0}function Ut(){this.ad=a(384),this.Za=0,this.Ob=a(16),this.$b=this.Ad=this.ia=this.Gc=this.Hc=this.Dd=0}function zt(){this.uc=this.M=this.Nb=0,this.wa=Array(new Dt),this.Y=0,this.ya=Array(new Ut),this.aa=0,this.l=new Gt}function Ht(){this.y=a(16),this.f=a(8),this.ea=a(8)}function Wt(){this.cb=this.a=0,this.sc="",this.m=new w,this.Od=new jt,this.Kc=new Ot,this.ed=new qt,this.Qa=new Bt,this.Ic=this.$c=this.Aa=0,this.D=new zt,this.Xb=this.Va=this.Hb=this.zb=this.yb=this.Ub=this.za=0,this.Jc=o(8,w),this.ia=0,this.pb=o(4,Tt),this.Pa=new Et,this.Bd=this.kc=0,this.Ac=[],this.Bc=0,this.zc=[0,0,0,0],this.Gd=Array(new Ht),this.Hd=0,this.rb=Array(new Rt),this.sb=0,this.wa=Array(new Dt),this.Y=0,this.oc=[],this.pc=0,this.sa=[],this.ta=0,this.qa=[],this.ra=0,this.Ha=[],this.B=this.R=this.Ia=0,this.Ec=[],this.M=this.ja=this.Vb=this.Fc=0,this.ya=Array(new Ut),this.L=this.aa=0,this.gd=s([4,2],Dt),this.ga=null,this.Fa=[],this.Cc=this.qc=this.P=0,this.Gb=[],this.Uc=0,this.mb=[],this.nb=0,this.rc=[],this.Ga=this.Vc=0}function Vt(t,e){return 0>t?0:t>e?e:t}function Gt(){this.T=this.U=this.ka=this.height=this.width=0,this.y=[],this.f=[],this.ea=[],this.Rc=this.fa=this.W=this.N=this.O=0,this.ma="void",this.put="VP8IoPutHook",this.ac="VP8IoSetupHook",this.bc="VP8IoTeardownHook",this.ha=this.Kb=0,this.data=[],this.hb=this.ib=this.da=this.o=this.j=this.va=this.v=this.Da=this.ob=this.w=0,this.F=[],this.J=0}function Yt(){var t=new Wt;return null!=t&&(t.a=0,t.sc="OK",t.cb=0,t.Xb=0,ni||(ni=Zt)),t}function Jt(t,e,r){return 0==t.a&&(t.a=e,t.sc=r,t.cb=0),0}function Xt(t,e,r){return 3<=r&&157==t[e+0]&&1==t[e+1]&&42==t[e+2]}function Kt(t,r){if(null==t)return 0;if(t.a=0,t.sc="OK",null==r)return Jt(t,2,"null VP8Io passed to VP8GetHeaders()");var n=r.data,a=r.w,o=r.ha;if(4>o)return Jt(t,7,"Truncated header.");var s=n[a+0]|n[a+1]<<8|n[a+2]<<16,c=t.Od;if(c.Rb=!(1&s),c.td=s>>1&7,c.yd=s>>4&1,c.ub=s>>5,3<c.td)return Jt(t,3,"Incorrect keyframe parameters.");if(!c.yd)return Jt(t,4,"Frame not displayable.");a+=3,o-=3;var u=t.Kc;if(c.Rb){if(7>o)return Jt(t,7,"cannot parse picture header");if(!Xt(n,a,o))return Jt(t,3,"Bad code word");u.c=16383&(n[a+4]<<8|n[a+3]),u.Td=n[a+4]>>6,u.i=16383&(n[a+6]<<8|n[a+5]),u.Ud=n[a+6]>>6,a+=7,o-=7,t.za=u.c+15>>4,t.Ub=u.i+15>>4,r.width=u.c,r.height=u.i,r.Da=0,r.j=0,r.v=0,r.va=r.width,r.o=r.height,r.da=0,r.ib=r.width,r.hb=r.height,r.U=r.width,r.T=r.height,i((s=t.Pa).jb,0,255,s.jb.length),e(null!=(s=t.Qa)),s.Cb=0,s.Bb=0,s.Fb=1,i(s.Zb,0,0,s.Zb.length),i(s.Lb,0,0,s.Lb)}if(c.ub>o)return Jt(t,7,"bad partition length");p(s=t.m,n,a,c.ub),a+=c.ub,o-=c.ub,c.Rb&&(u.Ld=P(s),u.Kd=P(s)),u=t.Qa;var l,h=t.Pa;if(e(null!=s),e(null!=u),u.Cb=P(s),u.Cb){if(u.Bb=P(s),P(s)){for(u.Fb=P(s),l=0;4>l;++l)u.Zb[l]=P(s)?m(s,7):0;for(l=0;4>l;++l)u.Lb[l]=P(s)?m(s,6):0}if(u.Bb)for(l=0;3>l;++l)h.jb[l]=P(s)?g(s,8):255}else u.Bb=0;if(s.Ka)return Jt(t,3,"cannot parse segment header");if((u=t.ed).zd=P(s),u.Tb=g(s,6),u.wb=g(s,3),u.Pc=P(s),u.Pc&&P(s)){for(h=0;4>h;++h)P(s)&&(u.vd[h]=m(s,6));for(h=0;4>h;++h)P(s)&&(u.od[h]=m(s,6))}if(t.L=0==u.Tb?0:u.zd?1:2,s.Ka)return Jt(t,3,"cannot parse filter header");var f=o;if(o=l=a,a=l+f,u=f,t.Xb=(1<<g(t.m,2))-1,f<3*(h=t.Xb))n=7;else{for(l+=3*h,u-=3*h,f=0;f<h;++f){var d=n[o+0]|n[o+1]<<8|n[o+2]<<16;d>u&&(d=u),p(t.Jc[+f],n,l,d),l+=d,u-=d,o+=3}p(t.Jc[+h],n,l,u),n=l<a?0:5}if(0!=n)return Jt(t,n,"cannot parse partitions");for(n=g(l=t.m,7),o=P(l)?m(l,4):0,a=P(l)?m(l,4):0,u=P(l)?m(l,4):0,h=P(l)?m(l,4):0,l=P(l)?m(l,4):0,f=t.Qa,d=0;4>d;++d){if(f.Cb){var v=f.Zb[d];f.Fb||(v+=n)}else{if(0<d){t.pb[d]=t.pb[0];continue}v=n}var b=t.pb[d];b.Sc[0]=ei[Vt(v+o,127)],b.Sc[1]=ri[Vt(v+0,127)],b.Eb[0]=2*ei[Vt(v+a,127)],b.Eb[1]=101581*ri[Vt(v+u,127)]>>16,8>b.Eb[1]&&(b.Eb[1]=8),b.Qc[0]=ei[Vt(v+h,117)],b.Qc[1]=ri[Vt(v+l,127)],b.lc=v+l}if(!c.Rb)return Jt(t,4,"Not a key frame.");for(P(s),c=t.Pa,n=0;4>n;++n){for(o=0;8>o;++o)for(a=0;3>a;++a)for(u=0;11>u;++u)h=k(s,ui[n][o][a][u])?g(s,8):si[n][o][a][u],c.Wc[n][o].Yb[a][u]=h;for(o=0;17>o;++o)c.Xc[n][o]=c.Wc[n][li[o]]}return t.kc=P(s),t.kc&&(t.Bd=g(s,8)),t.cb=1}function Zt(t,e,r,n,i,a,o){var s=e[i].Yb[r];for(r=0;16>i;++i){if(!k(t,s[r+0]))return i;for(;!k(t,s[r+1]);)if(s=e[++i].Yb[0],r=0,16==i)return 16;var c=e[i+1].Yb;if(k(t,s[r+2])){var u=t,l=0;if(k(u,(f=s)[(h=r)+3]))if(k(u,f[h+6])){for(s=0,h=2*(l=k(u,f[h+8]))+(f=k(u,f[h+9+l])),l=0,f=ii[h];f[s];++s)l+=l+k(u,f[s]);l+=3+(8<<h)}else k(u,f[h+7])?(l=7+2*k(u,165),l+=k(u,145)):l=5+k(u,159);else l=k(u,f[h+4])?3+k(u,f[h+5]):2;s=c[2]}else l=1,s=c[1];c=o+ai[i],0>(u=t).b&&_(u);var h,f=u.b,d=(h=u.Ca>>1)-(u.I>>f)>>31;--u.b,u.Ca+=d,u.Ca|=1,u.I-=(h+1&d)<<f,a[c]=((l^d)-d)*n[(0<i)+0]}return 16}function $t(t){var e=t.rb[t.sb-1];e.la=0,e.Na=0,i(t.zc,0,0,t.zc.length),t.ja=0}function Qt(t,r){if(null==t)return 0;if(null==r)return Jt(t,2,"NULL VP8Io parameter in VP8Decode().");if(!t.cb&&!Kt(t,r))return 0;if(e(t.cb),null==r.ac||r.ac(r)){r.ob&&(t.L=0);var s=Ri[t.L];if(2==t.L?(t.yb=0,t.zb=0):(t.yb=r.v-s>>4,t.zb=r.j-s>>4,0>t.yb&&(t.yb=0),0>t.zb&&(t.zb=0)),t.Va=r.o+15+s>>4,t.Hb=r.va+15+s>>4,t.Hb>t.za&&(t.Hb=t.za),t.Va>t.Ub&&(t.Va=t.Ub),0<t.L){var c=t.ed;for(s=0;4>s;++s){var u;if(t.Qa.Cb){var l=t.Qa.Lb[s];t.Qa.Fb||(l+=c.Tb)}else l=c.Tb;for(u=0;1>=u;++u){var h=t.gd[s][u],f=l;if(c.Pc&&(f+=c.vd[0],u&&(f+=c.od[0])),0<(f=0>f?0:63<f?63:f)){var d=f;0<c.wb&&((d=4<c.wb?d>>2:d>>1)>9-c.wb&&(d=9-c.wb)),1>d&&(d=1),h.dd=d,h.tc=2*f+d,h.ld=40<=f?2:15<=f?1:0}else h.tc=0;h.La=u}}}s=0}else Jt(t,6,"Frame setup failed"),s=t.a;if(s=0==s){if(s){t.$c=0,0<t.Aa||(t.Ic=Ui);t:{s=t.Ic;c=4*(d=t.za);var p=32*d,g=d+1,m=0<t.L?d*(0<t.Aa?2:1):0,v=(2==t.Aa?2:1)*d;if((h=c+832+(u=3*(16*s+Ri[t.L])/2*p)+(l=null!=t.Fa&&0<t.Fa.length?t.Kc.c*t.Kc.i:0))!=h)s=0;else{if(h>t.Vb){if(t.Vb=0,t.Ec=a(h),t.Fc=0,null==t.Ec){s=Jt(t,1,"no memory during frame initialization.");break t}t.Vb=h}h=t.Ec,f=t.Fc,t.Ac=h,t.Bc=f,f+=c,t.Gd=o(p,Ht),t.Hd=0,t.rb=o(g+1,Rt),t.sb=1,t.wa=m?o(m,Dt):null,t.Y=0,t.D.Nb=0,t.D.wa=t.wa,t.D.Y=t.Y,0<t.Aa&&(t.D.Y+=d),e(!0),t.oc=h,t.pc=f,f+=832,t.ya=o(v,Ut),t.aa=0,t.D.ya=t.ya,t.D.aa=t.aa,2==t.Aa&&(t.D.aa+=d),t.R=16*d,t.B=8*d,d=(p=Ri[t.L])*t.R,p=p/2*t.B,t.sa=h,t.ta=f+d,t.qa=t.sa,t.ra=t.ta+16*s*t.R+p,t.Ha=t.qa,t.Ia=t.ra+8*s*t.B+p,t.$c=0,f+=u,t.mb=l?h:null,t.nb=l?f:null,e(f+l<=t.Fc+t.Vb),$t(t),i(t.Ac,t.Bc,0,c),s=1}}if(s){if(r.ka=0,r.y=t.sa,r.O=t.ta,r.f=t.qa,r.N=t.ra,r.ea=t.Ha,r.Vd=t.Ia,r.fa=t.R,r.Rc=t.B,r.F=null,r.J=0,!Cn){for(s=-255;255>=s;++s)Pn[255+s]=0>s?-s:s;for(s=-1020;1020>=s;++s)kn[1020+s]=-128>s?-128:127<s?127:s;for(s=-112;112>=s;++s)Fn[112+s]=-16>s?-16:15<s?15:s;for(s=-255;510>=s;++s)In[255+s]=0>s?0:255<s?255:s;Cn=1}an=ue,on=ae,cn=oe,un=se,ln=ce,sn=ie,hn=Je,fn=Xe,dn=$e,pn=Qe,gn=Ke,mn=Ze,vn=tr,bn=er,yn=ze,wn=He,Nn=We,Ln=Ve,fi[0]=xe,fi[1]=he,fi[2]=Le,fi[3]=Ae,fi[4]=Se,fi[5]=Pe,fi[6]=_e,fi[7]=ke,fi[8]=Ie,fi[9]=Fe,hi[0]=ve,hi[1]=de,hi[2]=pe,hi[3]=ge,hi[4]=be,hi[5]=ye,hi[6]=we,di[0]=Be,di[1]=fe,di[2]=Ce,di[3]=je,di[4]=Ee,di[5]=Me,di[6]=qe,s=1}else s=0}s&&(s=function(t,r){for(t.M=0;t.M<t.Va;++t.M){var o,s=t.Jc[t.M&t.Xb],c=t.m,u=t;for(o=0;o<u.za;++o){var l=c,h=u,f=h.Ac,d=h.Bc+4*o,p=h.zc,g=h.ya[h.aa+o];if(h.Qa.Bb?g.$b=k(l,h.Pa.jb[0])?2+k(l,h.Pa.jb[2]):k(l,h.Pa.jb[1]):g.$b=0,h.kc&&(g.Ad=k(l,h.Bd)),g.Za=!k(l,145)+0,g.Za){var m=g.Ob,v=0;for(h=0;4>h;++h){var b,y=p[0+h];for(b=0;4>b;++b){y=ci[f[d+b]][y];for(var w=oi[k(l,y[0])];0<w;)w=oi[2*w+k(l,y[w])];y=-w,f[d+b]=y}n(m,v,f,d,4),v+=4,p[0+h]=y}}else y=k(l,156)?k(l,128)?1:3:k(l,163)?2:0,g.Ob[0]=y,i(f,d,y,4),i(p,0,y,4);g.Dd=k(l,142)?k(l,114)?k(l,183)?1:3:2:0}if(u.m.Ka)return Jt(t,7,"Premature end-of-partition0 encountered.");for(;t.ja<t.za;++t.ja){if(u=s,l=(c=t).rb[c.sb-1],f=c.rb[c.sb+c.ja],o=c.ya[c.aa+c.ja],d=c.kc?o.Ad:0)l.la=f.la=0,o.Za||(l.Na=f.Na=0),o.Hc=0,o.Gc=0,o.ia=0;else{var N,L;l=f,f=u,d=c.Pa.Xc,p=c.ya[c.aa+c.ja],g=c.pb[p.$b];if(h=p.ad,m=0,v=c.rb[c.sb-1],y=b=0,i(h,m,0,384),p.Za)var A=0,x=d[3];else{w=a(16);var S=l.Na+v.Na;if(S=ni(f,d[1],S,g.Eb,0,w,0),l.Na=v.Na=(0<S)+0,1<S)an(w,0,h,m);else{var _=w[0]+3>>3;for(w=0;256>w;w+=16)h[m+w]=_}A=1,x=d[0]}var P=15&l.la,F=15&v.la;for(w=0;4>w;++w){var I=1&F;for(_=L=0;4>_;++_)P=P>>1|(I=(S=ni(f,x,S=I+(1&P),g.Sc,A,h,m))>A)<<7,L=L<<2|(3<S?3:1<S?2:0!=h[m+0]),m+=16;P>>=4,F=F>>1|I<<7,b=(b<<8|L)>>>0}for(x=P,A=F>>4,N=0;4>N;N+=2){for(L=0,P=l.la>>4+N,F=v.la>>4+N,w=0;2>w;++w){for(I=1&F,_=0;2>_;++_)S=I+(1&P),P=P>>1|(I=0<(S=ni(f,d[2],S,g.Qc,0,h,m)))<<3,L=L<<2|(3<S?3:1<S?2:0!=h[m+0]),m+=16;P>>=2,F=F>>1|I<<5}y|=L<<4*N,x|=P<<4<<N,A|=(240&F)<<N}l.la=x,v.la=A,p.Hc=b,p.Gc=y,p.ia=43690&y?0:g.ia,d=!(b|y)}if(0<c.L&&(c.wa[c.Y+c.ja]=c.gd[o.$b][o.Za],c.wa[c.Y+c.ja].La|=!d),u.Ka)return Jt(t,7,"Premature end-of-file encountered.")}if($t(t),c=r,u=1,o=(s=t).D,l=0<s.L&&s.M>=s.zb&&s.M<=s.Va,0==s.Aa)t:{if(o.M=s.M,o.uc=l,Or(s,o),u=1,o=(L=s.D).Nb,l=(y=Ri[s.L])*s.R,f=y/2*s.B,w=16*o*s.R,_=8*o*s.B,d=s.sa,p=s.ta-l+w,g=s.qa,h=s.ra-f+_,m=s.Ha,v=s.Ia-f+_,F=0==(P=L.M),b=P>=s.Va-1,2==s.Aa&&Or(s,L),L.uc)for(I=(S=s).D.M,e(S.D.uc),L=S.yb;L<S.Hb;++L){A=L,x=I;var C=(j=(U=S).D).Nb;N=U.R;var j=j.wa[j.Y+A],O=U.sa,B=U.ta+16*C*N+16*A,M=j.dd,E=j.tc;if(0!=E)if(e(3<=E),1==U.L)0<A&&wn(O,B,N,E+4),j.La&&Ln(O,B,N,E),0<x&&yn(O,B,N,E+4),j.La&&Nn(O,B,N,E);else{var q=U.B,D=U.qa,R=U.ra+8*C*q+8*A,T=U.Ha,U=U.Ia+8*C*q+8*A;C=j.ld;0<A&&(fn(O,B,N,E+4,M,C),pn(D,R,T,U,q,E+4,M,C)),j.La&&(mn(O,B,N,E,M,C),bn(D,R,T,U,q,E,M,C)),0<x&&(hn(O,B,N,E+4,M,C),dn(D,R,T,U,q,E+4,M,C)),j.La&&(gn(O,B,N,E,M,C),vn(D,R,T,U,q,E,M,C))}}if(s.ia&&alert("todo:DitherRow"),null!=c.put){if(L=16*P,P=16*(P+1),F?(c.y=s.sa,c.O=s.ta+w,c.f=s.qa,c.N=s.ra+_,c.ea=s.Ha,c.W=s.Ia+_):(L-=y,c.y=d,c.O=p,c.f=g,c.N=h,c.ea=m,c.W=v),b||(P-=y),P>c.o&&(P=c.o),c.F=null,c.J=null,null!=s.Fa&&0<s.Fa.length&&L<P&&(c.J=hr(s,c,L,P-L),c.F=s.mb,null==c.F&&0==c.F.length)){u=Jt(s,3,"Could not decode alpha data.");break t}L<c.j&&(y=c.j-L,L=c.j,e(!(1&y)),c.O+=s.R*y,c.N+=s.B*(y>>1),c.W+=s.B*(y>>1),null!=c.F&&(c.J+=c.width*y)),L<P&&(c.O+=c.v,c.N+=c.v>>1,c.W+=c.v>>1,null!=c.F&&(c.J+=c.v),c.ka=L-c.j,c.U=c.va-c.v,c.T=P-L,u=c.put(c))}o+1!=s.Ic||b||(n(s.sa,s.ta-l,d,p+16*s.R,l),n(s.qa,s.ra-f,g,h+8*s.B,f),n(s.Ha,s.Ia-f,m,v+8*s.B,f))}if(!u)return Jt(t,6,"Output aborted.")}return 1}(t,r)),null!=r.bc&&r.bc(r),s&=1}return s?(t.cb=0,s):0}function te(t,e,r,n,i){i=t[e+r+32*n]+(i>>3),t[e+r+32*n]=-256&i?0>i?0:255:i}function ee(t,e,r,n,i,a){te(t,e,0,r,n+i),te(t,e,1,r,n+a),te(t,e,2,r,n-a),te(t,e,3,r,n-i)}function re(t){return(20091*t>>16)+t}function ne(t,e,r,n){var i,o=0,s=a(16);for(i=0;4>i;++i){var c=t[e+0]+t[e+8],u=t[e+0]-t[e+8],l=(35468*t[e+4]>>16)-re(t[e+12]),h=re(t[e+4])+(35468*t[e+12]>>16);s[o+0]=c+h,s[o+1]=u+l,s[o+2]=u-l,s[o+3]=c-h,o+=4,e++}for(i=o=0;4>i;++i)c=(t=s[o+0]+4)+s[o+8],u=t-s[o+8],l=(35468*s[o+4]>>16)-re(s[o+12]),te(r,n,0,0,c+(h=re(s[o+4])+(35468*s[o+12]>>16))),te(r,n,1,0,u+l),te(r,n,2,0,u-l),te(r,n,3,0,c-h),o++,n+=32}function ie(t,e,r,n){var i=t[e+0]+4,a=35468*t[e+4]>>16,o=re(t[e+4]),s=35468*t[e+1]>>16;ee(r,n,0,i+o,t=re(t[e+1]),s),ee(r,n,1,i+a,t,s),ee(r,n,2,i-a,t,s),ee(r,n,3,i-o,t,s)}function ae(t,e,r,n,i){ne(t,e,r,n),i&&ne(t,e+16,r,n+4)}function oe(t,e,r,n){on(t,e+0,r,n,1),on(t,e+32,r,n+128,1)}function se(t,e,r,n){var i;for(t=t[e+0]+4,i=0;4>i;++i)for(e=0;4>e;++e)te(r,n,e,i,t)}function ce(t,e,r,n){t[e+0]&&un(t,e+0,r,n),t[e+16]&&un(t,e+16,r,n+4),t[e+32]&&un(t,e+32,r,n+128),t[e+48]&&un(t,e+48,r,n+128+4)}function ue(t,e,r,n){var i,o=a(16);for(i=0;4>i;++i){var s=t[e+0+i]+t[e+12+i],c=t[e+4+i]+t[e+8+i],u=t[e+4+i]-t[e+8+i],l=t[e+0+i]-t[e+12+i];o[0+i]=s+c,o[8+i]=s-c,o[4+i]=l+u,o[12+i]=l-u}for(i=0;4>i;++i)s=(t=o[0+4*i]+3)+o[3+4*i],c=o[1+4*i]+o[2+4*i],u=o[1+4*i]-o[2+4*i],l=t-o[3+4*i],r[n+0]=s+c>>3,r[n+16]=l+u>>3,r[n+32]=s-c>>3,r[n+48]=l-u>>3,n+=64}function le(t,e,r){var n,i=e-32,a=Bn,o=255-t[i-1];for(n=0;n<r;++n){var s,c=a,u=o+t[e-1];for(s=0;s<r;++s)t[e+s]=c[u+t[i+s]];e+=32}}function he(t,e){le(t,e,4)}function fe(t,e){le(t,e,8)}function de(t,e){le(t,e,16)}function pe(t,e){var r;for(r=0;16>r;++r)n(t,e+32*r,t,e-32,16)}function ge(t,e){var r;for(r=16;0<r;--r)i(t,e,t[e-1],16),e+=32}function me(t,e,r){var n;for(n=0;16>n;++n)i(e,r+32*n,t,16)}function ve(t,e){var r,n=16;for(r=0;16>r;++r)n+=t[e-1+32*r]+t[e+r-32];me(n>>5,t,e)}function be(t,e){var r,n=8;for(r=0;16>r;++r)n+=t[e-1+32*r];me(n>>4,t,e)}function ye(t,e){var r,n=8;for(r=0;16>r;++r)n+=t[e+r-32];me(n>>4,t,e)}function we(t,e){me(128,t,e)}function Ne(t,e,r){return t+2*e+r+2>>2}function Le(t,e){var r,i=e-32;i=new Uint8Array([Ne(t[i-1],t[i+0],t[i+1]),Ne(t[i+0],t[i+1],t[i+2]),Ne(t[i+1],t[i+2],t[i+3]),Ne(t[i+2],t[i+3],t[i+4])]);for(r=0;4>r;++r)n(t,e+32*r,i,0,i.length)}function Ae(t,e){var r=t[e-1],n=t[e-1+32],i=t[e-1+64],a=t[e-1+96];F(t,e+0,16843009*Ne(t[e-1-32],r,n)),F(t,e+32,16843009*Ne(r,n,i)),F(t,e+64,16843009*Ne(n,i,a)),F(t,e+96,16843009*Ne(i,a,a))}function xe(t,e){var r,n=4;for(r=0;4>r;++r)n+=t[e+r-32]+t[e-1+32*r];for(n>>=3,r=0;4>r;++r)i(t,e+32*r,n,4)}function Se(t,e){var r=t[e-1+0],n=t[e-1+32],i=t[e-1+64],a=t[e-1-32],o=t[e+0-32],s=t[e+1-32],c=t[e+2-32],u=t[e+3-32];t[e+0+96]=Ne(n,i,t[e-1+96]),t[e+1+96]=t[e+0+64]=Ne(r,n,i),t[e+2+96]=t[e+1+64]=t[e+0+32]=Ne(a,r,n),t[e+3+96]=t[e+2+64]=t[e+1+32]=t[e+0+0]=Ne(o,a,r),t[e+3+64]=t[e+2+32]=t[e+1+0]=Ne(s,o,a),t[e+3+32]=t[e+2+0]=Ne(c,s,o),t[e+3+0]=Ne(u,c,s)}function _e(t,e){var r=t[e+1-32],n=t[e+2-32],i=t[e+3-32],a=t[e+4-32],o=t[e+5-32],s=t[e+6-32],c=t[e+7-32];t[e+0+0]=Ne(t[e+0-32],r,n),t[e+1+0]=t[e+0+32]=Ne(r,n,i),t[e+2+0]=t[e+1+32]=t[e+0+64]=Ne(n,i,a),t[e+3+0]=t[e+2+32]=t[e+1+64]=t[e+0+96]=Ne(i,a,o),t[e+3+32]=t[e+2+64]=t[e+1+96]=Ne(a,o,s),t[e+3+64]=t[e+2+96]=Ne(o,s,c),t[e+3+96]=Ne(s,c,c)}function Pe(t,e){var r=t[e-1+0],n=t[e-1+32],i=t[e-1+64],a=t[e-1-32],o=t[e+0-32],s=t[e+1-32],c=t[e+2-32],u=t[e+3-32];t[e+0+0]=t[e+1+64]=a+o+1>>1,t[e+1+0]=t[e+2+64]=o+s+1>>1,t[e+2+0]=t[e+3+64]=s+c+1>>1,t[e+3+0]=c+u+1>>1,t[e+0+96]=Ne(i,n,r),t[e+0+64]=Ne(n,r,a),t[e+0+32]=t[e+1+96]=Ne(r,a,o),t[e+1+32]=t[e+2+96]=Ne(a,o,s),t[e+2+32]=t[e+3+96]=Ne(o,s,c),t[e+3+32]=Ne(s,c,u)}function ke(t,e){var r=t[e+0-32],n=t[e+1-32],i=t[e+2-32],a=t[e+3-32],o=t[e+4-32],s=t[e+5-32],c=t[e+6-32],u=t[e+7-32];t[e+0+0]=r+n+1>>1,t[e+1+0]=t[e+0+64]=n+i+1>>1,t[e+2+0]=t[e+1+64]=i+a+1>>1,t[e+3+0]=t[e+2+64]=a+o+1>>1,t[e+0+32]=Ne(r,n,i),t[e+1+32]=t[e+0+96]=Ne(n,i,a),t[e+2+32]=t[e+1+96]=Ne(i,a,o),t[e+3+32]=t[e+2+96]=Ne(a,o,s),t[e+3+64]=Ne(o,s,c),t[e+3+96]=Ne(s,c,u)}function Fe(t,e){var r=t[e-1+0],n=t[e-1+32],i=t[e-1+64],a=t[e-1+96];t[e+0+0]=r+n+1>>1,t[e+2+0]=t[e+0+32]=n+i+1>>1,t[e+2+32]=t[e+0+64]=i+a+1>>1,t[e+1+0]=Ne(r,n,i),t[e+3+0]=t[e+1+32]=Ne(n,i,a),t[e+3+32]=t[e+1+64]=Ne(i,a,a),t[e+3+64]=t[e+2+64]=t[e+0+96]=t[e+1+96]=t[e+2+96]=t[e+3+96]=a}function Ie(t,e){var r=t[e-1+0],n=t[e-1+32],i=t[e-1+64],a=t[e-1+96],o=t[e-1-32],s=t[e+0-32],c=t[e+1-32],u=t[e+2-32];t[e+0+0]=t[e+2+32]=r+o+1>>1,t[e+0+32]=t[e+2+64]=n+r+1>>1,t[e+0+64]=t[e+2+96]=i+n+1>>1,t[e+0+96]=a+i+1>>1,t[e+3+0]=Ne(s,c,u),t[e+2+0]=Ne(o,s,c),t[e+1+0]=t[e+3+32]=Ne(r,o,s),t[e+1+32]=t[e+3+64]=Ne(n,r,o),t[e+1+64]=t[e+3+96]=Ne(i,n,r),t[e+1+96]=Ne(a,i,n)}function Ce(t,e){var r;for(r=0;8>r;++r)n(t,e+32*r,t,e-32,8)}function je(t,e){var r;for(r=0;8>r;++r)i(t,e,t[e-1],8),e+=32}function Oe(t,e,r){var n;for(n=0;8>n;++n)i(e,r+32*n,t,8)}function Be(t,e){var r,n=8;for(r=0;8>r;++r)n+=t[e+r-32]+t[e-1+32*r];Oe(n>>4,t,e)}function Me(t,e){var r,n=4;for(r=0;8>r;++r)n+=t[e+r-32];Oe(n>>3,t,e)}function Ee(t,e){var r,n=4;for(r=0;8>r;++r)n+=t[e-1+32*r];Oe(n>>3,t,e)}function qe(t,e){Oe(128,t,e)}function De(t,e,r){var n=t[e-r],i=t[e+0],a=3*(i-n)+jn[1020+t[e-2*r]-t[e+r]],o=On[112+(a+4>>3)];t[e-r]=Bn[255+n+On[112+(a+3>>3)]],t[e+0]=Bn[255+i-o]}function Re(t,e,r,n){var i=t[e+0],a=t[e+r];return Mn[255+t[e-2*r]-t[e-r]]>n||Mn[255+a-i]>n}function Te(t,e,r,n){return 4*Mn[255+t[e-r]-t[e+0]]+Mn[255+t[e-2*r]-t[e+r]]<=n}function Ue(t,e,r,n,i){var a=t[e-3*r],o=t[e-2*r],s=t[e-r],c=t[e+0],u=t[e+r],l=t[e+2*r],h=t[e+3*r];return 4*Mn[255+s-c]+Mn[255+o-u]>n?0:Mn[255+t[e-4*r]-a]<=i&&Mn[255+a-o]<=i&&Mn[255+o-s]<=i&&Mn[255+h-l]<=i&&Mn[255+l-u]<=i&&Mn[255+u-c]<=i}function ze(t,e,r,n){var i=2*n+1;for(n=0;16>n;++n)Te(t,e+n,r,i)&&De(t,e+n,r)}function He(t,e,r,n){var i=2*n+1;for(n=0;16>n;++n)Te(t,e+n*r,1,i)&&De(t,e+n*r,1)}function We(t,e,r,n){var i;for(i=3;0<i;--i)ze(t,e+=4*r,r,n)}function Ve(t,e,r,n){var i;for(i=3;0<i;--i)He(t,e+=4,r,n)}function Ge(t,e,r,n,i,a,o,s){for(a=2*a+1;0<i--;){if(Ue(t,e,r,a,o))if(Re(t,e,r,s))De(t,e,r);else{var c=t,u=e,l=r,h=c[u-2*l],f=c[u-l],d=c[u+0],p=c[u+l],g=c[u+2*l],m=27*(b=jn[1020+3*(d-f)+jn[1020+h-p]])+63>>7,v=18*b+63>>7,b=9*b+63>>7;c[u-3*l]=Bn[255+c[u-3*l]+b],c[u-2*l]=Bn[255+h+v],c[u-l]=Bn[255+f+m],c[u+0]=Bn[255+d-m],c[u+l]=Bn[255+p-v],c[u+2*l]=Bn[255+g-b]}e+=n}}function Ye(t,e,r,n,i,a,o,s){for(a=2*a+1;0<i--;){if(Ue(t,e,r,a,o))if(Re(t,e,r,s))De(t,e,r);else{var c=t,u=e,l=r,h=c[u-l],f=c[u+0],d=c[u+l],p=On[112+((g=3*(f-h))+4>>3)],g=On[112+(g+3>>3)],m=p+1>>1;c[u-2*l]=Bn[255+c[u-2*l]+m],c[u-l]=Bn[255+h+g],c[u+0]=Bn[255+f-p],c[u+l]=Bn[255+d-m]}e+=n}}function Je(t,e,r,n,i,a){Ge(t,e,r,1,16,n,i,a)}function Xe(t,e,r,n,i,a){Ge(t,e,1,r,16,n,i,a)}function Ke(t,e,r,n,i,a){var o;for(o=3;0<o;--o)Ye(t,e+=4*r,r,1,16,n,i,a)}function Ze(t,e,r,n,i,a){var o;for(o=3;0<o;--o)Ye(t,e+=4,1,r,16,n,i,a)}function $e(t,e,r,n,i,a,o,s){Ge(t,e,i,1,8,a,o,s),Ge(r,n,i,1,8,a,o,s)}function Qe(t,e,r,n,i,a,o,s){Ge(t,e,1,i,8,a,o,s),Ge(r,n,1,i,8,a,o,s)}function tr(t,e,r,n,i,a,o,s){Ye(t,e+4*i,i,1,8,a,o,s),Ye(r,n+4*i,i,1,8,a,o,s)}function er(t,e,r,n,i,a,o,s){Ye(t,e+4,1,i,8,a,o,s),Ye(r,n+4,1,i,8,a,o,s)}function rr(){this.ba=new ot,this.ec=[],this.cc=[],this.Mc=[],this.Dc=this.Nc=this.dc=this.fc=0,this.Oa=new ct,this.memory=0,this.Ib="OutputFunc",this.Jb="OutputAlphaFunc",this.Nd="OutputRowFunc"}function nr(){this.data=[],this.offset=this.kd=this.ha=this.w=0,this.na=[],this.xa=this.gb=this.Ja=this.Sa=this.P=0}function ir(){this.nc=this.Ea=this.b=this.hc=0,this.K=[],this.w=0}function ar(){this.ua=0,this.Wa=new M,this.vb=new M,this.md=this.xc=this.wc=0,this.vc=[],this.Wb=0,this.Ya=new d,this.yc=new h}function or(){this.xb=this.a=0,this.l=new Gt,this.ca=new ot,this.V=[],this.Ba=0,this.Ta=[],this.Ua=0,this.m=new N,this.Pb=0,this.wd=new N,this.Ma=this.$=this.C=this.i=this.c=this.xd=0,this.s=new ar,this.ab=0,this.gc=o(4,ir),this.Oc=0}function sr(){this.Lc=this.Z=this.$a=this.i=this.c=0,this.l=new Gt,this.ic=0,this.ca=[],this.tb=0,this.qd=null,this.rd=0}function cr(t,e,r,n,i,a,o){for(t=null==t?0:t[e+0],e=0;e<o;++e)i[a+e]=t+r[n+e]&255,t=i[a+e]}function ur(t,e,r,n,i,a,o){var s;if(null==t)cr(null,null,r,n,i,a,o);else for(s=0;s<o;++s)i[a+s]=t[e+s]+r[n+s]&255}function lr(t,e,r,n,i,a,o){if(null==t)cr(null,null,r,n,i,a,o);else{var s,c=t[e+0],u=c,l=c;for(s=0;s<o;++s)u=l+(c=t[e+s])-u,l=r[n+s]+(-256&u?0>u?0:255:u)&255,u=c,i[a+s]=l}}function hr(t,r,i,o){var s=r.width,c=r.o;if(e(null!=t&&null!=r),0>i||0>=o||i+o>c)return null;if(!t.Cc){if(null==t.ga){var u;if(t.ga=new sr,(u=null==t.ga)||(u=r.width*r.o,e(0==t.Gb.length),t.Gb=a(u),t.Uc=0,null==t.Gb?u=0:(t.mb=t.Gb,t.nb=t.Uc,t.rc=null,u=1),u=!u),!u){u=t.ga;var l=t.Fa,h=t.P,f=t.qc,d=t.mb,p=t.nb,g=h+1,m=f-1,b=u.l;if(e(null!=l&&null!=d&&null!=r),mi[0]=null,mi[1]=cr,mi[2]=ur,mi[3]=lr,u.ca=d,u.tb=p,u.c=r.width,u.i=r.height,e(0<u.c&&0<u.i),1>=f)r=0;else if(u.$a=l[h+0]>>0&3,u.Z=l[h+0]>>2&3,u.Lc=l[h+0]>>4&3,h=l[h+0]>>6&3,0>u.$a||1<u.$a||4<=u.Z||1<u.Lc||h)r=0;else if(b.put=dt,b.ac=ft,b.bc=pt,b.ma=u,b.width=r.width,b.height=r.height,b.Da=r.Da,b.v=r.v,b.va=r.va,b.j=r.j,b.o=r.o,u.$a)t:{e(1==u.$a),r=kt();e:for(;;){if(null==r){r=0;break t}if(e(null!=u),u.mc=r,r.c=u.c,r.i=u.i,r.l=u.l,r.l.ma=u,r.l.width=u.c,r.l.height=u.i,r.a=0,v(r.m,l,g,m),!Ft(u.c,u.i,1,r,null))break e;if(1==r.ab&&3==r.gc[0].hc&&At(r.s)?(u.ic=1,l=r.c*r.i,r.Ta=null,r.Ua=0,r.V=a(l),r.Ba=0,null==r.V?(r.a=1,r=0):r=1):(u.ic=0,r=It(r,u.c)),!r)break e;r=1;break t}u.mc=null,r=0}else r=m>=u.c*u.i;u=!r}if(u)return null;1!=t.ga.Lc?t.Ga=0:o=c-i}e(null!=t.ga),e(i+o<=c);t:{if(r=(l=t.ga).c,c=l.l.o,0==l.$a){if(g=t.rc,m=t.Vc,b=t.Fa,h=t.P+1+i*r,f=t.mb,d=t.nb+i*r,e(h<=t.P+t.qc),0!=l.Z)for(e(null!=mi[l.Z]),u=0;u<o;++u)mi[l.Z](g,m,b,h,f,d,r),g=f,m=d,d+=r,h+=r;else for(u=0;u<o;++u)n(f,d,b,h,r),g=f,m=d,d+=r,h+=r;t.rc=g,t.Vc=m}else{if(e(null!=l.mc),r=i+o,e(null!=(u=l.mc)),e(r<=u.i),u.C>=r)r=1;else if(l.ic||mr(),l.ic){l=u.V,g=u.Ba,m=u.c;var y=u.i,w=(b=1,h=u.$/m,f=u.$%m,d=u.m,p=u.s,u.$),N=m*y,L=m*r,x=p.wc,_=w<L?wt(p,f,h):null;e(w<=N),e(r<=y),e(At(p));e:for(;;){for(;!d.h&&w<L;){if(f&x||(_=wt(p,f,h)),e(null!=_),S(d),256>(y=bt(_.G[0],_.H[0],d)))l[g+w]=y,++w,++f>=m&&(f=0,++h<=r&&!(h%16)&&St(u,h));else{if(!(280>y)){b=0;break e}y=mt(y-256,d);var P,k=bt(_.G[4],_.H[4],d);if(S(d),!(w>=(k=vt(m,k=mt(k,d)))&&N-w>=y)){b=0;break e}for(P=0;P<y;++P)l[g+w+P]=l[g+w+P-k];for(w+=y,f+=y;f>=m;)f-=m,++h<=r&&!(h%16)&&St(u,h);w<L&&f&x&&(_=wt(p,f,h))}e(d.h==A(d))}St(u,h>r?r:h);break e}!b||d.h&&w<N?(b=0,u.a=d.h?5:3):u.$=w,r=b}else r=_t(u,u.V,u.Ba,u.c,u.i,r,Ct);if(!r){o=0;break t}}i+o>=c&&(t.Cc=1),o=1}if(!o)return null;if(t.Cc&&(null!=(o=t.ga)&&(o.mc=null),t.ga=null,0<t.Ga))return alert("todo:WebPDequantizeLevels"),null}return t.nb+i*s}function fr(t,e,r,n,i,a){for(;0<i--;){var o,s=t,c=e+(r?1:0),u=t,l=e+(r?0:3);for(o=0;o<n;++o){var h=u[l+4*o];255!=h&&(h*=32897,s[c+4*o+0]=s[c+4*o+0]*h>>23,s[c+4*o+1]=s[c+4*o+1]*h>>23,s[c+4*o+2]=s[c+4*o+2]*h>>23)}e+=a}}function dr(t,e,r,n,i){for(;0<n--;){var a;for(a=0;a<r;++a){var o=t[e+2*a+0],s=15&(u=t[e+2*a+1]),c=4369*s,u=(240&u|u>>4)*c>>16;t[e+2*a+0]=(240&o|o>>4)*c>>16&240|(15&o|o<<4)*c>>16>>4&15,t[e+2*a+1]=240&u|s}e+=i}}function pr(t,e,r,n,i,a,o,s){var c,u,l=255;for(u=0;u<i;++u){for(c=0;c<n;++c){var h=t[e+c];a[o+4*c]=h,l&=h}e+=r,o+=s}return 255!=l}function gr(t,e,r,n,i){var a;for(a=0;a<i;++a)r[n+a]=t[e+a]>>8}function mr(){An=fr,xn=dr,Sn=pr,_n=gr}function vr(r,n,i){t[r]=function(t,r,a,o,s,c,u,l,h,f,d,p,g,m,v,b,y){var w,N=y-1>>1,L=s[c+0]|u[l+0]<<16,A=h[f+0]|d[p+0]<<16;e(null!=t);var x=3*L+A+131074>>2;for(n(t[r+0],255&x,x>>16,g,m),null!=a&&(x=3*A+L+131074>>2,n(a[o+0],255&x,x>>16,v,b)),w=1;w<=N;++w){var S=s[c+w]|u[l+w]<<16,_=h[f+w]|d[p+w]<<16,P=L+S+A+_+524296,k=P+2*(S+A)>>3;x=k+L>>1,L=(P=P+2*(L+_)>>3)+S>>1,n(t[r+2*w-1],255&x,x>>16,g,m+(2*w-1)*i),n(t[r+2*w-0],255&L,L>>16,g,m+(2*w-0)*i),null!=a&&(x=P+A>>1,L=k+_>>1,n(a[o+2*w-1],255&x,x>>16,v,b+(2*w-1)*i),n(a[o+2*w+0],255&L,L>>16,v,b+(2*w+0)*i)),L=S,A=_}1&y||(x=3*L+A+131074>>2,n(t[r+y-1],255&x,x>>16,g,m+(y-1)*i),null!=a&&(x=3*A+L+131074>>2,n(a[o+y-1],255&x,x>>16,v,b+(y-1)*i)))}}function br(){vi[En]=bi,vi[qn]=wi,vi[Dn]=yi,vi[Rn]=Ni,vi[Tn]=Li,vi[Un]=Ai,vi[zn]=xi,vi[Hn]=wi,vi[Wn]=Ni,vi[Vn]=Li,vi[Gn]=Ai}function yr(t){return t&~Ii?0>t?0:255:t>>Fi}function wr(t,e){return yr((19077*t>>8)+(26149*e>>8)-14234)}function Nr(t,e,r){return yr((19077*t>>8)-(6419*e>>8)-(13320*r>>8)+8708)}function Lr(t,e){return yr((19077*t>>8)+(33050*e>>8)-17685)}function Ar(t,e,r,n,i){n[i+0]=wr(t,r),n[i+1]=Nr(t,e,r),n[i+2]=Lr(t,e)}function xr(t,e,r,n,i){n[i+0]=Lr(t,e),n[i+1]=Nr(t,e,r),n[i+2]=wr(t,r)}function Sr(t,e,r,n,i){var a=Nr(t,e,r);e=a<<3&224|Lr(t,e)>>3,n[i+0]=248&wr(t,r)|a>>5,n[i+1]=e}function _r(t,e,r,n,i){var a=240&Lr(t,e)|15;n[i+0]=240&wr(t,r)|Nr(t,e,r)>>4,n[i+1]=a}function Pr(t,e,r,n,i){n[i+0]=255,Ar(t,e,r,n,i+1)}function kr(t,e,r,n,i){xr(t,e,r,n,i),n[i+3]=255}function Fr(t,e,r,n,i){Ar(t,e,r,n,i),n[i+3]=255}function Vt(t,e){return 0>t?0:t>e?e:t}function Ir(e,r,n){t[e]=function(t,e,i,a,o,s,c,u,l){for(var h=u+(-2&l)*n;u!=h;)r(t[e+0],i[a+0],o[s+0],c,u),r(t[e+1],i[a+0],o[s+0],c,u+n),e+=2,++a,++s,u+=2*n;1&l&&r(t[e+0],i[a+0],o[s+0],c,u)}}function Cr(t,e,r){return 0==r?0==t?0==e?6:5:0==e?4:0:r}function jr(t,e,r,n,i){switch(t>>>30){case 3:on(e,r,n,i,0);break;case 2:sn(e,r,n,i);break;case 1:un(e,r,n,i)}}function Or(t,e){var r,a,o=e.M,s=e.Nb,c=t.oc,u=t.pc+40,l=t.oc,h=t.pc+584,f=t.oc,d=t.pc+600;for(r=0;16>r;++r)c[u+32*r-1]=129;for(r=0;8>r;++r)l[h+32*r-1]=129,f[d+32*r-1]=129;for(0<o?c[u-1-32]=l[h-1-32]=f[d-1-32]=129:(i(c,u-32-1,127,21),i(l,h-32-1,127,9),i(f,d-32-1,127,9)),a=0;a<t.za;++a){var p=e.ya[e.aa+a];if(0<a){for(r=-1;16>r;++r)n(c,u+32*r-4,c,u+32*r+12,4);for(r=-1;8>r;++r)n(l,h+32*r-4,l,h+32*r+4,4),n(f,d+32*r-4,f,d+32*r+4,4)}var g=t.Gd,m=t.Hd+a,v=p.ad,b=p.Hc;if(0<o&&(n(c,u-32,g[m].y,0,16),n(l,h-32,g[m].f,0,8),n(f,d-32,g[m].ea,0,8)),p.Za){var y=c,w=u-32+16;for(0<o&&(a>=t.za-1?i(y,w,g[m].y[15],4):n(y,w,g[m+1].y,0,4)),r=0;4>r;r++)y[w+128+r]=y[w+256+r]=y[w+384+r]=y[w+0+r];for(r=0;16>r;++r,b<<=2)y=c,w=u+Di[r],fi[p.Ob[r]](y,w),jr(b,v,16*+r,y,w)}else if(y=Cr(a,o,p.Ob[0]),hi[y](c,u),0!=b)for(r=0;16>r;++r,b<<=2)jr(b,v,16*+r,c,u+Di[r]);for(r=p.Gc,y=Cr(a,o,p.Dd),di[y](l,h),di[y](f,d),b=v,y=l,w=h,255&(p=r>>0)&&(170&p?cn(b,256,y,w):ln(b,256,y,w)),p=f,b=d,255&(r>>=8)&&(170&r?cn(v,320,p,b):ln(v,320,p,b)),o<t.Ub-1&&(n(g[m].y,0,c,u+480,16),n(g[m].f,0,l,h+224,8),n(g[m].ea,0,f,d+224,8)),r=8*s*t.B,g=t.sa,m=t.ta+16*a+16*s*t.R,v=t.qa,p=t.ra+8*a+r,b=t.Ha,y=t.Ia+8*a+r,r=0;16>r;++r)n(g,m+r*t.R,c,u+32*r,16);for(r=0;8>r;++r)n(v,p+r*t.B,l,h+32*r,8),n(b,y+r*t.B,f,d+32*r,8)}}function Br(t,n,i,a,o,s,c,u,l){var h=[0],f=[0],d=0,p=null!=l?l.kd:0,g=null!=l?l:new nr;if(null==t||12>i)return 7;g.data=t,g.w=n,g.ha=i,n=[n],i=[i],g.gb=[g.gb];t:{var m=n,b=i,y=g.gb;if(e(null!=t),e(null!=b),e(null!=y),y[0]=0,12<=b[0]&&!r(t,m[0],"RIFF")){if(r(t,m[0]+8,"WEBP")){y=3;break t}var w=j(t,m[0]+4);if(12>w||4294967286<w){y=3;break t}if(p&&w>b[0]-8){y=7;break t}y[0]=w,m[0]+=12,b[0]-=12}y=0}if(0!=y)return y;for(w=0<g.gb[0],i=i[0];;){t:{var L=t;b=n,y=i;var A=h,x=f,S=m=[0];if((k=d=[d])[0]=0,8>y[0])y=7;else{if(!r(L,b[0],"VP8X")){if(10!=j(L,b[0]+4)){y=3;break t}if(18>y[0]){y=7;break t}var _=j(L,b[0]+8),P=1+C(L,b[0]+12);if(2147483648<=P*(L=1+C(L,b[0]+15))){y=3;break t}null!=S&&(S[0]=_),null!=A&&(A[0]=P),null!=x&&(x[0]=L),b[0]+=18,y[0]-=18,k[0]=1}y=0}}if(d=d[0],m=m[0],0!=y)return y;if(b=!!(2&m),!w&&d)return 3;if(null!=s&&(s[0]=!!(16&m)),null!=c&&(c[0]=b),null!=u&&(u[0]=0),c=h[0],m=f[0],d&&b&&null==l){y=0;break}if(4>i){y=7;break}if(w&&d||!w&&!d&&!r(t,n[0],"ALPH")){i=[i],g.na=[g.na],g.P=[g.P],g.Sa=[g.Sa];t:{_=t,y=n,w=i;var k=g.gb;A=g.na,x=g.P,S=g.Sa;P=22,e(null!=_),e(null!=w),L=y[0];var F=w[0];for(e(null!=A),e(null!=S),A[0]=null,x[0]=null,S[0]=0;;){if(y[0]=L,w[0]=F,8>F){y=7;break t}var I=j(_,L+4);if(4294967286<I){y=3;break t}var O=8+I+1&-2;if(P+=O,0<k&&P>k){y=3;break t}if(!r(_,L,"VP8 ")||!r(_,L,"VP8L")){y=0;break t}if(F[0]<O){y=7;break t}r(_,L,"ALPH")||(A[0]=_,x[0]=L+8,S[0]=I),L+=O,F-=O}}if(i=i[0],g.na=g.na[0],g.P=g.P[0],g.Sa=g.Sa[0],0!=y)break}i=[i],g.Ja=[g.Ja],g.xa=[g.xa];t:if(k=t,y=n,w=i,A=g.gb[0],x=g.Ja,S=g.xa,_=y[0],L=!r(k,_,"VP8 "),P=!r(k,_,"VP8L"),e(null!=k),e(null!=w),e(null!=x),e(null!=S),8>w[0])y=7;else{if(L||P){if(k=j(k,_+4),12<=A&&k>A-12){y=3;break t}if(p&&k>w[0]-8){y=7;break t}x[0]=k,y[0]+=8,w[0]-=8,S[0]=P}else S[0]=5<=w[0]&&47==k[_+0]&&!(k[_+4]>>5),x[0]=w[0];y=0}if(i=i[0],g.Ja=g.Ja[0],g.xa=g.xa[0],n=n[0],0!=y)break;if(4294967286<g.Ja)return 3;if(null==u||b||(u[0]=g.xa?2:1),c=[c],m=[m],g.xa){if(5>i){y=7;break}u=c,p=m,b=s,null==t||5>i?t=0:5<=i&&47==t[n+0]&&!(t[n+4]>>5)?(w=[0],k=[0],A=[0],v(x=new N,t,n,i),gt(x,w,k,A)?(null!=u&&(u[0]=w[0]),null!=p&&(p[0]=k[0]),null!=b&&(b[0]=A[0]),t=1):t=0):t=0}else{if(10>i){y=7;break}u=m,null==t||10>i||!Xt(t,n+3,i-3)?t=0:(p=t[n+0]|t[n+1]<<8|t[n+2]<<16,b=16383&(t[n+7]<<8|t[n+6]),t=16383&(t[n+9]<<8|t[n+8]),1&p||3<(p>>1&7)||!(p>>4&1)||p>>5>=g.Ja||!b||!t?t=0:(c&&(c[0]=b),u&&(u[0]=t),t=1))}if(!t)return 3;if(c=c[0],m=m[0],d&&(h[0]!=c||f[0]!=m))return 3;null!=l&&(l[0]=g,l.offset=n-l.w,e(4294967286>n-l.w),e(l.offset==l.ha-i));break}return 0==y||7==y&&d&&null==l?(null!=s&&(s[0]|=null!=g.na&&0<g.na.length),null!=a&&(a[0]=c),null!=o&&(o[0]=m),0):y}function Mr(t,e,r){var n=e.width,i=e.height,a=0,o=0,s=n,c=i;if(e.Da=null!=t&&0<t.Da,e.Da&&(s=t.cd,c=t.bd,a=t.v,o=t.j,11>r||(a&=-2,o&=-2),0>a||0>o||0>=s||0>=c||a+s>n||o+c>i))return 0;if(e.v=a,e.j=o,e.va=a+s,e.o=o+c,e.U=s,e.T=c,e.da=null!=t&&0<t.da,e.da){if(!E(s,c,r=[t.ib],a=[t.hb]))return 0;e.ib=r[0],e.hb=a[0]}return e.ob=null!=t&&t.ob,e.Kb=null==t||!t.Sd,e.da&&(e.ob=e.ib<3*n/4&&e.hb<3*i/4,e.Kb=0),1}function Er(t){if(null==t)return 2;if(11>t.S){var e=t.f.RGBA;e.fb+=(t.height-1)*e.A,e.A=-e.A}else e=t.f.kb,t=t.height,e.O+=(t-1)*e.fa,e.fa=-e.fa,e.N+=(t-1>>1)*e.Ab,e.Ab=-e.Ab,e.W+=(t-1>>1)*e.Db,e.Db=-e.Db,null!=e.F&&(e.J+=(t-1)*e.lb,e.lb=-e.lb);return 0}function qr(t,e,r,n){if(null==n||0>=t||0>=e)return 2;if(null!=r){if(r.Da){var i=r.cd,o=r.bd,s=-2&r.v,c=-2&r.j;if(0>s||0>c||0>=i||0>=o||s+i>t||c+o>e)return 2;t=i,e=o}if(r.da){if(!E(t,e,i=[r.ib],o=[r.hb]))return 2;t=i[0],e=o[0]}}n.width=t,n.height=e;t:{var u=n.width,l=n.height;if(t=n.S,0>=u||0>=l||!(t>=En&&13>t))t=2;else{if(0>=n.Rd&&null==n.sd){s=o=i=e=0;var h=(c=u*zi[t])*l;if(11>t||(o=(l+1)/2*(e=(u+1)/2),12==t&&(s=(i=u)*l)),null==(l=a(h+2*o+s))){t=1;break t}n.sd=l,11>t?((u=n.f.RGBA).eb=l,u.fb=0,u.A=c,u.size=h):((u=n.f.kb).y=l,u.O=0,u.fa=c,u.Fd=h,u.f=l,u.N=0+h,u.Ab=e,u.Cd=o,u.ea=l,u.W=0+h+o,u.Db=e,u.Ed=o,12==t&&(u.F=l,u.J=0+h+2*o),u.Tc=s,u.lb=i)}if(e=1,i=n.S,o=n.width,s=n.height,i>=En&&13>i)if(11>i)t=n.f.RGBA,e&=(c=Math.abs(t.A))*(s-1)+o<=t.size,e&=c>=o*zi[i],e&=null!=t.eb;else{t=n.f.kb,c=(o+1)/2,h=(s+1)/2,u=Math.abs(t.fa);l=Math.abs(t.Ab);var f=Math.abs(t.Db),d=Math.abs(t.lb),p=d*(s-1)+o;e&=u*(s-1)+o<=t.Fd,e&=l*(h-1)+c<=t.Cd,e=(e&=f*(h-1)+c<=t.Ed)&u>=o&l>=c&f>=c,e&=null!=t.y,e&=null!=t.f,e&=null!=t.ea,12==i&&(e&=d>=o,e&=p<=t.Tc,e&=null!=t.F)}else e=0;t=e?0:2}}return 0!=t||null!=r&&r.fd&&(t=Er(n)),t}var Dr=64,Rr=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215],Tr=24,Ur=32,zr=8,Hr=[0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7];R("Predictor0","PredictorAdd0"),t.Predictor0=function(){return 4278190080},t.Predictor1=function(t){return t},t.Predictor2=function(t,e,r){return e[r+0]},t.Predictor3=function(t,e,r){return e[r+1]},t.Predictor4=function(t,e,r){return e[r-1]},t.Predictor5=function(t,e,r){return U(U(t,e[r+1]),e[r+0])},t.Predictor6=function(t,e,r){return U(t,e[r-1])},t.Predictor7=function(t,e,r){return U(t,e[r+0])},t.Predictor8=function(t,e,r){return U(e[r-1],e[r+0])},t.Predictor9=function(t,e,r){return U(e[r+0],e[r+1])},t.Predictor10=function(t,e,r){return U(U(t,e[r-1]),U(e[r+0],e[r+1]))},t.Predictor11=function(t,e,r){var n=e[r+0];return 0>=W(n>>24&255,t>>24&255,(e=e[r-1])>>24&255)+W(n>>16&255,t>>16&255,e>>16&255)+W(n>>8&255,t>>8&255,e>>8&255)+W(255&n,255&t,255&e)?n:t},t.Predictor12=function(t,e,r){var n=e[r+0];return(z((t>>24&255)+(n>>24&255)-((e=e[r-1])>>24&255))<<24|z((t>>16&255)+(n>>16&255)-(e>>16&255))<<16|z((t>>8&255)+(n>>8&255)-(e>>8&255))<<8|z((255&t)+(255&n)-(255&e)))>>>0},t.Predictor13=function(t,e,r){var n=e[r-1];return(H((t=U(t,e[r+0]))>>24&255,n>>24&255)<<24|H(t>>16&255,n>>16&255)<<16|H(t>>8&255,n>>8&255)<<8|H(t>>0&255,n>>0&255))>>>0};var Wr=t.PredictorAdd0;t.PredictorAdd1=V,R("Predictor2","PredictorAdd2"),R("Predictor3","PredictorAdd3"),R("Predictor4","PredictorAdd4"),R("Predictor5","PredictorAdd5"),R("Predictor6","PredictorAdd6"),R("Predictor7","PredictorAdd7"),R("Predictor8","PredictorAdd8"),R("Predictor9","PredictorAdd9"),R("Predictor10","PredictorAdd10"),R("Predictor11","PredictorAdd11"),R("Predictor12","PredictorAdd12"),R("Predictor13","PredictorAdd13");var Vr=t.PredictorAdd2;X("ColorIndexInverseTransform","MapARGB","32b",(function(t){return t>>8&255}),(function(t){return t})),X("VP8LColorIndexInverseTransformAlpha","MapAlpha","8b",(function(t){return t}),(function(t){return t>>8&255}));var Gr,Yr=t.ColorIndexInverseTransform,Jr=t.MapARGB,Xr=t.VP8LColorIndexInverseTransformAlpha,Kr=t.MapAlpha,Zr=t.VP8LPredictorsAdd=[];Zr.length=16,(t.VP8LPredictors=[]).length=16,(t.VP8LPredictorsAdd_C=[]).length=16,(t.VP8LPredictors_C=[]).length=16;var $r,Qr,tn,en,rn,nn,an,on,sn,cn,un,ln,hn,fn,dn,pn,gn,mn,vn,bn,yn,wn,Nn,Ln,An,xn,Sn,_n,Pn=a(511),kn=a(2041),Fn=a(225),In=a(767),Cn=0,jn=kn,On=Fn,Bn=In,Mn=Pn,En=0,qn=1,Dn=2,Rn=3,Tn=4,Un=5,zn=6,Hn=7,Wn=8,Vn=9,Gn=10,Yn=[2,3,7],Jn=[3,3,11],Xn=[280,256,256,256,40],Kn=[0,1,1,1,0],Zn=[17,18,0,1,2,3,4,5,16,6,7,8,9,10,11,12,13,14,15],$n=[24,7,23,25,40,6,39,41,22,26,38,42,56,5,55,57,21,27,54,58,37,43,72,4,71,73,20,28,53,59,70,74,36,44,88,69,75,52,60,3,87,89,19,29,86,90,35,45,68,76,85,91,51,61,104,2,103,105,18,30,102,106,34,46,84,92,67,77,101,107,50,62,120,1,119,121,83,93,17,31,100,108,66,78,118,122,33,47,117,123,49,63,99,109,82,94,0,116,124,65,79,16,32,98,110,48,115,125,81,95,64,114,126,97,111,80,113,127,96,112],Qn=[2954,2956,2958,2962,2970,2986,3018,3082,3212,3468,3980,5004],ti=8,ei=[4,5,6,7,8,9,10,10,11,12,13,14,15,16,17,17,18,19,20,20,21,21,22,22,23,23,24,25,25,26,27,28,29,30,31,32,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,93,95,96,98,100,101,102,104,106,108,110,112,114,116,118,122,124,126,128,130,132,134,136,138,140,143,145,148,151,154,157],ri=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,234,239,245,249,254,259,264,269,274,279,284],ni=null,ii=[[173,148,140,0],[176,155,140,135,0],[180,157,141,134,130,0],[254,254,243,230,196,177,153,140,133,130,129,0]],ai=[0,1,4,8,5,2,3,6,9,12,13,10,7,11,14,15],oi=[-0,1,-1,2,-2,3,4,6,-3,5,-4,-5,-6,7,-7,8,-8,-9],si=[[[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]],[[253,136,254,255,228,219,128,128,128,128,128],[189,129,242,255,227,213,255,219,128,128,128],[106,126,227,252,214,209,255,255,128,128,128]],[[1,98,248,255,236,226,255,255,128,128,128],[181,133,238,254,221,234,255,154,128,128,128],[78,134,202,247,198,180,255,219,128,128,128]],[[1,185,249,255,243,255,128,128,128,128,128],[184,150,247,255,236,224,128,128,128,128,128],[77,110,216,255,236,230,128,128,128,128,128]],[[1,101,251,255,241,255,128,128,128,128,128],[170,139,241,252,236,209,255,255,128,128,128],[37,116,196,243,228,255,255,255,128,128,128]],[[1,204,254,255,245,255,128,128,128,128,128],[207,160,250,255,238,128,128,128,128,128,128],[102,103,231,255,211,171,128,128,128,128,128]],[[1,152,252,255,240,255,128,128,128,128,128],[177,135,243,255,234,225,128,128,128,128,128],[80,129,211,255,194,224,128,128,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[246,1,255,128,128,128,128,128,128,128,128],[255,128,128,128,128,128,128,128,128,128,128]]],[[[198,35,237,223,193,187,162,160,145,155,62],[131,45,198,221,172,176,220,157,252,221,1],[68,47,146,208,149,167,221,162,255,223,128]],[[1,149,241,255,221,224,255,255,128,128,128],[184,141,234,253,222,220,255,199,128,128,128],[81,99,181,242,176,190,249,202,255,255,128]],[[1,129,232,253,214,197,242,196,255,255,128],[99,121,210,250,201,198,255,202,128,128,128],[23,91,163,242,170,187,247,210,255,255,128]],[[1,200,246,255,234,255,128,128,128,128,128],[109,178,241,255,231,245,255,255,128,128,128],[44,130,201,253,205,192,255,255,128,128,128]],[[1,132,239,251,219,209,255,165,128,128,128],[94,136,225,251,218,190,255,255,128,128,128],[22,100,174,245,186,161,255,199,128,128,128]],[[1,182,249,255,232,235,128,128,128,128,128],[124,143,241,255,227,234,128,128,128,128,128],[35,77,181,251,193,211,255,205,128,128,128]],[[1,157,247,255,236,231,255,255,128,128,128],[121,141,235,255,225,227,255,255,128,128,128],[45,99,188,251,195,217,255,224,128,128,128]],[[1,1,251,255,213,255,128,128,128,128,128],[203,1,248,255,255,128,128,128,128,128,128],[137,1,177,255,224,255,128,128,128,128,128]]],[[[253,9,248,251,207,208,255,192,128,128,128],[175,13,224,243,193,185,249,198,255,255,128],[73,17,171,221,161,179,236,167,255,234,128]],[[1,95,247,253,212,183,255,255,128,128,128],[239,90,244,250,211,209,255,255,128,128,128],[155,77,195,248,188,195,255,255,128,128,128]],[[1,24,239,251,218,219,255,205,128,128,128],[201,51,219,255,196,186,128,128,128,128,128],[69,46,190,239,201,218,255,228,128,128,128]],[[1,191,251,255,255,128,128,128,128,128,128],[223,165,249,255,213,255,128,128,128,128,128],[141,124,248,255,255,128,128,128,128,128,128]],[[1,16,248,255,255,128,128,128,128,128,128],[190,36,230,255,236,255,128,128,128,128,128],[149,1,255,128,128,128,128,128,128,128,128]],[[1,226,255,128,128,128,128,128,128,128,128],[247,192,255,128,128,128,128,128,128,128,128],[240,128,255,128,128,128,128,128,128,128,128]],[[1,134,252,255,255,128,128,128,128,128,128],[213,62,250,255,255,128,128,128,128,128,128],[55,93,255,128,128,128,128,128,128,128,128]],[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]]],[[[202,24,213,235,186,191,220,160,240,175,255],[126,38,182,232,169,184,228,174,255,187,128],[61,46,138,219,151,178,240,170,255,216,128]],[[1,112,230,250,199,191,247,159,255,255,128],[166,109,228,252,211,215,255,174,128,128,128],[39,77,162,232,172,180,245,178,255,255,128]],[[1,52,220,246,198,199,249,220,255,255,128],[124,74,191,243,183,193,250,221,255,255,128],[24,71,130,219,154,170,243,182,255,255,128]],[[1,182,225,249,219,240,255,224,128,128,128],[149,150,226,252,216,205,255,171,128,128,128],[28,108,170,242,183,194,254,223,255,255,128]],[[1,81,230,252,204,203,255,192,128,128,128],[123,102,209,247,188,196,255,233,128,128,128],[20,95,153,243,164,173,255,203,128,128,128]],[[1,222,248,255,216,213,128,128,128,128,128],[168,175,246,252,235,205,255,255,128,128,128],[47,116,215,255,211,212,255,255,128,128,128]],[[1,121,236,253,212,214,255,255,128,128,128],[141,84,213,252,201,202,255,219,128,128,128],[42,80,160,240,162,185,255,205,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[244,1,255,128,128,128,128,128,128,128,128],[238,1,255,128,128,128,128,128,128,128,128]]]],ci=[[[231,120,48,89,115,113,120,152,112],[152,179,64,126,170,118,46,70,95],[175,69,143,80,85,82,72,155,103],[56,58,10,171,218,189,17,13,152],[114,26,17,163,44,195,21,10,173],[121,24,80,195,26,62,44,64,85],[144,71,10,38,171,213,144,34,26],[170,46,55,19,136,160,33,206,71],[63,20,8,114,114,208,12,9,226],[81,40,11,96,182,84,29,16,36]],[[134,183,89,137,98,101,106,165,148],[72,187,100,130,157,111,32,75,80],[66,102,167,99,74,62,40,234,128],[41,53,9,178,241,141,26,8,107],[74,43,26,146,73,166,49,23,157],[65,38,105,160,51,52,31,115,128],[104,79,12,27,217,255,87,17,7],[87,68,71,44,114,51,15,186,23],[47,41,14,110,182,183,21,17,194],[66,45,25,102,197,189,23,18,22]],[[88,88,147,150,42,46,45,196,205],[43,97,183,117,85,38,35,179,61],[39,53,200,87,26,21,43,232,171],[56,34,51,104,114,102,29,93,77],[39,28,85,171,58,165,90,98,64],[34,22,116,206,23,34,43,166,73],[107,54,32,26,51,1,81,43,31],[68,25,106,22,64,171,36,225,114],[34,19,21,102,132,188,16,76,124],[62,18,78,95,85,57,50,48,51]],[[193,101,35,159,215,111,89,46,111],[60,148,31,172,219,228,21,18,111],[112,113,77,85,179,255,38,120,114],[40,42,1,196,245,209,10,25,109],[88,43,29,140,166,213,37,43,154],[61,63,30,155,67,45,68,1,209],[100,80,8,43,154,1,51,26,71],[142,78,78,16,255,128,34,197,171],[41,40,5,102,211,183,4,1,221],[51,50,17,168,209,192,23,25,82]],[[138,31,36,171,27,166,38,44,229],[67,87,58,169,82,115,26,59,179],[63,59,90,180,59,166,93,73,154],[40,40,21,116,143,209,34,39,175],[47,15,16,183,34,223,49,45,183],[46,17,33,183,6,98,15,32,183],[57,46,22,24,128,1,54,17,37],[65,32,73,115,28,128,23,128,205],[40,3,9,115,51,192,18,6,223],[87,37,9,115,59,77,64,21,47]],[[104,55,44,218,9,54,53,130,226],[64,90,70,205,40,41,23,26,57],[54,57,112,184,5,41,38,166,213],[30,34,26,133,152,116,10,32,134],[39,19,53,221,26,114,32,73,255],[31,9,65,234,2,15,1,118,73],[75,32,12,51,192,255,160,43,51],[88,31,35,67,102,85,55,186,85],[56,21,23,111,59,205,45,37,192],[55,38,70,124,73,102,1,34,98]],[[125,98,42,88,104,85,117,175,82],[95,84,53,89,128,100,113,101,45],[75,79,123,47,51,128,81,171,1],[57,17,5,71,102,57,53,41,49],[38,33,13,121,57,73,26,1,85],[41,10,67,138,77,110,90,47,114],[115,21,2,10,102,255,166,23,6],[101,29,16,10,85,128,101,196,26],[57,18,10,102,102,213,34,20,43],[117,20,15,36,163,128,68,1,26]],[[102,61,71,37,34,53,31,243,192],[69,60,71,38,73,119,28,222,37],[68,45,128,34,1,47,11,245,171],[62,17,19,70,146,85,55,62,70],[37,43,37,154,100,163,85,160,1],[63,9,92,136,28,64,32,201,85],[75,15,9,9,64,255,184,119,16],[86,6,28,5,64,255,25,248,1],[56,8,17,132,137,255,55,116,128],[58,15,20,82,135,57,26,121,40]],[[164,50,31,137,154,133,25,35,218],[51,103,44,131,131,123,31,6,158],[86,40,64,135,148,224,45,183,128],[22,26,17,131,240,154,14,1,209],[45,16,21,91,64,222,7,1,197],[56,21,39,155,60,138,23,102,213],[83,12,13,54,192,255,68,47,28],[85,26,85,85,128,128,32,146,171],[18,11,7,63,144,171,4,4,246],[35,27,10,146,174,171,12,26,128]],[[190,80,35,99,180,80,126,54,45],[85,126,47,87,176,51,41,20,32],[101,75,128,139,118,146,116,128,85],[56,41,15,176,236,85,37,9,62],[71,30,17,119,118,255,17,18,138],[101,38,60,138,55,70,43,26,142],[146,36,19,30,171,255,97,27,20],[138,45,61,62,219,1,81,188,64],[32,41,20,117,151,142,20,21,163],[112,19,12,61,195,128,48,4,24]]],ui=[[[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[176,246,255,255,255,255,255,255,255,255,255],[223,241,252,255,255,255,255,255,255,255,255],[249,253,253,255,255,255,255,255,255,255,255]],[[255,244,252,255,255,255,255,255,255,255,255],[234,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255]],[[255,246,254,255,255,255,255,255,255,255,255],[239,253,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[251,255,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[251,254,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,254,253,255,254,255,255,255,255,255,255],[250,255,254,255,254,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[217,255,255,255,255,255,255,255,255,255,255],[225,252,241,253,255,255,254,255,255,255,255],[234,250,241,250,253,255,253,254,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[223,254,254,255,255,255,255,255,255,255,255],[238,253,254,254,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[249,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,255,255,255,255,255,255,255,255,255],[247,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[252,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[186,251,250,255,255,255,255,255,255,255,255],[234,251,244,254,255,255,255,255,255,255,255],[251,251,243,253,254,255,254,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[236,253,254,255,255,255,255,255,255,255,255],[251,253,253,254,254,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[254,254,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[254,254,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[248,255,255,255,255,255,255,255,255,255,255],[250,254,252,254,255,255,255,255,255,255,255],[248,254,249,253,255,255,255,255,255,255,255]],[[255,253,253,255,255,255,255,255,255,255,255],[246,253,253,255,255,255,255,255,255,255,255],[252,254,251,254,254,255,255,255,255,255,255]],[[255,254,252,255,255,255,255,255,255,255,255],[248,254,253,255,255,255,255,255,255,255,255],[253,255,254,254,255,255,255,255,255,255,255]],[[255,251,254,255,255,255,255,255,255,255,255],[245,251,254,255,255,255,255,255,255,255,255],[253,253,254,255,255,255,255,255,255,255,255]],[[255,251,253,255,255,255,255,255,255,255,255],[252,253,254,255,255,255,255,255,255,255,255],[255,254,255,255,255,255,255,255,255,255,255]],[[255,252,255,255,255,255,255,255,255,255,255],[249,255,254,255,255,255,255,255,255,255,255],[255,255,254,255,255,255,255,255,255,255,255]],[[255,255,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]]],li=[0,1,2,3,6,4,5,6,6,6,6,6,6,6,6,7,0],hi=[],fi=[],di=[],pi=1,gi=2,mi=[],vi=[];vr("UpsampleRgbLinePair",Ar,3),vr("UpsampleBgrLinePair",xr,3),vr("UpsampleRgbaLinePair",Fr,4),vr("UpsampleBgraLinePair",kr,4),vr("UpsampleArgbLinePair",Pr,4),vr("UpsampleRgba4444LinePair",_r,2),vr("UpsampleRgb565LinePair",Sr,2);var bi=t.UpsampleRgbLinePair,yi=t.UpsampleBgrLinePair,wi=t.UpsampleRgbaLinePair,Ni=t.UpsampleBgraLinePair,Li=t.UpsampleArgbLinePair,Ai=t.UpsampleRgba4444LinePair,xi=t.UpsampleRgb565LinePair,Si=16,_i=1<<Si-1,Pi=-227,ki=482,Fi=6,Ii=(256<<Fi)-1,Ci=0,ji=a(256),Oi=a(256),Bi=a(256),Mi=a(256),Ei=a(ki-Pi),qi=a(ki-Pi);Ir("YuvToRgbRow",Ar,3),Ir("YuvToBgrRow",xr,3),Ir("YuvToRgbaRow",Fr,4),Ir("YuvToBgraRow",kr,4),Ir("YuvToArgbRow",Pr,4),Ir("YuvToRgba4444Row",_r,2),Ir("YuvToRgb565Row",Sr,2);var Di=[0,4,8,12,128,132,136,140,256,260,264,268,384,388,392,396],Ri=[0,2,8],Ti=[8,7,6,4,4,2,2,2,1,1,1,1],Ui=1;this.WebPDecodeRGBA=function(t,r,n,i,a){var o=qn,s=new rr,c=new ot;s.ba=c,c.S=o,c.width=[c.width],c.height=[c.height];var u=c.width,l=c.height,h=new st;if(null==h||null==t)var f=2;else e(null!=h),f=Br(t,r,n,h.width,h.height,h.Pd,h.Qd,h.format,null);if(0!=f?u=0:(null!=u&&(u[0]=h.width[0]),null!=l&&(l[0]=h.height[0]),u=1),u){c.width=c.width[0],c.height=c.height[0],null!=i&&(i[0]=c.width),null!=a&&(a[0]=c.height);t:{if(i=new Gt,(a=new nr).data=t,a.w=r,a.ha=n,a.kd=1,r=[0],e(null!=a),(0==(t=Br(a.data,a.w,a.ha,null,null,null,r,null,a))||7==t)&&r[0]&&(t=4),0==(r=t)){if(e(null!=s),i.data=a.data,i.w=a.w+a.offset,i.ha=a.ha-a.offset,i.put=dt,i.ac=ft,i.bc=pt,i.ma=s,a.xa){if(null==(t=kt())){s=1;break t}if(function(t,r){var n=[0],i=[0],a=[0];e:for(;;){if(null==t)return 0;if(null==r)return t.a=2,0;if(t.l=r,t.a=0,v(t.m,r.data,r.w,r.ha),!gt(t.m,n,i,a)){t.a=3;break e}if(t.xb=gi,r.width=n[0],r.height=i[0],!Ft(n[0],i[0],1,t,null))break e;return 1}return e(0!=t.a),0}(t,i)){if(i=0==(r=qr(i.width,i.height,s.Oa,s.ba))){e:{i=t;r:for(;;){if(null==i){i=0;break e}if(e(null!=i.s.yc),e(null!=i.s.Ya),e(0<i.s.Wb),e(null!=(n=i.l)),e(null!=(a=n.ma)),0!=i.xb){if(i.ca=a.ba,i.tb=a.tb,e(null!=i.ca),!Mr(a.Oa,n,Rn)){i.a=2;break r}if(!It(i,n.width))break r;if(n.da)break r;if((n.da||nt(i.ca.S))&&mr(),11>i.ca.S||(alert("todo:WebPInitConvertARGBToYUV"),null!=i.ca.f.kb.F&&mr()),i.Pb&&0<i.s.ua&&null==i.s.vb.X&&!O(i.s.vb,i.s.Wa.Xa)){i.a=1;break r}i.xb=0}if(!_t(i,i.V,i.Ba,i.c,i.i,n.o,Lt))break r;a.Dc=i.Ma,i=1;break e}e(0!=i.a),i=0}i=!i}i&&(r=t.a)}else r=t.a}else{if(null==(t=new Yt)){s=1;break t}if(t.Fa=a.na,t.P=a.P,t.qc=a.Sa,Kt(t,i)){if(0==(r=qr(i.width,i.height,s.Oa,s.ba))){if(t.Aa=0,n=s.Oa,e(null!=(a=t)),null!=n){if(0<(u=0>(u=n.Md)?0:100<u?255:255*u/100)){for(l=h=0;4>l;++l)12>(f=a.pb[l]).lc&&(f.ia=u*Ti[0>f.lc?0:f.lc]>>3),h|=f.ia;h&&(alert("todo:VP8InitRandom"),a.ia=1)}a.Ga=n.Id,100<a.Ga?a.Ga=100:0>a.Ga&&(a.Ga=0)}Qt(t,i)||(r=t.a)}}else r=t.a}0==r&&null!=s.Oa&&s.Oa.fd&&(r=Er(s.ba))}s=r}o=0!=s?null:11>o?c.f.RGBA.eb:c.f.kb.y}else o=null;return o};var zi=[3,4,3,4,4,2,2,4,4,4,2,1,1]};function u(t,e){for(var r="",n=0;n<4;n++)r+=String.fromCharCode(t[e++]);return r}function l(t,e){return(t[e+0]<<0|t[e+1]<<8|t[e+2]<<16)>>>0}function h(t,e){return(t[e+0]<<0|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24)>>>0}new c;var f=[0],d=[0],p=[],g=new c,m=t,v=function(t,e){var r={},n=0,i=!1,a=0,o=0;if(r.frames=[],!
+/** @license
+     * Copyright (c) 2017 Dominik Homberger
+    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+    https://webpjs.appspot.com
+    WebPRiffParser dominikhlbg@gmail.com
+    */
+function(t,e,r,n){for(var i=0;i<n;i++)if(t[e+i]!=r.charCodeAt(i))return!0;return!1}(t,e,"RIFF",4)){var s,c;h(t,e+=4);for(e+=8;e<t.length;){var f=u(t,e),d=h(t,e+=4);e+=4;var p=d+(1&d);switch(f){case"VP8 ":case"VP8L":void 0===r.frames[n]&&(r.frames[n]={});(v=r.frames[n]).src_off=i?o:e-8,v.src_size=a+d+8,n++,i&&(i=!1,a=0,o=0);break;case"VP8X":(v=r.header={}).feature_flags=t[e];var g=e+4;v.canvas_width=1+l(t,g);g+=3;v.canvas_height=1+l(t,g);g+=3;break;case"ALPH":i=!0,a=p+8,o=e-8;break;case"ANIM":(v=r.header).bgcolor=h(t,e);g=e+4;v.loop_count=(s=t)[(c=g)+0]<<0|s[c+1]<<8;g+=2;break;case"ANMF":var m,v;(v=r.frames[n]={}).offset_x=2*l(t,e),e+=3,v.offset_y=2*l(t,e),e+=3,v.width=1+l(t,e),e+=3,v.height=1+l(t,e),e+=3,v.duration=l(t,e),e+=3,m=t[e++],v.dispose=1&m,v.blend=m>>1&1}"ANMF"!=f&&(e+=p)}return r}}(m,0);v.response=m,v.rgbaoutput=!0,v.dataurl=!1;var b=v.header?v.header:null,y=v.frames?v.frames:null;if(b){b.loop_counter=b.loop_count,f=[b.canvas_height],d=[b.canvas_width];for(var w=0;w<y.length&&0!=y[w].blend;w++);}var N=y[0],L=g.WebPDecodeRGBA(m,N.src_off,N.src_size,d,f);N.rgba=L,N.imgwidth=d[0],N.imgheight=f[0];for(var A=0;A<d[0]*f[0]*4;A++)p[A]=L[A];return this.width=d,this.height=f,this.data=p,this}!function(t){var e=function(){return!0},r=function(e,r,i,u){var l=4,h=o;switch(u){case t.image_compression.FAST:l=1,h=a;break;case t.image_compression.MEDIUM:l=6,h=s;break;case t.image_compression.SLOW:l=9,h=c}var f=_e(e=n(e,r,i,h),{level:l});return t.__addimage__.arrayBufferToBinaryString(f)},n=function(t,e,r,n){for(var i,a,o,s=t.length/e,c=new Uint8Array(t.length+s),u=l(),f=0;f<s;f+=1){if(o=f*e,i=t.subarray(o,o+e),n)c.set(n(i,r,a),o+f);else{for(var d,p=u.length,g=[];d<p;d+=1)g[d]=u[d](i,r,a);var m=h(g.concat());c.set(g[m],o+f)}a=i}return c},i=function(t){var e=Array.apply([],t);return e.unshift(0),e},a=function(t,e){var r,n=[],i=t.length;n[0]=1;for(var a=0;a<i;a+=1)r=t[a-e]||0,n[a+1]=t[a]-r+256&255;return n},o=function(t,e,r){var n,i=[],a=t.length;i[0]=2;for(var o=0;o<a;o+=1)n=r&&r[o]||0,i[o+1]=t[o]-n+256&255;return i},s=function(t,e,r){var n,i,a=[],o=t.length;a[0]=3;for(var s=0;s<o;s+=1)n=t[s-e]||0,i=r&&r[s]||0,a[s+1]=t[s]+256-(n+i>>>1)&255;return a},c=function(t,e,r){var n,i,a,o,s=[],c=t.length;s[0]=4;for(var l=0;l<c;l+=1)n=t[l-e]||0,i=r&&r[l]||0,a=r&&r[l-e]||0,o=u(n,i,a),s[l+1]=t[l]-o+256&255;return s},u=function(t,e,r){if(t===e&&e===r)return t;var n=Math.abs(e-r),i=Math.abs(t-r),a=Math.abs(t+e-r-r);return n<=i&&n<=a?t:i<=a?e:r},l=function(){return[i,a,o,s,c]},h=function(t){var e=t.map((function(t){return t.reduce((function(t,e){return t+Math.abs(e)}),0)}));return e.indexOf(Math.min.apply(null,e))};t.processPNG=function(n,i,a,o){var s,c,u,l,h,f,d,p,g,m,v,b,y,w,N,L=this.decode.FLATE_DECODE,A="";if(this.__addimage__.isArrayBuffer(n)&&(n=new Uint8Array(n)),this.__addimage__.isArrayBufferView(n)){if(n=(u=new Oe(n)).imgData,c=u.bits,s=u.colorSpace,h=u.colors,-1!==[4,6].indexOf(u.colorType)){if(8===u.bits){g=(p=32==u.pixelBitlength?new Uint32Array(u.decodePixels().buffer):16==u.pixelBitlength?new Uint16Array(u.decodePixels().buffer):new Uint8Array(u.decodePixels().buffer)).length,v=new Uint8Array(g*u.colors),m=new Uint8Array(g);var x,S=u.pixelBitlength-u.bits;for(w=0,N=0;w<g;w++){for(y=p[w],x=0;x<S;)v[N++]=y>>>x&255,x+=u.bits;m[w]=y>>>x&255}}if(16===u.bits){g=(p=new Uint32Array(u.decodePixels().buffer)).length,v=new Uint8Array(g*(32/u.pixelBitlength)*u.colors),m=new Uint8Array(g*(32/u.pixelBitlength)),b=u.colors>1,w=0,N=0;for(var _=0;w<g;)y=p[w++],v[N++]=y>>>0&255,b&&(v[N++]=y>>>16&255,y=p[w++],v[N++]=y>>>0&255),m[_++]=y>>>16&255;c=8}o!==t.image_compression.NONE&&e()?(n=r(v,u.width*u.colors,u.colors,o),d=r(m,u.width,1,o)):(n=v,d=m,L=void 0)}if(3===u.colorType&&(s=this.color_spaces.INDEXED,f=u.palette,u.transparency.indexed)){var P=u.transparency.indexed,k=0;for(w=0,g=P.length;w<g;++w)k+=P[w];if((k/=255)===g-1&&-1!==P.indexOf(0))l=[P.indexOf(0)];else if(k!==g){for(p=u.decodePixels(),m=new Uint8Array(p.length),w=0,g=p.length;w<g;w++)m[w]=P[p[w]];d=r(m,u.width,1)}}var F=function(e){var r;switch(e){case t.image_compression.FAST:r=11;break;case t.image_compression.MEDIUM:r=13;break;case t.image_compression.SLOW:r=14;break;default:r=12}return r}(o);return L===this.decode.FLATE_DECODE&&(A="/Predictor "+F+" "),A+="/Colors "+h+" /BitsPerComponent "+c+" /Columns "+u.width,(this.__addimage__.isArrayBuffer(n)||this.__addimage__.isArrayBufferView(n))&&(n=this.__addimage__.arrayBufferToBinaryString(n)),(d&&this.__addimage__.isArrayBuffer(d)||this.__addimage__.isArrayBufferView(d))&&(d=this.__addimage__.arrayBufferToBinaryString(d)),{alias:a,data:n,index:i,filter:L,decodeParameters:A,transparency:l,palette:f,sMask:d,predictor:F,width:u.width,height:u.height,bitsPerComponent:c,colorSpace:s}}}}(M.API),function(t){t.processGIF89A=function(e,r,n,i){var a=new Be(e),o=a.width,s=a.height,c=[];a.decodeAndBlitFrameRGBA(0,c);var u={data:c,width:o,height:s},l=new Ee(100).encode(u,100);return t.processJPEG.call(this,l,r,n,i)},t.processGIF87A=t.processGIF89A}(M.API),qe.prototype.parseHeader=function(){if(this.fileSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.reserved=this.datav.getUint32(this.pos,!0),this.pos+=4,this.offset=this.datav.getUint32(this.pos,!0),this.pos+=4,this.headerSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.width=this.datav.getUint32(this.pos,!0),this.pos+=4,this.height=this.datav.getInt32(this.pos,!0),this.pos+=4,this.planes=this.datav.getUint16(this.pos,!0),this.pos+=2,this.bitPP=this.datav.getUint16(this.pos,!0),this.pos+=2,this.compress=this.datav.getUint32(this.pos,!0),this.pos+=4,this.rawSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.hr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.vr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.colors=this.datav.getUint32(this.pos,!0),this.pos+=4,this.importantColors=this.datav.getUint32(this.pos,!0),this.pos+=4,16===this.bitPP&&this.is_with_alpha&&(this.bitPP=15),this.bitPP<15){var t=0===this.colors?1<<this.bitPP:this.colors;this.palette=new Array(t);for(var e=0;e<t;e++){var r=this.datav.getUint8(this.pos++,!0),n=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0);this.palette[e]={red:i,green:n,blue:r,quad:a}}}this.height<0&&(this.height*=-1,this.bottom_up=!1)},qe.prototype.parseBGR=function(){this.pos=this.offset;try{var t="bit"+this.bitPP,e=this.width*this.height*4;this.data=new Uint8Array(e),this[t]()}catch(t){i.log("bit decode error:"+t)}},qe.prototype.bit1=function(){var t,e=Math.ceil(this.width/8),r=e%4;for(t=this.height-1;t>=0;t--){for(var n=this.bottom_up?t:this.height-1-t,i=0;i<e;i++)for(var a=this.datav.getUint8(this.pos++,!0),o=n*this.width*4+8*i*4,s=0;s<8&&8*i+s<this.width;s++){var c=this.palette[a>>7-s&1];this.data[o+4*s]=c.blue,this.data[o+4*s+1]=c.green,this.data[o+4*s+2]=c.red,this.data[o+4*s+3]=255}0!==r&&(this.pos+=4-r)}},qe.prototype.bit4=function(){for(var t=Math.ceil(this.width/2),e=t%4,r=this.height-1;r>=0;r--){for(var n=this.bottom_up?r:this.height-1-r,i=0;i<t;i++){var a=this.datav.getUint8(this.pos++,!0),o=n*this.width*4+2*i*4,s=a>>4,c=15&a,u=this.palette[s];if(this.data[o]=u.blue,this.data[o+1]=u.green,this.data[o+2]=u.red,this.data[o+3]=255,2*i+1>=this.width)break;u=this.palette[c],this.data[o+4]=u.blue,this.data[o+4+1]=u.green,this.data[o+4+2]=u.red,this.data[o+4+3]=255}0!==e&&(this.pos+=4-e)}},qe.prototype.bit8=function(){for(var t=this.width%4,e=this.height-1;e>=0;e--){for(var r=this.bottom_up?e:this.height-1-e,n=0;n<this.width;n++){var i=this.datav.getUint8(this.pos++,!0),a=r*this.width*4+4*n;if(i<this.palette.length){var o=this.palette[i];this.data[a]=o.red,this.data[a+1]=o.green,this.data[a+2]=o.blue,this.data[a+3]=255}else this.data[a]=255,this.data[a+1]=255,this.data[a+2]=255,this.data[a+3]=255}0!==t&&(this.pos+=4-t)}},qe.prototype.bit15=function(){for(var t=this.width%3,e=parseInt("11111",2),r=this.height-1;r>=0;r--){for(var n=this.bottom_up?r:this.height-1-r,i=0;i<this.width;i++){var a=this.datav.getUint16(this.pos,!0);this.pos+=2;var o=(a&e)/e*255|0,s=(a>>5&e)/e*255|0,c=(a>>10&e)/e*255|0,u=a>>15?255:0,l=n*this.width*4+4*i;this.data[l]=c,this.data[l+1]=s,this.data[l+2]=o,this.data[l+3]=u}this.pos+=t}},qe.prototype.bit16=function(){for(var t=this.width%3,e=parseInt("11111",2),r=parseInt("111111",2),n=this.height-1;n>=0;n--){for(var i=this.bottom_up?n:this.height-1-n,a=0;a<this.width;a++){var o=this.datav.getUint16(this.pos,!0);this.pos+=2;var s=(o&e)/e*255|0,c=(o>>5&r)/r*255|0,u=(o>>11)/e*255|0,l=i*this.width*4+4*a;this.data[l]=u,this.data[l+1]=c,this.data[l+2]=s,this.data[l+3]=255}this.pos+=t}},qe.prototype.bit24=function(){for(var t=this.height-1;t>=0;t--){for(var e=this.bottom_up?t:this.height-1-t,r=0;r<this.width;r++){var n=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0),o=e*this.width*4+4*r;this.data[o]=a,this.data[o+1]=i,this.data[o+2]=n,this.data[o+3]=255}this.pos+=this.width%4}},qe.prototype.bit32=function(){for(var t=this.height-1;t>=0;t--)for(var e=this.bottom_up?t:this.height-1-t,r=0;r<this.width;r++){var n=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),s=e*this.width*4+4*r;this.data[s]=a,this.data[s+1]=i,this.data[s+2]=n,this.data[s+3]=o}},qe.prototype.getData=function(){return this.data},
+/**
+   * @license
+   * Copyright (c) 2018 Aras Abbasi
+   *
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */
+function(t){t.processBMP=function(e,r,n,i){var a=new qe(e,!1),o=a.width,s=a.height,c={data:a.getData(),width:o,height:s},u=new Ee(100).encode(c,100);return t.processJPEG.call(this,u,r,n,i)}}(M.API),De.prototype.getData=function(){return this.data},
+/**
+   * @license
+   * Copyright (c) 2019 Aras Abbasi
+   *
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */
+function(t){t.processWEBP=function(e,r,n,i){var a=new De(e,!1),o=a.width,s=a.height,c={data:a.getData(),width:o,height:s},u=new Ee(100).encode(c,100);return t.processJPEG.call(this,u,r,n,i)}}(M.API),
+/**
+   * @license
+   *
+   * Copyright (c) 2021 Antti Palola, https://github.com/Pantura
+   *
+   * Permission is hereby granted, free of charge, to any person obtaining
+   * a copy of this software and associated documentation files (the
+   * "Software"), to deal in the Software without restriction, including
+   * without limitation the rights to use, copy, modify, merge, publish,
+   * distribute, sublicense, and/or sell copies of the Software, and to
+   * permit persons to whom the Software is furnished to do so, subject to
+   * the following conditions:
+   *
+   * The above copyright notice and this permission notice shall be
+   * included in all copies or substantial portions of the Software.
+   *
+   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+   * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+   * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+   * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   * ====================================================================
+   */
+function(t){t.processRGBA=function(t,e,r){for(var n=t.data,i=n.length,a=new Uint8Array(i/4*3),o=new Uint8Array(i/4),s=0,c=0,u=0;u<i;u+=4){var l=n[u],h=n[u+1],f=n[u+2],d=n[u+3];a[s++]=l,a[s++]=h,a[s++]=f,o[c++]=d}var p=this.__addimage__.arrayBufferToBinaryString(a);return{alpha:this.__addimage__.arrayBufferToBinaryString(o),data:p,index:e,alias:r,colorSpace:"DeviceRGB",bitsPerComponent:8,width:t.width,height:t.height}}}(M.API),
+/**
+   * @license
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */
+function(t){t.setLanguage=function(t){return void 0===this.internal.languageSettings&&(this.internal.languageSettings={},this.internal.languageSettings.isSubscribed=!1),void 0!=={af:"Afrikaans",sq:"Albanian",ar:"Arabic (Standard)","ar-DZ":"Arabic (Algeria)","ar-BH":"Arabic (Bahrain)","ar-EG":"Arabic (Egypt)","ar-IQ":"Arabic (Iraq)","ar-JO":"Arabic (Jordan)","ar-KW":"Arabic (Kuwait)","ar-LB":"Arabic (Lebanon)","ar-LY":"Arabic (Libya)","ar-MA":"Arabic (Morocco)","ar-OM":"Arabic (Oman)","ar-QA":"Arabic (Qatar)","ar-SA":"Arabic (Saudi Arabia)","ar-SY":"Arabic (Syria)","ar-TN":"Arabic (Tunisia)","ar-AE":"Arabic (U.A.E.)","ar-YE":"Arabic (Yemen)",an:"Aragonese",hy:"Armenian",as:"Assamese",ast:"Asturian",az:"Azerbaijani",eu:"Basque",be:"Belarusian",bn:"Bengali",bs:"Bosnian",br:"Breton",bg:"Bulgarian",my:"Burmese",ca:"Catalan",ch:"Chamorro",ce:"Chechen",zh:"Chinese","zh-HK":"Chinese (Hong Kong)","zh-CN":"Chinese (PRC)","zh-SG":"Chinese (Singapore)","zh-TW":"Chinese (Taiwan)",cv:"Chuvash",co:"Corsican",cr:"Cree",hr:"Croatian",cs:"Czech",da:"Danish",nl:"Dutch (Standard)","nl-BE":"Dutch (Belgian)",en:"English","en-AU":"English (Australia)","en-BZ":"English (Belize)","en-CA":"English (Canada)","en-IE":"English (Ireland)","en-JM":"English (Jamaica)","en-NZ":"English (New Zealand)","en-PH":"English (Philippines)","en-ZA":"English (South Africa)","en-TT":"English (Trinidad & Tobago)","en-GB":"English (United Kingdom)","en-US":"English (United States)","en-ZW":"English (Zimbabwe)",eo:"Esperanto",et:"Estonian",fo:"Faeroese",fj:"Fijian",fi:"Finnish",fr:"French (Standard)","fr-BE":"French (Belgium)","fr-CA":"French (Canada)","fr-FR":"French (France)","fr-LU":"French (Luxembourg)","fr-MC":"French (Monaco)","fr-CH":"French (Switzerland)",fy:"Frisian",fur:"Friulian",gd:"Gaelic (Scots)","gd-IE":"Gaelic (Irish)",gl:"Galacian",ka:"Georgian",de:"German (Standard)","de-AT":"German (Austria)","de-DE":"German (Germany)","de-LI":"German (Liechtenstein)","de-LU":"German (Luxembourg)","de-CH":"German (Switzerland)",el:"Greek",gu:"Gujurati",ht:"Haitian",he:"Hebrew",hi:"Hindi",hu:"Hungarian",is:"Icelandic",id:"Indonesian",iu:"Inuktitut",ga:"Irish",it:"Italian (Standard)","it-CH":"Italian (Switzerland)",ja:"Japanese",kn:"Kannada",ks:"Kashmiri",kk:"Kazakh",km:"Khmer",ky:"Kirghiz",tlh:"Klingon",ko:"Korean","ko-KP":"Korean (North Korea)","ko-KR":"Korean (South Korea)",la:"Latin",lv:"Latvian",lt:"Lithuanian",lb:"Luxembourgish",mk:"North Macedonia",ms:"Malay",ml:"Malayalam",mt:"Maltese",mi:"Maori",mr:"Marathi",mo:"Moldavian",nv:"Navajo",ng:"Ndonga",ne:"Nepali",no:"Norwegian",nb:"Norwegian (Bokmal)",nn:"Norwegian (Nynorsk)",oc:"Occitan",or:"Oriya",om:"Oromo",fa:"Persian","fa-IR":"Persian/Iran",pl:"Polish",pt:"Portuguese","pt-BR":"Portuguese (Brazil)",pa:"Punjabi","pa-IN":"Punjabi (India)","pa-PK":"Punjabi (Pakistan)",qu:"Quechua",rm:"Rhaeto-Romanic",ro:"Romanian","ro-MO":"Romanian (Moldavia)",ru:"Russian","ru-MO":"Russian (Moldavia)",sz:"Sami (Lappish)",sg:"Sango",sa:"Sanskrit",sc:"Sardinian",sd:"Sindhi",si:"Singhalese",sr:"Serbian",sk:"Slovak",sl:"Slovenian",so:"Somani",sb:"Sorbian",es:"Spanish","es-AR":"Spanish (Argentina)","es-BO":"Spanish (Bolivia)","es-CL":"Spanish (Chile)","es-CO":"Spanish (Colombia)","es-CR":"Spanish (Costa Rica)","es-DO":"Spanish (Dominican Republic)","es-EC":"Spanish (Ecuador)","es-SV":"Spanish (El Salvador)","es-GT":"Spanish (Guatemala)","es-HN":"Spanish (Honduras)","es-MX":"Spanish (Mexico)","es-NI":"Spanish (Nicaragua)","es-PA":"Spanish (Panama)","es-PY":"Spanish (Paraguay)","es-PE":"Spanish (Peru)","es-PR":"Spanish (Puerto Rico)","es-ES":"Spanish (Spain)","es-UY":"Spanish (Uruguay)","es-VE":"Spanish (Venezuela)",sx:"Sutu",sw:"Swahili",sv:"Swedish","sv-FI":"Swedish (Finland)","sv-SV":"Swedish (Sweden)",ta:"Tamil",tt:"Tatar",te:"Teluga",th:"Thai",tig:"Tigre",ts:"Tsonga",tn:"Tswana",tr:"Turkish",tk:"Turkmen",uk:"Ukrainian",hsb:"Upper Sorbian",ur:"Urdu",ve:"Venda",vi:"Vietnamese",vo:"Volapuk",wa:"Walloon",cy:"Welsh",xh:"Xhosa",ji:"Yiddish",zu:"Zulu"}[t]&&(this.internal.languageSettings.languageCode=t,!1===this.internal.languageSettings.isSubscribed&&(this.internal.events.subscribe("putCatalog",(function(){this.internal.write("/Lang ("+this.internal.languageSettings.languageCode+")")})),this.internal.languageSettings.isSubscribed=!0)),this}}(M.API),ke=M.API,Fe=ke.getCharWidthsArray=function(t,r){var n,i,a=(r=r||{}).font||this.internal.getFont(),o=r.fontSize||this.internal.getFontSize(),s=r.charSpace||this.internal.getCharSpace(),c=r.widths?r.widths:a.metadata.Unicode.widths,u=c.fof?c.fof:1,l=r.kerning?r.kerning:a.metadata.Unicode.kerning,h=l.fof?l.fof:1,f=!1!==r.doKerning,d=0,p=t.length,g=0,m=c[0]||u,v=[];for(n=0;n<p;n++)i=t.charCodeAt(n),"function"==typeof a.metadata.widthOfString?v.push((a.metadata.widthOfGlyph(a.metadata.characterToGlyph(i))+s*(1e3/o)||0)/1e3):(d=f&&"object"===e(l[i])&&!isNaN(parseInt(l[i][g],10))?l[i][g]/h:0,v.push((c[i]||m)/u+d)),g=i;return v},Ie=ke.getStringUnitWidth=function(t,e){var r=(e=e||{}).fontSize||this.internal.getFontSize(),n=e.font||this.internal.getFont(),i=e.charSpace||this.internal.getCharSpace();return ke.processArabic&&(t=ke.processArabic(t)),"function"==typeof n.metadata.widthOfString?n.metadata.widthOfString(t,r,i)/r:Fe.apply(this,arguments).reduce((function(t,e){return t+e}),0)},Ce=function(t,e,r,n){for(var i=[],a=0,o=t.length,s=0;a!==o&&s+e[a]<r;)s+=e[a],a++;i.push(t.slice(0,a));var c=a;for(s=0;a!==o;)s+e[a]>n&&(i.push(t.slice(c,a)),s=0,c=a),s+=e[a],a++;return c!==a&&i.push(t.slice(c,a)),i},je=function(t,e,r){r||(r={});var n,i,a,o,s,c,u,l=[],h=[l],f=r.textIndent||0,d=0,p=0,g=t.split(" "),m=Fe.apply(this,[" ",r])[0];if(c=-1===r.lineIndent?g[0].length+2:r.lineIndent||0){var v=Array(c).join(" "),b=[];g.map((function(t){(t=t.split(/\s*\n/)).length>1?b=b.concat(t.map((function(t,e){return(e&&t.length?"\n":"")+t}))):b.push(t[0])})),g=b,c=Ie.apply(this,[v,r])}for(a=0,o=g.length;a<o;a++){var y=0;if(n=g[a],c&&"\n"==n[0]&&(n=n.substr(1),y=1),f+d+(p=(i=Fe.apply(this,[n,r])).reduce((function(t,e){return t+e}),0))>e||y){if(p>e){for(s=Ce.apply(this,[n,i,e-(f+d),e]),l.push(s.shift()),l=[s.pop()];s.length;)h.push([s.shift()]);p=i.slice(n.length-(l[0]?l[0].length:0)).reduce((function(t,e){return t+e}),0)}else l=[n];h.push(l),f=p+c,d=m}else l.push(n),f+=d+p,d=m}return u=c?function(t,e){return(e?v:"")+t.join(" ")}:function(t){return t.join(" ")},h.map(u)},ke.splitTextToSize=function(t,e,r){var n,i=(r=r||{}).fontSize||this.internal.getFontSize(),a=function(t){if(t.widths&&t.kerning)return{widths:t.widths,kerning:t.kerning};var e=this.internal.getFont(t.fontName,t.fontStyle);return e.metadata.Unicode?{widths:e.metadata.Unicode.widths||{0:1},kerning:e.metadata.Unicode.kerning||{}}:{font:e.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}.call(this,r);n=Array.isArray(t)?t:String(t).split(/\r?\n/);var o=1*this.internal.scaleFactor*e/i;a.textIndent=r.textIndent?1*r.textIndent*this.internal.scaleFactor/i:0,a.lineIndent=r.lineIndent;var s,c,u=[];for(s=0,c=n.length;s<c;s++)u=u.concat(je.apply(this,[n[s],o,a]));return u},function(t){t.__fontmetrics__=t.__fontmetrics__||{};for(var r="klmnopqrstuvwxyz",n={},i={},a=0;a<r.length;a++)n[r[a]]="0123456789abcdef"[a],i["0123456789abcdef"[a]]=r[a];var o=function(t){return"0x"+parseInt(t,10).toString(16)},s=t.__fontmetrics__.compress=function(t){var r,n,a,c,u=["{"];for(var l in t){if(r=t[l],isNaN(parseInt(l,10))?n="'"+l+"'":(l=parseInt(l,10),n=(n=o(l).slice(2)).slice(0,-1)+i[n.slice(-1)]),"number"==typeof r)r<0?(a=o(r).slice(3),c="-"):(a=o(r).slice(2),c=""),a=c+a.slice(0,-1)+i[a.slice(-1)];else{if("object"!==e(r))throw new Error("Don't know what to do with value type "+e(r)+".");a=s(r)}u.push(n+a)}return u.push("}"),u.join("")},c=t.__fontmetrics__.uncompress=function(t){if("string"!=typeof t)throw new Error("Invalid argument passed to uncompress.");for(var e,r,i,a,o={},s=1,c=o,u=[],l="",h="",f=t.length-1,d=1;d<f;d+=1)"'"==(a=t[d])?e?(i=e.join(""),e=void 0):e=[]:e?e.push(a):"{"==a?(u.push([c,i]),c={},i=void 0):"}"==a?((r=u.pop())[0][r[1]]=c,i=void 0,c=r[0]):"-"==a?s=-1:void 0===i?n.hasOwnProperty(a)?(l+=n[a],i=parseInt(l,16)*s,s=1,l=""):l+=a:n.hasOwnProperty(a)?(h+=n[a],c[i]=parseInt(h,16)*s,s=1,i=void 0,h=""):h+=a;return o},u={codePages:["WinAnsiEncoding"],WinAnsiEncoding:c("{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}")},l={Unicode:{Courier:u,"Courier-Bold":u,"Courier-BoldOblique":u,"Courier-Oblique":u,Helvetica:u,"Helvetica-Bold":u,"Helvetica-BoldOblique":u,"Helvetica-Oblique":u,"Times-Roman":u,"Times-Bold":u,"Times-BoldItalic":u,"Times-Italic":u}},h={Unicode:{"Courier-Oblique":c("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"),"Times-BoldItalic":c("{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}"),"Helvetica-Bold":c("{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}"),Courier:c("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"),"Courier-BoldOblique":c("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"),"Times-Bold":c("{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}"),Symbol:c("{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}"),Helvetica:c("{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}"),"Helvetica-BoldOblique":c("{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}"),ZapfDingbats:c("{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}"),"Courier-Bold":c("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"),"Times-Italic":c("{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}"),"Times-Roman":c("{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}"),"Helvetica-Oblique":c("{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}")}};t.events.push(["addFont",function(t){var e=t.font,r=h.Unicode[e.postScriptName];r&&(e.metadata.Unicode={},e.metadata.Unicode.widths=r.widths,e.metadata.Unicode.kerning=r.kerning);var n=l.Unicode[e.postScriptName];n&&(e.metadata.Unicode.encoding=n,e.encoding=n.codePages[0])}])}(M.API),
+/**
+   * @license
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */
+function(t){var e=function(t){for(var e=t.length,r=new Uint8Array(e),n=0;n<e;n++)r[n]=t.charCodeAt(n);return r};t.API.events.push(["addFont",function(r){var n=void 0,i=r.font,a=r.instance;if(!i.isStandardFont){if(void 0===a)throw new Error("Font does not exist in vFS, import fonts or remove declaration doc.addFont('"+i.postScriptName+"').");if("string"!=typeof(n=!1===a.existsFileInVFS(i.postScriptName)?a.loadFile(i.postScriptName):a.getFileFromVFS(i.postScriptName)))throw new Error("Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('"+i.postScriptName+"').");!function(r,n){n=/^\x00\x01\x00\x00/.test(n)?e(n):e(c(n)),r.metadata=t.API.TTFFont.open(n),r.metadata.Unicode=r.metadata.Unicode||{encoding:{},kerning:{},widths:[]},r.metadata.glyIdsUsed=[0]}(i,n)}}])}(M),function(n){function a(){return(r.canvg?Promise.resolve(r.canvg):"object"===(void 0===t?"undefined":e(t))&&"undefined"!=typeof module?new Promise((function(t,e){try{t(require("canvg"))}catch(t){e(t)}})):"function"==typeof define&&define.amd?new Promise((function(t,e){try{require(["canvg"],t)}catch(t){e(t)}})):Promise.reject(new Error("Could not load canvg"))).catch((function(t){return Promise.reject(new Error("Could not load canvg: "+t))})).then((function(t){return t.default?t.default:t}))}n.addSvgAsImage=function(t,e,r,n,o,s,c,u){if(isNaN(e)||isNaN(r))throw i.error("jsPDF.addSvgAsImage: Invalid coordinates",arguments),new Error("Invalid coordinates passed to jsPDF.addSvgAsImage");if(isNaN(n)||isNaN(o))throw i.error("jsPDF.addSvgAsImage: Invalid measurements",arguments),new Error("Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage");var l=document.createElement("canvas");l.width=n,l.height=o;var h=l.getContext("2d");h.fillStyle="#fff",h.fillRect(0,0,l.width,l.height);var f={ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0},d=this;return a().then((function(e){return e.fromString(h,t,f)}),(function(){return Promise.reject(new Error("Could not load canvg."))})).then((function(t){return t.render(f)})).then((function(){d.addImage(l.toDataURL("image/jpeg",1),e,r,n,o,c,u)}))}}(M.API),
+/**
+   * @license
+   * ====================================================================
+   * Copyright (c) 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br
+   *
+   * Permission is hereby granted, free of charge, to any person obtaining
+   * a copy of this software and associated documentation files (the
+   * "Software"), to deal in the Software without restriction, including
+   * without limitation the rights to use, copy, modify, merge, publish,
+   * distribute, sublicense, and/or sell copies of the Software, and to
+   * permit persons to whom the Software is furnished to do so, subject to
+   * the following conditions:
+   *
+   * The above copyright notice and this permission notice shall be
+   * included in all copies or substantial portions of the Software.
+   *
+   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+   * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+   * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+   * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   * ====================================================================
+   */
+function(t){t.putTotalPages=function(t){var e,r=0;parseInt(this.internal.getFont().id.substr(1),10)<15?(e=new RegExp(t,"g"),r=this.internal.getNumberOfPages()):(e=new RegExp(this.pdfEscape16(t,this.internal.getFont()),"g"),r=this.pdfEscape16(this.internal.getNumberOfPages()+"",this.internal.getFont()));for(var n=1;n<=this.internal.getNumberOfPages();n++)for(var i=0;i<this.internal.pages[n].length;i++)this.internal.pages[n][i]=this.internal.pages[n][i].replace(e,r);return this}}(M.API),function(t){t.viewerPreferences=function(t,r){var n;t=t||{},r=r||!1;var i,a,o,s={HideToolbar:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideMenubar:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideWindowUI:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},FitWindow:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},CenterWindow:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},DisplayDocTitle:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.4},NonFullScreenPageMode:{defaultValue:"UseNone",value:"UseNone",type:"name",explicitSet:!1,valueSet:["UseNone","UseOutlines","UseThumbs","UseOC"],pdfVersion:1.3},Direction:{defaultValue:"L2R",value:"L2R",type:"name",explicitSet:!1,valueSet:["L2R","R2L"],pdfVersion:1.3},ViewArea:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},ViewClip:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},PrintArea:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},PrintClip:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},PrintScaling:{defaultValue:"AppDefault",value:"AppDefault",type:"name",explicitSet:!1,valueSet:["AppDefault","None"],pdfVersion:1.6},Duplex:{defaultValue:"",value:"none",type:"name",explicitSet:!1,valueSet:["Simplex","DuplexFlipShortEdge","DuplexFlipLongEdge","none"],pdfVersion:1.7},PickTrayByPDFSize:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.7},PrintPageRange:{defaultValue:"",value:"",type:"array",explicitSet:!1,valueSet:null,pdfVersion:1.7},NumCopies:{defaultValue:1,value:1,type:"integer",explicitSet:!1,valueSet:null,pdfVersion:1.7}},c=Object.keys(s),u=[],l=0,h=0,f=0;function d(t,e){var r,n=!1;for(r=0;r<t.length;r+=1)t[r]===e&&(n=!0);return n}if(void 0===this.internal.viewerpreferences&&(this.internal.viewerpreferences={},this.internal.viewerpreferences.configuration=JSON.parse(JSON.stringify(s)),this.internal.viewerpreferences.isSubscribed=!1),n=this.internal.viewerpreferences.configuration,"reset"===t||!0===r){var p=c.length;for(f=0;f<p;f+=1)n[c[f]].value=n[c[f]].defaultValue,n[c[f]].explicitSet=!1}if("object"===e(t))for(a in t)if(o=t[a],d(c,a)&&void 0!==o){if("boolean"===n[a].type&&"boolean"==typeof o)n[a].value=o;else if("name"===n[a].type&&d(n[a].valueSet,o))n[a].value=o;else if("integer"===n[a].type&&Number.isInteger(o))n[a].value=o;else if("array"===n[a].type){for(l=0;l<o.length;l+=1)if(i=!0,1===o[l].length&&"number"==typeof o[l][0])u.push(String(o[l]-1));else if(o[l].length>1){for(h=0;h<o[l].length;h+=1)"number"!=typeof o[l][h]&&(i=!1);!0===i&&u.push([o[l][0]-1,o[l][1]-1].join(" "))}n[a].value="["+u.join(" ")+"]"}else n[a].value=n[a].defaultValue;n[a].explicitSet=!0}return!1===this.internal.viewerpreferences.isSubscribed&&(this.internal.events.subscribe("putCatalog",(function(){var t,e=[];for(t in n)!0===n[t].explicitSet&&("name"===n[t].type?e.push("/"+t+" /"+n[t].value):e.push("/"+t+" "+n[t].value));0!==e.length&&this.internal.write("/ViewerPreferences\n<<\n"+e.join("\n")+"\n>>")})),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=n,this}}(M.API),
+/** ====================================================================
+   * @license
+   * jsPDF XMP metadata plugin
+   * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi
+   *
+   * Permission is hereby granted, free of charge, to any person obtaining
+   * a copy of this software and associated documentation files (the
+   * "Software"), to deal in the Software without restriction, including
+   * without limitation the rights to use, copy, modify, merge, publish,
+   * distribute, sublicense, and/or sell copies of the Software, and to
+   * permit persons to whom the Software is furnished to do so, subject to
+   * the following conditions:
+   *
+   * The above copyright notice and this permission notice shall be
+   * included in all copies or substantial portions of the Software.
+   *
+   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+   * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+   * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+   * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   * ====================================================================
+   */
+function(t){var e=function(){var t='<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><rdf:Description rdf:about="" xmlns:jspdf="'+this.internal.__metadata__.namespaceuri+'"><jspdf:metadata>',e=unescape(encodeURIComponent('<x:xmpmeta xmlns:x="adobe:ns:meta/">')),r=unescape(encodeURIComponent(t)),n=unescape(encodeURIComponent(this.internal.__metadata__.metadata)),i=unescape(encodeURIComponent("</jspdf:metadata></rdf:Description></rdf:RDF>")),a=unescape(encodeURIComponent("</x:xmpmeta>")),o=r.length+n.length+i.length+e.length+a.length;this.internal.__metadata__.metadata_object_number=this.internal.newObject(),this.internal.write("<< /Type /Metadata /Subtype /XML /Length "+o+" >>"),this.internal.write("stream"),this.internal.write(e+r+n+i+a),this.internal.write("endstream"),this.internal.write("endobj")},r=function(){this.internal.__metadata__.metadata_object_number&&this.internal.write("/Metadata "+this.internal.__metadata__.metadata_object_number+" 0 R")};t.addMetadata=function(t,n){return void 0===this.internal.__metadata__&&(this.internal.__metadata__={metadata:t,namespaceuri:n||"http://jspdf.default.namespaceuri/"},this.internal.events.subscribe("putCatalog",r),this.internal.events.subscribe("postPutResources",e)),this}}(M.API),function(t){var e=t.API,r=e.pdfEscape16=function(t,e){for(var r,n=e.metadata.Unicode.widths,i=["","0","00","000","0000"],a=[""],o=0,s=t.length;o<s;++o){if(r=e.metadata.characterToGlyph(t.charCodeAt(o)),e.metadata.glyIdsUsed.push(r),e.metadata.toUnicode[r]=t.charCodeAt(o),-1==n.indexOf(r)&&(n.push(r),n.push([parseInt(e.metadata.widthOfGlyph(r),10)])),"0"==r)return a.join("");r=r.toString(16),a.push(i[4-r.length],r)}return a.join("")},n=function(t){var e,r,n,i,a,o,s;for(a="/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n  /Registry (Adobe)\n  /Ordering (UCS)\n  /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000><ffff>\nendcodespacerange",n=[],o=0,s=(r=Object.keys(t).sort((function(t,e){return t-e}))).length;o<s;o++)e=r[o],n.length>=100&&(a+="\n"+n.length+" beginbfchar\n"+n.join("\n")+"\nendbfchar",n=[]),void 0!==t[e]&&null!==t[e]&&"function"==typeof t[e].toString&&(i=("0000"+t[e].toString(16)).slice(-4),e=("0000"+(+e).toString(16)).slice(-4),n.push("<"+e+"><"+i+">"));return n.length&&(a+="\n"+n.length+" beginbfchar\n"+n.join("\n")+"\nendbfchar\n"),a+="endcmap\nCMapName currentdict /CMap defineresource pop\nend\nend"};e.events.push(["putFont",function(e){!function(e){var r=e.font,i=e.out,a=e.newObject,o=e.putStream;if(r.metadata instanceof t.API.TTFFont&&"Identity-H"===r.encoding){for(var s=r.metadata.Unicode.widths,c=r.metadata.subset.encode(r.metadata.glyIdsUsed,1),u="",l=0;l<c.length;l++)u+=String.fromCharCode(c[l]);var h=a();o({data:u,addLength1:!0,objectId:h}),i("endobj");var f=a();o({data:n(r.metadata.toUnicode),addLength1:!0,objectId:f}),i("endobj");var d=a();i("<<"),i("/Type /FontDescriptor"),i("/FontName /"+F(r.fontName)),i("/FontFile2 "+h+" 0 R"),i("/FontBBox "+t.API.PDFObject.convert(r.metadata.bbox)),i("/Flags "+r.metadata.flags),i("/StemV "+r.metadata.stemV),i("/ItalicAngle "+r.metadata.italicAngle),i("/Ascent "+r.metadata.ascender),i("/Descent "+r.metadata.decender),i("/CapHeight "+r.metadata.capHeight),i(">>"),i("endobj");var p=a();i("<<"),i("/Type /Font"),i("/BaseFont /"+F(r.fontName)),i("/FontDescriptor "+d+" 0 R"),i("/W "+t.API.PDFObject.convert(s)),i("/CIDToGIDMap /Identity"),i("/DW 1000"),i("/Subtype /CIDFontType2"),i("/CIDSystemInfo"),i("<<"),i("/Supplement 0"),i("/Registry (Adobe)"),i("/Ordering ("+r.encoding+")"),i(">>"),i(">>"),i("endobj"),r.objectNumber=a(),i("<<"),i("/Type /Font"),i("/Subtype /Type0"),i("/ToUnicode "+f+" 0 R"),i("/BaseFont /"+F(r.fontName)),i("/Encoding /"+r.encoding),i("/DescendantFonts ["+p+" 0 R]"),i(">>"),i("endobj"),r.isAlreadyPutted=!0}}(e)}]);e.events.push(["putFont",function(e){!function(e){var r=e.font,i=e.out,a=e.newObject,o=e.putStream;if(r.metadata instanceof t.API.TTFFont&&"WinAnsiEncoding"===r.encoding){for(var s=r.metadata.rawData,c="",u=0;u<s.length;u++)c+=String.fromCharCode(s[u]);var l=a();o({data:c,addLength1:!0,objectId:l}),i("endobj");var h=a();o({data:n(r.metadata.toUnicode),addLength1:!0,objectId:h}),i("endobj");var f=a();i("<<"),i("/Descent "+r.metadata.decender),i("/CapHeight "+r.metadata.capHeight),i("/StemV "+r.metadata.stemV),i("/Type /FontDescriptor"),i("/FontFile2 "+l+" 0 R"),i("/Flags 96"),i("/FontBBox "+t.API.PDFObject.convert(r.metadata.bbox)),i("/FontName /"+F(r.fontName)),i("/ItalicAngle "+r.metadata.italicAngle),i("/Ascent "+r.metadata.ascender),i(">>"),i("endobj"),r.objectNumber=a();for(var d=0;d<r.metadata.hmtx.widths.length;d++)r.metadata.hmtx.widths[d]=parseInt(r.metadata.hmtx.widths[d]*(1e3/r.metadata.head.unitsPerEm));i("<</Subtype/TrueType/Type/Font/ToUnicode "+h+" 0 R/BaseFont/"+F(r.fontName)+"/FontDescriptor "+f+" 0 R/Encoding/"+r.encoding+" /FirstChar 29 /LastChar 255 /Widths "+t.API.PDFObject.convert(r.metadata.hmtx.widths)+">>"),i("endobj"),r.isAlreadyPutted=!0}}(e)}]);var i=function(t){var e,n=t.text||"",i=t.x,a=t.y,o=t.options||{},s=t.mutex||{},c=s.pdfEscape,u=s.activeFontKey,l=s.fonts,h=u,f="",d=0,p="",g=l[h].encoding;if("Identity-H"!==l[h].encoding)return{text:n,x:i,y:a,options:o,mutex:s};for(p=n,h=u,Array.isArray(n)&&(p=n[0]),d=0;d<p.length;d+=1)l[h].metadata.hasOwnProperty("cmap")&&(e=l[h].metadata.cmap.unicode.codeMap[p[d].charCodeAt(0)]),e||p[d].charCodeAt(0)<256&&l[h].metadata.hasOwnProperty("Unicode")?f+=p[d]:f+="";var m="";return parseInt(h.slice(1))<14||"WinAnsiEncoding"===g?m=c(f,h).split("").map((function(t){return t.charCodeAt(0).toString(16)})).join(""):"Identity-H"===g&&(m=r(f,l[h])),s.isHex=!0,{text:m,x:i,y:a,options:o,mutex:s}};e.events.push(["postProcessText",function(t){var e=t.text||"",r=[],n={text:e,x:t.x,y:t.y,options:t.options,mutex:t.mutex};if(Array.isArray(e)){var a=0;for(a=0;a<e.length;a+=1)Array.isArray(e[a])&&3===e[a].length?r.push([i(Object.assign({},n,{text:e[a][0]})).text,e[a][1],e[a][2]]):r.push(i(Object.assign({},n,{text:e[a]})).text);t.text=r}else t.text=i(Object.assign({},n,{text:e})).text}])}(M),
+/**
+   * @license
+   * jsPDF virtual FileSystem functionality
+   *
+   * Licensed under the MIT License.
+   * http://opensource.org/licenses/mit-license
+   */
+function(t){var e=function(){return void 0===this.internal.vFS&&(this.internal.vFS={}),!0};t.existsFileInVFS=function(t){return e.call(this),void 0!==this.internal.vFS[t]},t.addFileToVFS=function(t,r){return e.call(this),this.internal.vFS[t]=r,this},t.getFileFromVFS=function(t){return e.call(this),void 0!==this.internal.vFS[t]?this.internal.vFS[t]:null}}(M.API),
+/**
+   * @license
+   * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)
+   * MIT License
+   */
+function(t){t.__bidiEngine__=t.prototype.__bidiEngine__=function(t){var r,n,i,a,o,s,c,u=e,l=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],h=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],f={L:0,R:1,EN:2,AN:3,N:4,B:5,S:6},d={0:0,5:1,6:2,7:3,32:4,251:5,254:6,255:7},p=["(",")","(","<",">","<","[","]","[","{","}","{","«","»","«","‹","›","‹","⁅","⁆","⁅","⁽","⁾","⁽","₍","₎","₍","≤","≥","≤","〈","〉","〈","﹙","﹚","﹙","﹛","﹜","﹛","﹝","﹞","﹝","﹤","﹥","﹤"],g=new RegExp(/^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/),m=!1,v=0;this.__bidiEngine__={};var b=function(t){var e=t.charCodeAt(),r=e>>8,n=d[r];return void 0!==n?u[256*n+(255&e)]:252===r||253===r?"AL":g.test(r)?"L":8===r?"R":"N"},y=function(t){for(var e,r=0;r<t.length;r++){if("L"===(e=b(t.charAt(r))))return!1;if("R"===e)return!0}return!1},w=function(t,e,o,s){var c,u,l,h,f=e[s];switch(f){case"L":case"R":m=!1;break;case"N":case"AN":break;case"EN":m&&(f="AN");break;case"AL":m=!0,f="R";break;case"WS":f="N";break;case"CS":s<1||s+1>=e.length||"EN"!==(c=o[s-1])&&"AN"!==c||"EN"!==(u=e[s+1])&&"AN"!==u?f="N":m&&(u="AN"),f=u===c?u:"N";break;case"ES":f="EN"===(c=s>0?o[s-1]:"B")&&s+1<e.length&&"EN"===e[s+1]?"EN":"N";break;case"ET":if(s>0&&"EN"===o[s-1]){f="EN";break}if(m){f="N";break}for(l=s+1,h=e.length;l<h&&"ET"===e[l];)l++;f=l<h&&"EN"===e[l]?"EN":"N";break;case"NSM":if(i&&!a){for(h=e.length,l=s+1;l<h&&"NSM"===e[l];)l++;if(l<h){var d=t[s],p=d>=1425&&d<=2303||64286===d;if(c=e[l],p&&("R"===c||"AL"===c)){f="R";break}}}f=s<1||"B"===(c=e[s-1])?"N":o[s-1];break;case"B":m=!1,r=!0,f=v;break;case"S":n=!0,f="N";break;case"LRE":case"RLE":case"LRO":case"RLO":case"PDF":m=!1;break;case"BN":f="N"}return f},N=function(t,e,r){var n=t.split("");return r&&L(n,r,{hiLevel:v}),n.reverse(),e&&e.reverse(),n.join("")},L=function(t,e,i){var a,o,s,c,u,d=-1,p=t.length,g=0,y=[],N=v?h:l,L=[];for(m=!1,r=!1,n=!1,o=0;o<p;o++)L[o]=b(t[o]);for(s=0;s<p;s++){if(u=g,y[s]=w(t,L,y,s),a=240&(g=N[u][f[y[s]]]),g&=15,e[s]=c=N[g][5],a>0)if(16===a){for(o=d;o<s;o++)e[o]=1;d=-1}else d=-1;if(N[g][6])-1===d&&(d=s);else if(d>-1){for(o=d;o<s;o++)e[o]=c;d=-1}"B"===L[s]&&(e[s]=0),i.hiLevel|=c}n&&function(t,e,r){for(var n=0;n<r;n++)if("S"===t[n]){e[n]=v;for(var i=n-1;i>=0&&"WS"===t[i];i--)e[i]=v}}(L,e,p)},A=function(t,e,n,i,a){if(!(a.hiLevel<t)){if(1===t&&1===v&&!r)return e.reverse(),void(n&&n.reverse());for(var o,s,c,u,l=e.length,h=0;h<l;){if(i[h]>=t){for(c=h+1;c<l&&i[c]>=t;)c++;for(u=h,s=c-1;u<s;u++,s--)o=e[u],e[u]=e[s],e[s]=o,n&&(o=n[u],n[u]=n[s],n[s]=o);h=c}h++}}},x=function(t,e,r){var n=t.split(""),i={hiLevel:v};return r||(r=[]),L(n,r,i),function(t,e,r){if(0!==r.hiLevel&&c)for(var n,i=0;i<t.length;i++)1===e[i]&&(n=p.indexOf(t[i]))>=0&&(t[i]=p[n+1])}(n,r,i),A(2,n,e,r,i),A(1,n,e,r,i),n.join("")};return this.__bidiEngine__.doBidiReorder=function(t,e,r){if(function(t,e){if(e)for(var r=0;r<t.length;r++)e[r]=r;void 0===a&&(a=y(t)),void 0===s&&(s=y(t))}(t,e),i||!o||s)if(i&&o&&a^s)v=a?1:0,t=N(t,e,r);else if(!i&&o&&s)v=a?1:0,t=x(t,e,r),t=N(t,e);else if(!i||a||o||s){if(i&&!o&&a^s)t=N(t,e),a?(v=0,t=x(t,e,r)):(v=1,t=x(t,e,r),t=N(t,e));else if(i&&a&&!o&&s)v=1,t=x(t,e,r),t=N(t,e);else if(!i&&!o&&a^s){var n=c;a?(v=1,t=x(t,e,r),v=0,c=!1,t=x(t,e,r),c=n):(v=0,t=x(t,e,r),t=N(t,e),v=1,c=!1,t=x(t,e,r),c=n,t=N(t,e))}}else v=0,t=x(t,e,r);else v=a?1:0,t=x(t,e,r);return t},this.__bidiEngine__.setOptions=function(t){t&&(i=t.isInputVisual,o=t.isOutputVisual,a=t.isInputRtl,s=t.isOutputRtl,c=t.isSymmetricSwapping)},this.__bidiEngine__.setOptions(t),this.__bidiEngine__};var e=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","N","N","ET","ET","ET","N","N","N","N","N","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","N","N","N","N","N","N","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","N","N","N","N","N","N","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","N","N","N","N","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","N","ET","ET","ET","ET","N","N","N","N","L","N","N","BN","N","N","ET","ET","EN","EN","N","L","N","N","N","EN","L","N","N","N","N","N","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","N","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","N","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","N","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","N","N","L","L","L","L","L","L","L","N","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","N","L","N","N","N","N","N","ET","N","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","R","NSM","R","NSM","NSM","R","NSM","NSM","R","NSM","N","N","N","N","N","N","N","N","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","N","N","N","N","N","R","R","R","R","R","N","N","N","N","N","N","N","N","N","N","N","AN","AN","AN","AN","AN","AN","N","N","AL","ET","ET","AL","CS","AL","N","N","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","N","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","AN","AN","AN","AN","AN","AN","AN","AN","AN","ET","AN","AN","AL","AL","AL","NSM","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","N","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","NSM","NSM","N","NSM","NSM","NSM","NSM","AL","AL","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","N","AL","AL","NSM","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","N","N","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AL","N","N","N","N","N","N","N","N","N","N","N","N","N","N","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","R","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","R","R","N","N","N","N","R","N","N","N","N","N","WS","WS","WS","WS","WS","WS","WS","WS","WS","WS","WS","BN","BN","BN","L","R","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","WS","B","LRE","RLE","PDF","LRO","RLO","CS","ET","ET","ET","ET","ET","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","CS","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","WS","BN","BN","BN","BN","BN","N","LRI","RLI","FSI","PDI","BN","BN","BN","BN","BN","BN","EN","L","N","N","EN","EN","EN","EN","EN","EN","ES","ES","N","N","N","L","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","ES","ES","N","N","N","N","L","L","L","L","L","L","L","L","L","L","L","L","L","N","N","N","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","ET","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","L","L","L","L","L","L","L","N","N","N","N","N","N","N","N","N","N","N","N","L","L","L","L","L","N","N","N","N","N","R","NSM","R","R","R","R","R","R","R","R","R","R","ES","R","R","R","R","R","R","R","R","R","R","R","R","R","N","R","R","R","R","R","N","R","N","R","R","N","R","R","N","R","R","R","R","R","R","R","R","R","R","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","CS","N","CS","N","N","CS","N","N","N","N","N","N","N","N","N","ET","N","N","ES","ES","N","N","N","N","N","ET","ET","N","N","N","N","N","AL","AL","AL","AL","AL","N","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","N","N","BN","N","N","N","ET","ET","ET","N","N","N","N","N","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","N","N","N","N","N","N","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","N","N","N","N","N","N","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","N","N","N","N","N","N","N","N","N","N","N","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","N","N","N","L","L","L","L","L","L","N","N","L","L","L","L","L","L","N","N","L","L","L","L","L","L","N","N","L","L","L","N","N","N","ET","ET","N","N","N","ET","ET","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N"],r=new t.__bidiEngine__({isInputVisual:!0});t.API.events.push(["postProcessText",function(t){var e=t.text,n=(t.x,t.y,t.options||{}),i=(t.mutex,n.lang,[]);if(n.isInputVisual="boolean"!=typeof n.isInputVisual||n.isInputVisual,r.setOptions(n),"[object Array]"===Object.prototype.toString.call(e)){var a=0;for(i=[],a=0;a<e.length;a+=1)"[object Array]"===Object.prototype.toString.call(e[a])?i.push([r.doBidiReorder(e[a][0]),e[a][1],e[a][2]]):i.push([r.doBidiReorder(e[a])]);t.text=i}else t.text=r.doBidiReorder(e);r.setOptions({isInputVisual:!0})}])}(M),M.API.TTFFont=function(){function t(t){var e;if(this.rawData=t,e=this.contents=new Te(t),this.contents.pos=4,"ttcf"===e.readString(4))throw new Error("TTCF not supported.");e.pos=0,this.parse(),this.subset=new ar(this),this.registerTTF()}return t.open=function(e){return new t(e)},t.prototype.parse=function(){return this.directory=new Ue(this.contents),this.head=new We(this),this.name=new Ze(this),this.cmap=new Ge(this),this.toUnicode={},this.hhea=new Ye(this),this.maxp=new $e(this),this.hmtx=new Qe(this),this.post=new Xe(this),this.os2=new Je(this),this.loca=new ir(this),this.glyf=new er(this),this.ascender=this.os2.exists&&this.os2.ascender||this.hhea.ascender,this.decender=this.os2.exists&&this.os2.decender||this.hhea.decender,this.lineGap=this.os2.exists&&this.os2.lineGap||this.hhea.lineGap,this.bbox=[this.head.xMin,this.head.yMin,this.head.xMax,this.head.yMax]},t.prototype.registerTTF=function(){var t,e,r,n,i;if(this.scaleFactor=1e3/this.head.unitsPerEm,this.bbox=function(){var e,r,n,i;for(i=[],e=0,r=(n=this.bbox).length;e<r;e++)t=n[e],i.push(Math.round(t*this.scaleFactor));return i}.call(this),this.stemV=0,this.post.exists?(r=255&(n=this.post.italic_angle),0!=(32768&(e=n>>16))&&(e=-(1+(65535^e))),this.italicAngle=+(e+"."+r)):this.italicAngle=0,this.ascender=Math.round(this.ascender*this.scaleFactor),this.decender=Math.round(this.decender*this.scaleFactor),this.lineGap=Math.round(this.lineGap*this.scaleFactor),this.capHeight=this.os2.exists&&this.os2.capHeight||this.ascender,this.xHeight=this.os2.exists&&this.os2.xHeight||0,this.familyClass=(this.os2.exists&&this.os2.familyClass||0)>>8,this.isSerif=1===(i=this.familyClass)||2===i||3===i||4===i||5===i||7===i,this.isScript=10===this.familyClass,this.flags=0,this.post.isFixedPitch&&(this.flags|=1),this.isSerif&&(this.flags|=2),this.isScript&&(this.flags|=8),0!==this.italicAngle&&(this.flags|=64),this.flags|=32,!this.cmap.unicode)throw new Error("No unicode cmap for font")},t.prototype.characterToGlyph=function(t){var e;return(null!=(e=this.cmap.unicode)?e.codeMap[t]:void 0)||0},t.prototype.widthOfGlyph=function(t){var e;return e=1e3/this.head.unitsPerEm,this.hmtx.forGlyph(t).advance*e},t.prototype.widthOfString=function(t,e,r){var n,i,a,o;for(a=0,i=0,o=(t=""+t).length;0<=o?i<o:i>o;i=0<=o?++i:--i)n=t.charCodeAt(i),a+=this.widthOfGlyph(this.characterToGlyph(n))+r*(1e3/e)||0;return a*(e/1e3)},t.prototype.lineHeight=function(t,e){var r;return null==e&&(e=!1),r=e?this.lineGap:0,(this.ascender+r-this.decender)/1e3*t},t}();var Re,Te=function(){function t(t){this.data=null!=t?t:[],this.pos=0,this.length=this.data.length}return t.prototype.readByte=function(){return this.data[this.pos++]},t.prototype.writeByte=function(t){return this.data[this.pos++]=t},t.prototype.readUInt32=function(){return 16777216*this.readByte()+(this.readByte()<<16)+(this.readByte()<<8)+this.readByte()},t.prototype.writeUInt32=function(t){return this.writeByte(t>>>24&255),this.writeByte(t>>16&255),this.writeByte(t>>8&255),this.writeByte(255&t)},t.prototype.readInt32=function(){var t;return(t=this.readUInt32())>=2147483648?t-4294967296:t},t.prototype.writeInt32=function(t){return t<0&&(t+=4294967296),this.writeUInt32(t)},t.prototype.readUInt16=function(){return this.readByte()<<8|this.readByte()},t.prototype.writeUInt16=function(t){return this.writeByte(t>>8&255),this.writeByte(255&t)},t.prototype.readInt16=function(){var t;return(t=this.readUInt16())>=32768?t-65536:t},t.prototype.writeInt16=function(t){return t<0&&(t+=65536),this.writeUInt16(t)},t.prototype.readString=function(t){var e,r;for(r=[],e=0;0<=t?e<t:e>t;e=0<=t?++e:--e)r[e]=String.fromCharCode(this.readByte());return r.join("")},t.prototype.writeString=function(t){var e,r,n;for(n=[],e=0,r=t.length;0<=r?e<r:e>r;e=0<=r?++e:--e)n.push(this.writeByte(t.charCodeAt(e)));return n},t.prototype.readShort=function(){return this.readInt16()},t.prototype.writeShort=function(t){return this.writeInt16(t)},t.prototype.readLongLong=function(){var t,e,r,n,i,a,o,s;return t=this.readByte(),e=this.readByte(),r=this.readByte(),n=this.readByte(),i=this.readByte(),a=this.readByte(),o=this.readByte(),s=this.readByte(),128&t?-1*(72057594037927940*(255^t)+281474976710656*(255^e)+1099511627776*(255^r)+4294967296*(255^n)+16777216*(255^i)+65536*(255^a)+256*(255^o)+(255^s)+1):72057594037927940*t+281474976710656*e+1099511627776*r+4294967296*n+16777216*i+65536*a+256*o+s},t.prototype.writeLongLong=function(t){var e,r;return e=Math.floor(t/4294967296),r=4294967295&t,this.writeByte(e>>24&255),this.writeByte(e>>16&255),this.writeByte(e>>8&255),this.writeByte(255&e),this.writeByte(r>>24&255),this.writeByte(r>>16&255),this.writeByte(r>>8&255),this.writeByte(255&r)},t.prototype.readInt=function(){return this.readInt32()},t.prototype.writeInt=function(t){return this.writeInt32(t)},t.prototype.read=function(t){var e,r;for(e=[],r=0;0<=t?r<t:r>t;r=0<=t?++r:--r)e.push(this.readByte());return e},t.prototype.write=function(t){var e,r,n,i;for(i=[],r=0,n=t.length;r<n;r++)e=t[r],i.push(this.writeByte(e));return i},t}(),Ue=function(){var t;function e(t){var e,r,n;for(this.scalarType=t.readInt(),this.tableCount=t.readShort(),this.searchRange=t.readShort(),this.entrySelector=t.readShort(),this.rangeShift=t.readShort(),this.tables={},r=0,n=this.tableCount;0<=n?r<n:r>n;r=0<=n?++r:--r)e={tag:t.readString(4),checksum:t.readInt(),offset:t.readInt(),length:t.readInt()},this.tables[e.tag]=e}return e.prototype.encode=function(e){var r,n,i,a,o,s,c,u,l,h,f,d,p;for(p in f=Object.keys(e).length,s=Math.log(2),l=16*Math.floor(Math.log(f)/s),a=Math.floor(l/s),u=16*f-l,(n=new Te).writeInt(this.scalarType),n.writeShort(f),n.writeShort(l),n.writeShort(a),n.writeShort(u),i=16*f,c=n.pos+i,o=null,d=[],e)for(h=e[p],n.writeString(p),n.writeInt(t(h)),n.writeInt(c),n.writeInt(h.length),d=d.concat(h),"head"===p&&(o=c),c+=h.length;c%4;)d.push(0),c++;return n.write(d),r=2981146554-t(n.data),n.pos=o+8,n.writeUInt32(r),n.data},t=function(t){var e,r,n,i;for(t=tr.call(t);t.length%4;)t.push(0);for(n=new Te(t),r=0,e=0,i=t.length;e<i;e=e+=4)r+=n.readUInt32();return 4294967295&r},e}(),ze={}.hasOwnProperty,He=function(t,e){for(var r in e)ze.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},We=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return He(e,t),e.prototype.tag="head",e.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.revision=t.readInt(),this.checkSumAdjustment=t.readInt(),this.magicNumber=t.readInt(),this.flags=t.readShort(),this.unitsPerEm=t.readShort(),this.created=t.readLongLong(),this.modified=t.readLongLong(),this.xMin=t.readShort(),this.yMin=t.readShort(),this.xMax=t.readShort(),this.yMax=t.readShort(),this.macStyle=t.readShort(),this.lowestRecPPEM=t.readShort(),this.fontDirectionHint=t.readShort(),this.indexToLocFormat=t.readShort(),this.glyphDataFormat=t.readShort()},e.prototype.encode=function(t){var e;return(e=new Te).writeInt(this.version),e.writeInt(this.revision),e.writeInt(this.checkSumAdjustment),e.writeInt(this.magicNumber),e.writeShort(this.flags),e.writeShort(this.unitsPerEm),e.writeLongLong(this.created),e.writeLongLong(this.modified),e.writeShort(this.xMin),e.writeShort(this.yMin),e.writeShort(this.xMax),e.writeShort(this.yMax),e.writeShort(this.macStyle),e.writeShort(this.lowestRecPPEM),e.writeShort(this.fontDirectionHint),e.writeShort(t),e.writeShort(this.glyphDataFormat),e.data},e}(Re=function(){function t(t){var e;this.file=t,e=this.file.directory.tables[this.tag],this.exists=!!e,e&&(this.offset=e.offset,this.length=e.length,this.parse(this.file.contents))}return t.prototype.parse=function(){},t.prototype.encode=function(){},t.prototype.raw=function(){return this.exists?(this.file.contents.pos=this.offset,this.file.contents.read(this.length)):null},t}()),Ve=function(){function t(t,e){var r,n,i,a,o,s,c,u,l,h,f,d,p,g,m,v,b;switch(this.platformID=t.readUInt16(),this.encodingID=t.readShort(),this.offset=e+t.readInt(),l=t.pos,t.pos=this.offset,this.format=t.readUInt16(),this.length=t.readUInt16(),this.language=t.readUInt16(),this.isUnicode=3===this.platformID&&1===this.encodingID&&4===this.format||0===this.platformID&&4===this.format,this.codeMap={},this.format){case 0:for(s=0;s<256;++s)this.codeMap[s]=t.readByte();break;case 4:for(f=t.readUInt16(),h=f/2,t.pos+=6,i=function(){var e,r;for(r=[],s=e=0;0<=h?e<h:e>h;s=0<=h?++e:--e)r.push(t.readUInt16());return r}(),t.pos+=2,p=function(){var e,r;for(r=[],s=e=0;0<=h?e<h:e>h;s=0<=h?++e:--e)r.push(t.readUInt16());return r}(),c=function(){var e,r;for(r=[],s=e=0;0<=h?e<h:e>h;s=0<=h?++e:--e)r.push(t.readUInt16());return r}(),u=function(){var e,r;for(r=[],s=e=0;0<=h?e<h:e>h;s=0<=h?++e:--e)r.push(t.readUInt16());return r}(),n=(this.length-t.pos+this.offset)/2,o=function(){var e,r;for(r=[],s=e=0;0<=n?e<n:e>n;s=0<=n?++e:--e)r.push(t.readUInt16());return r}(),s=m=0,b=i.length;m<b;s=++m)for(g=i[s],r=v=d=p[s];d<=g?v<=g:v>=g;r=d<=g?++v:--v)0===u[s]?a=r+c[s]:0!==(a=o[u[s]/2+(r-d)-(h-s)]||0)&&(a+=c[s]),this.codeMap[r]=65535&a}t.pos=l}return t.encode=function(t,e){var r,n,i,a,o,s,c,u,l,h,f,d,p,g,m,v,b,y,w,N,L,A,x,S,_,P,k,F,I,C,j,O,B,M,E,q,D,R,T,U,z,H,W,V,G,Y;switch(F=new Te,a=Object.keys(t).sort((function(t,e){return t-e})),e){case"macroman":for(p=0,g=function(){var t=[];for(d=0;d<256;++d)t.push(0);return t}(),v={0:0},i={},I=0,B=a.length;I<B;I++)null==v[W=t[n=a[I]]]&&(v[W]=++p),i[n]={old:t[n],new:v[t[n]]},g[n]=v[t[n]];return F.writeUInt16(1),F.writeUInt16(0),F.writeUInt32(12),F.writeUInt16(0),F.writeUInt16(262),F.writeUInt16(0),F.write(g),{charMap:i,subtable:F.data,maxGlyphID:p+1};case"unicode":for(P=[],l=[],b=0,v={},r={},m=c=null,C=0,M=a.length;C<M;C++)null==v[w=t[n=a[C]]]&&(v[w]=++b),r[n]={old:w,new:v[w]},o=v[w]-n,null!=m&&o===c||(m&&l.push(m),P.push(n),c=o),m=n;for(m&&l.push(m),l.push(65535),P.push(65535),S=2*(x=P.length),A=2*Math.pow(Math.log(x)/Math.LN2,2),h=Math.log(A/2)/Math.LN2,L=2*x-A,s=[],N=[],f=[],d=j=0,E=P.length;j<E;d=++j){if(_=P[d],u=l[d],65535===_){s.push(0),N.push(0);break}if(_-(k=r[_].new)>=32768)for(s.push(0),N.push(2*(f.length+x-d)),n=O=_;_<=u?O<=u:O>=u;n=_<=u?++O:--O)f.push(r[n].new);else s.push(k-_),N.push(0)}for(F.writeUInt16(3),F.writeUInt16(1),F.writeUInt32(12),F.writeUInt16(4),F.writeUInt16(16+8*x+2*f.length),F.writeUInt16(0),F.writeUInt16(S),F.writeUInt16(A),F.writeUInt16(h),F.writeUInt16(L),z=0,q=l.length;z<q;z++)n=l[z],F.writeUInt16(n);for(F.writeUInt16(0),H=0,D=P.length;H<D;H++)n=P[H],F.writeUInt16(n);for(V=0,R=s.length;V<R;V++)o=s[V],F.writeUInt16(o);for(G=0,T=N.length;G<T;G++)y=N[G],F.writeUInt16(y);for(Y=0,U=f.length;Y<U;Y++)p=f[Y],F.writeUInt16(p);return{charMap:r,subtable:F.data,maxGlyphID:b+1}}},t}(),Ge=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return He(e,t),e.prototype.tag="cmap",e.prototype.parse=function(t){var e,r,n;for(t.pos=this.offset,this.version=t.readUInt16(),n=t.readUInt16(),this.tables=[],this.unicode=null,r=0;0<=n?r<n:r>n;r=0<=n?++r:--r)e=new Ve(t,this.offset),this.tables.push(e),e.isUnicode&&null==this.unicode&&(this.unicode=e);return!0},e.encode=function(t,e){var r,n;return null==e&&(e="macroman"),r=Ve.encode(t,e),(n=new Te).writeUInt16(0),n.writeUInt16(1),r.table=n.data.concat(r.subtable),r},e}(Re),Ye=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return He(e,t),e.prototype.tag="hhea",e.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.ascender=t.readShort(),this.decender=t.readShort(),this.lineGap=t.readShort(),this.advanceWidthMax=t.readShort(),this.minLeftSideBearing=t.readShort(),this.minRightSideBearing=t.readShort(),this.xMaxExtent=t.readShort(),this.caretSlopeRise=t.readShort(),this.caretSlopeRun=t.readShort(),this.caretOffset=t.readShort(),t.pos+=8,this.metricDataFormat=t.readShort(),this.numberOfMetrics=t.readUInt16()},e}(Re),Je=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return He(e,t),e.prototype.tag="OS/2",e.prototype.parse=function(t){if(t.pos=this.offset,this.version=t.readUInt16(),this.averageCharWidth=t.readShort(),this.weightClass=t.readUInt16(),this.widthClass=t.readUInt16(),this.type=t.readShort(),this.ySubscriptXSize=t.readShort(),this.ySubscriptYSize=t.readShort(),this.ySubscriptXOffset=t.readShort(),this.ySubscriptYOffset=t.readShort(),this.ySuperscriptXSize=t.readShort(),this.ySuperscriptYSize=t.readShort(),this.ySuperscriptXOffset=t.readShort(),this.ySuperscriptYOffset=t.readShort(),this.yStrikeoutSize=t.readShort(),this.yStrikeoutPosition=t.readShort(),this.familyClass=t.readShort(),this.panose=function(){var e,r;for(r=[],e=0;e<10;++e)r.push(t.readByte());return r}(),this.charRange=function(){var e,r;for(r=[],e=0;e<4;++e)r.push(t.readInt());return r}(),this.vendorID=t.readString(4),this.selection=t.readShort(),this.firstCharIndex=t.readShort(),this.lastCharIndex=t.readShort(),this.version>0&&(this.ascent=t.readShort(),this.descent=t.readShort(),this.lineGap=t.readShort(),this.winAscent=t.readShort(),this.winDescent=t.readShort(),this.codePageRange=function(){var e,r;for(r=[],e=0;e<2;e=++e)r.push(t.readInt());return r}(),this.version>1))return this.xHeight=t.readShort(),this.capHeight=t.readShort(),this.defaultChar=t.readShort(),this.breakChar=t.readShort(),this.maxContext=t.readShort()},e}(Re),Xe=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return He(e,t),e.prototype.tag="post",e.prototype.parse=function(t){var e,r,n;switch(t.pos=this.offset,this.format=t.readInt(),this.italicAngle=t.readInt(),this.underlinePosition=t.readShort(),this.underlineThickness=t.readShort(),this.isFixedPitch=t.readInt(),this.minMemType42=t.readInt(),this.maxMemType42=t.readInt(),this.minMemType1=t.readInt(),this.maxMemType1=t.readInt(),this.format){case 65536:break;case 131072:var i;for(r=t.readUInt16(),this.glyphNameIndex=[],i=0;0<=r?i<r:i>r;i=0<=r?++i:--i)this.glyphNameIndex.push(t.readUInt16());for(this.names=[],n=[];t.pos<this.offset+this.length;)e=t.readByte(),n.push(this.names.push(t.readString(e)));return n;case 151552:return r=t.readUInt16(),this.offsets=t.read(r);case 196608:break;case 262144:return this.map=function(){var e,r,n;for(n=[],i=e=0,r=this.file.maxp.numGlyphs;0<=r?e<r:e>r;i=0<=r?++e:--e)n.push(t.readUInt32());return n}.call(this)}},e}(Re),Ke=function(t,e){this.raw=t,this.length=t.length,this.platformID=e.platformID,this.encodingID=e.encodingID,this.languageID=e.languageID},Ze=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return He(e,t),e.prototype.tag="name",e.prototype.parse=function(t){var e,r,n,i,a,o,s,c,u,l,h;for(t.pos=this.offset,t.readShort(),e=t.readShort(),o=t.readShort(),r=[],i=0;0<=e?i<e:i>e;i=0<=e?++i:--i)r.push({platformID:t.readShort(),encodingID:t.readShort(),languageID:t.readShort(),nameID:t.readShort(),length:t.readShort(),offset:this.offset+o+t.readShort()});for(s={},i=u=0,l=r.length;u<l;i=++u)n=r[i],t.pos=n.offset,c=t.readString(n.length),a=new Ke(c,n),null==s[h=n.nameID]&&(s[h]=[]),s[n.nameID].push(a);this.strings=s,this.copyright=s[0],this.fontFamily=s[1],this.fontSubfamily=s[2],this.uniqueSubfamily=s[3],this.fontName=s[4],this.version=s[5];try{this.postscriptName=s[6][0].raw.replace(/[\x00-\x19\x80-\xff]/g,"")}catch(t){this.postscriptName=s[4][0].raw.replace(/[\x00-\x19\x80-\xff]/g,"")}return this.trademark=s[7],this.manufacturer=s[8],this.designer=s[9],this.description=s[10],this.vendorUrl=s[11],this.designerUrl=s[12],this.license=s[13],this.licenseUrl=s[14],this.preferredFamily=s[15],this.preferredSubfamily=s[17],this.compatibleFull=s[18],this.sampleText=s[19]},e}(Re),$e=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return He(e,t),e.prototype.tag="maxp",e.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.numGlyphs=t.readUInt16(),this.maxPoints=t.readUInt16(),this.maxContours=t.readUInt16(),this.maxCompositePoints=t.readUInt16(),this.maxComponentContours=t.readUInt16(),this.maxZones=t.readUInt16(),this.maxTwilightPoints=t.readUInt16(),this.maxStorage=t.readUInt16(),this.maxFunctionDefs=t.readUInt16(),this.maxInstructionDefs=t.readUInt16(),this.maxStackElements=t.readUInt16(),this.maxSizeOfInstructions=t.readUInt16(),this.maxComponentElements=t.readUInt16(),this.maxComponentDepth=t.readUInt16()},e}(Re),Qe=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return He(e,t),e.prototype.tag="hmtx",e.prototype.parse=function(t){var e,r,n,i,a,o,s;for(t.pos=this.offset,this.metrics=[],e=0,o=this.file.hhea.numberOfMetrics;0<=o?e<o:e>o;e=0<=o?++e:--e)this.metrics.push({advance:t.readUInt16(),lsb:t.readInt16()});for(n=this.file.maxp.numGlyphs-this.file.hhea.numberOfMetrics,this.leftSideBearings=function(){var r,i;for(i=[],e=r=0;0<=n?r<n:r>n;e=0<=n?++r:--r)i.push(t.readInt16());return i}(),this.widths=function(){var t,e,r,n;for(n=[],t=0,e=(r=this.metrics).length;t<e;t++)i=r[t],n.push(i.advance);return n}.call(this),r=this.widths[this.widths.length-1],s=[],e=a=0;0<=n?a<n:a>n;e=0<=n?++a:--a)s.push(this.widths.push(r));return s},e.prototype.forGlyph=function(t){return t in this.metrics?this.metrics[t]:{advance:this.metrics[this.metrics.length-1].advance,lsb:this.leftSideBearings[t-this.metrics.length]}},e}(Re),tr=[].slice,er=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return He(e,t),e.prototype.tag="glyf",e.prototype.parse=function(){return this.cache={}},e.prototype.glyphFor=function(t){var e,r,n,i,a,o,s,c,u,l;return t in this.cache?this.cache[t]:(i=this.file.loca,e=this.file.contents,r=i.indexOf(t),0===(n=i.lengthOf(t))?this.cache[t]=null:(e.pos=this.offset+r,a=(o=new Te(e.read(n))).readShort(),c=o.readShort(),l=o.readShort(),s=o.readShort(),u=o.readShort(),this.cache[t]=-1===a?new nr(o,c,l,s,u):new rr(o,a,c,l,s,u),this.cache[t]))},e.prototype.encode=function(t,e,r){var n,i,a,o,s;for(a=[],i=[],o=0,s=e.length;o<s;o++)n=t[e[o]],i.push(a.length),n&&(a=a.concat(n.encode(r)));return i.push(a.length),{table:a,offsets:i}},e}(Re),rr=function(){function t(t,e,r,n,i,a){this.raw=t,this.numberOfContours=e,this.xMin=r,this.yMin=n,this.xMax=i,this.yMax=a,this.compound=!1}return t.prototype.encode=function(){return this.raw.data},t}(),nr=function(){function t(t,e,r,n,i){var a,o;for(this.raw=t,this.xMin=e,this.yMin=r,this.xMax=n,this.yMax=i,this.compound=!0,this.glyphIDs=[],this.glyphOffsets=[],a=this.raw;o=a.readShort(),this.glyphOffsets.push(a.pos),this.glyphIDs.push(a.readUInt16()),32&o;)a.pos+=1&o?4:2,128&o?a.pos+=8:64&o?a.pos+=4:8&o&&(a.pos+=2)}return 1,8,32,64,128,t.prototype.encode=function(){var t,e,r;for(e=new Te(tr.call(this.raw.data)),t=0,r=this.glyphIDs.length;t<r;++t)e.pos=this.glyphOffsets[t];return e.data},t}(),ir=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return He(e,t),e.prototype.tag="loca",e.prototype.parse=function(t){var e,r;return t.pos=this.offset,e=this.file.head.indexToLocFormat,this.offsets=0===e?function(){var e,n;for(n=[],r=0,e=this.length;r<e;r+=2)n.push(2*t.readUInt16());return n}.call(this):function(){var e,n;for(n=[],r=0,e=this.length;r<e;r+=4)n.push(t.readUInt32());return n}.call(this)},e.prototype.indexOf=function(t){return this.offsets[t]},e.prototype.lengthOf=function(t){return this.offsets[t+1]-this.offsets[t]},e.prototype.encode=function(t,e){for(var r=new Uint32Array(this.offsets.length),n=0,i=0,a=0;a<r.length;++a)if(r[a]=n,i<e.length&&e[i]==a){++i,r[a]=n;var o=this.offsets[a],s=this.offsets[a+1]-o;s>0&&(n+=s)}for(var c=new Array(4*r.length),u=0;u<r.length;++u)c[4*u+3]=255&r[u],c[4*u+2]=(65280&r[u])>>8,c[4*u+1]=(16711680&r[u])>>16,c[4*u]=(4278190080&r[u])>>24;return c},e}(Re),ar=function(){function t(t){this.font=t,this.subset={},this.unicodes={},this.next=33}return t.prototype.generateCmap=function(){var t,e,r,n,i;for(e in n=this.font.cmap.tables[0].codeMap,t={},i=this.subset)r=i[e],t[e]=n[r];return t},t.prototype.glyphsFor=function(t){var e,r,n,i,a,o,s;for(n={},a=0,o=t.length;a<o;a++)n[i=t[a]]=this.font.glyf.glyphFor(i);for(i in e=[],n)(null!=(r=n[i])?r.compound:void 0)&&e.push.apply(e,r.glyphIDs);if(e.length>0)for(i in s=this.glyphsFor(e))r=s[i],n[i]=r;return n},t.prototype.encode=function(t,e){var r,n,i,a,o,s,c,u,l,h,f,d,p,g,m;for(n in r=Ge.encode(this.generateCmap(),"unicode"),a=this.glyphsFor(t),f={0:0},m=r.charMap)f[(s=m[n]).old]=s.new;for(d in h=r.maxGlyphID,a)d in f||(f[d]=h++);return u=function(t){var e,r;for(e in r={},t)r[t[e]]=e;return r}(f),l=Object.keys(u).sort((function(t,e){return t-e})),p=function(){var t,e,r;for(r=[],t=0,e=l.length;t<e;t++)o=l[t],r.push(u[o]);return r}(),i=this.font.glyf.encode(a,p,f),c=this.font.loca.encode(i.offsets,p),g={cmap:this.font.cmap.raw(),glyf:i.table,loca:c,hmtx:this.font.hmtx.raw(),hhea:this.font.hhea.raw(),maxp:this.font.maxp.raw(),post:this.font.post.raw(),name:this.font.name.raw(),head:this.font.head.encode(e)},this.font.os2.exists&&(g["OS/2"]=this.font.os2.raw()),this.font.directory.encode(g)},t}();M.API.PDFObject=function(){var t;function e(){}return t=function(t,e){return(Array(e+1).join("0")+t).slice(-e)},e.convert=function(r){var n,i,a,o;if(Array.isArray(r))return"["+function(){var t,i,a;for(a=[],t=0,i=r.length;t<i;t++)n=r[t],a.push(e.convert(n));return a}().join(" ")+"]";if("string"==typeof r)return"/"+r;if(null!=r?r.isString:void 0)return"("+r+")";if(r instanceof Date)return"(D:"+t(r.getUTCFullYear(),4)+t(r.getUTCMonth(),2)+t(r.getUTCDate(),2)+t(r.getUTCHours(),2)+t(r.getUTCMinutes(),2)+t(r.getUTCSeconds(),2)+"Z)";if("[object Object]"==={}.toString.call(r)){for(i in a=["<<"],r)o=r[i],a.push("/"+i+" "+e.convert(o));return a.push(">>"),a.join("\n")}return""+r},e}(),t.AcroForm=xt,t.AcroFormAppearance=Lt,t.AcroFormButton=gt,t.AcroFormCheckBox=yt,t.AcroFormChoiceField=ht,t.AcroFormComboBox=dt,t.AcroFormEditBox=pt,t.AcroFormListBox=ft,t.AcroFormPasswordField=Nt,t.AcroFormPushButton=mt,t.AcroFormRadioButton=vt,t.AcroFormTextField=wt,t.GState=C,t.ShadingPattern=O,t.TilingPattern=B,t.default=M,t.jsPDF=M,Object.defineProperty(t,"__esModule",{value:!0})}));
+//# sourceMappingURL=jspdf.umd.min.js.map
diff --git a/content/static/js/jspdf.umd.min.js.map b/content/static/js/jspdf.umd.min.js.map
new file mode 100644
index 0000000..b08b87e
--- /dev/null
+++ b/content/static/js/jspdf.umd.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"jspdf.umd.min.js","sources":["../src/libs/globalObject.js","../src/libs/console.js","../src/libs/FileSaver.js","../src/libs/AtobBtoa.js","../src/libs/rgbcolor.js","../src/libs/md5.js","../src/libs/rc4.js","../src/libs/pdfsecurity.js","../src/libs/pdfname.js","../src/jspdf.js","../src/modules/acroform.js","../src/libs/fontFace.js","../src/modules/addimage.js","../src/modules/annotations.js","../src/modules/arabic.js","../src/modules/autoprint.js","../src/modules/canvas.js","../src/modules/cell.js","../src/modules/context2d.js","../node_modules/fflate/esm/index.mjs","../src/modules/filters.js","../src/modules/fileloading.js","../src/modules/html.js","../src/modules/javascript.js","../src/modules/outline.js","../src/modules/jpeg_support.js","../src/libs/png.js","../src/modules/split_text_to_size.js","../src/libs/omggif.js","../src/libs/JPEGEncoder.js","../src/libs/BMPDecoder.js","../src/libs/WebPDecoder.js","../src/modules/png_support.js","../src/modules/gif_support.js","../src/modules/bmp_support.js","../src/modules/webp_support.js","../src/modules/rgba_support.js","../src/modules/setlanguage.js","../src/modules/standard_fonts_metrics.js","../src/modules/ttfsupport.js","../src/modules/svg.js","../src/modules/total_pages.js","../src/modules/viewerpreferences.js","../src/modules/xmp_metadata.js","../src/modules/utf8.js","../src/modules/vfs.js","../src/libs/bidiEngine.js","../src/libs/ttffont.js"],"sourcesContent":["export var globalObject = (function() {\n  return \"undefined\" !== typeof window\n    ? window\n    : \"undefined\" !== typeof global\n    ? global\n    : \"undefined\" !== typeof self\n    ? self\n    : this;\n})();\n","import { globalObject } from \"./globalObject.js\";\n\nfunction consoleLog() {\n  if (globalObject.console && typeof globalObject.console.log === \"function\") {\n    globalObject.console.log.apply(globalObject.console, arguments);\n  }\n}\n\nfunction consoleWarn(str) {\n  if (globalObject.console) {\n    if (typeof globalObject.console.warn === \"function\") {\n      globalObject.console.warn.apply(globalObject.console, arguments);\n    } else {\n      consoleLog.call(null, arguments);\n    }\n  }\n}\n\nfunction consoleError(str) {\n  if (globalObject.console) {\n    if (typeof globalObject.console.error === \"function\") {\n      globalObject.console.error.apply(globalObject.console, arguments);\n    } else {\n      consoleLog(str);\n    }\n  }\n}\nexport var console = {\n  log: consoleLog,\n  warn: consoleWarn,\n  error: consoleError\n};\n","/**\n * @license\n * FileSaver.js\n * A saveAs() FileSaver implementation.\n *\n * By Eli Grey, http://eligrey.com\n *\n * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n * source  : http://purl.eligrey.com/github/FileSaver.js\n */\n\nimport { globalObject as _global } from \"./globalObject.js\";\nimport { console } from \"./console.js\";\n\nfunction bom(blob, opts) {\n  if (typeof opts === \"undefined\") opts = { autoBom: false };\n  else if (typeof opts !== \"object\") {\n    console.warn(\"Deprecated: Expected third argument to be a object\");\n    opts = { autoBom: !opts };\n  }\n\n  // prepend BOM for UTF-8 XML and text/* types (including HTML)\n  // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n  if (\n    opts.autoBom &&\n    /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(\n      blob.type\n    )\n  ) {\n    return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n  }\n  return blob;\n}\n\nfunction download(url, name, opts) {\n  var xhr = new XMLHttpRequest();\n  xhr.open(\"GET\", url);\n  xhr.responseType = \"blob\";\n  xhr.onload = function() {\n    saveAs(xhr.response, name, opts);\n  };\n  xhr.onerror = function() {\n    console.error(\"could not download file\");\n  };\n  xhr.send();\n}\n\nfunction corsEnabled(url) {\n  var xhr = new XMLHttpRequest();\n  // use sync to avoid popup blocker\n  xhr.open(\"HEAD\", url, false);\n  try {\n    xhr.send();\n  } catch (e) {}\n  return xhr.status >= 200 && xhr.status <= 299;\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click(node) {\n  try {\n    node.dispatchEvent(new MouseEvent(\"click\"));\n  } catch (e) {\n    var evt = document.createEvent(\"MouseEvents\");\n    evt.initMouseEvent(\n      \"click\",\n      true,\n      true,\n      window,\n      0,\n      0,\n      0,\n      80,\n      20,\n      false,\n      false,\n      false,\n      false,\n      0,\n      null\n    );\n    node.dispatchEvent(evt);\n  }\n}\n\nvar saveAs =\n  _global.saveAs ||\n  // probably in some web worker\n  (typeof window !== \"object\" || window !== _global\n    ? function saveAs() {\n        /* noop */\n      }\n    : // Use download attribute first if possible (#193 Lumia mobile) unless this is a native app\n    typeof HTMLAnchorElement !== \"undefined\" &&\n      \"download\" in HTMLAnchorElement.prototype\n    ? function saveAs(blob, name, opts) {\n        var URL = _global.URL || _global.webkitURL;\n        var a = document.createElement(\"a\");\n        name = name || blob.name || \"download\";\n\n        a.download = name;\n        a.rel = \"noopener\"; // tabnabbing\n\n        // TODO: detect chrome extensions & packaged apps\n        // a.target = '_blank'\n\n        if (typeof blob === \"string\") {\n          // Support regular links\n          a.href = blob;\n          if (a.origin !== location.origin) {\n            corsEnabled(a.href)\n              ? download(blob, name, opts)\n              : click(a, (a.target = \"_blank\"));\n          } else {\n            click(a);\n          }\n        } else {\n          // Support blobs\n          a.href = URL.createObjectURL(blob);\n          setTimeout(function() {\n            URL.revokeObjectURL(a.href);\n          }, 4e4); // 40s\n          setTimeout(function() {\n            click(a);\n          }, 0);\n        }\n      }\n    : // Use msSaveOrOpenBlob as a second approach\n    \"msSaveOrOpenBlob\" in navigator\n    ? function saveAs(blob, name, opts) {\n        name = name || blob.name || \"download\";\n\n        if (typeof blob === \"string\") {\n          if (corsEnabled(blob)) {\n            download(blob, name, opts);\n          } else {\n            var a = document.createElement(\"a\");\n            a.href = blob;\n            a.target = \"_blank\";\n            setTimeout(function() {\n              click(a);\n            });\n          }\n        } else {\n          navigator.msSaveOrOpenBlob(bom(blob, opts), name);\n        }\n      }\n    : // Fallback to using FileReader and a popup\n      function saveAs(blob, name, opts, popup) {\n        // Open a popup immediately do go around popup blocker\n        // Mostly only available on user interaction and the fileReader is async so...\n        popup = popup || open(\"\", \"_blank\");\n        if (popup) {\n          popup.document.title = popup.document.body.innerText =\n            \"downloading...\";\n        }\n\n        if (typeof blob === \"string\") return download(blob, name, opts);\n\n        var force = blob.type === \"application/octet-stream\";\n        var isSafari =\n          /constructor/i.test(_global.HTMLElement) || _global.safari;\n        var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n\n        if (\n          (isChromeIOS || (force && isSafari)) &&\n          typeof FileReader === \"object\"\n        ) {\n          // Safari doesn't allow downloading of blob URLs\n          var reader = new FileReader();\n          reader.onloadend = function() {\n            var url = reader.result;\n            url = isChromeIOS\n              ? url\n              : url.replace(/^data:[^;]*;/, \"data:attachment/file;\");\n            if (popup) popup.location.href = url;\n            else location = url;\n            popup = null; // reverse-tabnabbing #460\n          };\n          reader.readAsDataURL(blob);\n        } else {\n          var URL = _global.URL || _global.webkitURL;\n          var url = URL.createObjectURL(blob);\n          if (popup) popup.location = url;\n          else location.href = url;\n          popup = null; // reverse-tabnabbing #460\n          setTimeout(function() {\n            URL.revokeObjectURL(url);\n          }, 4e4); // 40s\n        }\n      });\n\nexport { saveAs };\n","import { globalObject } from \"./globalObject.js\";\n\nvar atob, btoa;\n\n(function() {\n  atob = globalObject.atob.bind(globalObject);\n  btoa = globalObject.btoa.bind(globalObject);\n  return;\n\n})();\n\nexport { atob, btoa };\n","/**\n * A class to parse color values\n * @author Stoyan Stefanov <sstoo@gmail.com>\n * {@link   http://www.phpied.com/rgb-color-parser-in-javascript/}\n * @license Use it if you like it\n */\n\nfunction RGBColor(color_string) {\n  color_string = color_string || \"\";\n  this.ok = false;\n\n  // strip any leading #\n  if (color_string.charAt(0) == \"#\") {\n    // remove # if any\n    color_string = color_string.substr(1, 6);\n  }\n\n  color_string = color_string.replace(/ /g, \"\");\n  color_string = color_string.toLowerCase();\n\n  var channels;\n\n  // before getting into regexps, try simple matches\n  // and overwrite the input\n  var simple_colors = {\n    aliceblue: \"f0f8ff\",\n    antiquewhite: \"faebd7\",\n    aqua: \"00ffff\",\n    aquamarine: \"7fffd4\",\n    azure: \"f0ffff\",\n    beige: \"f5f5dc\",\n    bisque: \"ffe4c4\",\n    black: \"000000\",\n    blanchedalmond: \"ffebcd\",\n    blue: \"0000ff\",\n    blueviolet: \"8a2be2\",\n    brown: \"a52a2a\",\n    burlywood: \"deb887\",\n    cadetblue: \"5f9ea0\",\n    chartreuse: \"7fff00\",\n    chocolate: \"d2691e\",\n    coral: \"ff7f50\",\n    cornflowerblue: \"6495ed\",\n    cornsilk: \"fff8dc\",\n    crimson: \"dc143c\",\n    cyan: \"00ffff\",\n    darkblue: \"00008b\",\n    darkcyan: \"008b8b\",\n    darkgoldenrod: \"b8860b\",\n    darkgray: \"a9a9a9\",\n    darkgreen: \"006400\",\n    darkkhaki: \"bdb76b\",\n    darkmagenta: \"8b008b\",\n    darkolivegreen: \"556b2f\",\n    darkorange: \"ff8c00\",\n    darkorchid: \"9932cc\",\n    darkred: \"8b0000\",\n    darksalmon: \"e9967a\",\n    darkseagreen: \"8fbc8f\",\n    darkslateblue: \"483d8b\",\n    darkslategray: \"2f4f4f\",\n    darkturquoise: \"00ced1\",\n    darkviolet: \"9400d3\",\n    deeppink: \"ff1493\",\n    deepskyblue: \"00bfff\",\n    dimgray: \"696969\",\n    dodgerblue: \"1e90ff\",\n    feldspar: \"d19275\",\n    firebrick: \"b22222\",\n    floralwhite: \"fffaf0\",\n    forestgreen: \"228b22\",\n    fuchsia: \"ff00ff\",\n    gainsboro: \"dcdcdc\",\n    ghostwhite: \"f8f8ff\",\n    gold: \"ffd700\",\n    goldenrod: \"daa520\",\n    gray: \"808080\",\n    green: \"008000\",\n    greenyellow: \"adff2f\",\n    honeydew: \"f0fff0\",\n    hotpink: \"ff69b4\",\n    indianred: \"cd5c5c\",\n    indigo: \"4b0082\",\n    ivory: \"fffff0\",\n    khaki: \"f0e68c\",\n    lavender: \"e6e6fa\",\n    lavenderblush: \"fff0f5\",\n    lawngreen: \"7cfc00\",\n    lemonchiffon: \"fffacd\",\n    lightblue: \"add8e6\",\n    lightcoral: \"f08080\",\n    lightcyan: \"e0ffff\",\n    lightgoldenrodyellow: \"fafad2\",\n    lightgrey: \"d3d3d3\",\n    lightgreen: \"90ee90\",\n    lightpink: \"ffb6c1\",\n    lightsalmon: \"ffa07a\",\n    lightseagreen: \"20b2aa\",\n    lightskyblue: \"87cefa\",\n    lightslateblue: \"8470ff\",\n    lightslategray: \"778899\",\n    lightsteelblue: \"b0c4de\",\n    lightyellow: \"ffffe0\",\n    lime: \"00ff00\",\n    limegreen: \"32cd32\",\n    linen: \"faf0e6\",\n    magenta: \"ff00ff\",\n    maroon: \"800000\",\n    mediumaquamarine: \"66cdaa\",\n    mediumblue: \"0000cd\",\n    mediumorchid: \"ba55d3\",\n    mediumpurple: \"9370d8\",\n    mediumseagreen: \"3cb371\",\n    mediumslateblue: \"7b68ee\",\n    mediumspringgreen: \"00fa9a\",\n    mediumturquoise: \"48d1cc\",\n    mediumvioletred: \"c71585\",\n    midnightblue: \"191970\",\n    mintcream: \"f5fffa\",\n    mistyrose: \"ffe4e1\",\n    moccasin: \"ffe4b5\",\n    navajowhite: \"ffdead\",\n    navy: \"000080\",\n    oldlace: \"fdf5e6\",\n    olive: \"808000\",\n    olivedrab: \"6b8e23\",\n    orange: \"ffa500\",\n    orangered: \"ff4500\",\n    orchid: \"da70d6\",\n    palegoldenrod: \"eee8aa\",\n    palegreen: \"98fb98\",\n    paleturquoise: \"afeeee\",\n    palevioletred: \"d87093\",\n    papayawhip: \"ffefd5\",\n    peachpuff: \"ffdab9\",\n    peru: \"cd853f\",\n    pink: \"ffc0cb\",\n    plum: \"dda0dd\",\n    powderblue: \"b0e0e6\",\n    purple: \"800080\",\n    red: \"ff0000\",\n    rosybrown: \"bc8f8f\",\n    royalblue: \"4169e1\",\n    saddlebrown: \"8b4513\",\n    salmon: \"fa8072\",\n    sandybrown: \"f4a460\",\n    seagreen: \"2e8b57\",\n    seashell: \"fff5ee\",\n    sienna: \"a0522d\",\n    silver: \"c0c0c0\",\n    skyblue: \"87ceeb\",\n    slateblue: \"6a5acd\",\n    slategray: \"708090\",\n    snow: \"fffafa\",\n    springgreen: \"00ff7f\",\n    steelblue: \"4682b4\",\n    tan: \"d2b48c\",\n    teal: \"008080\",\n    thistle: \"d8bfd8\",\n    tomato: \"ff6347\",\n    turquoise: \"40e0d0\",\n    violet: \"ee82ee\",\n    violetred: \"d02090\",\n    wheat: \"f5deb3\",\n    white: \"ffffff\",\n    whitesmoke: \"f5f5f5\",\n    yellow: \"ffff00\",\n    yellowgreen: \"9acd32\"\n  };\n  color_string = simple_colors[color_string] || color_string;\n\n  // array of color definition objects\n  var color_defs = [\n    {\n      re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n      example: [\"rgb(123, 234, 45)\", \"rgb(255,234,245)\"],\n      process: function(bits) {\n        return [parseInt(bits[1]), parseInt(bits[2]), parseInt(bits[3])];\n      }\n    },\n    {\n      re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n      example: [\"#00ff00\", \"336699\"],\n      process: function(bits) {\n        return [\n          parseInt(bits[1], 16),\n          parseInt(bits[2], 16),\n          parseInt(bits[3], 16)\n        ];\n      }\n    },\n    {\n      re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n      example: [\"#fb0\", \"f0f\"],\n      process: function(bits) {\n        return [\n          parseInt(bits[1] + bits[1], 16),\n          parseInt(bits[2] + bits[2], 16),\n          parseInt(bits[3] + bits[3], 16)\n        ];\n      }\n    }\n  ];\n\n  // search through the definitions to find a match\n  for (var i = 0; i < color_defs.length; i++) {\n    var re = color_defs[i].re;\n    var processor = color_defs[i].process;\n    var bits = re.exec(color_string);\n    if (bits) {\n      channels = processor(bits);\n      this.r = channels[0];\n      this.g = channels[1];\n      this.b = channels[2];\n      this.ok = true;\n    }\n  }\n\n  // validate/cleanup values\n  this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r;\n  this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g;\n  this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b;\n\n  // some getters\n  this.toRGB = function() {\n    return \"rgb(\" + this.r + \", \" + this.g + \", \" + this.b + \")\";\n  };\n  this.toHex = function() {\n    var r = this.r.toString(16);\n    var g = this.g.toString(16);\n    var b = this.b.toString(16);\n    if (r.length == 1) r = \"0\" + r;\n    if (g.length == 1) g = \"0\" + g;\n    if (b.length == 1) b = \"0\" + b;\n    return \"#\" + r + g + b;\n  };\n}\n\nexport { RGBColor };\n","/**\n * @license\n * Joseph Myers does not specify a particular license for his work.\n *\n * Author: Joseph Myers\n * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js\n *\n * Modified by: Owen Leong\n */\n\nfunction md5cycle(x, k) {\n  var a = x[0],\n    b = x[1],\n    c = x[2],\n    d = x[3];\n\n  a = ff(a, b, c, d, k[0], 7, -680876936);\n  d = ff(d, a, b, c, k[1], 12, -389564586);\n  c = ff(c, d, a, b, k[2], 17, 606105819);\n  b = ff(b, c, d, a, k[3], 22, -1044525330);\n  a = ff(a, b, c, d, k[4], 7, -176418897);\n  d = ff(d, a, b, c, k[5], 12, 1200080426);\n  c = ff(c, d, a, b, k[6], 17, -1473231341);\n  b = ff(b, c, d, a, k[7], 22, -45705983);\n  a = ff(a, b, c, d, k[8], 7, 1770035416);\n  d = ff(d, a, b, c, k[9], 12, -1958414417);\n  c = ff(c, d, a, b, k[10], 17, -42063);\n  b = ff(b, c, d, a, k[11], 22, -1990404162);\n  a = ff(a, b, c, d, k[12], 7, 1804603682);\n  d = ff(d, a, b, c, k[13], 12, -40341101);\n  c = ff(c, d, a, b, k[14], 17, -1502002290);\n  b = ff(b, c, d, a, k[15], 22, 1236535329);\n\n  a = gg(a, b, c, d, k[1], 5, -165796510);\n  d = gg(d, a, b, c, k[6], 9, -1069501632);\n  c = gg(c, d, a, b, k[11], 14, 643717713);\n  b = gg(b, c, d, a, k[0], 20, -373897302);\n  a = gg(a, b, c, d, k[5], 5, -701558691);\n  d = gg(d, a, b, c, k[10], 9, 38016083);\n  c = gg(c, d, a, b, k[15], 14, -660478335);\n  b = gg(b, c, d, a, k[4], 20, -405537848);\n  a = gg(a, b, c, d, k[9], 5, 568446438);\n  d = gg(d, a, b, c, k[14], 9, -1019803690);\n  c = gg(c, d, a, b, k[3], 14, -187363961);\n  b = gg(b, c, d, a, k[8], 20, 1163531501);\n  a = gg(a, b, c, d, k[13], 5, -1444681467);\n  d = gg(d, a, b, c, k[2], 9, -51403784);\n  c = gg(c, d, a, b, k[7], 14, 1735328473);\n  b = gg(b, c, d, a, k[12], 20, -1926607734);\n\n  a = hh(a, b, c, d, k[5], 4, -378558);\n  d = hh(d, a, b, c, k[8], 11, -2022574463);\n  c = hh(c, d, a, b, k[11], 16, 1839030562);\n  b = hh(b, c, d, a, k[14], 23, -35309556);\n  a = hh(a, b, c, d, k[1], 4, -1530992060);\n  d = hh(d, a, b, c, k[4], 11, 1272893353);\n  c = hh(c, d, a, b, k[7], 16, -155497632);\n  b = hh(b, c, d, a, k[10], 23, -1094730640);\n  a = hh(a, b, c, d, k[13], 4, 681279174);\n  d = hh(d, a, b, c, k[0], 11, -358537222);\n  c = hh(c, d, a, b, k[3], 16, -722521979);\n  b = hh(b, c, d, a, k[6], 23, 76029189);\n  a = hh(a, b, c, d, k[9], 4, -640364487);\n  d = hh(d, a, b, c, k[12], 11, -421815835);\n  c = hh(c, d, a, b, k[15], 16, 530742520);\n  b = hh(b, c, d, a, k[2], 23, -995338651);\n\n  a = ii(a, b, c, d, k[0], 6, -198630844);\n  d = ii(d, a, b, c, k[7], 10, 1126891415);\n  c = ii(c, d, a, b, k[14], 15, -1416354905);\n  b = ii(b, c, d, a, k[5], 21, -57434055);\n  a = ii(a, b, c, d, k[12], 6, 1700485571);\n  d = ii(d, a, b, c, k[3], 10, -1894986606);\n  c = ii(c, d, a, b, k[10], 15, -1051523);\n  b = ii(b, c, d, a, k[1], 21, -2054922799);\n  a = ii(a, b, c, d, k[8], 6, 1873313359);\n  d = ii(d, a, b, c, k[15], 10, -30611744);\n  c = ii(c, d, a, b, k[6], 15, -1560198380);\n  b = ii(b, c, d, a, k[13], 21, 1309151649);\n  a = ii(a, b, c, d, k[4], 6, -145523070);\n  d = ii(d, a, b, c, k[11], 10, -1120210379);\n  c = ii(c, d, a, b, k[2], 15, 718787259);\n  b = ii(b, c, d, a, k[9], 21, -343485551);\n\n  x[0] = add32(a, x[0]);\n  x[1] = add32(b, x[1]);\n  x[2] = add32(c, x[2]);\n  x[3] = add32(d, x[3]);\n}\n\nfunction cmn(q, a, b, x, s, t) {\n  a = add32(add32(a, q), add32(x, t));\n  return add32((a << s) | (a >>> (32 - s)), b);\n}\n\nfunction ff(a, b, c, d, x, s, t) {\n  return cmn((b & c) | (~b & d), a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t) {\n  return cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t) {\n  return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t) {\n  return cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nfunction md51(s) {\n  // txt = '';\n  var n = s.length,\n    state = [1732584193, -271733879, -1732584194, 271733878],\n    i;\n  for (i = 64; i <= s.length; i += 64) {\n    md5cycle(state, md5blk(s.substring(i - 64, i)));\n  }\n  s = s.substring(i - 64);\n  var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n  for (i = 0; i < s.length; i++)\n    tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n  tail[i >> 2] |= 0x80 << (i % 4 << 3);\n  if (i > 55) {\n    md5cycle(state, tail);\n    for (i = 0; i < 16; i++) tail[i] = 0;\n  }\n  tail[14] = n * 8;\n  md5cycle(state, tail);\n  return state;\n}\n\n/* there needs to be support for Unicode here,\n * unless we pretend that we can redefine the MD-5\n * algorithm for multi-byte characters (perhaps\n * by adding every four 16-bit characters and\n * shortening the sum to 32 bits). Otherwise\n * I suggest performing MD-5 as if every character\n * was two bytes--e.g., 0040 0025 = @%--but then\n * how will an ordinary MD-5 sum be matched?\n * There is no way to standardize text to something\n * like UTF-8 before transformation; speed cost is\n * utterly prohibitive. The JavaScript standard\n * itself needs to look at this: it should start\n * providing access to strings as preformed UTF-8\n * 8-bit unsigned value arrays.\n */\nfunction md5blk(s) {\n  /* I figured global was faster.   */\n  var md5blks = [],\n    i; /* Andy King said do it this way. */\n  for (i = 0; i < 64; i += 4) {\n    md5blks[i >> 2] =\n      s.charCodeAt(i) +\n      (s.charCodeAt(i + 1) << 8) +\n      (s.charCodeAt(i + 2) << 16) +\n      (s.charCodeAt(i + 3) << 24);\n  }\n  return md5blks;\n}\n\nvar hex_chr = \"0123456789abcdef\".split(\"\");\n\nfunction rhex(n) {\n  var s = \"\",\n    j = 0;\n  for (; j < 4; j++)\n    s += hex_chr[(n >> (j * 8 + 4)) & 0x0f] + hex_chr[(n >> (j * 8)) & 0x0f];\n  return s;\n}\n\nfunction hex(x) {\n  for (var i = 0; i < x.length; i++) x[i] = rhex(x[i]);\n  return x.join(\"\");\n}\n\n// Converts a 4-byte number to byte string\nfunction singleToByteString(n) {\n  return String.fromCharCode(\n    (n & 0xff) >> 0,\n    (n & 0xff00) >> 8,\n    (n & 0xff0000) >> 16,\n    (n & 0xff000000) >> 24\n  );\n}\n\n// Converts an array of numbers to a byte string\nfunction toByteString(x) {\n  return x.map(singleToByteString).join(\"\");\n}\n\n// Returns the MD5 hash as a byte string\nfunction md5Bin(s) {\n  return toByteString(md51(s));\n}\n\n// Returns MD5 hash as a hex string\nfunction md5(s) {\n  return hex(md51(s));\n}\n\nvar md5Check = md5(\"hello\") != \"5d41402abc4b2a76b9719d911017c592\";\n\nfunction add32(a, b) {\n  if (md5Check) {\n    /* if the md5Check does not match\n     the expected value, we're dealing\n     with an old browser and need\n     this function. */\n    var lsw = (a & 0xffff) + (b & 0xffff),\n      msw = (a >> 16) + (b >> 16) + (lsw >> 16);\n    return (msw << 16) | (lsw & 0xffff);\n  } else {\n    /* this function is much faster,\n    so if possible we use it. Some IEs\n    are the only ones I know of that\n    need the idiotic second function,\n    generated by an if clause.  */\n    return (a + b) & 0xffffffff;\n  }\n}\n\nexport { md5, md5Bin };\n","/**\r\n * @license\r\n * FPDF is released under a permissive license: there is no usage restriction.\r\n * You may embed it freely in your application (commercial or not), with or\r\n * without modifications.\r\n *\r\n * Reference: http://www.fpdf.org/en/script/script37.php\r\n */\r\n\r\nfunction repeat(str, num) {\r\n  return new Array(num + 1).join(str);\r\n}\r\n\r\n/**\r\n * Converts a byte string to a hex string\r\n *\r\n * @name rc4\r\n * @function\r\n * @param {string} key Byte string of encryption key\r\n * @param {string} data Byte string of data to be encrypted\r\n * @returns {string} Encrypted string\r\n */\r\nfunction rc4(key, data) {\r\n  var lastKey, lastState;\r\n  if (key !== lastKey) {\r\n    var k = repeat(key, ((256 / key.length) >> 0) + 1);\r\n    var state = [];\r\n    for (var i = 0; i < 256; i++) {\r\n      state[i] = i;\r\n    }\r\n    var j = 0;\r\n    for (var i = 0; i < 256; i++) {\r\n      var t = state[i];\r\n      j = (j + t + k.charCodeAt(i)) % 256;\r\n      state[i] = state[j];\r\n      state[j] = t;\r\n    }\r\n    lastKey = key;\r\n    lastState = state;\r\n  } else {\r\n    state = lastState;\r\n  }\r\n  var length = data.length;\r\n  var a = 0;\r\n  var b = 0;\r\n  var out = \"\";\r\n  for (var i = 0; i < length; i++) {\r\n    a = (a + 1) % 256;\r\n    t = state[a];\r\n    b = (b + t) % 256;\r\n    state[a] = state[b];\r\n    state[b] = t;\r\n    k = state[(state[a] + state[b]) % 256];\r\n    out += String.fromCharCode(data.charCodeAt(i) ^ k);\r\n  }\r\n  return out;\r\n}\r\n\r\nexport { rc4 };\r\n","/**\r\n * @license\r\n * Licensed under the MIT License.\r\n * http://opensource.org/licenses/mit-license\r\n * Author: Owen Leong (@owenl131)\r\n * Date: 15 Oct 2020\r\n * References:\r\n * https://www.cs.cmu.edu/~dst/Adobe/Gallery/anon21jul01-pdf-encryption.txt\r\n * https://github.com/foliojs/pdfkit/blob/master/lib/security.js\r\n * http://www.fpdf.org/en/script/script37.php\r\n */\r\n\r\nimport { md5Bin } from \"./md5.js\";\r\nimport { rc4 } from \"./rc4.js\";\r\n\r\nvar permissionOptions = {\r\n  print: 4,\r\n  modify: 8,\r\n  copy: 16,\r\n  \"annot-forms\": 32\r\n};\r\n\r\n/**\r\n * Initializes encryption settings\r\n *\r\n * @name constructor\r\n * @function\r\n * @param {Array} permissions Permissions allowed for user, \"print\", \"modify\", \"copy\" and \"annot-forms\".\r\n * @param {String} userPassword Permissions apply to this user. Leaving this empty means the document\r\n *                              is not password protected but viewer has the above permissions.\r\n * @param {String} ownerPassword Owner has full functionalities to the file.\r\n * @param {String} fileId As hex string, should be same as the file ID in the trailer.\r\n * @example\r\n * var security = new PDFSecurity([\"print\"])\r\n */\r\nfunction PDFSecurity(permissions, userPassword, ownerPassword, fileId) {\r\n  this.v = 1; // algorithm 1, future work can add in more recent encryption schemes\r\n  this.r = 2; // revision 2\r\n\r\n  // set flags for what functionalities the user can access\r\n  let protection = 192;\r\n  permissions.forEach(function(perm) {\r\n    if (typeof permissionOptions.perm !== \"undefined\") {\r\n      throw new Error(\"Invalid permission: \" + perm);\r\n    }\r\n    protection += permissionOptions[perm];\r\n  });\r\n\r\n  // padding is used to pad the passwords to 32 bytes, also is hashed and stored in the final PDF\r\n  this.padding =\r\n    \"\\x28\\xBF\\x4E\\x5E\\x4E\\x75\\x8A\\x41\\x64\\x00\\x4E\\x56\\xFF\\xFA\\x01\\x08\" +\r\n    \"\\x2E\\x2E\\x00\\xB6\\xD0\\x68\\x3E\\x80\\x2F\\x0C\\xA9\\xFE\\x64\\x53\\x69\\x7A\";\r\n  let paddedUserPassword = (userPassword + this.padding).substr(0, 32);\r\n  let paddedOwnerPassword = (ownerPassword + this.padding).substr(0, 32);\r\n\r\n  this.O = this.processOwnerPassword(paddedUserPassword, paddedOwnerPassword);\r\n  this.P = -((protection ^ 255) + 1);\r\n  this.encryptionKey = md5Bin(\r\n    paddedUserPassword +\r\n      this.O +\r\n      this.lsbFirstWord(this.P) +\r\n      this.hexToBytes(fileId)\r\n  ).substr(0, 5);\r\n  this.U = rc4(this.encryptionKey, this.padding);\r\n}\r\n\r\n/**\r\n * Breaks down a 4-byte number into its individual bytes, with the least significant bit first\r\n *\r\n * @name lsbFirstWord\r\n * @function\r\n * @param {number} data 32-bit number\r\n * @returns {Array}\r\n */\r\nPDFSecurity.prototype.lsbFirstWord = function(data) {\r\n  return String.fromCharCode(\r\n    (data >> 0) & 0xff,\r\n    (data >> 8) & 0xff,\r\n    (data >> 16) & 0xff,\r\n    (data >> 24) & 0xff\r\n  );\r\n};\r\n\r\n/**\r\n * Converts a byte string to a hex string\r\n *\r\n * @name toHexString\r\n * @function\r\n * @param {String} byteString Byte string\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.toHexString = function(byteString) {\r\n  return byteString\r\n    .split(\"\")\r\n    .map(function(byte) {\r\n      return (\"0\" + (byte.charCodeAt(0) & 0xff).toString(16)).slice(-2);\r\n    })\r\n    .join(\"\");\r\n};\r\n\r\n/**\r\n * Converts a hex string to a byte string\r\n *\r\n * @name hexToBytes\r\n * @function\r\n * @param {String} hex Hex string\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.hexToBytes = function(hex) {\r\n  for (var bytes = [], c = 0; c < hex.length; c += 2)\r\n    bytes.push(String.fromCharCode(parseInt(hex.substr(c, 2), 16)));\r\n  return bytes.join(\"\");\r\n};\r\n\r\n/**\r\n * Computes the 'O' field in the encryption dictionary\r\n *\r\n * @name processOwnerPassword\r\n * @function\r\n * @param {String} paddedUserPassword Byte string of padded user password\r\n * @param {String} paddedOwnerPassword Byte string of padded owner password\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.processOwnerPassword = function(\r\n  paddedUserPassword,\r\n  paddedOwnerPassword\r\n) {\r\n  let key = md5Bin(paddedOwnerPassword).substr(0, 5);\r\n  return rc4(key, paddedUserPassword);\r\n};\r\n\r\n/**\r\n * Returns an encryptor function which can take in a byte string and returns the encrypted version\r\n *\r\n * @name encryptor\r\n * @function\r\n * @param {number} objectId\r\n * @param {number} generation Not sure what this is for, you can set it to 0\r\n * @returns {Function}\r\n * @example\r\n * out(\"stream\");\r\n * encryptor = security.encryptor(object.id, 0);\r\n * out(encryptor(data));\r\n * out(\"endstream\");\r\n */\r\nPDFSecurity.prototype.encryptor = function(objectId, generation) {\r\n  let key = md5Bin(\r\n    this.encryptionKey +\r\n      String.fromCharCode(\r\n        objectId & 0xff,\r\n        (objectId >> 8) & 0xff,\r\n        (objectId >> 16) & 0xff,\r\n        generation & 0xff,\r\n        (generation >> 8) & 0xff\r\n      )\r\n  ).substr(0, 10);\r\n  return function(data) {\r\n    return rc4(key, data);\r\n  };\r\n};\r\n\r\nexport { PDFSecurity };\r\n","/**\n * Convert string to `PDF Name Object`.\n * Detail: PDF Reference 1.3 - Chapter 3.2.4 Name Object\n * @param str\n */\nfunction toPDFName(str) {\n  // eslint-disable-next-line no-control-regex\n  if (/[^\\u0000-\\u00ff]/.test(str)) {\n    // non ascii string\n    throw new Error(\n      \"Invalid PDF Name Object: \" + str + \", Only accept ASCII characters.\"\n    );\n  }\n  var result = \"\",\n    strLength = str.length;\n  for (var i = 0; i < strLength; i++) {\n    var charCode = str.charCodeAt(i);\n    if (\n      charCode < 0x21 ||\n      charCode === 0x23 /* # */ ||\n      charCode === 0x25 /* % */ ||\n      charCode === 0x28 /* ( */ ||\n      charCode === 0x29 /* ) */ ||\n      charCode === 0x2f /* / */ ||\n      charCode === 0x3c /* < */ ||\n      charCode === 0x3e /* > */ ||\n      charCode === 0x5b /* [ */ ||\n      charCode === 0x5d /* ] */ ||\n      charCode === 0x7b /* { */ ||\n      charCode === 0x7d /* } */ ||\n      charCode > 0x7e\n    ) {\n      // Char    CharCode    hexStr   paddingHexStr    Result\n      // \"\\t\"    9           9        09               #09\n      // \" \"     32          20       20               #20\n      // \"©\"     169         a9       a9               #a9\n      var hexStr = charCode.toString(16),\n        paddingHexStr = (\"0\" + hexStr).slice(-2);\n\n      result += \"#\" + paddingHexStr;\n    } else {\n      // Other ASCII printable characters between 0x21 <= X <= 0x7e\n      result += str[i];\n    }\n  }\n  return result;\n}\n\nexport { toPDFName };\n","/* eslint-disable no-console */\r\n\r\nimport { saveAs } from \"./libs/FileSaver.js\";\r\nimport { globalObject } from \"./libs/globalObject.js\";\r\nimport { RGBColor } from \"./libs/rgbcolor.js\";\r\nimport { btoa } from \"./libs/AtobBtoa.js\";\r\nimport { console } from \"./libs/console.js\";\r\nimport { PDFSecurity } from \"./libs/pdfsecurity.js\";\r\nimport { toPDFName } from \"./libs/pdfname.js\";\r\n/**\r\n * jsPDF's Internal PubSub Implementation.\r\n * Backward compatible rewritten on 2014 by\r\n * Diego Casorran, https://github.com/diegocr\r\n *\r\n * @class\r\n * @name PubSub\r\n * @ignore\r\n */\r\nfunction PubSub(context) {\r\n  if (typeof context !== \"object\") {\r\n    throw new Error(\r\n      \"Invalid Context passed to initialize PubSub (jsPDF-module)\"\r\n    );\r\n  }\r\n  var topics = {};\r\n\r\n  this.subscribe = function(topic, callback, once) {\r\n    once = once || false;\r\n    if (\r\n      typeof topic !== \"string\" ||\r\n      typeof callback !== \"function\" ||\r\n      typeof once !== \"boolean\"\r\n    ) {\r\n      throw new Error(\r\n        \"Invalid arguments passed to PubSub.subscribe (jsPDF-module)\"\r\n      );\r\n    }\r\n\r\n    if (!topics.hasOwnProperty(topic)) {\r\n      topics[topic] = {};\r\n    }\r\n\r\n    var token = Math.random().toString(35);\r\n    topics[topic][token] = [callback, !!once];\r\n\r\n    return token;\r\n  };\r\n\r\n  this.unsubscribe = function(token) {\r\n    for (var topic in topics) {\r\n      if (topics[topic][token]) {\r\n        delete topics[topic][token];\r\n        if (Object.keys(topics[topic]).length === 0) {\r\n          delete topics[topic];\r\n        }\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  };\r\n\r\n  this.publish = function(topic) {\r\n    if (topics.hasOwnProperty(topic)) {\r\n      var args = Array.prototype.slice.call(arguments, 1),\r\n        tokens = [];\r\n\r\n      for (var token in topics[topic]) {\r\n        var sub = topics[topic][token];\r\n        try {\r\n          sub[0].apply(context, args);\r\n        } catch (ex) {\r\n          if (globalObject.console) {\r\n            console.error(\"jsPDF PubSub Error\", ex.message, ex);\r\n          }\r\n        }\r\n        if (sub[1]) tokens.push(token);\r\n      }\r\n      if (tokens.length) tokens.forEach(this.unsubscribe);\r\n    }\r\n  };\r\n\r\n  this.getTopics = function() {\r\n    return topics;\r\n  };\r\n}\r\n\r\nfunction GState(parameters) {\r\n  if (!(this instanceof GState)) {\r\n    return new GState(parameters);\r\n  }\r\n\r\n  /**\r\n   * @name GState#opacity\r\n   * @type {any}\r\n   */\r\n  /**\r\n   * @name GState#stroke-opacity\r\n   * @type {any}\r\n   */\r\n  var supported = \"opacity,stroke-opacity\".split(\",\");\r\n  for (var p in parameters) {\r\n    if (parameters.hasOwnProperty(p) && supported.indexOf(p) >= 0) {\r\n      this[p] = parameters[p];\r\n    }\r\n  }\r\n  /**\r\n   * @name GState#id\r\n   * @type {string}\r\n   */\r\n  this.id = \"\"; // set by addGState()\r\n  /**\r\n   * @name GState#objectNumber\r\n   * @type {number}\r\n   */\r\n  this.objectNumber = -1; // will be set by putGState()\r\n}\r\n\r\nGState.prototype.equals = function equals(other) {\r\n  var ignore = \"id,objectNumber,equals\";\r\n  var p;\r\n  if (!other || typeof other !== typeof this) return false;\r\n  var count = 0;\r\n  for (p in this) {\r\n    if (ignore.indexOf(p) >= 0) continue;\r\n    if (this.hasOwnProperty(p) && !other.hasOwnProperty(p)) return false;\r\n    if (this[p] !== other[p]) return false;\r\n    count++;\r\n  }\r\n  for (p in other) {\r\n    if (other.hasOwnProperty(p) && ignore.indexOf(p) < 0) count--;\r\n  }\r\n  return count === 0;\r\n};\r\n\r\nfunction Pattern(gState, matrix) {\r\n  this.gState = gState;\r\n  this.matrix = matrix;\r\n\r\n  this.id = \"\"; // set by addPattern()\r\n  this.objectNumber = -1; // will be set by putPattern()\r\n}\r\n\r\nfunction ShadingPattern(type, coords, colors, gState, matrix) {\r\n  if (!(this instanceof ShadingPattern)) {\r\n    return new ShadingPattern(type, coords, colors, gState, matrix);\r\n  }\r\n\r\n  // see putPattern() for information how they are realized\r\n  this.type = type === \"axial\" ? 2 : 3;\r\n  this.coords = coords;\r\n  this.colors = colors;\r\n\r\n  Pattern.call(this, gState, matrix);\r\n}\r\n\r\nfunction TilingPattern(boundingBox, xStep, yStep, gState, matrix) {\r\n  if (!(this instanceof TilingPattern)) {\r\n    return new TilingPattern(boundingBox, xStep, yStep, gState, matrix);\r\n  }\r\n\r\n  this.boundingBox = boundingBox;\r\n  this.xStep = xStep;\r\n  this.yStep = yStep;\r\n\r\n  this.stream = \"\"; // set by endTilingPattern();\r\n\r\n  this.cloneIndex = 0;\r\n\r\n  Pattern.call(this, gState, matrix);\r\n}\r\n\r\n/**\r\n * Creates new jsPDF document object instance.\r\n * @name jsPDF\r\n * @class\r\n * @param {Object} [options] - Collection of settings initializing the jsPDF-instance\r\n * @param {string} [options.orientation=portrait] - Orientation of the first page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" or \"l\").<br />\r\n * @param {string} [options.unit=mm] Measurement unit (base unit) to be used when coordinates are specified.<br />\r\n * Possible values are \"pt\" (points), \"mm\", \"cm\", \"in\", \"px\", \"pc\", \"em\" or \"ex\". Note that in order to get the correct scaling for \"px\"\r\n * units, you need to enable the hotfix \"px_scaling\" by setting options.hotfixes = [\"px_scaling\"].\r\n * @param {string/Array} [options.format=a4] The format of the first page. Can be:<ul><li>a0 - a10</li><li>b0 - b10</li><li>c0 - c10</li><li>dl</li><li>letter</li><li>government-letter</li><li>legal</li><li>junior-legal</li><li>ledger</li><li>tabloid</li><li>credit-card</li></ul><br />\r\n * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n * @param {boolean} [options.putOnlyUsedFonts=false] Only put fonts into the PDF, which were used.\r\n * @param {boolean} [options.compress=false] Compress the generated PDF.\r\n * @param {number} [options.precision=16] Precision of the element-positions.\r\n * @param {number} [options.userUnit=1.0] Not to be confused with the base unit. Please inform yourself before you use it.\r\n * @param {string[]} [options.hotfixes] An array of strings to enable hotfixes such as correct pixel scaling.\r\n * @param {Object} [options.encryption]\r\n * @param {string} [options.encryption.userPassword] Password for the user bound by the given permissions list.\r\n * @param {string} [options.encryption.ownerPassword] Both userPassword and ownerPassword should be set for proper authentication.\r\n * @param {string[]} [options.encryption.userPermissions] Array of permissions \"print\", \"modify\", \"copy\", \"annot-forms\", accessible by the user.\r\n * @param {number|\"smart\"} [options.floatPrecision=16]\r\n * @returns {jsPDF} jsPDF-instance\r\n * @description\r\n * ```\r\n * {\r\n *  orientation: 'p',\r\n *  unit: 'mm',\r\n *  format: 'a4',\r\n *  putOnlyUsedFonts:true,\r\n *  floatPrecision: 16 // or \"smart\", default is 16\r\n * }\r\n * ```\r\n *\r\n * @constructor\r\n */\r\nfunction jsPDF(options) {\r\n  var orientation = typeof arguments[0] === \"string\" ? arguments[0] : \"p\";\r\n  var unit = arguments[1];\r\n  var format = arguments[2];\r\n  var compressPdf = arguments[3];\r\n  var filters = [];\r\n  var userUnit = 1.0;\r\n  var precision;\r\n  var floatPrecision = 16;\r\n  var defaultPathOperation = \"S\";\r\n  var encryptionOptions = null;\r\n\r\n  options = options || {};\r\n\r\n  if (typeof options === \"object\") {\r\n    orientation = options.orientation;\r\n    unit = options.unit || unit;\r\n    format = options.format || format;\r\n    compressPdf = options.compress || options.compressPdf || compressPdf;\r\n    encryptionOptions = options.encryption || null;\r\n    if (encryptionOptions !== null) {\r\n      encryptionOptions.userPassword = encryptionOptions.userPassword || \"\";\r\n      encryptionOptions.ownerPassword = encryptionOptions.ownerPassword || \"\";\r\n      encryptionOptions.userPermissions =\r\n        encryptionOptions.userPermissions || [];\r\n    }\r\n    userUnit =\r\n      typeof options.userUnit === \"number\" ? Math.abs(options.userUnit) : 1.0;\r\n    if (typeof options.precision !== \"undefined\") {\r\n      precision = options.precision;\r\n    }\r\n    if (typeof options.floatPrecision !== \"undefined\") {\r\n      floatPrecision = options.floatPrecision;\r\n    }\r\n    defaultPathOperation = options.defaultPathOperation || \"S\";\r\n  }\r\n\r\n  filters =\r\n    options.filters || (compressPdf === true ? [\"FlateEncode\"] : filters);\r\n\r\n  unit = unit || \"mm\";\r\n  orientation = (\"\" + (orientation || \"P\")).toLowerCase();\r\n  var putOnlyUsedFonts = options.putOnlyUsedFonts || false;\r\n  var usedFonts = {};\r\n\r\n  var API = {\r\n    internal: {},\r\n    __private__: {}\r\n  };\r\n\r\n  API.__private__.PubSub = PubSub;\r\n\r\n  var pdfVersion = \"1.3\";\r\n  var getPdfVersion = (API.__private__.getPdfVersion = function() {\r\n    return pdfVersion;\r\n  });\r\n\r\n  API.__private__.setPdfVersion = function(value) {\r\n    pdfVersion = value;\r\n  };\r\n\r\n  // Size in pt of various paper formats\r\n  var pageFormats = {\r\n    a0: [2383.94, 3370.39],\r\n    a1: [1683.78, 2383.94],\r\n    a2: [1190.55, 1683.78],\r\n    a3: [841.89, 1190.55],\r\n    a4: [595.28, 841.89],\r\n    a5: [419.53, 595.28],\r\n    a6: [297.64, 419.53],\r\n    a7: [209.76, 297.64],\r\n    a8: [147.4, 209.76],\r\n    a9: [104.88, 147.4],\r\n    a10: [73.7, 104.88],\r\n    b0: [2834.65, 4008.19],\r\n    b1: [2004.09, 2834.65],\r\n    b2: [1417.32, 2004.09],\r\n    b3: [1000.63, 1417.32],\r\n    b4: [708.66, 1000.63],\r\n    b5: [498.9, 708.66],\r\n    b6: [354.33, 498.9],\r\n    b7: [249.45, 354.33],\r\n    b8: [175.75, 249.45],\r\n    b9: [124.72, 175.75],\r\n    b10: [87.87, 124.72],\r\n    c0: [2599.37, 3676.54],\r\n    c1: [1836.85, 2599.37],\r\n    c2: [1298.27, 1836.85],\r\n    c3: [918.43, 1298.27],\r\n    c4: [649.13, 918.43],\r\n    c5: [459.21, 649.13],\r\n    c6: [323.15, 459.21],\r\n    c7: [229.61, 323.15],\r\n    c8: [161.57, 229.61],\r\n    c9: [113.39, 161.57],\r\n    c10: [79.37, 113.39],\r\n    dl: [311.81, 623.62],\r\n    letter: [612, 792],\r\n    \"government-letter\": [576, 756],\r\n    legal: [612, 1008],\r\n    \"junior-legal\": [576, 360],\r\n    ledger: [1224, 792],\r\n    tabloid: [792, 1224],\r\n    \"credit-card\": [153, 243]\r\n  };\r\n\r\n  API.__private__.getPageFormats = function() {\r\n    return pageFormats;\r\n  };\r\n\r\n  var getPageFormat = (API.__private__.getPageFormat = function(value) {\r\n    return pageFormats[value];\r\n  });\r\n\r\n  format = format || \"a4\";\r\n\r\n  var ApiMode = {\r\n    COMPAT: \"compat\",\r\n    ADVANCED: \"advanced\"\r\n  };\r\n  var apiMode = ApiMode.COMPAT;\r\n\r\n  function advancedAPI() {\r\n    // prepend global change of basis matrix\r\n    // (Now, instead of converting every coordinate to the pdf coordinate system, we apply a matrix\r\n    // that does this job for us (however, texts, images and similar objects must be drawn bottom up))\r\n    this.saveGraphicsState();\r\n    out(\r\n      new Matrix(\r\n        scaleFactor,\r\n        0,\r\n        0,\r\n        -scaleFactor,\r\n        0,\r\n        getPageHeight() * scaleFactor\r\n      ).toString() + \" cm\"\r\n    );\r\n    this.setFontSize(this.getFontSize() / scaleFactor);\r\n\r\n    // The default in MrRio's implementation is \"S\" (stroke), whereas the default in the yWorks implementation\r\n    // was \"n\" (none). Although this has nothing to do with transforms, we should use the API switch here.\r\n    defaultPathOperation = \"n\";\r\n\r\n    apiMode = ApiMode.ADVANCED;\r\n  }\r\n\r\n  function compatAPI() {\r\n    this.restoreGraphicsState();\r\n    defaultPathOperation = \"S\";\r\n    apiMode = ApiMode.COMPAT;\r\n  }\r\n\r\n  /**\r\n   * @function combineFontStyleAndFontWeight\r\n   * @param {string} fontStyle Fontstyle or variant. Example: \"italic\".\r\n   * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n   * @returns {string}\r\n   * @private\r\n   */\r\n  var combineFontStyleAndFontWeight = (API.__private__.combineFontStyleAndFontWeight = function(\r\n    fontStyle,\r\n    fontWeight\r\n  ) {\r\n    if (\r\n      (fontStyle == \"bold\" && fontWeight == \"normal\") ||\r\n      (fontStyle == \"bold\" && fontWeight == 400) ||\r\n      (fontStyle == \"normal\" && fontWeight == \"italic\") ||\r\n      (fontStyle == \"bold\" && fontWeight == \"italic\")\r\n    ) {\r\n      throw new Error(\"Invalid Combination of fontweight and fontstyle\");\r\n    }\r\n    if (fontWeight) {\r\n      fontStyle =\r\n        fontWeight == 400 || fontWeight === \"normal\"\r\n          ? fontStyle === \"italic\"\r\n            ? \"italic\"\r\n            : \"normal\"\r\n          : (fontWeight == 700 || fontWeight === \"bold\") &&\r\n            fontStyle === \"normal\"\r\n          ? \"bold\"\r\n          : (fontWeight == 700 ? \"bold\" : fontWeight) + \"\" + fontStyle;\r\n    }\r\n    return fontStyle;\r\n  });\r\n\r\n  /**\r\n   * @callback ApiSwitchBody\r\n   * @param {jsPDF} pdf\r\n   */\r\n\r\n  /**\r\n   * For compatibility reasons jsPDF offers two API modes which differ in the way they convert between the the usual\r\n   * screen coordinates and the PDF coordinate system.\r\n   *   - \"compat\": Offers full compatibility across all plugins but does not allow arbitrary transforms\r\n   *   - \"advanced\": Allows arbitrary transforms and more advanced features like pattern fills. Some plugins might\r\n   *     not support this mode, though.\r\n   * Initial mode is \"compat\".\r\n   *\r\n   * You can either provide a callback to the body argument, which means that jsPDF will automatically switch back to\r\n   * the original API mode afterwards; or you can omit the callback and switch back manually using {@link compatAPI}.\r\n   *\r\n   * Note, that the calls to {@link saveGraphicsState} and {@link restoreGraphicsState} need to be balanced within the\r\n   * callback or between calls of this method and its counterpart {@link compatAPI}. Calls to {@link beginFormObject}\r\n   * or {@link beginTilingPattern} need to be closed by their counterparts before switching back to \"compat\" API mode.\r\n   *\r\n   * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched.\r\n   * The API mode will be switched back automatically afterwards.\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name advancedAPI\r\n   */\r\n  API.advancedAPI = function(body) {\r\n    var doSwitch = apiMode === ApiMode.COMPAT;\r\n\r\n    if (doSwitch) {\r\n      advancedAPI.call(this);\r\n    }\r\n\r\n    if (typeof body !== \"function\") {\r\n      return this;\r\n    }\r\n\r\n    body(this);\r\n\r\n    if (doSwitch) {\r\n      compatAPI.call(this);\r\n    }\r\n\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Switches to \"compat\" API mode. See {@link advancedAPI} for more details.\r\n   *\r\n   * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched.\r\n   * The API mode will be switched back automatically afterwards.\r\n   * @return {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name compatApi\r\n   */\r\n  API.compatAPI = function(body) {\r\n    var doSwitch = apiMode === ApiMode.ADVANCED;\r\n\r\n    if (doSwitch) {\r\n      compatAPI.call(this);\r\n    }\r\n\r\n    if (typeof body !== \"function\") {\r\n      return this;\r\n    }\r\n\r\n    body(this);\r\n\r\n    if (doSwitch) {\r\n      advancedAPI.call(this);\r\n    }\r\n\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * @return {boolean} True iff the current API mode is \"advanced\". See {@link advancedAPI}.\r\n   * @memberof jsPDF#\r\n   * @name isAdvancedAPI\r\n   */\r\n  API.isAdvancedAPI = function() {\r\n    return apiMode === ApiMode.ADVANCED;\r\n  };\r\n\r\n  var advancedApiModeTrap = function(methodName) {\r\n    if (apiMode !== ApiMode.ADVANCED) {\r\n      throw new Error(\r\n        methodName +\r\n          \" is only available in 'advanced' API mode. \" +\r\n          \"You need to call advancedAPI() first.\"\r\n      );\r\n    }\r\n  };\r\n\r\n  var roundToPrecision = (API.roundToPrecision = API.__private__.roundToPrecision = function(\r\n    number,\r\n    parmPrecision\r\n  ) {\r\n    var tmpPrecision = precision || parmPrecision;\r\n    if (isNaN(number) || isNaN(tmpPrecision)) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.roundToPrecision\");\r\n    }\r\n    return number.toFixed(tmpPrecision).replace(/0+$/, \"\");\r\n  });\r\n\r\n  // high precision float\r\n  var hpf;\r\n  if (typeof floatPrecision === \"number\") {\r\n    hpf = API.hpf = API.__private__.hpf = function(number) {\r\n      if (isNaN(number)) {\r\n        throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n      }\r\n      return roundToPrecision(number, floatPrecision);\r\n    };\r\n  } else if (floatPrecision === \"smart\") {\r\n    hpf = API.hpf = API.__private__.hpf = function(number) {\r\n      if (isNaN(number)) {\r\n        throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n      }\r\n      if (number > -1 && number < 1) {\r\n        return roundToPrecision(number, 16);\r\n      } else {\r\n        return roundToPrecision(number, 5);\r\n      }\r\n    };\r\n  } else {\r\n    hpf = API.hpf = API.__private__.hpf = function(number) {\r\n      if (isNaN(number)) {\r\n        throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n      }\r\n      return roundToPrecision(number, 16);\r\n    };\r\n  }\r\n  var f2 = (API.f2 = API.__private__.f2 = function(number) {\r\n    if (isNaN(number)) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.f2\");\r\n    }\r\n    return roundToPrecision(number, 2);\r\n  });\r\n\r\n  var f3 = (API.__private__.f3 = function(number) {\r\n    if (isNaN(number)) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.f3\");\r\n    }\r\n    return roundToPrecision(number, 3);\r\n  });\r\n\r\n  var scale = (API.scale = API.__private__.scale = function(number) {\r\n    if (isNaN(number)) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.scale\");\r\n    }\r\n    if (apiMode === ApiMode.COMPAT) {\r\n      return number * scaleFactor;\r\n    } else if (apiMode === ApiMode.ADVANCED) {\r\n      return number;\r\n    }\r\n  });\r\n\r\n  var transformY = function(y) {\r\n    if (apiMode === ApiMode.COMPAT) {\r\n      return getPageHeight() - y;\r\n    } else if (apiMode === ApiMode.ADVANCED) {\r\n      return y;\r\n    }\r\n  };\r\n\r\n  var transformScaleY = function(y) {\r\n    return scale(transformY(y));\r\n  };\r\n\r\n  /**\r\n   * @name setPrecision\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   * @param {string} precision\r\n   * @returns {jsPDF}\r\n   */\r\n  API.__private__.setPrecision = API.setPrecision = function(value) {\r\n    if (typeof parseInt(value, 10) === \"number\") {\r\n      precision = parseInt(value, 10);\r\n    }\r\n  };\r\n\r\n  var fileId = \"00000000000000000000000000000000\";\r\n\r\n  var getFileId = (API.__private__.getFileId = function() {\r\n    return fileId;\r\n  });\r\n\r\n  var setFileId = (API.__private__.setFileId = function(value) {\r\n    if (typeof value !== \"undefined\" && /^[a-fA-F0-9]{32}$/.test(value)) {\r\n      fileId = value.toUpperCase();\r\n    } else {\r\n      fileId = fileId\r\n        .split(\"\")\r\n        .map(function() {\r\n          return \"ABCDEF0123456789\".charAt(Math.floor(Math.random() * 16));\r\n        })\r\n        .join(\"\");\r\n    }\r\n\r\n    if (encryptionOptions !== null) {\r\n      encryption = new PDFSecurity(\r\n        encryptionOptions.userPermissions,\r\n        encryptionOptions.userPassword,\r\n        encryptionOptions.ownerPassword,\r\n        fileId\r\n      );\r\n    }\r\n    return fileId;\r\n  });\r\n\r\n  /**\r\n   * @name setFileId\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   * @param {string} value GUID.\r\n   * @returns {jsPDF}\r\n   */\r\n  API.setFileId = function(value) {\r\n    setFileId(value);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * @name getFileId\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   *\r\n   * @returns {string} GUID.\r\n   */\r\n  API.getFileId = function() {\r\n    return getFileId();\r\n  };\r\n\r\n  var creationDate;\r\n\r\n  var convertDateToPDFDate = (API.__private__.convertDateToPDFDate = function(\r\n    parmDate\r\n  ) {\r\n    var result = \"\";\r\n    var tzoffset = parmDate.getTimezoneOffset(),\r\n      tzsign = tzoffset < 0 ? \"+\" : \"-\",\r\n      tzhour = Math.floor(Math.abs(tzoffset / 60)),\r\n      tzmin = Math.abs(tzoffset % 60),\r\n      timeZoneString = [tzsign, padd2(tzhour), \"'\", padd2(tzmin), \"'\"].join(\"\");\r\n\r\n    result = [\r\n      \"D:\",\r\n      parmDate.getFullYear(),\r\n      padd2(parmDate.getMonth() + 1),\r\n      padd2(parmDate.getDate()),\r\n      padd2(parmDate.getHours()),\r\n      padd2(parmDate.getMinutes()),\r\n      padd2(parmDate.getSeconds()),\r\n      timeZoneString\r\n    ].join(\"\");\r\n    return result;\r\n  });\r\n\r\n  var convertPDFDateToDate = (API.__private__.convertPDFDateToDate = function(\r\n    parmPDFDate\r\n  ) {\r\n    var year = parseInt(parmPDFDate.substr(2, 4), 10);\r\n    var month = parseInt(parmPDFDate.substr(6, 2), 10) - 1;\r\n    var date = parseInt(parmPDFDate.substr(8, 2), 10);\r\n    var hour = parseInt(parmPDFDate.substr(10, 2), 10);\r\n    var minutes = parseInt(parmPDFDate.substr(12, 2), 10);\r\n    var seconds = parseInt(parmPDFDate.substr(14, 2), 10);\r\n    // var timeZoneHour = parseInt(parmPDFDate.substr(16, 2), 10);\r\n    // var timeZoneMinutes = parseInt(parmPDFDate.substr(20, 2), 10);\r\n\r\n    var resultingDate = new Date(year, month, date, hour, minutes, seconds, 0);\r\n    return resultingDate;\r\n  });\r\n\r\n  var setCreationDate = (API.__private__.setCreationDate = function(date) {\r\n    var tmpCreationDateString;\r\n    var regexPDFCreationDate = /^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\\+0[0-9]|\\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/;\r\n    if (typeof date === \"undefined\") {\r\n      date = new Date();\r\n    }\r\n\r\n    if (date instanceof Date) {\r\n      tmpCreationDateString = convertDateToPDFDate(date);\r\n    } else if (regexPDFCreationDate.test(date)) {\r\n      tmpCreationDateString = date;\r\n    } else {\r\n      throw new Error(\"Invalid argument passed to jsPDF.setCreationDate\");\r\n    }\r\n    creationDate = tmpCreationDateString;\r\n    return creationDate;\r\n  });\r\n\r\n  var getCreationDate = (API.__private__.getCreationDate = function(type) {\r\n    var result = creationDate;\r\n    if (type === \"jsDate\") {\r\n      result = convertPDFDateToDate(creationDate);\r\n    }\r\n    return result;\r\n  });\r\n\r\n  /**\r\n   * @name setCreationDate\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   * @param {Object} date\r\n   * @returns {jsPDF}\r\n   */\r\n  API.setCreationDate = function(date) {\r\n    setCreationDate(date);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * @name getCreationDate\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   * @param {Object} type\r\n   * @returns {Object}\r\n   */\r\n  API.getCreationDate = function(type) {\r\n    return getCreationDate(type);\r\n  };\r\n\r\n  var padd2 = (API.__private__.padd2 = function(number) {\r\n    return (\"0\" + parseInt(number)).slice(-2);\r\n  });\r\n\r\n  var padd2Hex = (API.__private__.padd2Hex = function(hexString) {\r\n    hexString = hexString.toString();\r\n    return (\"00\" + hexString).substr(hexString.length);\r\n  });\r\n\r\n  var objectNumber = 0; // 'n' Current object number\r\n  var offsets = []; // List of offsets. Activated and reset by buildDocument(). Pupulated by various calls buildDocument makes.\r\n  var content = [];\r\n  var contentLength = 0;\r\n  var additionalObjects = [];\r\n\r\n  var pages = [];\r\n  var currentPage;\r\n  var hasCustomDestination = false;\r\n  var outputDestination = content;\r\n\r\n  var resetDocument = function() {\r\n    //reset fields relevant for objectNumber generation and xref.\r\n    objectNumber = 0;\r\n    contentLength = 0;\r\n    content = [];\r\n    offsets = [];\r\n    additionalObjects = [];\r\n\r\n    rootDictionaryObjId = newObjectDeferred();\r\n    resourceDictionaryObjId = newObjectDeferred();\r\n  };\r\n\r\n  API.__private__.setCustomOutputDestination = function(destination) {\r\n    hasCustomDestination = true;\r\n    outputDestination = destination;\r\n  };\r\n  var setOutputDestination = function(destination) {\r\n    if (!hasCustomDestination) {\r\n      outputDestination = destination;\r\n    }\r\n  };\r\n\r\n  API.__private__.resetCustomOutputDestination = function() {\r\n    hasCustomDestination = false;\r\n    outputDestination = content;\r\n  };\r\n\r\n  var out = (API.__private__.out = function(string) {\r\n    string = string.toString();\r\n    contentLength += string.length + 1;\r\n    outputDestination.push(string);\r\n\r\n    return outputDestination;\r\n  });\r\n\r\n  var write = (API.__private__.write = function(value) {\r\n    return out(\r\n      arguments.length === 1\r\n        ? value.toString()\r\n        : Array.prototype.join.call(arguments, \" \")\r\n    );\r\n  });\r\n\r\n  var getArrayBuffer = (API.__private__.getArrayBuffer = function(data) {\r\n    var len = data.length,\r\n      ab = new ArrayBuffer(len),\r\n      u8 = new Uint8Array(ab);\r\n\r\n    while (len--) u8[len] = data.charCodeAt(len);\r\n    return ab;\r\n  });\r\n\r\n  var standardFonts = [\r\n    [\"Helvetica\", \"helvetica\", \"normal\", \"WinAnsiEncoding\"],\r\n    [\"Helvetica-Bold\", \"helvetica\", \"bold\", \"WinAnsiEncoding\"],\r\n    [\"Helvetica-Oblique\", \"helvetica\", \"italic\", \"WinAnsiEncoding\"],\r\n    [\"Helvetica-BoldOblique\", \"helvetica\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n    [\"Courier\", \"courier\", \"normal\", \"WinAnsiEncoding\"],\r\n    [\"Courier-Bold\", \"courier\", \"bold\", \"WinAnsiEncoding\"],\r\n    [\"Courier-Oblique\", \"courier\", \"italic\", \"WinAnsiEncoding\"],\r\n    [\"Courier-BoldOblique\", \"courier\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n    [\"Times-Roman\", \"times\", \"normal\", \"WinAnsiEncoding\"],\r\n    [\"Times-Bold\", \"times\", \"bold\", \"WinAnsiEncoding\"],\r\n    [\"Times-Italic\", \"times\", \"italic\", \"WinAnsiEncoding\"],\r\n    [\"Times-BoldItalic\", \"times\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n    [\"ZapfDingbats\", \"zapfdingbats\", \"normal\", null],\r\n    [\"Symbol\", \"symbol\", \"normal\", null]\r\n  ];\r\n\r\n  API.__private__.getStandardFonts = function() {\r\n    return standardFonts;\r\n  };\r\n\r\n  var activeFontSize = options.fontSize || 16;\r\n\r\n  /**\r\n   * Sets font size for upcoming text elements.\r\n   *\r\n   * @param {number} size Font size in points.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setFontSize\r\n   */\r\n  API.__private__.setFontSize = API.setFontSize = function(size) {\r\n    if (apiMode === ApiMode.ADVANCED) {\r\n      activeFontSize = size / scaleFactor;\r\n    } else {\r\n      activeFontSize = size;\r\n    }\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Gets the fontsize for upcoming text elements.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {number}\r\n   * @memberof jsPDF#\r\n   * @name getFontSize\r\n   */\r\n  var getFontSize = (API.__private__.getFontSize = API.getFontSize = function() {\r\n    if (apiMode === ApiMode.COMPAT) {\r\n      return activeFontSize;\r\n    } else {\r\n      return activeFontSize * scaleFactor;\r\n    }\r\n  });\r\n\r\n  var R2L = options.R2L || false;\r\n\r\n  /**\r\n   * Set value of R2L functionality.\r\n   *\r\n   * @param {boolean} value\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF} jsPDF-instance\r\n   * @memberof jsPDF#\r\n   * @name setR2L\r\n   */\r\n  API.__private__.setR2L = API.setR2L = function(value) {\r\n    R2L = value;\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Get value of R2L functionality.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {boolean} jsPDF-instance\r\n   * @memberof jsPDF#\r\n   * @name getR2L\r\n   */\r\n  API.__private__.getR2L = API.getR2L = function() {\r\n    return R2L;\r\n  };\r\n\r\n  var zoomMode; // default: 1;\r\n\r\n  var setZoomMode = (API.__private__.setZoomMode = function(zoom) {\r\n    var validZoomModes = [\r\n      undefined,\r\n      null,\r\n      \"fullwidth\",\r\n      \"fullheight\",\r\n      \"fullpage\",\r\n      \"original\"\r\n    ];\r\n\r\n    if (/^(?:\\d+\\.\\d*|\\d*\\.\\d+|\\d+)%$/.test(zoom)) {\r\n      zoomMode = zoom;\r\n    } else if (!isNaN(zoom)) {\r\n      zoomMode = parseInt(zoom, 10);\r\n    } else if (validZoomModes.indexOf(zoom) !== -1) {\r\n      zoomMode = zoom;\r\n    } else {\r\n      throw new Error(\r\n        'zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. \"' +\r\n          zoom +\r\n          '\" is not recognized.'\r\n      );\r\n    }\r\n  });\r\n\r\n  API.__private__.getZoomMode = function() {\r\n    return zoomMode;\r\n  };\r\n\r\n  var pageMode; // default: 'UseOutlines';\r\n  var setPageMode = (API.__private__.setPageMode = function(pmode) {\r\n    var validPageModes = [\r\n      undefined,\r\n      null,\r\n      \"UseNone\",\r\n      \"UseOutlines\",\r\n      \"UseThumbs\",\r\n      \"FullScreen\"\r\n    ];\r\n\r\n    if (validPageModes.indexOf(pmode) == -1) {\r\n      throw new Error(\r\n        'Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. \"' +\r\n          pmode +\r\n          '\" is not recognized.'\r\n      );\r\n    }\r\n    pageMode = pmode;\r\n  });\r\n\r\n  API.__private__.getPageMode = function() {\r\n    return pageMode;\r\n  };\r\n\r\n  var layoutMode; // default: 'continuous';\r\n  var setLayoutMode = (API.__private__.setLayoutMode = function(layout) {\r\n    var validLayoutModes = [\r\n      undefined,\r\n      null,\r\n      \"continuous\",\r\n      \"single\",\r\n      \"twoleft\",\r\n      \"tworight\",\r\n      \"two\"\r\n    ];\r\n\r\n    if (validLayoutModes.indexOf(layout) == -1) {\r\n      throw new Error(\r\n        'Layout mode must be one of continuous, single, twoleft, tworight. \"' +\r\n          layout +\r\n          '\" is not recognized.'\r\n      );\r\n    }\r\n    layoutMode = layout;\r\n  });\r\n\r\n  API.__private__.getLayoutMode = function() {\r\n    return layoutMode;\r\n  };\r\n\r\n  /**\r\n   * Set the display mode options of the page like zoom and layout.\r\n   *\r\n   * @name setDisplayMode\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   * @param {integer|String} zoom   You can pass an integer or percentage as\r\n   * a string. 2 will scale the document up 2x, '200%' will scale up by the\r\n   * same amount. You can also set it to 'fullwidth', 'fullheight',\r\n   * 'fullpage', or 'original'.\r\n   *\r\n   * Only certain PDF readers support this, such as Adobe Acrobat.\r\n   *\r\n   * @param {string} layout Layout mode can be: 'continuous' - this is the\r\n   * default continuous scroll. 'single' - the single page mode only shows one\r\n   * page at a time. 'twoleft' - two column left mode, first page starts on\r\n   * the left, and 'tworight' - pages are laid out in two columns, with the\r\n   * first page on the right. This would be used for books.\r\n   * @param {string} pmode 'UseOutlines' - it shows the\r\n   * outline of the document on the left. 'UseThumbs' - shows thumbnails along\r\n   * the left. 'FullScreen' - prompts the user to enter fullscreen mode.\r\n   *\r\n   * @returns {jsPDF}\r\n   */\r\n  API.__private__.setDisplayMode = API.setDisplayMode = function(\r\n    zoom,\r\n    layout,\r\n    pmode\r\n  ) {\r\n    setZoomMode(zoom);\r\n    setLayoutMode(layout);\r\n    setPageMode(pmode);\r\n    return this;\r\n  };\r\n\r\n  var documentProperties = {\r\n    title: \"\",\r\n    subject: \"\",\r\n    author: \"\",\r\n    keywords: \"\",\r\n    creator: \"\"\r\n  };\r\n\r\n  API.__private__.getDocumentProperty = function(key) {\r\n    if (Object.keys(documentProperties).indexOf(key) === -1) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.getDocumentProperty\");\r\n    }\r\n    return documentProperties[key];\r\n  };\r\n\r\n  API.__private__.getDocumentProperties = function() {\r\n    return documentProperties;\r\n  };\r\n\r\n  /**\r\n   * Adds a properties to the PDF document.\r\n   *\r\n   * @param {Object} A property_name-to-property_value object structure.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setDocumentProperties\r\n   */\r\n  API.__private__.setDocumentProperties = API.setProperties = API.setDocumentProperties = function(\r\n    properties\r\n  ) {\r\n    // copying only those properties we can render.\r\n    for (var property in documentProperties) {\r\n      if (documentProperties.hasOwnProperty(property) && properties[property]) {\r\n        documentProperties[property] = properties[property];\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  API.__private__.setDocumentProperty = function(key, value) {\r\n    if (Object.keys(documentProperties).indexOf(key) === -1) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.setDocumentProperty\");\r\n    }\r\n    return (documentProperties[key] = value);\r\n  };\r\n\r\n  var fonts = {}; // collection of font objects, where key is fontKey - a dynamically created label for a given font.\r\n  var fontmap = {}; // mapping structure fontName > fontStyle > font key - performance layer. See addFont()\r\n  var activeFontKey; // will be string representing the KEY of the font as combination of fontName + fontStyle\r\n  var fontStateStack = []; //\r\n  var patterns = {}; // collection of pattern objects\r\n  var patternMap = {}; // see fonts\r\n  var gStates = {}; // collection of graphic state objects\r\n  var gStatesMap = {}; // see fonts\r\n  var activeGState = null;\r\n  var scaleFactor; // Scale factor\r\n  var page = 0;\r\n  var pagesContext = [];\r\n  var events = new PubSub(API);\r\n  var hotfixes = options.hotfixes || [];\r\n\r\n  var renderTargets = {};\r\n  var renderTargetMap = {};\r\n  var renderTargetStack = [];\r\n  var pageX;\r\n  var pageY;\r\n  var pageMatrix; // only used for FormObjects\r\n\r\n  /**\r\n   * A matrix object for 2D homogenous transformations: <br>\r\n   * | a b 0 | <br>\r\n   * | c d 0 | <br>\r\n   * | e f 1 | <br>\r\n   * pdf multiplies matrices righthand: v' = v x m1 x m2 x ...\r\n   *\r\n   * @class\r\n   * @name Matrix\r\n   * @param {number} sx\r\n   * @param {number} shy\r\n   * @param {number} shx\r\n   * @param {number} sy\r\n   * @param {number} tx\r\n   * @param {number} ty\r\n   * @constructor\r\n   */\r\n  var Matrix = function(sx, shy, shx, sy, tx, ty) {\r\n    if (!(this instanceof Matrix)) {\r\n      return new Matrix(sx, shy, shx, sy, tx, ty);\r\n    }\r\n\r\n    if (isNaN(sx)) sx = 1;\r\n    if (isNaN(shy)) shy = 0;\r\n    if (isNaN(shx)) shx = 0;\r\n    if (isNaN(sy)) sy = 1;\r\n    if (isNaN(tx)) tx = 0;\r\n    if (isNaN(ty)) ty = 0;\r\n\r\n    this._matrix = [sx, shy, shx, sy, tx, ty];\r\n  };\r\n\r\n  /**\r\n   * @name sx\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"sx\", {\r\n    get: function() {\r\n      return this._matrix[0];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[0] = value;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name shy\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"shy\", {\r\n    get: function() {\r\n      return this._matrix[1];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[1] = value;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name shx\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"shx\", {\r\n    get: function() {\r\n      return this._matrix[2];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[2] = value;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name sy\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"sy\", {\r\n    get: function() {\r\n      return this._matrix[3];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[3] = value;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name tx\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"tx\", {\r\n    get: function() {\r\n      return this._matrix[4];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[4] = value;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name ty\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"ty\", {\r\n    get: function() {\r\n      return this._matrix[5];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[5] = value;\r\n    }\r\n  });\r\n\r\n  Object.defineProperty(Matrix.prototype, \"a\", {\r\n    get: function() {\r\n      return this._matrix[0];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[0] = value;\r\n    }\r\n  });\r\n\r\n  Object.defineProperty(Matrix.prototype, \"b\", {\r\n    get: function() {\r\n      return this._matrix[1];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[1] = value;\r\n    }\r\n  });\r\n\r\n  Object.defineProperty(Matrix.prototype, \"c\", {\r\n    get: function() {\r\n      return this._matrix[2];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[2] = value;\r\n    }\r\n  });\r\n\r\n  Object.defineProperty(Matrix.prototype, \"d\", {\r\n    get: function() {\r\n      return this._matrix[3];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[3] = value;\r\n    }\r\n  });\r\n\r\n  Object.defineProperty(Matrix.prototype, \"e\", {\r\n    get: function() {\r\n      return this._matrix[4];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[4] = value;\r\n    }\r\n  });\r\n\r\n  Object.defineProperty(Matrix.prototype, \"f\", {\r\n    get: function() {\r\n      return this._matrix[5];\r\n    },\r\n    set: function(value) {\r\n      this._matrix[5] = value;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name rotation\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"rotation\", {\r\n    get: function() {\r\n      return Math.atan2(this.shx, this.sx);\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name scaleX\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"scaleX\", {\r\n    get: function() {\r\n      return this.decompose().scale.sx;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name scaleY\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"scaleY\", {\r\n    get: function() {\r\n      return this.decompose().scale.sy;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * @name isIdentity\r\n   * @memberof Matrix#\r\n   */\r\n  Object.defineProperty(Matrix.prototype, \"isIdentity\", {\r\n    get: function() {\r\n      if (this.sx !== 1) {\r\n        return false;\r\n      }\r\n      if (this.shy !== 0) {\r\n        return false;\r\n      }\r\n      if (this.shx !== 0) {\r\n        return false;\r\n      }\r\n      if (this.sy !== 1) {\r\n        return false;\r\n      }\r\n      if (this.tx !== 0) {\r\n        return false;\r\n      }\r\n      if (this.ty !== 0) {\r\n        return false;\r\n      }\r\n      return true;\r\n    }\r\n  });\r\n\r\n  /**\r\n   * Join the Matrix Values to a String\r\n   *\r\n   * @function join\r\n   * @param {string} separator Specifies a string to separate each pair of adjacent elements of the array. The separator is converted to a string if necessary. If omitted, the array elements are separated with a comma (\",\"). If separator is an empty string, all elements are joined without any characters in between them.\r\n   * @returns {string} A string with all array elements joined.\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.join = function(separator) {\r\n    return [this.sx, this.shy, this.shx, this.sy, this.tx, this.ty]\r\n      .map(hpf)\r\n      .join(separator);\r\n  };\r\n\r\n  /**\r\n   * Multiply the matrix with given Matrix\r\n   *\r\n   * @function multiply\r\n   * @param matrix\r\n   * @returns {Matrix}\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.multiply = function(matrix) {\r\n    var sx = matrix.sx * this.sx + matrix.shy * this.shx;\r\n    var shy = matrix.sx * this.shy + matrix.shy * this.sy;\r\n    var shx = matrix.shx * this.sx + matrix.sy * this.shx;\r\n    var sy = matrix.shx * this.shy + matrix.sy * this.sy;\r\n    var tx = matrix.tx * this.sx + matrix.ty * this.shx + this.tx;\r\n    var ty = matrix.tx * this.shy + matrix.ty * this.sy + this.ty;\r\n\r\n    return new Matrix(sx, shy, shx, sy, tx, ty);\r\n  };\r\n\r\n  /**\r\n   * @function decompose\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.decompose = function() {\r\n    var a = this.sx;\r\n    var b = this.shy;\r\n    var c = this.shx;\r\n    var d = this.sy;\r\n    var e = this.tx;\r\n    var f = this.ty;\r\n\r\n    var scaleX = Math.sqrt(a * a + b * b);\r\n    a /= scaleX;\r\n    b /= scaleX;\r\n\r\n    var shear = a * c + b * d;\r\n    c -= a * shear;\r\n    d -= b * shear;\r\n\r\n    var scaleY = Math.sqrt(c * c + d * d);\r\n    c /= scaleY;\r\n    d /= scaleY;\r\n    shear /= scaleY;\r\n\r\n    if (a * d < b * c) {\r\n      a = -a;\r\n      b = -b;\r\n      shear = -shear;\r\n      scaleX = -scaleX;\r\n    }\r\n\r\n    return {\r\n      scale: new Matrix(scaleX, 0, 0, scaleY, 0, 0),\r\n      translate: new Matrix(1, 0, 0, 1, e, f),\r\n      rotate: new Matrix(a, b, -b, a, 0, 0),\r\n      skew: new Matrix(1, 0, shear, 1, 0, 0)\r\n    };\r\n  };\r\n\r\n  /**\r\n   * @function toString\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.toString = function(parmPrecision) {\r\n    return this.join(\" \");\r\n  };\r\n\r\n  /**\r\n   * @function inversed\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.inversed = function() {\r\n    var a = this.sx,\r\n      b = this.shy,\r\n      c = this.shx,\r\n      d = this.sy,\r\n      e = this.tx,\r\n      f = this.ty;\r\n\r\n    var quot = 1 / (a * d - b * c);\r\n\r\n    var aInv = d * quot;\r\n    var bInv = -b * quot;\r\n    var cInv = -c * quot;\r\n    var dInv = a * quot;\r\n    var eInv = -aInv * e - cInv * f;\r\n    var fInv = -bInv * e - dInv * f;\r\n\r\n    return new Matrix(aInv, bInv, cInv, dInv, eInv, fInv);\r\n  };\r\n\r\n  /**\r\n   * @function applyToPoint\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.applyToPoint = function(pt) {\r\n    var x = pt.x * this.sx + pt.y * this.shx + this.tx;\r\n    var y = pt.x * this.shy + pt.y * this.sy + this.ty;\r\n    return new Point(x, y);\r\n  };\r\n\r\n  /**\r\n   * @function applyToRectangle\r\n   * @memberof Matrix#\r\n   */\r\n  Matrix.prototype.applyToRectangle = function(rect) {\r\n    var pt1 = this.applyToPoint(rect);\r\n    var pt2 = this.applyToPoint(new Point(rect.x + rect.w, rect.y + rect.h));\r\n    return new Rectangle(pt1.x, pt1.y, pt2.x - pt1.x, pt2.y - pt1.y);\r\n  };\r\n\r\n  /**\r\n   * Clone the Matrix\r\n   *\r\n   * @function clone\r\n   * @memberof Matrix#\r\n   * @name clone\r\n   * @instance\r\n   */\r\n  Matrix.prototype.clone = function() {\r\n    var sx = this.sx;\r\n    var shy = this.shy;\r\n    var shx = this.shx;\r\n    var sy = this.sy;\r\n    var tx = this.tx;\r\n    var ty = this.ty;\r\n\r\n    return new Matrix(sx, shy, shx, sy, tx, ty);\r\n  };\r\n\r\n  API.Matrix = Matrix;\r\n\r\n  /**\r\n   * Multiplies two matrices. (see {@link Matrix})\r\n   * @param {Matrix} m1\r\n   * @param {Matrix} m2\r\n   * @memberof jsPDF#\r\n   * @name matrixMult\r\n   */\r\n  var matrixMult = (API.matrixMult = function(m1, m2) {\r\n    return m2.multiply(m1);\r\n  });\r\n\r\n  /**\r\n   * The identity matrix (equivalent to new Matrix(1, 0, 0, 1, 0, 0)).\r\n   * @type {Matrix}\r\n   * @memberof! jsPDF#\r\n   * @name identityMatrix\r\n   */\r\n  var identityMatrix = new Matrix(1, 0, 0, 1, 0, 0);\r\n  API.unitMatrix = API.identityMatrix = identityMatrix;\r\n\r\n  /**\r\n   * Adds a new pattern for later use.\r\n   * @param {String} key The key by it can be referenced later. The keys must be unique!\r\n   * @param {API.Pattern} pattern The pattern\r\n   */\r\n  var addPattern = function(key, pattern) {\r\n    // only add it if it is not already present (the keys provided by the user must be unique!)\r\n    if (patternMap[key]) return;\r\n\r\n    var prefix = pattern instanceof ShadingPattern ? \"Sh\" : \"P\";\r\n    var patternKey = prefix + (Object.keys(patterns).length + 1).toString(10);\r\n    pattern.id = patternKey;\r\n\r\n    patternMap[key] = patternKey;\r\n    patterns[patternKey] = pattern;\r\n\r\n    events.publish(\"addPattern\", pattern);\r\n  };\r\n\r\n  /**\r\n   * A pattern describing a shading pattern.\r\n   *\r\n   * Only available in \"advanced\" API mode.\r\n   *\r\n   * @param {String} type One of \"axial\" or \"radial\"\r\n   * @param {Array<Number>} coords Either [x1, y1, x2, y2] for \"axial\" type describing the two interpolation points\r\n   * or [x1, y1, r, x2, y2, r2] for \"radial\" describing inner and the outer circle.\r\n   * @param {Array<Object>} colors An array of objects with the fields \"offset\" and \"color\". \"offset\" describes\r\n   * the offset in parameter space [0, 1]. \"color\" is an array of length 3 describing RGB values in [0, 255].\r\n   * @param {GState=} gState An additional graphics state that gets applied to the pattern (optional).\r\n   * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system\r\n   * and the use coordinate system (optional).\r\n   * @constructor\r\n   * @extends API.Pattern\r\n   */\r\n  API.ShadingPattern = ShadingPattern;\r\n\r\n  /**\r\n   * A PDF Tiling pattern.\r\n   *\r\n   * Only available in \"advanced\" API mode.\r\n   *\r\n   * @param {Array.<Number>} boundingBox The bounding box at which one pattern cell gets clipped.\r\n   * @param {Number} xStep Horizontal spacing between pattern cells.\r\n   * @param {Number} yStep Vertical spacing between pattern cells.\r\n   * @param {API.GState=} gState An additional graphics state that gets applied to the pattern (optional).\r\n   * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system\r\n   * and the use coordinate system (optional).\r\n   * @constructor\r\n   * @extends API.Pattern\r\n   */\r\n  API.TilingPattern = TilingPattern;\r\n\r\n  /**\r\n   * Adds a new {@link API.ShadingPattern} for later use. Only available in \"advanced\" API mode.\r\n   * @param {String} key\r\n   * @param {Pattern} pattern\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name addPattern\r\n   */\r\n  API.addShadingPattern = function(key, pattern) {\r\n    advancedApiModeTrap(\"addShadingPattern()\");\r\n\r\n    addPattern(key, pattern);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Begins a new tiling pattern. All subsequent render calls are drawn to this pattern until {@link API.endTilingPattern}\r\n   * gets called. Only available in \"advanced\" API mode.\r\n   * @param {API.Pattern} pattern\r\n   * @memberof jsPDF#\r\n   * @name beginTilingPattern\r\n   */\r\n  API.beginTilingPattern = function(pattern) {\r\n    advancedApiModeTrap(\"beginTilingPattern()\");\r\n\r\n    beginNewRenderTarget(\r\n      pattern.boundingBox[0],\r\n      pattern.boundingBox[1],\r\n      pattern.boundingBox[2] - pattern.boundingBox[0],\r\n      pattern.boundingBox[3] - pattern.boundingBox[1],\r\n      pattern.matrix\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Ends a tiling pattern and sets the render target to the one active before {@link API.beginTilingPattern} has been called.\r\n   *\r\n   * Only available in \"advanced\" API mode.\r\n   *\r\n   * @param {string} key A unique key that is used to reference this pattern at later use.\r\n   * @param {API.Pattern} pattern The pattern to end.\r\n   * @memberof jsPDF#\r\n   * @name endTilingPattern\r\n   */\r\n  API.endTilingPattern = function(key, pattern) {\r\n    advancedApiModeTrap(\"endTilingPattern()\");\r\n\r\n    // retrieve the stream\r\n    pattern.stream = pages[currentPage].join(\"\\n\");\r\n\r\n    addPattern(key, pattern);\r\n\r\n    events.publish(\"endTilingPattern\", pattern);\r\n\r\n    // restore state from stack\r\n    renderTargetStack.pop().restore();\r\n  };\r\n\r\n  var newObject = (API.__private__.newObject = function() {\r\n    var oid = newObjectDeferred();\r\n    newObjectDeferredBegin(oid, true);\r\n    return oid;\r\n  });\r\n\r\n  // Does not output the object.  The caller must call newObjectDeferredBegin(oid) before outputing any data\r\n  var newObjectDeferred = (API.__private__.newObjectDeferred = function() {\r\n    objectNumber++;\r\n    offsets[objectNumber] = function() {\r\n      return contentLength;\r\n    };\r\n    return objectNumber;\r\n  });\r\n\r\n  var newObjectDeferredBegin = function(oid, doOutput) {\r\n    doOutput = typeof doOutput === \"boolean\" ? doOutput : false;\r\n    offsets[oid] = contentLength;\r\n    if (doOutput) {\r\n      out(oid + \" 0 obj\");\r\n    }\r\n    return oid;\r\n  };\r\n  // Does not output the object until after the pages have been output.\r\n  // Returns an object containing the objectId and content.\r\n  // All pages have been added so the object ID can be estimated to start right after.\r\n  // This does not modify the current objectNumber;  It must be updated after the newObjects are output.\r\n  var newAdditionalObject = (API.__private__.newAdditionalObject = function() {\r\n    var objId = newObjectDeferred();\r\n    var obj = {\r\n      objId: objId,\r\n      content: \"\"\r\n    };\r\n    additionalObjects.push(obj);\r\n    return obj;\r\n  });\r\n\r\n  var rootDictionaryObjId = newObjectDeferred();\r\n  var resourceDictionaryObjId = newObjectDeferred();\r\n\r\n  /////////////////////\r\n  // Private functions\r\n  /////////////////////\r\n\r\n  var decodeColorString = (API.__private__.decodeColorString = function(color) {\r\n    var colorEncoded = color.split(\" \");\r\n    if (\r\n      colorEncoded.length === 2 &&\r\n      (colorEncoded[1] === \"g\" || colorEncoded[1] === \"G\")\r\n    ) {\r\n      // convert grayscale value to rgb so that it can be converted to hex for consistency\r\n      var floatVal = parseFloat(colorEncoded[0]);\r\n      colorEncoded = [floatVal, floatVal, floatVal, \"r\"];\r\n    } else if (\r\n      colorEncoded.length === 5 &&\r\n      (colorEncoded[4] === \"k\" || colorEncoded[4] === \"K\")\r\n    ) {\r\n      // convert CMYK values to rbg so that it can be converted to hex for consistency\r\n      var red = (1.0 - colorEncoded[0]) * (1.0 - colorEncoded[3]);\r\n      var green = (1.0 - colorEncoded[1]) * (1.0 - colorEncoded[3]);\r\n      var blue = (1.0 - colorEncoded[2]) * (1.0 - colorEncoded[3]);\r\n\r\n      colorEncoded = [red, green, blue, \"r\"];\r\n    }\r\n    var colorAsRGB = \"#\";\r\n    for (var i = 0; i < 3; i++) {\r\n      colorAsRGB += (\r\n        \"0\" + Math.floor(parseFloat(colorEncoded[i]) * 255).toString(16)\r\n      ).slice(-2);\r\n    }\r\n    return colorAsRGB;\r\n  });\r\n\r\n  var encodeColorString = (API.__private__.encodeColorString = function(\r\n    options\r\n  ) {\r\n    var color;\r\n\r\n    if (typeof options === \"string\") {\r\n      options = {\r\n        ch1: options\r\n      };\r\n    }\r\n    var ch1 = options.ch1;\r\n    var ch2 = options.ch2;\r\n    var ch3 = options.ch3;\r\n    var ch4 = options.ch4;\r\n    var letterArray =\r\n      options.pdfColorType === \"draw\" ? [\"G\", \"RG\", \"K\"] : [\"g\", \"rg\", \"k\"];\r\n\r\n    if (typeof ch1 === \"string\" && ch1.charAt(0) !== \"#\") {\r\n      var rgbColor = new RGBColor(ch1);\r\n      if (rgbColor.ok) {\r\n        ch1 = rgbColor.toHex();\r\n      } else if (!/^\\d*\\.?\\d*$/.test(ch1)) {\r\n        throw new Error(\r\n          'Invalid color \"' + ch1 + '\" passed to jsPDF.encodeColorString.'\r\n        );\r\n      }\r\n    }\r\n    //convert short rgb to long form\r\n    if (typeof ch1 === \"string\" && /^#[0-9A-Fa-f]{3}$/.test(ch1)) {\r\n      ch1 = \"#\" + ch1[1] + ch1[1] + ch1[2] + ch1[2] + ch1[3] + ch1[3];\r\n    }\r\n\r\n    if (typeof ch1 === \"string\" && /^#[0-9A-Fa-f]{6}$/.test(ch1)) {\r\n      var hex = parseInt(ch1.substr(1), 16);\r\n      ch1 = (hex >> 16) & 255;\r\n      ch2 = (hex >> 8) & 255;\r\n      ch3 = hex & 255;\r\n    }\r\n\r\n    if (\r\n      typeof ch2 === \"undefined\" ||\r\n      (typeof ch4 === \"undefined\" && ch1 === ch2 && ch2 === ch3)\r\n    ) {\r\n      // Gray color space.\r\n      if (typeof ch1 === \"string\") {\r\n        color = ch1 + \" \" + letterArray[0];\r\n      } else {\r\n        switch (options.precision) {\r\n          case 2:\r\n            color = f2(ch1 / 255) + \" \" + letterArray[0];\r\n            break;\r\n          case 3:\r\n          default:\r\n            color = f3(ch1 / 255) + \" \" + letterArray[0];\r\n        }\r\n      }\r\n    } else if (typeof ch4 === \"undefined\" || typeof ch4 === \"object\") {\r\n      // assume RGBA\r\n      if (ch4 && !isNaN(ch4.a)) {\r\n        //TODO Implement transparency.\r\n        //WORKAROUND use white for now, if transparent, otherwise handle as rgb\r\n        if (ch4.a === 0) {\r\n          color = [\"1.\", \"1.\", \"1.\", letterArray[1]].join(\" \");\r\n          return color;\r\n        }\r\n      }\r\n      // assume RGB\r\n      if (typeof ch1 === \"string\") {\r\n        color = [ch1, ch2, ch3, letterArray[1]].join(\" \");\r\n      } else {\r\n        switch (options.precision) {\r\n          case 2:\r\n            color = [\r\n              f2(ch1 / 255),\r\n              f2(ch2 / 255),\r\n              f2(ch3 / 255),\r\n              letterArray[1]\r\n            ].join(\" \");\r\n            break;\r\n          default:\r\n          case 3:\r\n            color = [\r\n              f3(ch1 / 255),\r\n              f3(ch2 / 255),\r\n              f3(ch3 / 255),\r\n              letterArray[1]\r\n            ].join(\" \");\r\n        }\r\n      }\r\n    } else {\r\n      // assume CMYK\r\n      if (typeof ch1 === \"string\") {\r\n        color = [ch1, ch2, ch3, ch4, letterArray[2]].join(\" \");\r\n      } else {\r\n        switch (options.precision) {\r\n          case 2:\r\n            color = [f2(ch1), f2(ch2), f2(ch3), f2(ch4), letterArray[2]].join(\r\n              \" \"\r\n            );\r\n            break;\r\n          case 3:\r\n          default:\r\n            color = [f3(ch1), f3(ch2), f3(ch3), f3(ch4), letterArray[2]].join(\r\n              \" \"\r\n            );\r\n        }\r\n      }\r\n    }\r\n    return color;\r\n  });\r\n\r\n  var getFilters = (API.__private__.getFilters = function() {\r\n    return filters;\r\n  });\r\n\r\n  var putStream = (API.__private__.putStream = function(options) {\r\n    options = options || {};\r\n    var data = options.data || \"\";\r\n    var filters = options.filters || getFilters();\r\n    var alreadyAppliedFilters = options.alreadyAppliedFilters || [];\r\n    var addLength1 = options.addLength1 || false;\r\n    var valueOfLength1 = data.length;\r\n    var objectId = options.objectId;\r\n    var encryptor = function(data) {\r\n      return data;\r\n    };\r\n    if (encryptionOptions !== null && typeof objectId == \"undefined\") {\r\n      throw new Error(\r\n        \"ObjectId must be passed to putStream for file encryption\"\r\n      );\r\n    }\r\n    if (encryptionOptions !== null) {\r\n      encryptor = encryption.encryptor(objectId, 0);\r\n    }\r\n\r\n    var processedData = {};\r\n    if (filters === true) {\r\n      filters = [\"FlateEncode\"];\r\n    }\r\n    var keyValues = options.additionalKeyValues || [];\r\n    if (typeof jsPDF.API.processDataByFilters !== \"undefined\") {\r\n      processedData = jsPDF.API.processDataByFilters(data, filters);\r\n    } else {\r\n      processedData = { data: data, reverseChain: [] };\r\n    }\r\n    var filterAsString =\r\n      processedData.reverseChain +\r\n      (Array.isArray(alreadyAppliedFilters)\r\n        ? alreadyAppliedFilters.join(\" \")\r\n        : alreadyAppliedFilters.toString());\r\n\r\n    if (processedData.data.length !== 0) {\r\n      keyValues.push({\r\n        key: \"Length\",\r\n        value: processedData.data.length\r\n      });\r\n      if (addLength1 === true) {\r\n        keyValues.push({\r\n          key: \"Length1\",\r\n          value: valueOfLength1\r\n        });\r\n      }\r\n    }\r\n\r\n    if (filterAsString.length != 0) {\r\n      if (filterAsString.split(\"/\").length - 1 === 1) {\r\n        keyValues.push({\r\n          key: \"Filter\",\r\n          value: filterAsString\r\n        });\r\n      } else {\r\n        keyValues.push({\r\n          key: \"Filter\",\r\n          value: \"[\" + filterAsString + \"]\"\r\n        });\r\n\r\n        for (var j = 0; j < keyValues.length; j += 1) {\r\n          if (keyValues[j].key === \"DecodeParms\") {\r\n            var decodeParmsArray = [];\r\n\r\n            for (\r\n              var i = 0;\r\n              i < processedData.reverseChain.split(\"/\").length - 1;\r\n              i += 1\r\n            ) {\r\n              decodeParmsArray.push(\"null\");\r\n            }\r\n\r\n            decodeParmsArray.push(keyValues[j].value);\r\n            keyValues[j].value = \"[\" + decodeParmsArray.join(\" \") + \"]\";\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    out(\"<<\");\r\n    for (var k = 0; k < keyValues.length; k++) {\r\n      out(\"/\" + keyValues[k].key + \" \" + keyValues[k].value);\r\n    }\r\n    out(\">>\");\r\n    if (processedData.data.length !== 0) {\r\n      out(\"stream\");\r\n      out(encryptor(processedData.data));\r\n      out(\"endstream\");\r\n    }\r\n  });\r\n\r\n  var putPage = (API.__private__.putPage = function(page) {\r\n    var pageNumber = page.number;\r\n    var data = page.data;\r\n    var pageObjectNumber = page.objId;\r\n    var pageContentsObjId = page.contentsObjId;\r\n\r\n    newObjectDeferredBegin(pageObjectNumber, true);\r\n    out(\"<</Type /Page\");\r\n    out(\"/Parent \" + page.rootDictionaryObjId + \" 0 R\");\r\n    out(\"/Resources \" + page.resourceDictionaryObjId + \" 0 R\");\r\n    out(\r\n      \"/MediaBox [\" +\r\n        parseFloat(hpf(page.mediaBox.bottomLeftX)) +\r\n        \" \" +\r\n        parseFloat(hpf(page.mediaBox.bottomLeftY)) +\r\n        \" \" +\r\n        hpf(page.mediaBox.topRightX) +\r\n        \" \" +\r\n        hpf(page.mediaBox.topRightY) +\r\n        \"]\"\r\n    );\r\n    if (page.cropBox !== null) {\r\n      out(\r\n        \"/CropBox [\" +\r\n          hpf(page.cropBox.bottomLeftX) +\r\n          \" \" +\r\n          hpf(page.cropBox.bottomLeftY) +\r\n          \" \" +\r\n          hpf(page.cropBox.topRightX) +\r\n          \" \" +\r\n          hpf(page.cropBox.topRightY) +\r\n          \"]\"\r\n      );\r\n    }\r\n\r\n    if (page.bleedBox !== null) {\r\n      out(\r\n        \"/BleedBox [\" +\r\n          hpf(page.bleedBox.bottomLeftX) +\r\n          \" \" +\r\n          hpf(page.bleedBox.bottomLeftY) +\r\n          \" \" +\r\n          hpf(page.bleedBox.topRightX) +\r\n          \" \" +\r\n          hpf(page.bleedBox.topRightY) +\r\n          \"]\"\r\n      );\r\n    }\r\n\r\n    if (page.trimBox !== null) {\r\n      out(\r\n        \"/TrimBox [\" +\r\n          hpf(page.trimBox.bottomLeftX) +\r\n          \" \" +\r\n          hpf(page.trimBox.bottomLeftY) +\r\n          \" \" +\r\n          hpf(page.trimBox.topRightX) +\r\n          \" \" +\r\n          hpf(page.trimBox.topRightY) +\r\n          \"]\"\r\n      );\r\n    }\r\n\r\n    if (page.artBox !== null) {\r\n      out(\r\n        \"/ArtBox [\" +\r\n          hpf(page.artBox.bottomLeftX) +\r\n          \" \" +\r\n          hpf(page.artBox.bottomLeftY) +\r\n          \" \" +\r\n          hpf(page.artBox.topRightX) +\r\n          \" \" +\r\n          hpf(page.artBox.topRightY) +\r\n          \"]\"\r\n      );\r\n    }\r\n\r\n    if (typeof page.userUnit === \"number\" && page.userUnit !== 1.0) {\r\n      out(\"/UserUnit \" + page.userUnit);\r\n    }\r\n\r\n    events.publish(\"putPage\", {\r\n      objId: pageObjectNumber,\r\n      pageContext: pagesContext[pageNumber],\r\n      pageNumber: pageNumber,\r\n      page: data\r\n    });\r\n    out(\"/Contents \" + pageContentsObjId + \" 0 R\");\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n    // Page content\r\n    var pageContent = data.join(\"\\n\");\r\n\r\n    if (apiMode === ApiMode.ADVANCED) {\r\n      // if the user forgot to switch back to COMPAT mode, we must balance the graphics stack again\r\n      pageContent += \"\\nQ\";\r\n    }\r\n\r\n    newObjectDeferredBegin(pageContentsObjId, true);\r\n    putStream({\r\n      data: pageContent,\r\n      filters: getFilters(),\r\n      objectId: pageContentsObjId\r\n    });\r\n    out(\"endobj\");\r\n    return pageObjectNumber;\r\n  });\r\n\r\n  var putPages = (API.__private__.putPages = function() {\r\n    var n,\r\n      i,\r\n      pageObjectNumbers = [];\r\n\r\n    for (n = 1; n <= page; n++) {\r\n      pagesContext[n].objId = newObjectDeferred();\r\n      pagesContext[n].contentsObjId = newObjectDeferred();\r\n    }\r\n\r\n    for (n = 1; n <= page; n++) {\r\n      pageObjectNumbers.push(\r\n        putPage({\r\n          number: n,\r\n          data: pages[n],\r\n          objId: pagesContext[n].objId,\r\n          contentsObjId: pagesContext[n].contentsObjId,\r\n          mediaBox: pagesContext[n].mediaBox,\r\n          cropBox: pagesContext[n].cropBox,\r\n          bleedBox: pagesContext[n].bleedBox,\r\n          trimBox: pagesContext[n].trimBox,\r\n          artBox: pagesContext[n].artBox,\r\n          userUnit: pagesContext[n].userUnit,\r\n          rootDictionaryObjId: rootDictionaryObjId,\r\n          resourceDictionaryObjId: resourceDictionaryObjId\r\n        })\r\n      );\r\n    }\r\n    newObjectDeferredBegin(rootDictionaryObjId, true);\r\n    out(\"<</Type /Pages\");\r\n    var kids = \"/Kids [\";\r\n    for (i = 0; i < page; i++) {\r\n      kids += pageObjectNumbers[i] + \" 0 R \";\r\n    }\r\n    out(kids + \"]\");\r\n    out(\"/Count \" + page);\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n    events.publish(\"postPutPages\");\r\n  });\r\n\r\n  var putFont = function(font) {\r\n    events.publish(\"putFont\", {\r\n      font: font,\r\n      out: out,\r\n      newObject: newObject,\r\n      putStream: putStream\r\n    });\r\n\r\n    if (font.isAlreadyPutted !== true) {\r\n      font.objectNumber = newObject();\r\n      out(\"<<\");\r\n      out(\"/Type /Font\");\r\n      out(\"/BaseFont /\" + toPDFName(font.postScriptName));\r\n      out(\"/Subtype /Type1\");\r\n      if (typeof font.encoding === \"string\") {\r\n        out(\"/Encoding /\" + font.encoding);\r\n      }\r\n      out(\"/FirstChar 32\");\r\n      out(\"/LastChar 255\");\r\n      out(\">>\");\r\n      out(\"endobj\");\r\n    }\r\n  };\r\n\r\n  var putFonts = function() {\r\n    for (var fontKey in fonts) {\r\n      if (fonts.hasOwnProperty(fontKey)) {\r\n        if (\r\n          putOnlyUsedFonts === false ||\r\n          (putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey))\r\n        ) {\r\n          putFont(fonts[fontKey]);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  var putXObject = function(xObject) {\r\n    xObject.objectNumber = newObject();\r\n\r\n    var options = [];\r\n    options.push({ key: \"Type\", value: \"/XObject\" });\r\n    options.push({ key: \"Subtype\", value: \"/Form\" });\r\n    options.push({\r\n      key: \"BBox\",\r\n      value:\r\n        \"[\" +\r\n        [\r\n          hpf(xObject.x),\r\n          hpf(xObject.y),\r\n          hpf(xObject.x + xObject.width),\r\n          hpf(xObject.y + xObject.height)\r\n        ].join(\" \") +\r\n        \"]\"\r\n    });\r\n    options.push({\r\n      key: \"Matrix\",\r\n      value: \"[\" + xObject.matrix.toString() + \"]\"\r\n    });\r\n    // TODO: /Resources\r\n\r\n    var stream = xObject.pages[1].join(\"\\n\");\r\n    putStream({\r\n      data: stream,\r\n      additionalKeyValues: options,\r\n      objectId: xObject.objectNumber\r\n    });\r\n    out(\"endobj\");\r\n  };\r\n\r\n  var putXObjects = function() {\r\n    for (var xObjectKey in renderTargets) {\r\n      if (renderTargets.hasOwnProperty(xObjectKey)) {\r\n        putXObject(renderTargets[xObjectKey]);\r\n      }\r\n    }\r\n  };\r\n\r\n  var interpolateAndEncodeRGBStream = function(colors, numberSamples) {\r\n    var tValues = [];\r\n    var t;\r\n    var dT = 1.0 / (numberSamples - 1);\r\n    for (t = 0.0; t < 1.0; t += dT) {\r\n      tValues.push(t);\r\n    }\r\n    tValues.push(1.0);\r\n    // add first and last control point if not present\r\n    if (colors[0].offset != 0.0) {\r\n      var c0 = {\r\n        offset: 0.0,\r\n        color: colors[0].color\r\n      };\r\n      colors.unshift(c0);\r\n    }\r\n    if (colors[colors.length - 1].offset != 1.0) {\r\n      var c1 = {\r\n        offset: 1.0,\r\n        color: colors[colors.length - 1].color\r\n      };\r\n      colors.push(c1);\r\n    }\r\n    var out = \"\";\r\n    var index = 0;\r\n\r\n    for (var i = 0; i < tValues.length; i++) {\r\n      t = tValues[i];\r\n      while (t > colors[index + 1].offset) index++;\r\n      var a = colors[index].offset;\r\n      var b = colors[index + 1].offset;\r\n      var d = (t - a) / (b - a);\r\n\r\n      var aColor = colors[index].color;\r\n      var bColor = colors[index + 1].color;\r\n\r\n      out +=\r\n        padd2Hex(Math.round((1 - d) * aColor[0] + d * bColor[0]).toString(16)) +\r\n        padd2Hex(Math.round((1 - d) * aColor[1] + d * bColor[1]).toString(16)) +\r\n        padd2Hex(Math.round((1 - d) * aColor[2] + d * bColor[2]).toString(16));\r\n    }\r\n    return out.trim();\r\n  };\r\n\r\n  var putShadingPattern = function(pattern, numberSamples) {\r\n    /*\r\n       Axial patterns shade between the two points specified in coords, radial patterns between the inner\r\n       and outer circle.\r\n       The user can specify an array (colors) that maps t-Values in [0, 1] to RGB colors. These are now\r\n       interpolated to equidistant samples and written to pdf as a sample (type 0) function.\r\n       */\r\n    // The number of color samples that should be used to describe the shading.\r\n    // The higher, the more accurate the gradient will be.\r\n    numberSamples || (numberSamples = 21);\r\n    var funcObjectNumber = newObject();\r\n    var stream = interpolateAndEncodeRGBStream(pattern.colors, numberSamples);\r\n\r\n    var options = [];\r\n    options.push({ key: \"FunctionType\", value: \"0\" });\r\n    options.push({ key: \"Domain\", value: \"[0.0 1.0]\" });\r\n    options.push({ key: \"Size\", value: \"[\" + numberSamples + \"]\" });\r\n    options.push({ key: \"BitsPerSample\", value: \"8\" });\r\n    options.push({ key: \"Range\", value: \"[0.0 1.0 0.0 1.0 0.0 1.0]\" });\r\n    options.push({ key: \"Decode\", value: \"[0.0 1.0 0.0 1.0 0.0 1.0]\" });\r\n\r\n    putStream({\r\n      data: stream,\r\n      additionalKeyValues: options,\r\n      alreadyAppliedFilters: [\"/ASCIIHexDecode\"],\r\n      objectId: funcObjectNumber\r\n    });\r\n    out(\"endobj\");\r\n\r\n    pattern.objectNumber = newObject();\r\n    out(\"<< /ShadingType \" + pattern.type);\r\n    out(\"/ColorSpace /DeviceRGB\");\r\n    var coords =\r\n      \"/Coords [\" +\r\n      hpf(parseFloat(pattern.coords[0])) +\r\n      \" \" + // x1\r\n      hpf(parseFloat(pattern.coords[1])) +\r\n      \" \"; // y1\r\n    if (pattern.type === 2) {\r\n      // axial\r\n      coords +=\r\n        hpf(parseFloat(pattern.coords[2])) +\r\n        \" \" + // x2\r\n        hpf(parseFloat(pattern.coords[3])); // y2\r\n    } else {\r\n      // radial\r\n      coords +=\r\n        hpf(parseFloat(pattern.coords[2])) +\r\n        \" \" + // r1\r\n        hpf(parseFloat(pattern.coords[3])) +\r\n        \" \" + // x2\r\n        hpf(parseFloat(pattern.coords[4])) +\r\n        \" \" + // y2\r\n        hpf(parseFloat(pattern.coords[5])); // r2\r\n    }\r\n    coords += \"]\";\r\n    out(coords);\r\n\r\n    if (pattern.matrix) {\r\n      out(\"/Matrix [\" + pattern.matrix.toString() + \"]\");\r\n    }\r\n    out(\"/Function \" + funcObjectNumber + \" 0 R\");\r\n    out(\"/Extend [true true]\");\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n  };\r\n\r\n  var putTilingPattern = function(pattern, deferredResourceDictionaryIds) {\r\n    var resourcesObjectId = newObjectDeferred();\r\n    var patternObjectId = newObject();\r\n\r\n    deferredResourceDictionaryIds.push({\r\n      resourcesOid: resourcesObjectId,\r\n      objectOid: patternObjectId\r\n    });\r\n\r\n    pattern.objectNumber = patternObjectId;\r\n    var options = [];\r\n    options.push({ key: \"Type\", value: \"/Pattern\" });\r\n    options.push({ key: \"PatternType\", value: \"1\" }); // tiling pattern\r\n    options.push({ key: \"PaintType\", value: \"1\" }); // colored tiling pattern\r\n    options.push({ key: \"TilingType\", value: \"1\" }); // constant spacing\r\n    options.push({\r\n      key: \"BBox\",\r\n      value: \"[\" + pattern.boundingBox.map(hpf).join(\" \") + \"]\"\r\n    });\r\n    options.push({ key: \"XStep\", value: hpf(pattern.xStep) });\r\n    options.push({ key: \"YStep\", value: hpf(pattern.yStep) });\r\n    options.push({ key: \"Resources\", value: resourcesObjectId + \" 0 R\" });\r\n    if (pattern.matrix) {\r\n      options.push({\r\n        key: \"Matrix\",\r\n        value: \"[\" + pattern.matrix.toString() + \"]\"\r\n      });\r\n    }\r\n\r\n    putStream({\r\n      data: pattern.stream,\r\n      additionalKeyValues: options,\r\n      objectId: pattern.objectNumber\r\n    });\r\n    out(\"endobj\");\r\n  };\r\n\r\n  var putPatterns = function(deferredResourceDictionaryIds) {\r\n    var patternKey;\r\n    for (patternKey in patterns) {\r\n      if (patterns.hasOwnProperty(patternKey)) {\r\n        if (patterns[patternKey] instanceof ShadingPattern) {\r\n          putShadingPattern(patterns[patternKey]);\r\n        } else if (patterns[patternKey] instanceof TilingPattern) {\r\n          putTilingPattern(patterns[patternKey], deferredResourceDictionaryIds);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  var putGState = function(gState) {\r\n    gState.objectNumber = newObject();\r\n    out(\"<<\");\r\n    for (var p in gState) {\r\n      switch (p) {\r\n        case \"opacity\":\r\n          out(\"/ca \" + f2(gState[p]));\r\n          break;\r\n        case \"stroke-opacity\":\r\n          out(\"/CA \" + f2(gState[p]));\r\n          break;\r\n      }\r\n    }\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n  };\r\n\r\n  var putGStates = function() {\r\n    var gStateKey;\r\n    for (gStateKey in gStates) {\r\n      if (gStates.hasOwnProperty(gStateKey)) {\r\n        putGState(gStates[gStateKey]);\r\n      }\r\n    }\r\n  };\r\n\r\n  var putXobjectDict = function() {\r\n    out(\"/XObject <<\");\r\n    for (var xObjectKey in renderTargets) {\r\n      if (\r\n        renderTargets.hasOwnProperty(xObjectKey) &&\r\n        renderTargets[xObjectKey].objectNumber >= 0\r\n      ) {\r\n        out(\r\n          \"/\" +\r\n            xObjectKey +\r\n            \" \" +\r\n            renderTargets[xObjectKey].objectNumber +\r\n            \" 0 R\"\r\n        );\r\n      }\r\n    }\r\n\r\n    // Loop through images, or other data objects\r\n    events.publish(\"putXobjectDict\");\r\n    out(\">>\");\r\n  };\r\n\r\n  var putEncryptionDict = function() {\r\n    encryption.oid = newObject();\r\n    out(\"<<\");\r\n    out(\"/Filter /Standard\");\r\n    out(\"/V \" + encryption.v);\r\n    out(\"/R \" + encryption.r);\r\n    out(\"/U <\" + encryption.toHexString(encryption.U) + \">\");\r\n    out(\"/O <\" + encryption.toHexString(encryption.O) + \">\");\r\n    out(\"/P \" + encryption.P);\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n  };\r\n\r\n  var putFontDict = function() {\r\n    out(\"/Font <<\");\r\n\r\n    for (var fontKey in fonts) {\r\n      if (fonts.hasOwnProperty(fontKey)) {\r\n        if (\r\n          putOnlyUsedFonts === false ||\r\n          (putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey))\r\n        ) {\r\n          out(\"/\" + fontKey + \" \" + fonts[fontKey].objectNumber + \" 0 R\");\r\n        }\r\n      }\r\n    }\r\n    out(\">>\");\r\n  };\r\n\r\n  var putShadingPatternDict = function() {\r\n    if (Object.keys(patterns).length > 0) {\r\n      out(\"/Shading <<\");\r\n      for (var patternKey in patterns) {\r\n        if (\r\n          patterns.hasOwnProperty(patternKey) &&\r\n          patterns[patternKey] instanceof ShadingPattern &&\r\n          patterns[patternKey].objectNumber >= 0\r\n        ) {\r\n          out(\r\n            \"/\" + patternKey + \" \" + patterns[patternKey].objectNumber + \" 0 R\"\r\n          );\r\n        }\r\n      }\r\n\r\n      events.publish(\"putShadingPatternDict\");\r\n      out(\">>\");\r\n    }\r\n  };\r\n\r\n  var putTilingPatternDict = function(objectOid) {\r\n    if (Object.keys(patterns).length > 0) {\r\n      out(\"/Pattern <<\");\r\n      for (var patternKey in patterns) {\r\n        if (\r\n          patterns.hasOwnProperty(patternKey) &&\r\n          patterns[patternKey] instanceof API.TilingPattern &&\r\n          patterns[patternKey].objectNumber >= 0 &&\r\n          patterns[patternKey].objectNumber < objectOid // prevent cyclic dependencies\r\n        ) {\r\n          out(\r\n            \"/\" + patternKey + \" \" + patterns[patternKey].objectNumber + \" 0 R\"\r\n          );\r\n        }\r\n      }\r\n      events.publish(\"putTilingPatternDict\");\r\n      out(\">>\");\r\n    }\r\n  };\r\n\r\n  var putGStatesDict = function() {\r\n    if (Object.keys(gStates).length > 0) {\r\n      var gStateKey;\r\n      out(\"/ExtGState <<\");\r\n      for (gStateKey in gStates) {\r\n        if (\r\n          gStates.hasOwnProperty(gStateKey) &&\r\n          gStates[gStateKey].objectNumber >= 0\r\n        ) {\r\n          out(\"/\" + gStateKey + \" \" + gStates[gStateKey].objectNumber + \" 0 R\");\r\n        }\r\n      }\r\n\r\n      events.publish(\"putGStateDict\");\r\n      out(\">>\");\r\n    }\r\n  };\r\n\r\n  var putResourceDictionary = function(objectIds) {\r\n    newObjectDeferredBegin(objectIds.resourcesOid, true);\r\n    out(\"<<\");\r\n    out(\"/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\");\r\n    putFontDict();\r\n    putShadingPatternDict();\r\n    putTilingPatternDict(objectIds.objectOid);\r\n    putGStatesDict();\r\n    putXobjectDict();\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n  };\r\n\r\n  var putResources = function() {\r\n    // FormObjects, Patterns etc. might use other FormObjects/Patterns/Images\r\n    // which means their resource dictionaries must contain the already resolved\r\n    // object ids. For this reason we defer the serialization of the resource\r\n    // dicts until all objects have been serialized and have object ids.\r\n    //\r\n    // In order to prevent cyclic dependencies (which Adobe Reader doesn't like),\r\n    // we only put all oids that are smaller than the oid of the object the\r\n    // resource dict belongs to. This is correct behavior, since the streams\r\n    // may only use other objects that have already been defined and thus appear\r\n    // earlier in their respective collection.\r\n    // Currently, this only affects tiling patterns, but a (more) correct\r\n    // implementation of FormObjects would also define their own resource dicts.\r\n    var deferredResourceDictionaryIds = [];\r\n\r\n    putFonts();\r\n    putGStates();\r\n    putXObjects();\r\n    putPatterns(deferredResourceDictionaryIds);\r\n\r\n    events.publish(\"putResources\");\r\n    deferredResourceDictionaryIds.forEach(putResourceDictionary);\r\n    putResourceDictionary({\r\n      resourcesOid: resourceDictionaryObjId,\r\n      objectOid: Number.MAX_SAFE_INTEGER // output all objects\r\n    });\r\n    events.publish(\"postPutResources\");\r\n  };\r\n\r\n  var putAdditionalObjects = function() {\r\n    events.publish(\"putAdditionalObjects\");\r\n    for (var i = 0; i < additionalObjects.length; i++) {\r\n      var obj = additionalObjects[i];\r\n      newObjectDeferredBegin(obj.objId, true);\r\n      out(obj.content);\r\n      out(\"endobj\");\r\n    }\r\n    events.publish(\"postPutAdditionalObjects\");\r\n  };\r\n\r\n  var addFontToFontDictionary = function(font) {\r\n    fontmap[font.fontName] = fontmap[font.fontName] || {};\r\n    fontmap[font.fontName][font.fontStyle] = font.id;\r\n  };\r\n\r\n  var addFont = function(\r\n    postScriptName,\r\n    fontName,\r\n    fontStyle,\r\n    encoding,\r\n    isStandardFont\r\n  ) {\r\n    var font = {\r\n      id: \"F\" + (Object.keys(fonts).length + 1).toString(10),\r\n      postScriptName: postScriptName,\r\n      fontName: fontName,\r\n      fontStyle: fontStyle,\r\n      encoding: encoding,\r\n      isStandardFont: isStandardFont || false,\r\n      metadata: {}\r\n    };\r\n\r\n    events.publish(\"addFont\", {\r\n      font: font,\r\n      instance: this\r\n    });\r\n\r\n    fonts[font.id] = font;\r\n    addFontToFontDictionary(font);\r\n    return font.id;\r\n  };\r\n\r\n  var addFonts = function(arrayOfFonts) {\r\n    for (var i = 0, l = standardFonts.length; i < l; i++) {\r\n      var fontKey = addFont.call(\r\n        this,\r\n        arrayOfFonts[i][0],\r\n        arrayOfFonts[i][1],\r\n        arrayOfFonts[i][2],\r\n        standardFonts[i][3],\r\n        true\r\n      );\r\n\r\n      if (putOnlyUsedFonts === false) {\r\n        usedFonts[fontKey] = true;\r\n      }\r\n      // adding aliases for standard fonts, this time matching the capitalization\r\n      var parts = arrayOfFonts[i][0].split(\"-\");\r\n      addFontToFontDictionary({\r\n        id: fontKey,\r\n        fontName: parts[0],\r\n        fontStyle: parts[1] || \"\"\r\n      });\r\n    }\r\n    events.publish(\"addFonts\", {\r\n      fonts: fonts,\r\n      dictionary: fontmap\r\n    });\r\n  };\r\n\r\n  var SAFE = function __safeCall(fn) {\r\n    fn.foo = function __safeCallWrapper() {\r\n      try {\r\n        return fn.apply(this, arguments);\r\n      } catch (e) {\r\n        var stack = e.stack || \"\";\r\n        if (~stack.indexOf(\" at \")) stack = stack.split(\" at \")[1];\r\n        var m =\r\n          \"Error in function \" +\r\n          stack.split(\"\\n\")[0].split(\"<\")[0] +\r\n          \": \" +\r\n          e.message;\r\n        if (globalObject.console) {\r\n          globalObject.console.error(m, e);\r\n          if (globalObject.alert) alert(m);\r\n        } else {\r\n          throw new Error(m);\r\n        }\r\n      }\r\n    };\r\n    fn.foo.bar = fn;\r\n    return fn.foo;\r\n  };\r\n\r\n  var to8bitStream = function(text, flags) {\r\n    /**\r\n     * PDF 1.3 spec:\r\n     * \"For text strings encoded in Unicode, the first two bytes must be 254 followed by\r\n     * 255, representing the Unicode byte order marker, U+FEFF. (This sequence conflicts\r\n     * with the PDFDocEncoding character sequence thorn ydieresis, which is unlikely\r\n     * to be a meaningful beginning of a word or phrase.) The remainder of the\r\n     * string consists of Unicode character codes, according to the UTF-16 encoding\r\n     * specified in the Unicode standard, version 2.0. Commonly used Unicode values\r\n     * are represented as 2 bytes per character, with the high-order byte appearing first\r\n     * in the string.\"\r\n     *\r\n     * In other words, if there are chars in a string with char code above 255, we\r\n     * recode the string to UCS2 BE - string doubles in length and BOM is prepended.\r\n     *\r\n     * HOWEVER!\r\n     * Actual *content* (body) text (as opposed to strings used in document properties etc)\r\n     * does NOT expect BOM. There, it is treated as a literal GID (Glyph ID)\r\n     *\r\n     * Because of Adobe's focus on \"you subset your fonts!\" you are not supposed to have\r\n     * a font that maps directly Unicode (UCS2 / UTF16BE) code to font GID, but you could\r\n     * fudge it with \"Identity-H\" encoding and custom CIDtoGID map that mimics Unicode\r\n     * code page. There, however, all characters in the stream are treated as GIDs,\r\n     * including BOM, which is the reason we need to skip BOM in content text (i.e. that\r\n     * that is tied to a font).\r\n     *\r\n     * To signal this \"special\" PDFEscape / to8bitStream handling mode,\r\n     * API.text() function sets (unless you overwrite it with manual values\r\n     * given to API.text(.., flags) )\r\n     * flags.autoencode = true\r\n     * flags.noBOM = true\r\n     *\r\n     * ===================================================================================\r\n     * `flags` properties relied upon:\r\n     *   .sourceEncoding = string with encoding label.\r\n     *                     \"Unicode\" by default. = encoding of the incoming text.\r\n     *                     pass some non-existing encoding name\r\n     *                     (ex: 'Do not touch my strings! I know what I am doing.')\r\n     *                     to make encoding code skip the encoding step.\r\n     *   .outputEncoding = Either valid PDF encoding name\r\n     *                     (must be supported by jsPDF font metrics, otherwise no encoding)\r\n     *                     or a JS object, where key = sourceCharCode, value = outputCharCode\r\n     *                     missing keys will be treated as: sourceCharCode === outputCharCode\r\n     *   .noBOM\r\n     *       See comment higher above for explanation for why this is important\r\n     *   .autoencode\r\n     *       See comment higher above for explanation for why this is important\r\n     */\r\n\r\n    var i,\r\n      l,\r\n      sourceEncoding,\r\n      encodingBlock,\r\n      outputEncoding,\r\n      newtext,\r\n      isUnicode,\r\n      ch,\r\n      bch;\r\n\r\n    flags = flags || {};\r\n    sourceEncoding = flags.sourceEncoding || \"Unicode\";\r\n    outputEncoding = flags.outputEncoding;\r\n\r\n    // This 'encoding' section relies on font metrics format\r\n    // attached to font objects by, among others,\r\n    // \"Willow Systems' standard_font_metrics plugin\"\r\n    // see jspdf.plugin.standard_font_metrics.js for format\r\n    // of the font.metadata.encoding Object.\r\n    // It should be something like\r\n    //   .encoding = {'codePages':['WinANSI....'], 'WinANSI...':{code:code, ...}}\r\n    //   .widths = {0:width, code:width, ..., 'fof':divisor}\r\n    //   .kerning = {code:{previous_char_code:shift, ..., 'fof':-divisor},...}\r\n    if (\r\n      (flags.autoencode || outputEncoding) &&\r\n      fonts[activeFontKey].metadata &&\r\n      fonts[activeFontKey].metadata[sourceEncoding] &&\r\n      fonts[activeFontKey].metadata[sourceEncoding].encoding\r\n    ) {\r\n      encodingBlock = fonts[activeFontKey].metadata[sourceEncoding].encoding;\r\n\r\n      // each font has default encoding. Some have it clearly defined.\r\n      if (!outputEncoding && fonts[activeFontKey].encoding) {\r\n        outputEncoding = fonts[activeFontKey].encoding;\r\n      }\r\n\r\n      // Hmmm, the above did not work? Let's try again, in different place.\r\n      if (!outputEncoding && encodingBlock.codePages) {\r\n        outputEncoding = encodingBlock.codePages[0]; // let's say, first one is the default\r\n      }\r\n\r\n      if (typeof outputEncoding === \"string\") {\r\n        outputEncoding = encodingBlock[outputEncoding];\r\n      }\r\n      // we want output encoding to be a JS Object, where\r\n      // key = sourceEncoding's character code and\r\n      // value = outputEncoding's character code.\r\n      if (outputEncoding) {\r\n        isUnicode = false;\r\n        newtext = [];\r\n        for (i = 0, l = text.length; i < l; i++) {\r\n          ch = outputEncoding[text.charCodeAt(i)];\r\n          if (ch) {\r\n            newtext.push(String.fromCharCode(ch));\r\n          } else {\r\n            newtext.push(text[i]);\r\n          }\r\n\r\n          // since we are looping over chars anyway, might as well\r\n          // check for residual unicodeness\r\n          if (newtext[i].charCodeAt(0) >> 8) {\r\n            /* more than 255 */\r\n            isUnicode = true;\r\n          }\r\n        }\r\n        text = newtext.join(\"\");\r\n      }\r\n    }\r\n\r\n    i = text.length;\r\n    // isUnicode may be set to false above. Hence the triple-equal to undefined\r\n    while (isUnicode === undefined && i !== 0) {\r\n      if (text.charCodeAt(i - 1) >> 8) {\r\n        /* more than 255 */\r\n        isUnicode = true;\r\n      }\r\n      i--;\r\n    }\r\n    if (!isUnicode) {\r\n      return text;\r\n    }\r\n\r\n    newtext = flags.noBOM ? [] : [254, 255];\r\n    for (i = 0, l = text.length; i < l; i++) {\r\n      ch = text.charCodeAt(i);\r\n      bch = ch >> 8; // divide by 256\r\n      if (bch >> 8) {\r\n        /* something left after dividing by 256 second time */\r\n        throw new Error(\r\n          \"Character at position \" +\r\n            i +\r\n            \" of string '\" +\r\n            text +\r\n            \"' exceeds 16bits. Cannot be encoded into UCS-2 BE\"\r\n        );\r\n      }\r\n      newtext.push(bch);\r\n      newtext.push(ch - (bch << 8));\r\n    }\r\n    return String.fromCharCode.apply(undefined, newtext);\r\n  };\r\n\r\n  var pdfEscape = (API.__private__.pdfEscape = API.pdfEscape = function(\r\n    text,\r\n    flags\r\n  ) {\r\n    /**\r\n     * Replace '/', '(', and ')' with pdf-safe versions\r\n     *\r\n     * Doing to8bitStream does NOT make this PDF display unicode text. For that\r\n     * we also need to reference a unicode font and embed it - royal pain in the rear.\r\n     *\r\n     * There is still a benefit to to8bitStream - PDF simply cannot handle 16bit chars,\r\n     * which JavaScript Strings are happy to provide. So, while we still cannot display\r\n     * 2-byte characters property, at least CONDITIONALLY converting (entire string containing)\r\n     * 16bit chars to (USC-2-BE) 2-bytes per char + BOM streams we ensure that entire PDF\r\n     * is still parseable.\r\n     * This will allow immediate support for unicode in document properties strings.\r\n     */\r\n    return to8bitStream(text, flags)\r\n      .replace(/\\\\/g, \"\\\\\\\\\")\r\n      .replace(/\\(/g, \"\\\\(\")\r\n      .replace(/\\)/g, \"\\\\)\");\r\n  });\r\n\r\n  var beginPage = (API.__private__.beginPage = function(format) {\r\n    pages[++page] = [];\r\n    pagesContext[page] = {\r\n      objId: 0,\r\n      contentsObjId: 0,\r\n      userUnit: Number(userUnit),\r\n      artBox: null,\r\n      bleedBox: null,\r\n      cropBox: null,\r\n      trimBox: null,\r\n      mediaBox: {\r\n        bottomLeftX: 0,\r\n        bottomLeftY: 0,\r\n        topRightX: Number(format[0]),\r\n        topRightY: Number(format[1])\r\n      }\r\n    };\r\n    _setPage(page);\r\n    setOutputDestination(pages[currentPage]);\r\n  });\r\n\r\n  var _addPage = function(parmFormat, parmOrientation) {\r\n    var dimensions, width, height;\r\n\r\n    orientation = parmOrientation || orientation;\r\n\r\n    if (typeof parmFormat === \"string\") {\r\n      dimensions = getPageFormat(parmFormat.toLowerCase());\r\n      if (Array.isArray(dimensions)) {\r\n        width = dimensions[0];\r\n        height = dimensions[1];\r\n      }\r\n    }\r\n\r\n    if (Array.isArray(parmFormat)) {\r\n      width = parmFormat[0] * scaleFactor;\r\n      height = parmFormat[1] * scaleFactor;\r\n    }\r\n\r\n    if (isNaN(width)) {\r\n      width = format[0];\r\n      height = format[1];\r\n    }\r\n\r\n    if (width > 14400 || height > 14400) {\r\n      console.warn(\r\n        \"A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400\"\r\n      );\r\n      width = Math.min(14400, width);\r\n      height = Math.min(14400, height);\r\n    }\r\n\r\n    format = [width, height];\r\n\r\n    switch (orientation.substr(0, 1)) {\r\n      case \"l\":\r\n        if (height > width) {\r\n          format = [height, width];\r\n        }\r\n        break;\r\n      case \"p\":\r\n        if (width > height) {\r\n          format = [height, width];\r\n        }\r\n        break;\r\n    }\r\n\r\n    beginPage(format);\r\n\r\n    // Set line width\r\n    setLineWidth(lineWidth);\r\n    // Set draw color\r\n    out(strokeColor);\r\n    // resurrecting non-default line caps, joins\r\n    if (lineCapID !== 0) {\r\n      out(lineCapID + \" J\");\r\n    }\r\n    if (lineJoinID !== 0) {\r\n      out(lineJoinID + \" j\");\r\n    }\r\n    events.publish(\"addPage\", {\r\n      pageNumber: page\r\n    });\r\n  };\r\n\r\n  var _deletePage = function(n) {\r\n    if (n > 0 && n <= page) {\r\n      pages.splice(n, 1);\r\n      pagesContext.splice(n, 1);\r\n      page--;\r\n      if (currentPage > page) {\r\n        currentPage = page;\r\n      }\r\n      this.setPage(currentPage);\r\n    }\r\n  };\r\n\r\n  var _setPage = function(n) {\r\n    if (n > 0 && n <= page) {\r\n      currentPage = n;\r\n    }\r\n  };\r\n\r\n  var getNumberOfPages = (API.__private__.getNumberOfPages = API.getNumberOfPages = function() {\r\n    return pages.length - 1;\r\n  });\r\n\r\n  /**\r\n   * Returns a document-specific font key - a label assigned to a\r\n   * font name + font type combination at the time the font was added\r\n   * to the font inventory.\r\n   *\r\n   * Font key is used as label for the desired font for a block of text\r\n   * to be added to the PDF document stream.\r\n   * @private\r\n   * @function\r\n   * @param fontName {string} can be undefined on \"falthy\" to indicate \"use current\"\r\n   * @param fontStyle {string} can be undefined on \"falthy\" to indicate \"use current\"\r\n   * @returns {string} Font key.\r\n   * @ignore\r\n   */\r\n  var getFont = function(fontName, fontStyle, options) {\r\n    var key = undefined,\r\n      fontNameLowerCase;\r\n    options = options || {};\r\n\r\n    fontName =\r\n      fontName !== undefined ? fontName : fonts[activeFontKey].fontName;\r\n    fontStyle =\r\n      fontStyle !== undefined ? fontStyle : fonts[activeFontKey].fontStyle;\r\n    fontNameLowerCase = fontName.toLowerCase();\r\n\r\n    if (\r\n      fontmap[fontNameLowerCase] !== undefined &&\r\n      fontmap[fontNameLowerCase][fontStyle] !== undefined\r\n    ) {\r\n      key = fontmap[fontNameLowerCase][fontStyle];\r\n    } else if (\r\n      fontmap[fontName] !== undefined &&\r\n      fontmap[fontName][fontStyle] !== undefined\r\n    ) {\r\n      key = fontmap[fontName][fontStyle];\r\n    } else {\r\n      if (options.disableWarning === false) {\r\n        console.warn(\r\n          \"Unable to look up font label for font '\" +\r\n            fontName +\r\n            \"', '\" +\r\n            fontStyle +\r\n            \"'. Refer to getFontList() for available fonts.\"\r\n        );\r\n      }\r\n    }\r\n\r\n    if (!key && !options.noFallback) {\r\n      key = fontmap[\"times\"][fontStyle];\r\n      if (key == null) {\r\n        key = fontmap[\"times\"][\"normal\"];\r\n      }\r\n    }\r\n    return key;\r\n  };\r\n\r\n  var putInfo = (API.__private__.putInfo = function() {\r\n    var objectId = newObject();\r\n    var encryptor = function(data) {\r\n      return data;\r\n    };\r\n    if (encryptionOptions !== null) {\r\n      encryptor = encryption.encryptor(objectId, 0);\r\n    }\r\n    out(\"<<\");\r\n    out(\"/Producer (\" + pdfEscape(encryptor(\"jsPDF \" + jsPDF.version)) + \")\");\r\n    for (var key in documentProperties) {\r\n      if (documentProperties.hasOwnProperty(key) && documentProperties[key]) {\r\n        out(\r\n          \"/\" +\r\n            key.substr(0, 1).toUpperCase() +\r\n            key.substr(1) +\r\n            \" (\" +\r\n            pdfEscape(encryptor(documentProperties[key])) +\r\n            \")\"\r\n        );\r\n      }\r\n    }\r\n    out(\"/CreationDate (\" + pdfEscape(encryptor(creationDate)) + \")\");\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n  });\r\n\r\n  var putCatalog = (API.__private__.putCatalog = function(options) {\r\n    options = options || {};\r\n    var tmpRootDictionaryObjId =\r\n      options.rootDictionaryObjId || rootDictionaryObjId;\r\n    newObject();\r\n    out(\"<<\");\r\n    out(\"/Type /Catalog\");\r\n    out(\"/Pages \" + tmpRootDictionaryObjId + \" 0 R\");\r\n    // PDF13ref Section 7.2.1\r\n    if (!zoomMode) zoomMode = \"fullwidth\";\r\n    switch (zoomMode) {\r\n      case \"fullwidth\":\r\n        out(\"/OpenAction [3 0 R /FitH null]\");\r\n        break;\r\n      case \"fullheight\":\r\n        out(\"/OpenAction [3 0 R /FitV null]\");\r\n        break;\r\n      case \"fullpage\":\r\n        out(\"/OpenAction [3 0 R /Fit]\");\r\n        break;\r\n      case \"original\":\r\n        out(\"/OpenAction [3 0 R /XYZ null null 1]\");\r\n        break;\r\n      default:\r\n        var pcn = \"\" + zoomMode;\r\n        if (pcn.substr(pcn.length - 1) === \"%\")\r\n          zoomMode = parseInt(zoomMode) / 100;\r\n        if (typeof zoomMode === \"number\") {\r\n          out(\"/OpenAction [3 0 R /XYZ null null \" + f2(zoomMode) + \"]\");\r\n        }\r\n    }\r\n    if (!layoutMode) layoutMode = \"continuous\";\r\n    switch (layoutMode) {\r\n      case \"continuous\":\r\n        out(\"/PageLayout /OneColumn\");\r\n        break;\r\n      case \"single\":\r\n        out(\"/PageLayout /SinglePage\");\r\n        break;\r\n      case \"two\":\r\n      case \"twoleft\":\r\n        out(\"/PageLayout /TwoColumnLeft\");\r\n        break;\r\n      case \"tworight\":\r\n        out(\"/PageLayout /TwoColumnRight\");\r\n        break;\r\n    }\r\n    if (pageMode) {\r\n      /**\r\n       * A name object specifying how the document should be displayed when opened:\r\n       * UseNone      : Neither document outline nor thumbnail images visible -- DEFAULT\r\n       * UseOutlines  : Document outline visible\r\n       * UseThumbs    : Thumbnail images visible\r\n       * FullScreen   : Full-screen mode, with no menu bar, window controls, or any other window visible\r\n       */\r\n      out(\"/PageMode /\" + pageMode);\r\n    }\r\n    events.publish(\"putCatalog\");\r\n    out(\">>\");\r\n    out(\"endobj\");\r\n  });\r\n\r\n  var putTrailer = (API.__private__.putTrailer = function() {\r\n    out(\"trailer\");\r\n    out(\"<<\");\r\n    out(\"/Size \" + (objectNumber + 1));\r\n    // Root and Info must be the last and second last objects written respectively\r\n    out(\"/Root \" + objectNumber + \" 0 R\");\r\n    out(\"/Info \" + (objectNumber - 1) + \" 0 R\");\r\n    if (encryptionOptions !== null) {\r\n      out(\"/Encrypt \" + encryption.oid + \" 0 R\");\r\n    }\r\n    out(\"/ID [ <\" + fileId + \"> <\" + fileId + \"> ]\");\r\n    out(\">>\");\r\n  });\r\n\r\n  var putHeader = (API.__private__.putHeader = function() {\r\n    out(\"%PDF-\" + pdfVersion);\r\n    out(\"%\\xBA\\xDF\\xAC\\xE0\");\r\n  });\r\n\r\n  var putXRef = (API.__private__.putXRef = function() {\r\n    var p = \"0000000000\";\r\n\r\n    out(\"xref\");\r\n    out(\"0 \" + (objectNumber + 1));\r\n    out(\"0000000000 65535 f \");\r\n    for (var i = 1; i <= objectNumber; i++) {\r\n      var offset = offsets[i];\r\n      if (typeof offset === \"function\") {\r\n        out((p + offsets[i]()).slice(-10) + \" 00000 n \");\r\n      } else {\r\n        if (typeof offsets[i] !== \"undefined\") {\r\n          out((p + offsets[i]).slice(-10) + \" 00000 n \");\r\n        } else {\r\n          out(\"0000000000 00000 n \");\r\n        }\r\n      }\r\n    }\r\n  });\r\n\r\n  var buildDocument = (API.__private__.buildDocument = function() {\r\n    resetDocument();\r\n    setOutputDestination(content);\r\n\r\n    events.publish(\"buildDocument\");\r\n\r\n    putHeader();\r\n    putPages();\r\n    putAdditionalObjects();\r\n    putResources();\r\n    if (encryptionOptions !== null) putEncryptionDict();\r\n    putInfo();\r\n    putCatalog();\r\n\r\n    var offsetOfXRef = contentLength;\r\n    putXRef();\r\n    putTrailer();\r\n    out(\"startxref\");\r\n    out(\"\" + offsetOfXRef);\r\n    out(\"%%EOF\");\r\n\r\n    setOutputDestination(pages[currentPage]);\r\n\r\n    return content.join(\"\\n\");\r\n  });\r\n\r\n  var getBlob = (API.__private__.getBlob = function(data) {\r\n    return new Blob([getArrayBuffer(data)], {\r\n      type: \"application/pdf\"\r\n    });\r\n  });\r\n\r\n  /**\r\n   * Generates the PDF document.\r\n   *\r\n   * If `type` argument is undefined, output is raw body of resulting PDF returned as a string.\r\n   *\r\n   * @param {string} type A string identifying one of the possible output types.<br/>\r\n   *                      Possible values are: <br/>\r\n   *                          'arraybuffer' -> (ArrayBuffer)<br/>\r\n   *                          'blob' -> (Blob)<br/>\r\n   *                          'bloburi'/'bloburl' -> (string)<br/>\r\n   *                          'datauristring'/'dataurlstring' -> (string)<br/>\r\n   *                          'datauri'/'dataurl' -> (undefined) -> change location to generated datauristring/dataurlstring<br/>\r\n   *                          'dataurlnewwindow' -> (window | null | undefined) throws error if global isn't a window object(node)<br/>\r\n   *                          'pdfobjectnewwindow' -> (window | null) throws error if global isn't a window object(node)<br/>\r\n   *                          'pdfjsnewwindow' -> (wind | null)\r\n   * @param {Object|string} options An object providing some additional signalling to PDF generator.<br/>\r\n   *                                Possible options are 'filename'.<br/>\r\n   *                                A string can be passed instead of {filename:string} and defaults to 'generated.pdf'\r\n   * @function\r\n   * @instance\r\n   * @returns {string|window|ArrayBuffer|Blob|jsPDF|null|undefined}\r\n   * @memberof jsPDF#\r\n   * @name output\r\n   */\r\n  var output = (API.output = API.__private__.output = SAFE(function output(\r\n    type,\r\n    options\r\n  ) {\r\n    options = options || {};\r\n\r\n    if (typeof options === \"string\") {\r\n      options = {\r\n        filename: options\r\n      };\r\n    } else {\r\n      options.filename = options.filename || \"generated.pdf\";\r\n    }\r\n\r\n    switch (type) {\r\n      case undefined:\r\n        return buildDocument();\r\n      case \"save\":\r\n        API.save(options.filename);\r\n        break;\r\n      case \"arraybuffer\":\r\n        return getArrayBuffer(buildDocument());\r\n      case \"blob\":\r\n        return getBlob(buildDocument());\r\n      case \"bloburi\":\r\n      case \"bloburl\":\r\n        // Developer is responsible of calling revokeObjectURL\r\n        if (\r\n          typeof globalObject.URL !== \"undefined\" &&\r\n          typeof globalObject.URL.createObjectURL === \"function\"\r\n        ) {\r\n          return (\r\n            (globalObject.URL &&\r\n              globalObject.URL.createObjectURL(getBlob(buildDocument()))) ||\r\n            void 0\r\n          );\r\n        } else {\r\n          console.warn(\r\n            \"bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.\"\r\n          );\r\n        }\r\n        break;\r\n      case \"datauristring\":\r\n      case \"dataurlstring\":\r\n        var dataURI = \"\";\r\n        var pdfDocument = buildDocument();\r\n        try {\r\n          dataURI = btoa(pdfDocument);\r\n        } catch (e) {\r\n          dataURI = btoa(unescape(encodeURIComponent(pdfDocument)));\r\n        }\r\n        return (\r\n          \"data:application/pdf;filename=\" +\r\n          options.filename +\r\n          \";base64,\" +\r\n          dataURI\r\n        );\r\n      case \"pdfobjectnewwindow\":\r\n        if (\r\n          Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n        ) {\r\n          var pdfObjectUrl =\r\n            \"https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js\";\r\n          var integrity =\r\n            ' integrity=\"sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==\" crossorigin=\"anonymous\"';\r\n\r\n          if (options.pdfObjectUrl) {\r\n            pdfObjectUrl = options.pdfObjectUrl;\r\n            integrity = \"\";\r\n          }\r\n\r\n          var htmlForNewWindow =\r\n            \"<html>\" +\r\n            '<style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  </style><body><script src=\"' +\r\n            pdfObjectUrl +\r\n            '\"' +\r\n            integrity +\r\n            '></script><script >PDFObject.embed(\"' +\r\n            this.output(\"dataurlstring\") +\r\n            '\", ' +\r\n            JSON.stringify(options) +\r\n            \");</script></body></html>\";\r\n          var nW = globalObject.open();\r\n\r\n          if (nW !== null) {\r\n            nW.document.write(htmlForNewWindow);\r\n          }\r\n          return nW;\r\n        } else {\r\n          throw new Error(\r\n            \"The option pdfobjectnewwindow just works in a browser-environment.\"\r\n          );\r\n        }\r\n      case \"pdfjsnewwindow\":\r\n        if (\r\n          Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n        ) {\r\n          var pdfJsUrl = options.pdfJsUrl || \"examples/PDF.js/web/viewer.html\";\r\n          var htmlForPDFjsNewWindow =\r\n            \"<html>\" +\r\n            \"<style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  </style>\" +\r\n            '<body><iframe id=\"pdfViewer\" src=\"' +\r\n            pdfJsUrl +\r\n            \"?file=&downloadName=\" +\r\n            options.filename +\r\n            '\" width=\"500px\" height=\"400px\" />' +\r\n            \"</body></html>\";\r\n          var PDFjsNewWindow = globalObject.open();\r\n\r\n          if (PDFjsNewWindow !== null) {\r\n            PDFjsNewWindow.document.write(htmlForPDFjsNewWindow);\r\n            var scope = this;\r\n            PDFjsNewWindow.document.documentElement.querySelector(\r\n              \"#pdfViewer\"\r\n            ).onload = function() {\r\n              PDFjsNewWindow.document.title = options.filename;\r\n              PDFjsNewWindow.document.documentElement\r\n                .querySelector(\"#pdfViewer\")\r\n                .contentWindow.PDFViewerApplication.open(\r\n                  scope.output(\"bloburl\")\r\n                );\r\n            };\r\n          }\r\n          return PDFjsNewWindow;\r\n        } else {\r\n          throw new Error(\r\n            \"The option pdfjsnewwindow just works in a browser-environment.\"\r\n          );\r\n        }\r\n      case \"dataurlnewwindow\":\r\n        if (\r\n          Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n        ) {\r\n          var htmlForDataURLNewWindow =\r\n            \"<html>\" +\r\n            \"<style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  </style>\" +\r\n            \"<body>\" +\r\n            '<iframe src=\"' +\r\n            this.output(\"datauristring\", options) +\r\n            '\"></iframe>' +\r\n            \"</body></html>\";\r\n          var dataURLNewWindow = globalObject.open();\r\n          if (dataURLNewWindow !== null) {\r\n            dataURLNewWindow.document.write(htmlForDataURLNewWindow);\r\n            dataURLNewWindow.document.title = options.filename;\r\n          }\r\n          if (dataURLNewWindow || typeof safari === \"undefined\")\r\n            return dataURLNewWindow;\r\n        } else {\r\n          throw new Error(\r\n            \"The option dataurlnewwindow just works in a browser-environment.\"\r\n          );\r\n        }\r\n        break;\r\n      case \"datauri\":\r\n      case \"dataurl\":\r\n        return (globalObject.document.location.href = this.output(\r\n          \"datauristring\",\r\n          options\r\n        ));\r\n      default:\r\n        return null;\r\n    }\r\n  }));\r\n\r\n  /**\r\n   * Used to see if a supplied hotfix was requested when the pdf instance was created.\r\n   * @param {string} hotfixName - The name of the hotfix to check.\r\n   * @returns {boolean}\r\n   */\r\n  var hasHotfix = function(hotfixName) {\r\n    return (\r\n      Array.isArray(hotfixes) === true && hotfixes.indexOf(hotfixName) > -1\r\n    );\r\n  };\r\n\r\n  switch (unit) {\r\n    case \"pt\":\r\n      scaleFactor = 1;\r\n      break;\r\n    case \"mm\":\r\n      scaleFactor = 72 / 25.4;\r\n      break;\r\n    case \"cm\":\r\n      scaleFactor = 72 / 2.54;\r\n      break;\r\n    case \"in\":\r\n      scaleFactor = 72;\r\n      break;\r\n    case \"px\":\r\n      if (hasHotfix(\"px_scaling\") == true) {\r\n        scaleFactor = 72 / 96;\r\n      } else {\r\n        scaleFactor = 96 / 72;\r\n      }\r\n      break;\r\n    case \"pc\":\r\n      scaleFactor = 12;\r\n      break;\r\n    case \"em\":\r\n      scaleFactor = 12;\r\n      break;\r\n    case \"ex\":\r\n      scaleFactor = 6;\r\n      break;\r\n    default:\r\n      if (typeof unit === \"number\") {\r\n        scaleFactor = unit;\r\n      } else {\r\n        throw new Error(\"Invalid unit: \" + unit);\r\n      }\r\n  }\r\n\r\n  var encryption = null;\r\n  setCreationDate();\r\n  setFileId();\r\n\r\n  var getEncryptor = function(objectId) {\r\n    if (encryptionOptions !== null) {\r\n      return encryption.encryptor(objectId, 0);\r\n    }\r\n    return function(data) {\r\n      return data;\r\n    };\r\n  };\r\n\r\n  //---------------------------------------\r\n  // Public API\r\n\r\n  var getPageInfo = (API.__private__.getPageInfo = API.getPageInfo = function(\r\n    pageNumberOneBased\r\n  ) {\r\n    if (isNaN(pageNumberOneBased) || pageNumberOneBased % 1 !== 0) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");\r\n    }\r\n    var objId = pagesContext[pageNumberOneBased].objId;\r\n    return {\r\n      objId: objId,\r\n      pageNumber: pageNumberOneBased,\r\n      pageContext: pagesContext[pageNumberOneBased]\r\n    };\r\n  });\r\n\r\n  var getPageInfoByObjId = (API.__private__.getPageInfoByObjId = function(\r\n    objId\r\n  ) {\r\n    if (isNaN(objId) || objId % 1 !== 0) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");\r\n    }\r\n    for (var pageNumber in pagesContext) {\r\n      if (pagesContext[pageNumber].objId === objId) {\r\n        break;\r\n      }\r\n    }\r\n    return getPageInfo(pageNumber);\r\n  });\r\n\r\n  var getCurrentPageInfo = (API.__private__.getCurrentPageInfo = API.getCurrentPageInfo = function() {\r\n    return {\r\n      objId: pagesContext[currentPage].objId,\r\n      pageNumber: currentPage,\r\n      pageContext: pagesContext[currentPage]\r\n    };\r\n  });\r\n\r\n  /**\r\n   * Adds (and transfers the focus to) new page to the PDF document.\r\n   * @param format {String/Array} The format of the new page. Can be: <ul><li>a0 - a10</li><li>b0 - b10</li><li>c0 - c10</li><li>dl</li><li>letter</li><li>government-letter</li><li>legal</li><li>junior-legal</li><li>ledger</li><li>tabloid</li><li>credit-card</li></ul><br />\r\n   * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n   * @param orientation {string} Orientation of the new page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" (Default), \"l\").\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   *\r\n   * @memberof jsPDF#\r\n   * @name addPage\r\n   */\r\n  API.addPage = function() {\r\n    _addPage.apply(this, arguments);\r\n    return this;\r\n  };\r\n  /**\r\n   * Adds (and transfers the focus to) new page to the PDF document.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   *\r\n   * @memberof jsPDF#\r\n   * @name setPage\r\n   * @param {number} page Switch the active page to the page number specified (indexed starting at 1).\r\n   * @example\r\n   * doc = jsPDF()\r\n   * doc.addPage()\r\n   * doc.addPage()\r\n   * doc.text('I am on page 3', 10, 10)\r\n   * doc.setPage(1)\r\n   * doc.text('I am on page 1', 10, 10)\r\n   */\r\n  API.setPage = function() {\r\n    _setPage.apply(this, arguments);\r\n    setOutputDestination.call(this, pages[currentPage]);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * @name insertPage\r\n   * @memberof jsPDF#\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @param {Object} beforePage\r\n   * @returns {jsPDF}\r\n   */\r\n  API.insertPage = function(beforePage) {\r\n    this.addPage();\r\n    this.movePage(currentPage, beforePage);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * @name movePage\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @instance\r\n   * @param {number} targetPage\r\n   * @param {number} beforePage\r\n   * @returns {jsPDF}\r\n   */\r\n  API.movePage = function(targetPage, beforePage) {\r\n    var tmpPages, tmpPagesContext;\r\n    if (targetPage > beforePage) {\r\n      tmpPages = pages[targetPage];\r\n      tmpPagesContext = pagesContext[targetPage];\r\n      for (var i = targetPage; i > beforePage; i--) {\r\n        pages[i] = pages[i - 1];\r\n        pagesContext[i] = pagesContext[i - 1];\r\n      }\r\n      pages[beforePage] = tmpPages;\r\n      pagesContext[beforePage] = tmpPagesContext;\r\n      this.setPage(beforePage);\r\n    } else if (targetPage < beforePage) {\r\n      tmpPages = pages[targetPage];\r\n      tmpPagesContext = pagesContext[targetPage];\r\n      for (var j = targetPage; j < beforePage; j++) {\r\n        pages[j] = pages[j + 1];\r\n        pagesContext[j] = pagesContext[j + 1];\r\n      }\r\n      pages[beforePage] = tmpPages;\r\n      pagesContext[beforePage] = tmpPagesContext;\r\n      this.setPage(beforePage);\r\n    }\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Deletes a page from the PDF.\r\n   * @name deletePage\r\n   * @memberof jsPDF#\r\n   * @function\r\n   * @param {number} targetPage\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   */\r\n  API.deletePage = function() {\r\n    _deletePage.apply(this, arguments);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Adds text to page. Supports adding multiline text when 'text' argument is an Array of Strings.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @param {String|Array} text String or array of strings to be added to the page. Each line is shifted one line down per font, spacing settings declared before this call.\r\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page.\r\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page.\r\n   * @param {Object} [options] - Collection of settings signaling how the text must be encoded.\r\n   * @param {string} [options.align=left] - The alignment of the text, possible values: left, center, right, justify.\r\n   * @param {string} [options.baseline=alphabetic] - Sets text baseline used when drawing the text, possible values: alphabetic, ideographic, bottom, top, middle, hanging\r\n   * @param {number|Matrix} [options.angle=0] - Rotate the text clockwise or counterclockwise. Expects the angle in degree.\r\n   * @param {number} [options.rotationDirection=1] - Direction of the rotation. 0 = clockwise, 1 = counterclockwise.\r\n   * @param {number} [options.charSpace=0] - The space between each letter.\r\n   * @param {number} [options.horizontalScale=1] - Horizontal scale of the text as a factor of the regular size.\r\n   * @param {number} [options.lineHeightFactor=1.15] - The lineheight of each line.\r\n   * @param {Object} [options.flags] - Flags for to8bitStream.\r\n   * @param {boolean} [options.flags.noBOM=true] - Don't add BOM to Unicode-text.\r\n   * @param {boolean} [options.flags.autoencode=true] - Autoencode the Text.\r\n   * @param {number} [options.maxWidth=0] - Split the text by given width, 0 = no split.\r\n   * @param {string} [options.renderingMode=fill] - Set how the text should be rendered, possible values: fill, stroke, fillThenStroke, invisible, fillAndAddForClipping, strokeAndAddPathForClipping, fillThenStrokeAndAddToPathForClipping, addToPathForClipping.\r\n   * @param {boolean} [options.isInputVisual] - Option for the BidiEngine\r\n   * @param {boolean} [options.isOutputVisual] - Option for the BidiEngine\r\n   * @param {boolean} [options.isInputRtl] - Option for the BidiEngine\r\n   * @param {boolean} [options.isOutputRtl] - Option for the BidiEngine\r\n   * @param {boolean} [options.isSymmetricSwapping] - Option for the BidiEngine\r\n   * @param {number|Matrix} transform If transform is a number the text will be rotated by this value around the anchor set by x and y.\r\n   *\r\n   * If it is a Matrix, this matrix gets directly applied to the text, which allows shearing\r\n   * effects etc.; the x and y offsets are then applied AFTER the coordinate system has been established by this\r\n   * matrix. This means passing a rotation matrix that is equivalent to some rotation angle will in general yield a\r\n   * DIFFERENT result. A matrix is only allowed in \"advanced\" API mode.\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name text\r\n   */\r\n  API.__private__.text = API.text = function(text, x, y, options, transform) {\r\n    /*\r\n     * Inserts something like this into PDF\r\n     *   BT\r\n     *    /F1 16 Tf  % Font name + size\r\n     *    16 TL % How many units down for next line in multiline text\r\n     *    0 g % color\r\n     *    28.35 813.54 Td % position\r\n     *    (line one) Tj\r\n     *    T* (line two) Tj\r\n     *    T* (line three) Tj\r\n     *   ET\r\n     */\r\n    options = options || {};\r\n    var scope = options.scope || this;\r\n    var payload, da, angle, align, charSpace, maxWidth, flags, horizontalScale;\r\n\r\n    // Pre-August-2012 the order of arguments was function(x, y, text, flags)\r\n    // in effort to make all calls have similar signature like\r\n    //   function(data, coordinates... , miscellaneous)\r\n    // this method had its args flipped.\r\n    // code below allows backward compatibility with old arg order.\r\n    if (\r\n      typeof text === \"number\" &&\r\n      typeof x === \"number\" &&\r\n      (typeof y === \"string\" || Array.isArray(y))\r\n    ) {\r\n      var tmp = y;\r\n      y = x;\r\n      x = text;\r\n      text = tmp;\r\n    }\r\n\r\n    var transformationMatrix;\r\n\r\n    if (arguments[3] instanceof Matrix === false) {\r\n      flags = arguments[3];\r\n      angle = arguments[4];\r\n      align = arguments[5];\r\n\r\n      if (typeof flags !== \"object\" || flags === null) {\r\n        if (typeof angle === \"string\") {\r\n          align = angle;\r\n          angle = null;\r\n        }\r\n        if (typeof flags === \"string\") {\r\n          align = flags;\r\n          flags = null;\r\n        }\r\n        if (typeof flags === \"number\") {\r\n          angle = flags;\r\n          flags = null;\r\n        }\r\n        options = {\r\n          flags: flags,\r\n          angle: angle,\r\n          align: align\r\n        };\r\n      }\r\n    } else {\r\n      advancedApiModeTrap(\r\n        \"The transform parameter of text() with a Matrix value\"\r\n      );\r\n      transformationMatrix = transform;\r\n    }\r\n\r\n    if (isNaN(x) || isNaN(y) || typeof text === \"undefined\" || text === null) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.text\");\r\n    }\r\n\r\n    if (text.length === 0) {\r\n      return scope;\r\n    }\r\n\r\n    var xtra = \"\";\r\n    var isHex = false;\r\n    var lineHeight =\r\n      typeof options.lineHeightFactor === \"number\"\r\n        ? options.lineHeightFactor\r\n        : lineHeightFactor;\r\n    var scaleFactor = scope.internal.scaleFactor;\r\n\r\n    function ESC(s) {\r\n      s = s.split(\"\\t\").join(Array(options.TabLen || 9).join(\" \"));\r\n      return pdfEscape(s, flags);\r\n    }\r\n\r\n    function transformTextToSpecialArray(text) {\r\n      //we don't want to destroy original text array, so cloning it\r\n      var sa = text.concat();\r\n      var da = [];\r\n      var len = sa.length;\r\n      var curDa;\r\n      //we do array.join('text that must not be PDFescaped\")\r\n      //thus, pdfEscape each component separately\r\n      while (len--) {\r\n        curDa = sa.shift();\r\n        if (typeof curDa === \"string\") {\r\n          da.push(curDa);\r\n        } else {\r\n          if (\r\n            Array.isArray(text) &&\r\n            (curDa.length === 1 ||\r\n              (curDa[1] === undefined && curDa[2] === undefined))\r\n          ) {\r\n            da.push(curDa[0]);\r\n          } else {\r\n            da.push([curDa[0], curDa[1], curDa[2]]);\r\n          }\r\n        }\r\n      }\r\n      return da;\r\n    }\r\n\r\n    function processTextByFunction(text, processingFunction) {\r\n      var result;\r\n      if (typeof text === \"string\") {\r\n        result = processingFunction(text)[0];\r\n      } else if (Array.isArray(text)) {\r\n        //we don't want to destroy original text array, so cloning it\r\n        var sa = text.concat();\r\n        var da = [];\r\n        var len = sa.length;\r\n        var curDa;\r\n        var tmpResult;\r\n        //we do array.join('text that must not be PDFescaped\")\r\n        //thus, pdfEscape each component separately\r\n        while (len--) {\r\n          curDa = sa.shift();\r\n          if (typeof curDa === \"string\") {\r\n            da.push(processingFunction(curDa)[0]);\r\n          } else if (Array.isArray(curDa) && typeof curDa[0] === \"string\") {\r\n            tmpResult = processingFunction(curDa[0], curDa[1], curDa[2]);\r\n            da.push([tmpResult[0], tmpResult[1], tmpResult[2]]);\r\n          }\r\n        }\r\n        result = da;\r\n      }\r\n      return result;\r\n    }\r\n\r\n    //Check if text is of type String\r\n    var textIsOfTypeString = false;\r\n    var tmpTextIsOfTypeString = true;\r\n\r\n    if (typeof text === \"string\") {\r\n      textIsOfTypeString = true;\r\n    } else if (Array.isArray(text)) {\r\n      //we don't want to destroy original text array, so cloning it\r\n      var sa = text.concat();\r\n      da = [];\r\n      var len = sa.length;\r\n      var curDa;\r\n      //we do array.join('text that must not be PDFescaped\")\r\n      //thus, pdfEscape each component separately\r\n      while (len--) {\r\n        curDa = sa.shift();\r\n        if (\r\n          typeof curDa !== \"string\" ||\r\n          (Array.isArray(curDa) && typeof curDa[0] !== \"string\")\r\n        ) {\r\n          tmpTextIsOfTypeString = false;\r\n        }\r\n      }\r\n      textIsOfTypeString = tmpTextIsOfTypeString;\r\n    }\r\n    if (textIsOfTypeString === false) {\r\n      throw new Error(\r\n        'Type of text must be string or Array. \"' +\r\n          text +\r\n          '\" is not recognized.'\r\n      );\r\n    }\r\n\r\n    //If there are any newlines in text, we assume\r\n    //the user wanted to print multiple lines, so break the\r\n    //text up into an array. If the text is already an array,\r\n    //we assume the user knows what they are doing.\r\n    //Convert text into an array anyway to simplify\r\n    //later code.\r\n\r\n    if (typeof text === \"string\") {\r\n      if (text.match(/[\\r?\\n]/)) {\r\n        text = text.split(/\\r\\n|\\r|\\n/g);\r\n      } else {\r\n        text = [text];\r\n      }\r\n    }\r\n\r\n    //baseline\r\n    var height = activeFontSize / scope.internal.scaleFactor;\r\n    var descent = height * (lineHeight - 1);\r\n\r\n    switch (options.baseline) {\r\n      case \"bottom\":\r\n        y -= descent;\r\n        break;\r\n      case \"top\":\r\n        y += height - descent;\r\n        break;\r\n      case \"hanging\":\r\n        y += height - 2 * descent;\r\n        break;\r\n      case \"middle\":\r\n        y += height / 2 - descent;\r\n        break;\r\n      case \"ideographic\":\r\n      case \"alphabetic\":\r\n      default:\r\n        // do nothing, everything is fine\r\n        break;\r\n    }\r\n\r\n    //multiline\r\n    maxWidth = options.maxWidth || 0;\r\n\r\n    if (maxWidth > 0) {\r\n      if (typeof text === \"string\") {\r\n        text = scope.splitTextToSize(text, maxWidth);\r\n      } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n        text = text.reduce(function(acc, textLine) {\r\n          return acc.concat(scope.splitTextToSize(textLine, maxWidth));\r\n        }, []);\r\n      }\r\n    }\r\n\r\n    //creating Payload-Object to make text byRef\r\n    payload = {\r\n      text: text,\r\n      x: x,\r\n      y: y,\r\n      options: options,\r\n      mutex: {\r\n        pdfEscape: pdfEscape,\r\n        activeFontKey: activeFontKey,\r\n        fonts: fonts,\r\n        activeFontSize: activeFontSize\r\n      }\r\n    };\r\n    events.publish(\"preProcessText\", payload);\r\n\r\n    text = payload.text;\r\n    options = payload.options;\r\n\r\n    //angle\r\n    angle = options.angle;\r\n\r\n    if (\r\n      transformationMatrix instanceof Matrix === false &&\r\n      angle &&\r\n      typeof angle === \"number\"\r\n    ) {\r\n      angle *= Math.PI / 180;\r\n\r\n      if (options.rotationDirection === 0) {\r\n        angle = -angle;\r\n      }\r\n\r\n      if (apiMode === ApiMode.ADVANCED) {\r\n        angle = -angle;\r\n      }\r\n\r\n      var c = Math.cos(angle);\r\n      var s = Math.sin(angle);\r\n      transformationMatrix = new Matrix(c, s, -s, c, 0, 0);\r\n    } else if (angle && angle instanceof Matrix) {\r\n      transformationMatrix = angle;\r\n    }\r\n\r\n    if (apiMode === ApiMode.ADVANCED && !transformationMatrix) {\r\n      transformationMatrix = identityMatrix;\r\n    }\r\n\r\n    //charSpace\r\n\r\n    charSpace = options.charSpace || activeCharSpace;\r\n\r\n    if (typeof charSpace !== \"undefined\") {\r\n      xtra += hpf(scale(charSpace)) + \" Tc\\n\";\r\n      this.setCharSpace(this.getCharSpace() || 0);\r\n    }\r\n\r\n    horizontalScale = options.horizontalScale;\r\n    if (typeof horizontalScale !== \"undefined\") {\r\n      xtra += hpf(horizontalScale * 100) + \" Tz\\n\";\r\n    }\r\n\r\n    //lang\r\n\r\n    var lang = options.lang;\r\n\r\n    if (lang) {\r\n      //    xtra += \"/Lang (\" + lang +\")\\n\";\r\n    }\r\n\r\n    //renderingMode\r\n    var renderingMode = -1;\r\n    var parmRenderingMode =\r\n      typeof options.renderingMode !== \"undefined\"\r\n        ? options.renderingMode\r\n        : options.stroke;\r\n    var pageContext = scope.internal.getCurrentPageInfo().pageContext;\r\n\r\n    switch (parmRenderingMode) {\r\n      case 0:\r\n      case false:\r\n      case \"fill\":\r\n        renderingMode = 0;\r\n        break;\r\n      case 1:\r\n      case true:\r\n      case \"stroke\":\r\n        renderingMode = 1;\r\n        break;\r\n      case 2:\r\n      case \"fillThenStroke\":\r\n        renderingMode = 2;\r\n        break;\r\n      case 3:\r\n      case \"invisible\":\r\n        renderingMode = 3;\r\n        break;\r\n      case 4:\r\n      case \"fillAndAddForClipping\":\r\n        renderingMode = 4;\r\n        break;\r\n      case 5:\r\n      case \"strokeAndAddPathForClipping\":\r\n        renderingMode = 5;\r\n        break;\r\n      case 6:\r\n      case \"fillThenStrokeAndAddToPathForClipping\":\r\n        renderingMode = 6;\r\n        break;\r\n      case 7:\r\n      case \"addToPathForClipping\":\r\n        renderingMode = 7;\r\n        break;\r\n    }\r\n\r\n    var usedRenderingMode =\r\n      typeof pageContext.usedRenderingMode !== \"undefined\"\r\n        ? pageContext.usedRenderingMode\r\n        : -1;\r\n\r\n    //if the coder wrote it explicitly to use a specific\r\n    //renderingMode, then use it\r\n    if (renderingMode !== -1) {\r\n      xtra += renderingMode + \" Tr\\n\";\r\n      //otherwise check if we used the rendering Mode already\r\n      //if so then set the rendering Mode...\r\n    } else if (usedRenderingMode !== -1) {\r\n      xtra += \"0 Tr\\n\";\r\n    }\r\n\r\n    if (renderingMode !== -1) {\r\n      pageContext.usedRenderingMode = renderingMode;\r\n    }\r\n\r\n    //align\r\n    align = options.align || \"left\";\r\n    var leading = activeFontSize * lineHeight;\r\n    var pageWidth = scope.internal.pageSize.getWidth();\r\n    var activeFont = fonts[activeFontKey];\r\n    charSpace = options.charSpace || activeCharSpace;\r\n    maxWidth = options.maxWidth || 0;\r\n\r\n    var lineWidths;\r\n    flags = Object.assign({ autoencode: true, noBOM: true }, options.flags);\r\n\r\n    var wordSpacingPerLine = [];\r\n\r\n    if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n      da = transformTextToSpecialArray(text);\r\n      var newY;\r\n      if (align !== \"left\") {\r\n        lineWidths = da.map(function(v) {\r\n          return (\r\n            (scope.getStringUnitWidth(v, {\r\n              font: activeFont,\r\n              charSpace: charSpace,\r\n              fontSize: activeFontSize,\r\n              doKerning: false\r\n            }) *\r\n              activeFontSize) /\r\n            scaleFactor\r\n          );\r\n        });\r\n      }\r\n      //The first line uses the \"main\" Td setting,\r\n      //and the subsequent lines are offset by the\r\n      //previous line's x coordinate.\r\n      var prevWidth = 0;\r\n      var newX;\r\n      if (align === \"right\") {\r\n        //The passed in x coordinate defines the\r\n        //rightmost point of the text.\r\n        x -= lineWidths[0];\r\n        text = [];\r\n        len = da.length;\r\n        for (var i = 0; i < len; i++) {\r\n          if (i === 0) {\r\n            newX = getHorizontalCoordinate(x);\r\n            newY = getVerticalCoordinate(y);\r\n          } else {\r\n            newX = scale(prevWidth - lineWidths[i]);\r\n            newY = -leading;\r\n          }\r\n          text.push([da[i], newX, newY]);\r\n          prevWidth = lineWidths[i];\r\n        }\r\n      } else if (align === \"center\") {\r\n        //The passed in x coordinate defines\r\n        //the center point.\r\n        x -= lineWidths[0] / 2;\r\n        text = [];\r\n        len = da.length;\r\n        for (var j = 0; j < len; j++) {\r\n          if (j === 0) {\r\n            newX = getHorizontalCoordinate(x);\r\n            newY = getVerticalCoordinate(y);\r\n          } else {\r\n            newX = scale((prevWidth - lineWidths[j]) / 2);\r\n            newY = -leading;\r\n          }\r\n          text.push([da[j], newX, newY]);\r\n          prevWidth = lineWidths[j];\r\n        }\r\n      } else if (align === \"left\") {\r\n        text = [];\r\n        len = da.length;\r\n        for (var h = 0; h < len; h++) {\r\n          text.push(da[h]);\r\n        }\r\n      } else if (align === \"justify\") {\r\n        text = [];\r\n        len = da.length;\r\n        maxWidth = maxWidth !== 0 ? maxWidth : pageWidth;\r\n\r\n        for (var l = 0; l < len; l++) {\r\n          newY = l === 0 ? getVerticalCoordinate(y) : -leading;\r\n          newX = l === 0 ? getHorizontalCoordinate(x) : 0;\r\n          if (l < len - 1) {\r\n            wordSpacingPerLine.push(\r\n              hpf(\r\n                scale(\r\n                  (maxWidth - lineWidths[l]) / (da[l].split(\" \").length - 1)\r\n                )\r\n              )\r\n            );\r\n          } else {\r\n            wordSpacingPerLine.push(0);\r\n          }\r\n          text.push([da[l], newX, newY]);\r\n        }\r\n      } else {\r\n        throw new Error(\r\n          'Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".'\r\n        );\r\n      }\r\n    }\r\n\r\n    //R2L\r\n    var doReversing = typeof options.R2L === \"boolean\" ? options.R2L : R2L;\r\n    if (doReversing === true) {\r\n      text = processTextByFunction(text, function(text, posX, posY) {\r\n        return [\r\n          text\r\n            .split(\"\")\r\n            .reverse()\r\n            .join(\"\"),\r\n          posX,\r\n          posY\r\n        ];\r\n      });\r\n    }\r\n\r\n    //creating Payload-Object to make text byRef\r\n    payload = {\r\n      text: text,\r\n      x: x,\r\n      y: y,\r\n      options: options,\r\n      mutex: {\r\n        pdfEscape: pdfEscape,\r\n        activeFontKey: activeFontKey,\r\n        fonts: fonts,\r\n        activeFontSize: activeFontSize\r\n      }\r\n    };\r\n    events.publish(\"postProcessText\", payload);\r\n\r\n    text = payload.text;\r\n    isHex = payload.mutex.isHex || false;\r\n\r\n    //Escaping\r\n    var activeFontEncoding = fonts[activeFontKey].encoding;\r\n\r\n    if (\r\n      activeFontEncoding === \"WinAnsiEncoding\" ||\r\n      activeFontEncoding === \"StandardEncoding\"\r\n    ) {\r\n      text = processTextByFunction(text, function(text, posX, posY) {\r\n        return [ESC(text), posX, posY];\r\n      });\r\n    }\r\n\r\n    da = transformTextToSpecialArray(text);\r\n\r\n    text = [];\r\n    var STRING = 0;\r\n    var ARRAY = 1;\r\n    var variant = Array.isArray(da[0]) ? ARRAY : STRING;\r\n    var posX;\r\n    var posY;\r\n    var content;\r\n    var wordSpacing = \"\";\r\n\r\n    var generatePosition = function(\r\n      parmPosX,\r\n      parmPosY,\r\n      parmTransformationMatrix\r\n    ) {\r\n      var position = \"\";\r\n      if (parmTransformationMatrix instanceof Matrix) {\r\n        // It is kind of more intuitive to apply a plain rotation around the text anchor set by x and y\r\n        // but when the user supplies an arbitrary transformation matrix, the x and y offsets should be applied\r\n        // in the coordinate system established by this matrix\r\n        if (typeof options.angle === \"number\") {\r\n          parmTransformationMatrix = matrixMult(\r\n            parmTransformationMatrix,\r\n            new Matrix(1, 0, 0, 1, parmPosX, parmPosY)\r\n          );\r\n        } else {\r\n          parmTransformationMatrix = matrixMult(\r\n            new Matrix(1, 0, 0, 1, parmPosX, parmPosY),\r\n            parmTransformationMatrix\r\n          );\r\n        }\r\n\r\n        if (apiMode === ApiMode.ADVANCED) {\r\n          parmTransformationMatrix = matrixMult(\r\n            new Matrix(1, 0, 0, -1, 0, 0),\r\n            parmTransformationMatrix\r\n          );\r\n        }\r\n\r\n        position = parmTransformationMatrix.join(\" \") + \" Tm\\n\";\r\n      } else {\r\n        position = hpf(parmPosX) + \" \" + hpf(parmPosY) + \" Td\\n\";\r\n      }\r\n      return position;\r\n    };\r\n\r\n    for (var lineIndex = 0; lineIndex < da.length; lineIndex++) {\r\n      wordSpacing = \"\";\r\n\r\n      switch (variant) {\r\n        case ARRAY:\r\n          content =\r\n            (isHex ? \"<\" : \"(\") + da[lineIndex][0] + (isHex ? \">\" : \")\");\r\n          posX = parseFloat(da[lineIndex][1]);\r\n          posY = parseFloat(da[lineIndex][2]);\r\n          break;\r\n        case STRING:\r\n          content = (isHex ? \"<\" : \"(\") + da[lineIndex] + (isHex ? \">\" : \")\");\r\n          posX = getHorizontalCoordinate(x);\r\n          posY = getVerticalCoordinate(y);\r\n          break;\r\n      }\r\n\r\n      if (\r\n        typeof wordSpacingPerLine !== \"undefined\" &&\r\n        typeof wordSpacingPerLine[lineIndex] !== \"undefined\"\r\n      ) {\r\n        wordSpacing = wordSpacingPerLine[lineIndex] + \" Tw\\n\";\r\n      }\r\n\r\n      if (lineIndex === 0) {\r\n        text.push(\r\n          wordSpacing +\r\n            generatePosition(posX, posY, transformationMatrix) +\r\n            content\r\n        );\r\n      } else if (variant === STRING) {\r\n        text.push(wordSpacing + content);\r\n      } else if (variant === ARRAY) {\r\n        text.push(\r\n          wordSpacing +\r\n            generatePosition(posX, posY, transformationMatrix) +\r\n            content\r\n        );\r\n      }\r\n    }\r\n\r\n    text = variant === STRING ? text.join(\" Tj\\nT* \") : text.join(\" Tj\\n\");\r\n    text += \" Tj\\n\";\r\n\r\n    var result = \"BT\\n/\";\r\n    result += activeFontKey + \" \" + activeFontSize + \" Tf\\n\"; // font face, style, size\r\n    result += hpf(activeFontSize * lineHeight) + \" TL\\n\"; // line spacing\r\n    result += textColor + \"\\n\";\r\n    result += xtra;\r\n    result += text;\r\n    result += \"ET\";\r\n\r\n    out(result);\r\n    usedFonts[activeFontKey] = true;\r\n    return scope;\r\n  };\r\n\r\n  // PDF supports these path painting and clip path operators:\r\n  //\r\n  // S - stroke\r\n  // s - close/stroke\r\n  // f (F) - fill non-zero\r\n  // f* - fill evenodd\r\n  // B - fill stroke nonzero\r\n  // B* - fill stroke evenodd\r\n  // b - close fill stroke nonzero\r\n  // b* - close fill stroke evenodd\r\n  // n - nothing (consume path)\r\n  // W - clip nonzero\r\n  // W* - clip evenodd\r\n  //\r\n  // In order to keep the API small, we omit the close-and-fill/stroke operators and provide a separate close()\r\n  // method.\r\n  /**\r\n   *\r\n   * @name clip\r\n   * @function\r\n   * @instance\r\n   * @param {string} rule Only possible value is 'evenodd'\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @description All .clip() after calling drawing ops with a style argument of null.\r\n   */\r\n  var clip = (API.__private__.clip = API.clip = function(rule) {\r\n    // Call .clip() after calling drawing ops with a style argument of null\r\n    // W is the PDF clipping op\r\n    if (\"evenodd\" === rule) {\r\n      out(\"W*\");\r\n    } else {\r\n      out(\"W\");\r\n    }\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * @name clipEvenOdd\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @description Modify the current clip path by intersecting it with the current path using the even-odd rule. Note\r\n   * that this will NOT consume the current path. In order to only use this path for clipping call\r\n   * {@link API.discardPath} afterwards.\r\n   */\r\n  API.clipEvenOdd = function() {\r\n    return clip(\"evenodd\");\r\n  };\r\n\r\n  /**\r\n   * Consumes the current path without any effect. Mainly used in combination with {@link clip} or\r\n   * {@link clipEvenOdd}. The PDF \"n\" operator.\r\n   * @name discardPath\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.__private__.discardPath = API.discardPath = function() {\r\n    out(\"n\");\r\n    return this;\r\n  };\r\n\r\n  var isValidStyle = (API.__private__.isValidStyle = function(style) {\r\n    var validStyleVariants = [\r\n      undefined,\r\n      null,\r\n      \"S\",\r\n      \"D\",\r\n      \"F\",\r\n      \"DF\",\r\n      \"FD\",\r\n      \"f\",\r\n      \"f*\",\r\n      \"B\",\r\n      \"B*\",\r\n      \"n\"\r\n    ];\r\n    var result = false;\r\n    if (validStyleVariants.indexOf(style) !== -1) {\r\n      result = true;\r\n    }\r\n    return result;\r\n  });\r\n\r\n  API.__private__.setDefaultPathOperation = API.setDefaultPathOperation = function(\r\n    operator\r\n  ) {\r\n    if (isValidStyle(operator)) {\r\n      defaultPathOperation = operator;\r\n    }\r\n    return this;\r\n  };\r\n\r\n  var getStyle = (API.__private__.getStyle = API.getStyle = function(style) {\r\n    // see path-painting operators in PDF spec\r\n    var op = defaultPathOperation; // stroke\r\n\r\n    switch (style) {\r\n      case \"D\":\r\n      case \"S\":\r\n        op = \"S\"; // stroke\r\n        break;\r\n      case \"F\":\r\n        op = \"f\"; // fill\r\n        break;\r\n      case \"FD\":\r\n      case \"DF\":\r\n        op = \"B\";\r\n        break;\r\n      case \"f\":\r\n      case \"f*\":\r\n      case \"B\":\r\n      case \"B*\":\r\n        /*\r\n               Allow direct use of these PDF path-painting operators:\r\n               - f    fill using nonzero winding number rule\r\n               - f*    fill using even-odd rule\r\n               - B    fill then stroke with fill using non-zero winding number rule\r\n               - B*    fill then stroke with fill using even-odd rule\r\n               */\r\n        op = style;\r\n        break;\r\n    }\r\n    return op;\r\n  });\r\n\r\n  /**\r\n   * Close the current path. The PDF \"h\" operator.\r\n   * @name close\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  var close = (API.close = function() {\r\n    out(\"h\");\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * Stroke the path. The PDF \"S\" operator.\r\n   * @name stroke\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.stroke = function() {\r\n    out(\"S\");\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Fill the current path using the nonzero winding number rule. If a pattern is provided, the path will be filled\r\n   * with this pattern, otherwise with the current fill color. Equivalent to the PDF \"f\" operator.\r\n   * @name fill\r\n   * @function\r\n   * @instance\r\n   * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.fill = function(pattern) {\r\n    fillWithOptionalPattern(\"f\", pattern);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Fill the current path using the even-odd rule. The PDF f* operator.\r\n   * @see API.fill\r\n   * @name fillEvenOdd\r\n   * @function\r\n   * @instance\r\n   * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.fillEvenOdd = function(pattern) {\r\n    fillWithOptionalPattern(\"f*\", pattern);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Fill using the nonzero winding number rule and then stroke the current Path. The PDF \"B\" operator.\r\n   * @see API.fill\r\n   * @name fillStroke\r\n   * @function\r\n   * @instance\r\n   * @param {PatternData=} pattern If provided the path will be stroked with this pattern\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.fillStroke = function(pattern) {\r\n    fillWithOptionalPattern(\"B\", pattern);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Fill using the even-odd rule and then stroke the current Path. The PDF \"B\" operator.\r\n   * @see API.fill\r\n   * @name fillStrokeEvenOdd\r\n   * @function\r\n   * @instance\r\n   * @param {PatternData=} pattern If provided the path will be fill-stroked with this pattern\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.fillStrokeEvenOdd = function(pattern) {\r\n    fillWithOptionalPattern(\"B*\", pattern);\r\n    return this;\r\n  };\r\n\r\n  var fillWithOptionalPattern = function(style, pattern) {\r\n    if (typeof pattern === \"object\") {\r\n      fillWithPattern(pattern, style);\r\n    } else {\r\n      out(style);\r\n    }\r\n  };\r\n\r\n  var putStyle = function(style) {\r\n    if (\r\n      style === null ||\r\n      (apiMode === ApiMode.ADVANCED && style === undefined)\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    style = getStyle(style);\r\n\r\n    // stroking / filling / both the path\r\n    out(style);\r\n  };\r\n\r\n  function cloneTilingPattern(patternKey, boundingBox, xStep, yStep, matrix) {\r\n    var clone = new TilingPattern(\r\n      boundingBox || this.boundingBox,\r\n      xStep || this.xStep,\r\n      yStep || this.yStep,\r\n      this.gState,\r\n      matrix || this.matrix\r\n    );\r\n    clone.stream = this.stream;\r\n    var key = patternKey + \"$$\" + this.cloneIndex++ + \"$$\";\r\n    addPattern(key, clone);\r\n    return clone;\r\n  }\r\n\r\n  var fillWithPattern = function(patternData, style) {\r\n    var patternId = patternMap[patternData.key];\r\n    var pattern = patterns[patternId];\r\n\r\n    if (pattern instanceof ShadingPattern) {\r\n      out(\"q\");\r\n\r\n      out(clipRuleFromStyle(style));\r\n\r\n      if (pattern.gState) {\r\n        API.setGState(pattern.gState);\r\n      }\r\n      out(patternData.matrix.toString() + \" cm\");\r\n      out(\"/\" + patternId + \" sh\");\r\n      out(\"Q\");\r\n    } else if (pattern instanceof TilingPattern) {\r\n      // pdf draws patterns starting at the bottom left corner and they are not affected by the global transformation,\r\n      // so we must flip them\r\n      var matrix = new Matrix(1, 0, 0, -1, 0, getPageHeight());\r\n\r\n      if (patternData.matrix) {\r\n        matrix = matrix.multiply(patternData.matrix || identityMatrix);\r\n        // we cannot apply a matrix to the pattern on use so we must abuse the pattern matrix and create new instances\r\n        // for each use\r\n        patternId = cloneTilingPattern.call(\r\n          pattern,\r\n          patternData.key,\r\n          patternData.boundingBox,\r\n          patternData.xStep,\r\n          patternData.yStep,\r\n          matrix\r\n        ).id;\r\n      }\r\n\r\n      out(\"q\");\r\n      out(\"/Pattern cs\");\r\n      out(\"/\" + patternId + \" scn\");\r\n\r\n      if (pattern.gState) {\r\n        API.setGState(pattern.gState);\r\n      }\r\n\r\n      out(style);\r\n      out(\"Q\");\r\n    }\r\n  };\r\n\r\n  var clipRuleFromStyle = function(style) {\r\n    switch (style) {\r\n      case \"f\":\r\n      case \"F\":\r\n        return \"W n\";\r\n      case \"f*\":\r\n        return \"W* n\";\r\n      case \"B\":\r\n        return \"W S\";\r\n      case \"B*\":\r\n        return \"W* S\";\r\n\r\n      // these two are for compatibility reasons (in the past, calling any primitive method with a shading pattern\r\n      // and \"n\"/\"S\" as style would still fill/fill and stroke the path)\r\n      case \"S\":\r\n        return \"W S\";\r\n      case \"n\":\r\n        return \"W n\";\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Begin a new subpath by moving the current point to coordinates (x, y). The PDF \"m\" operator.\r\n   * @param {number} x\r\n   * @param {number} y\r\n   * @name moveTo\r\n   * @function\r\n   * @instance\r\n   * @memberof jsPDF#\r\n   * @returns {jsPDF}\r\n   */\r\n  var moveTo = (API.moveTo = function(x, y) {\r\n    out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" m\");\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * Append a straight line segment from the current point to the point (x, y). The PDF \"l\" operator.\r\n   * @param {number} x\r\n   * @param {number} y\r\n   * @memberof jsPDF#\r\n   * @name lineTo\r\n   * @function\r\n   * @instance\r\n   * @memberof jsPDF#\r\n   * @returns {jsPDF}\r\n   */\r\n  var lineTo = (API.lineTo = function(x, y) {\r\n    out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" l\");\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * Append a cubic Bézier curve to the current path. The curve shall extend from the current point to the point\r\n   * (x3, y3), using (x1, y1) and (x2, y2) as Bézier control points. The new current point shall be (x3, x3).\r\n   * @param {number} x1\r\n   * @param {number} y1\r\n   * @param {number} x2\r\n   * @param {number} y2\r\n   * @param {number} x3\r\n   * @param {number} y3\r\n   * @memberof jsPDF#\r\n   * @name curveTo\r\n   * @function\r\n   * @instance\r\n   * @memberof jsPDF#\r\n   * @returns {jsPDF}\r\n   */\r\n  var curveTo = (API.curveTo = function(x1, y1, x2, y2, x3, y3) {\r\n    out(\r\n      [\r\n        hpf(scale(x1)),\r\n        hpf(transformScaleY(y1)),\r\n        hpf(scale(x2)),\r\n        hpf(transformScaleY(y2)),\r\n        hpf(scale(x3)),\r\n        hpf(transformScaleY(y3)),\r\n        \"c\"\r\n      ].join(\" \")\r\n    );\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * Draw a line on the current page.\r\n   *\r\n   * @name line\r\n   * @function\r\n   * @instance\r\n   * @param {number} x1\r\n   * @param {number} y1\r\n   * @param {number} x2\r\n   * @param {number} y2\r\n   * @param {string} style A string specifying the painting style or null.  Valid styles include: 'S' [default] - stroke, 'F' - fill,  and 'DF' (or 'FD') -  fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument. default: 'S'\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   */\r\n  API.__private__.line = API.line = function(x1, y1, x2, y2, style) {\r\n    if (\r\n      isNaN(x1) ||\r\n      isNaN(y1) ||\r\n      isNaN(x2) ||\r\n      isNaN(y2) ||\r\n      !isValidStyle(style)\r\n    ) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.line\");\r\n    }\r\n    if (apiMode === ApiMode.COMPAT) {\r\n      return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1], style || \"S\");\r\n    } else {\r\n      return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1]).stroke();\r\n    }\r\n  };\r\n\r\n  /**\r\n   * @typedef {Object} PatternData\r\n   * {Matrix|undefined} matrix\r\n   * {Number|undefined} xStep\r\n   * {Number|undefined} yStep\r\n   * {Array.<Number>|undefined} boundingBox\r\n   */\r\n\r\n  /**\r\n   * Adds series of curves (straight lines or cubic bezier curves) to canvas, starting at `x`, `y` coordinates.\r\n   * All data points in `lines` are relative to last line origin.\r\n   * `x`, `y` become x1,y1 for first line / curve in the set.\r\n   * For lines you only need to specify [x2, y2] - (ending point) vector against x1, y1 starting point.\r\n   * For bezier curves you need to specify [x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All vectors are against the start of the curve - x1,y1.\r\n   *\r\n   * @example .lines([[2,2],[-2,2],[1,1,2,2,3,3],[2,1]], 212,110, [1,1], 'F', false) // line, line, bezier curve, line\r\n   * @param {Array} lines Array of *vector* shifts as pairs (lines) or sextets (cubic bezier curves).\r\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} scale (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can be any floating number Sub-one makes drawing smaller. Over-one grows the drawing. Negative flips the direction.\r\n   * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n   * 'S' [default] - stroke,\r\n   * 'F' - fill,\r\n   * and 'DF' (or 'FD') -  fill then stroke.\r\n   * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n   * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n   *\r\n   * In \"advanced\" API mode this parameter is deprecated.\r\n   * @param {Boolean=} closed If true, the path is closed with a straight line from the end of the last curve to the starting point.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name lines\r\n   */\r\n  API.__private__.lines = API.lines = function(\r\n    lines,\r\n    x,\r\n    y,\r\n    scale,\r\n    style,\r\n    closed\r\n  ) {\r\n    var scalex, scaley, i, l, leg, x2, y2, x3, y3, x4, y4, tmp;\r\n\r\n    // Pre-August-2012 the order of arguments was function(x, y, lines, scale, style)\r\n    // in effort to make all calls have similar signature like\r\n    //   function(content, coordinateX, coordinateY , miscellaneous)\r\n    // this method had its args flipped.\r\n    // code below allows backward compatibility with old arg order.\r\n    if (typeof lines === \"number\") {\r\n      tmp = y;\r\n      y = x;\r\n      x = lines;\r\n      lines = tmp;\r\n    }\r\n\r\n    scale = scale || [1, 1];\r\n    closed = closed || false;\r\n\r\n    if (\r\n      isNaN(x) ||\r\n      isNaN(y) ||\r\n      !Array.isArray(lines) ||\r\n      !Array.isArray(scale) ||\r\n      !isValidStyle(style) ||\r\n      typeof closed !== \"boolean\"\r\n    ) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.lines\");\r\n    }\r\n\r\n    // starting point\r\n    moveTo(x, y);\r\n\r\n    scalex = scale[0];\r\n    scaley = scale[1];\r\n    l = lines.length;\r\n    //, x2, y2 // bezier only. In page default measurement \"units\", *after* scaling\r\n    //, x3, y3 // bezier only. In page default measurement \"units\", *after* scaling\r\n    // ending point for all, lines and bezier. . In page default measurement \"units\", *after* scaling\r\n    x4 = x; // last / ending point = starting point for first item.\r\n    y4 = y; // last / ending point = starting point for first item.\r\n\r\n    for (i = 0; i < l; i++) {\r\n      leg = lines[i];\r\n      if (leg.length === 2) {\r\n        // simple line\r\n        x4 = leg[0] * scalex + x4; // here last x4 was prior ending point\r\n        y4 = leg[1] * scaley + y4; // here last y4 was prior ending point\r\n        lineTo(x4, y4);\r\n      } else {\r\n        // bezier curve\r\n        x2 = leg[0] * scalex + x4; // here last x4 is prior ending point\r\n        y2 = leg[1] * scaley + y4; // here last y4 is prior ending point\r\n        x3 = leg[2] * scalex + x4; // here last x4 is prior ending point\r\n        y3 = leg[3] * scaley + y4; // here last y4 is prior ending point\r\n        x4 = leg[4] * scalex + x4; // here last x4 was prior ending point\r\n        y4 = leg[5] * scaley + y4; // here last y4 was prior ending point\r\n        curveTo(x2, y2, x3, y3, x4, y4);\r\n      }\r\n    }\r\n\r\n    if (closed) {\r\n      close();\r\n    }\r\n\r\n    putStyle(style);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Similar to {@link API.lines} but all coordinates are interpreted as absolute coordinates instead of relative.\r\n   * @param {Array<Object>} lines An array of {op: operator, c: coordinates} object, where op is one of \"m\" (move to), \"l\" (line to)\r\n   * \"c\" (cubic bezier curve) and \"h\" (close (sub)path)). c is an array of coordinates. \"m\" and \"l\" expect two, \"c\"\r\n   * six and \"h\" an empty array (or undefined).\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name path\r\n   */\r\n  API.path = function(lines) {\r\n    for (var i = 0; i < lines.length; i++) {\r\n      var leg = lines[i];\r\n      var coords = leg.c;\r\n      switch (leg.op) {\r\n        case \"m\":\r\n          moveTo(coords[0], coords[1]);\r\n          break;\r\n        case \"l\":\r\n          lineTo(coords[0], coords[1]);\r\n          break;\r\n        case \"c\":\r\n          curveTo.apply(this, coords);\r\n          break;\r\n        case \"h\":\r\n          close();\r\n          break;\r\n      }\r\n    }\r\n\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Adds a rectangle to PDF.\r\n   *\r\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} w Width (in units declared at inception of PDF document)\r\n   * @param {number} h Height (in units declared at inception of PDF document)\r\n   * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n   * 'S' [default] - stroke,\r\n   * 'F' - fill,\r\n   * and 'DF' (or 'FD') -  fill then stroke.\r\n   * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n   * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n   *\r\n   * In \"advanced\" API mode this parameter is deprecated.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name rect\r\n   */\r\n  API.__private__.rect = API.rect = function(x, y, w, h, style) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || !isValidStyle(style)) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.rect\");\r\n    }\r\n    if (apiMode === ApiMode.COMPAT) {\r\n      h = -h;\r\n    }\r\n\r\n    out(\r\n      [\r\n        hpf(scale(x)),\r\n        hpf(transformScaleY(y)),\r\n        hpf(scale(w)),\r\n        hpf(scale(h)),\r\n        \"re\"\r\n      ].join(\" \")\r\n    );\r\n\r\n    putStyle(style);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Adds a triangle to PDF.\r\n   *\r\n   * @param {number} x1 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y1 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} x2 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y2 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} x3 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y3 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n   * 'S' [default] - stroke,\r\n   * 'F' - fill,\r\n   * and 'DF' (or 'FD') -  fill then stroke.\r\n   * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n   * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n   *\r\n   * In \"advanced\" API mode this parameter is deprecated.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name triangle\r\n   */\r\n  API.__private__.triangle = API.triangle = function(\r\n    x1,\r\n    y1,\r\n    x2,\r\n    y2,\r\n    x3,\r\n    y3,\r\n    style\r\n  ) {\r\n    if (\r\n      isNaN(x1) ||\r\n      isNaN(y1) ||\r\n      isNaN(x2) ||\r\n      isNaN(y2) ||\r\n      isNaN(x3) ||\r\n      isNaN(y3) ||\r\n      !isValidStyle(style)\r\n    ) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.triangle\");\r\n    }\r\n    this.lines(\r\n      [\r\n        [x2 - x1, y2 - y1], // vector to point 2\r\n        [x3 - x2, y3 - y2], // vector to point 3\r\n        [x1 - x3, y1 - y3] // closing vector back to point 1\r\n      ],\r\n      x1,\r\n      y1, // start of path\r\n      [1, 1],\r\n      style,\r\n      true\r\n    );\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Adds a rectangle with rounded corners to PDF.\r\n   *\r\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} w Width (in units declared at inception of PDF document)\r\n   * @param {number} h Height (in units declared at inception of PDF document)\r\n   * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n   * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n   * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n   * 'S' [default] - stroke,\r\n   * 'F' - fill,\r\n   * and 'DF' (or 'FD') -  fill then stroke.\r\n   * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n   * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n   *\r\n   * In \"advanced\" API mode this parameter is deprecated.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name roundedRect\r\n   */\r\n  API.__private__.roundedRect = API.roundedRect = function(\r\n    x,\r\n    y,\r\n    w,\r\n    h,\r\n    rx,\r\n    ry,\r\n    style\r\n  ) {\r\n    if (\r\n      isNaN(x) ||\r\n      isNaN(y) ||\r\n      isNaN(w) ||\r\n      isNaN(h) ||\r\n      isNaN(rx) ||\r\n      isNaN(ry) ||\r\n      !isValidStyle(style)\r\n    ) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");\r\n    }\r\n    var MyArc = (4 / 3) * (Math.SQRT2 - 1);\r\n\r\n    rx = Math.min(rx, w * 0.5);\r\n    ry = Math.min(ry, h * 0.5);\r\n\r\n    this.lines(\r\n      [\r\n        [w - 2 * rx, 0],\r\n        [rx * MyArc, 0, rx, ry - ry * MyArc, rx, ry],\r\n        [0, h - 2 * ry],\r\n        [0, ry * MyArc, -(rx * MyArc), ry, -rx, ry],\r\n        [-w + 2 * rx, 0],\r\n        [-(rx * MyArc), 0, -rx, -(ry * MyArc), -rx, -ry],\r\n        [0, -h + 2 * ry],\r\n        [0, -(ry * MyArc), rx * MyArc, -ry, rx, -ry]\r\n      ],\r\n      x + rx,\r\n      y, // start of path\r\n      [1, 1],\r\n      style,\r\n      true\r\n    );\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Adds an ellipse to PDF.\r\n   *\r\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n   * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n   * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n   * 'S' [default] - stroke,\r\n   * 'F' - fill,\r\n   * and 'DF' (or 'FD') -  fill then stroke.\r\n   * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n   * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n   *\r\n   * In \"advanced\" API mode this parameter is deprecated.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name ellipse\r\n   */\r\n  API.__private__.ellipse = API.ellipse = function(x, y, rx, ry, style) {\r\n    if (\r\n      isNaN(x) ||\r\n      isNaN(y) ||\r\n      isNaN(rx) ||\r\n      isNaN(ry) ||\r\n      !isValidStyle(style)\r\n    ) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");\r\n    }\r\n    var lx = (4 / 3) * (Math.SQRT2 - 1) * rx,\r\n      ly = (4 / 3) * (Math.SQRT2 - 1) * ry;\r\n\r\n    moveTo(x + rx, y);\r\n    curveTo(x + rx, y - ly, x + lx, y - ry, x, y - ry);\r\n    curveTo(x - lx, y - ry, x - rx, y - ly, x - rx, y);\r\n    curveTo(x - rx, y + ly, x - lx, y + ry, x, y + ry);\r\n    curveTo(x + lx, y + ry, x + rx, y + ly, x + rx, y);\r\n\r\n    putStyle(style);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Adds an circle to PDF.\r\n   *\r\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n   * @param {number} r Radius (in units declared at inception of PDF document)\r\n   * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n   * 'S' [default] - stroke,\r\n   * 'F' - fill,\r\n   * and 'DF' (or 'FD') -  fill then stroke.\r\n   * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n   * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n   *\r\n   * In \"advanced\" API mode this parameter is deprecated.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name circle\r\n   */\r\n  API.__private__.circle = API.circle = function(x, y, r, style) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(r) || !isValidStyle(style)) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.circle\");\r\n    }\r\n    return this.ellipse(x, y, r, r, style);\r\n  };\r\n\r\n  /**\r\n   * Sets text font face, variant for upcoming text elements.\r\n   * See output of jsPDF.getFontList() for possible font names, styles.\r\n   *\r\n   * @param {string} fontName Font name or family. Example: \"times\".\r\n   * @param {string} fontStyle Font style or variant. Example: \"italic\".\r\n   * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setFont\r\n   */\r\n  API.setFont = function(fontName, fontStyle, fontWeight) {\r\n    if (fontWeight) {\r\n      fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n    }\r\n    activeFontKey = getFont(fontName, fontStyle, {\r\n      disableWarning: false\r\n    });\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Gets text font face, variant for upcoming text elements.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {Object}\r\n   * @memberof jsPDF#\r\n   * @name getFont\r\n   */\r\n  var getFontEntry = (API.__private__.getFont = API.getFont = function() {\r\n    return fonts[getFont.apply(API, arguments)];\r\n  });\r\n\r\n  /**\r\n   * Returns an object - a tree of fontName to fontStyle relationships available to\r\n   * active PDF document.\r\n   *\r\n   * @public\r\n   * @function\r\n   * @instance\r\n   * @returns {Object} Like {'times':['normal', 'italic', ... ], 'arial':['normal', 'bold', ... ], ... }\r\n   * @memberof jsPDF#\r\n   * @name getFontList\r\n   */\r\n  API.__private__.getFontList = API.getFontList = function() {\r\n    var list = {},\r\n      fontName,\r\n      fontStyle;\r\n\r\n    for (fontName in fontmap) {\r\n      if (fontmap.hasOwnProperty(fontName)) {\r\n        list[fontName] = [];\r\n        for (fontStyle in fontmap[fontName]) {\r\n          if (fontmap[fontName].hasOwnProperty(fontStyle)) {\r\n            list[fontName].push(fontStyle);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return list;\r\n  };\r\n\r\n  /**\r\n   * Add a custom font to the current instance.\r\n   *\r\n   * @param {string} postScriptName PDF specification full name for the font.\r\n   * @param {string} id PDF-document-instance-specific label assinged to the font.\r\n   * @param {string} fontStyle Style of the Font.\r\n   * @param {number | string} fontWeight Weight of the Font.\r\n   * @param {Object} encoding Encoding_name-to-Font_metrics_object mapping.\r\n   * @function\r\n   * @instance\r\n   * @memberof jsPDF#\r\n   * @name addFont\r\n   * @returns {string} fontId\r\n   */\r\n  API.addFont = function(\r\n    postScriptName,\r\n    fontName,\r\n    fontStyle,\r\n    fontWeight,\r\n    encoding\r\n  ) {\r\n    var encodingOptions = [\r\n      \"StandardEncoding\",\r\n      \"MacRomanEncoding\",\r\n      \"Identity-H\",\r\n      \"WinAnsiEncoding\"\r\n    ];\r\n    if (arguments[3] && encodingOptions.indexOf(arguments[3]) !== -1) {\r\n      //IE 11 fix\r\n      encoding = arguments[3];\r\n    } else if (arguments[3] && encodingOptions.indexOf(arguments[3]) == -1) {\r\n      fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n    }\r\n    encoding = encoding || \"Identity-H\";\r\n    return addFont.call(this, postScriptName, fontName, fontStyle, encoding);\r\n  };\r\n\r\n  var lineWidth = options.lineWidth || 0.200025; // 2mm\r\n  /**\r\n   * Gets the line width, default: 0.200025.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {number} lineWidth\r\n   * @memberof jsPDF#\r\n   * @name getLineWidth\r\n   */\r\n  var getLineWidth = (API.__private__.getLineWidth = API.getLineWidth = function() {\r\n    return lineWidth;\r\n  });\r\n\r\n  /**\r\n   * Sets line width for upcoming lines.\r\n   *\r\n   * @param {number} width Line width (in units declared at inception of PDF document).\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setLineWidth\r\n   */\r\n  var setLineWidth = (API.__private__.setLineWidth = API.setLineWidth = function(\r\n    width\r\n  ) {\r\n    lineWidth = width;\r\n    out(hpf(scale(width)) + \" w\");\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * Sets the dash pattern for upcoming lines.\r\n   *\r\n   * To reset the settings simply call the method without any parameters.\r\n   * @param {Array<number>} dashArray An array containing 0-2 numbers. The first number sets the length of the\r\n   * dashes, the second number the length of the gaps. If the second number is missing, the gaps are considered\r\n   * to be as long as the dashes. An empty array means solid, unbroken lines.\r\n   * @param {number} dashPhase The phase lines start with.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setLineDashPattern\r\n   */\r\n  API.__private__.setLineDash = jsPDF.API.setLineDash = jsPDF.API.setLineDashPattern = function(\r\n    dashArray,\r\n    dashPhase\r\n  ) {\r\n    dashArray = dashArray || [];\r\n    dashPhase = dashPhase || 0;\r\n\r\n    if (isNaN(dashPhase) || !Array.isArray(dashArray)) {\r\n      throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");\r\n    }\r\n\r\n    dashArray = dashArray\r\n      .map(function(x) {\r\n        return hpf(scale(x));\r\n      })\r\n      .join(\" \");\r\n    dashPhase = hpf(scale(dashPhase));\r\n\r\n    out(\"[\" + dashArray + \"] \" + dashPhase + \" d\");\r\n    return this;\r\n  };\r\n\r\n  var lineHeightFactor;\r\n\r\n  var getLineHeight = (API.__private__.getLineHeight = API.getLineHeight = function() {\r\n    return activeFontSize * lineHeightFactor;\r\n  });\r\n\r\n  API.__private__.getLineHeight = API.getLineHeight = function() {\r\n    return activeFontSize * lineHeightFactor;\r\n  };\r\n\r\n  /**\r\n   * Sets the LineHeightFactor of proportion.\r\n   *\r\n   * @param {number} value LineHeightFactor value. Default: 1.15.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setLineHeightFactor\r\n   */\r\n  var setLineHeightFactor = (API.__private__.setLineHeightFactor = API.setLineHeightFactor = function(\r\n    value\r\n  ) {\r\n    value = value || 1.15;\r\n    if (typeof value === \"number\") {\r\n      lineHeightFactor = value;\r\n    }\r\n    return this;\r\n  });\r\n\r\n  /**\r\n   * Gets the LineHeightFactor, default: 1.15.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {number} lineHeightFactor\r\n   * @memberof jsPDF#\r\n   * @name getLineHeightFactor\r\n   */\r\n  var getLineHeightFactor = (API.__private__.getLineHeightFactor = API.getLineHeightFactor = function() {\r\n    return lineHeightFactor;\r\n  });\r\n\r\n  setLineHeightFactor(options.lineHeight);\r\n\r\n  var getHorizontalCoordinate = (API.__private__.getHorizontalCoordinate = function(\r\n    value\r\n  ) {\r\n    return scale(value);\r\n  });\r\n\r\n  var getVerticalCoordinate = (API.__private__.getVerticalCoordinate = function(\r\n    value\r\n  ) {\r\n    if (apiMode === ApiMode.ADVANCED) {\r\n      return value;\r\n    } else {\r\n      var pageHeight =\r\n        pagesContext[currentPage].mediaBox.topRightY -\r\n        pagesContext[currentPage].mediaBox.bottomLeftY;\r\n      return pageHeight - scale(value);\r\n    }\r\n  });\r\n\r\n  var getHorizontalCoordinateString = (API.__private__.getHorizontalCoordinateString = API.getHorizontalCoordinateString = function(\r\n    value\r\n  ) {\r\n    return hpf(getHorizontalCoordinate(value));\r\n  });\r\n\r\n  var getVerticalCoordinateString = (API.__private__.getVerticalCoordinateString = API.getVerticalCoordinateString = function(\r\n    value\r\n  ) {\r\n    return hpf(getVerticalCoordinate(value));\r\n  });\r\n\r\n  var strokeColor = options.strokeColor || \"0 G\";\r\n\r\n  /**\r\n   *  Gets the stroke color for upcoming elements.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {string} colorAsHex\r\n   * @memberof jsPDF#\r\n   * @name getDrawColor\r\n   */\r\n  API.__private__.getStrokeColor = API.getDrawColor = function() {\r\n    return decodeColorString(strokeColor);\r\n  };\r\n\r\n  /**\r\n   * Sets the stroke color for upcoming elements.\r\n   *\r\n   * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n   * color space is implied.\r\n   *\r\n   * When only ch1 is given, \"Gray\" color space is implied and it\r\n   * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n   * if values are communicated as String types, or in range from 0 (black)\r\n   * to 255 (white) if communicated as Number type.\r\n   * The RGB-like 0-255 range is provided for backward compatibility.\r\n   *\r\n   * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n   * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n   * (max intensity) if values are communicated as String types, or\r\n   * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n   * as Number types.\r\n   * The RGB-like 0-255 range is provided for backward compatibility.\r\n   *\r\n   * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n   * value must be a in the range from 0.00 (0% concentration) to to\r\n   * 1.00 (100% concentration)\r\n   *\r\n   * Because JavaScript treats fixed point numbers badly (rounds to\r\n   * floating point nearest to binary representation) it is highly advised to\r\n   * communicate the fractional numbers as String types, not JavaScript Number type.\r\n   *\r\n   * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n   * @param {Number} ch2 Color channel value.\r\n   * @param {Number} ch3 Color channel value.\r\n   * @param {Number} ch4 Color channel value.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setDrawColor\r\n   */\r\n  API.__private__.setStrokeColor = API.setDrawColor = function(\r\n    ch1,\r\n    ch2,\r\n    ch3,\r\n    ch4\r\n  ) {\r\n    var options = {\r\n      ch1: ch1,\r\n      ch2: ch2,\r\n      ch3: ch3,\r\n      ch4: ch4,\r\n      pdfColorType: \"draw\",\r\n      precision: 2\r\n    };\r\n\r\n    strokeColor = encodeColorString(options);\r\n    out(strokeColor);\r\n    return this;\r\n  };\r\n\r\n  var fillColor = options.fillColor || \"0 g\";\r\n\r\n  /**\r\n   * Gets the fill color for upcoming elements.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {string} colorAsHex\r\n   * @memberof jsPDF#\r\n   * @name getFillColor\r\n   */\r\n  API.__private__.getFillColor = API.getFillColor = function() {\r\n    return decodeColorString(fillColor);\r\n  };\r\n\r\n  /**\r\n   * Sets the fill color for upcoming elements.\r\n   *\r\n   * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n   * color space is implied.\r\n   *\r\n   * When only ch1 is given, \"Gray\" color space is implied and it\r\n   * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n   * if values are communicated as String types, or in range from 0 (black)\r\n   * to 255 (white) if communicated as Number type.\r\n   * The RGB-like 0-255 range is provided for backward compatibility.\r\n   *\r\n   * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n   * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n   * (max intensity) if values are communicated as String types, or\r\n   * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n   * as Number types.\r\n   * The RGB-like 0-255 range is provided for backward compatibility.\r\n   *\r\n   * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n   * value must be a in the range from 0.00 (0% concentration) to to\r\n   * 1.00 (100% concentration)\r\n   *\r\n   * Because JavaScript treats fixed point numbers badly (rounds to\r\n   * floating point nearest to binary representation) it is highly advised to\r\n   * communicate the fractional numbers as String types, not JavaScript Number type.\r\n   *\r\n   * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n   * @param {Number} ch2 Color channel value.\r\n   * @param {Number} ch3 Color channel value.\r\n   * @param {Number} ch4 Color channel value.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setFillColor\r\n   */\r\n  API.__private__.setFillColor = API.setFillColor = function(\r\n    ch1,\r\n    ch2,\r\n    ch3,\r\n    ch4\r\n  ) {\r\n    var options = {\r\n      ch1: ch1,\r\n      ch2: ch2,\r\n      ch3: ch3,\r\n      ch4: ch4,\r\n      pdfColorType: \"fill\",\r\n      precision: 2\r\n    };\r\n\r\n    fillColor = encodeColorString(options);\r\n    out(fillColor);\r\n    return this;\r\n  };\r\n\r\n  var textColor = options.textColor || \"0 g\";\r\n  /**\r\n   * Gets the text color for upcoming elements.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {string} colorAsHex\r\n   * @memberof jsPDF#\r\n   * @name getTextColor\r\n   */\r\n  var getTextColor = (API.__private__.getTextColor = API.getTextColor = function() {\r\n    return decodeColorString(textColor);\r\n  });\r\n  /**\r\n   * Sets the text color for upcoming elements.\r\n   *\r\n   * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n   * color space is implied.\r\n   *\r\n   * When only ch1 is given, \"Gray\" color space is implied and it\r\n   * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n   * if values are communicated as String types, or in range from 0 (black)\r\n   * to 255 (white) if communicated as Number type.\r\n   * The RGB-like 0-255 range is provided for backward compatibility.\r\n   *\r\n   * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n   * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n   * (max intensity) if values are communicated as String types, or\r\n   * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n   * as Number types.\r\n   * The RGB-like 0-255 range is provided for backward compatibility.\r\n   *\r\n   * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n   * value must be a in the range from 0.00 (0% concentration) to to\r\n   * 1.00 (100% concentration)\r\n   *\r\n   * Because JavaScript treats fixed point numbers badly (rounds to\r\n   * floating point nearest to binary representation) it is highly advised to\r\n   * communicate the fractional numbers as String types, not JavaScript Number type.\r\n   *\r\n   * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n   * @param {Number} ch2 Color channel value.\r\n   * @param {Number} ch3 Color channel value.\r\n   * @param {Number} ch4 Color channel value.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setTextColor\r\n   */\r\n  API.__private__.setTextColor = API.setTextColor = function(\r\n    ch1,\r\n    ch2,\r\n    ch3,\r\n    ch4\r\n  ) {\r\n    var options = {\r\n      ch1: ch1,\r\n      ch2: ch2,\r\n      ch3: ch3,\r\n      ch4: ch4,\r\n      pdfColorType: \"text\",\r\n      precision: 3\r\n    };\r\n    textColor = encodeColorString(options);\r\n\r\n    return this;\r\n  };\r\n\r\n  var activeCharSpace = options.charSpace;\r\n\r\n  /**\r\n   * Get global value of CharSpace.\r\n   *\r\n   * @function\r\n   * @instance\r\n   * @returns {number} charSpace\r\n   * @memberof jsPDF#\r\n   * @name getCharSpace\r\n   */\r\n  var getCharSpace = (API.__private__.getCharSpace = API.getCharSpace = function() {\r\n    return parseFloat(activeCharSpace || 0);\r\n  });\r\n\r\n  /**\r\n   * Set global value of CharSpace.\r\n   *\r\n   * @param {number} charSpace\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF} jsPDF-instance\r\n   * @memberof jsPDF#\r\n   * @name setCharSpace\r\n   */\r\n  API.__private__.setCharSpace = API.setCharSpace = function(charSpace) {\r\n    if (isNaN(charSpace)) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");\r\n    }\r\n    activeCharSpace = charSpace;\r\n    return this;\r\n  };\r\n\r\n  var lineCapID = 0;\r\n  /**\r\n   * Is an Object providing a mapping from human-readable to\r\n   * integer flag values designating the varieties of line cap\r\n   * and join styles.\r\n   *\r\n   * @memberof jsPDF#\r\n   * @name CapJoinStyles\r\n   */\r\n  API.CapJoinStyles = {\r\n    0: 0,\r\n    butt: 0,\r\n    but: 0,\r\n    miter: 0,\r\n    1: 1,\r\n    round: 1,\r\n    rounded: 1,\r\n    circle: 1,\r\n    2: 2,\r\n    projecting: 2,\r\n    project: 2,\r\n    square: 2,\r\n    bevel: 2\r\n  };\r\n\r\n  /**\r\n   * Sets the line cap styles.\r\n   * See {jsPDF.CapJoinStyles} for variants.\r\n   *\r\n   * @param {String|Number} style A string or number identifying the type of line cap.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setLineCap\r\n   */\r\n  API.__private__.setLineCap = API.setLineCap = function(style) {\r\n    var id = API.CapJoinStyles[style];\r\n    if (id === undefined) {\r\n      throw new Error(\r\n        \"Line cap style of '\" +\r\n          style +\r\n          \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n      );\r\n    }\r\n    lineCapID = id;\r\n    out(id + \" J\");\r\n\r\n    return this;\r\n  };\r\n\r\n  var lineJoinID = 0;\r\n  /**\r\n   * Sets the line join styles.\r\n   * See {jsPDF.CapJoinStyles} for variants.\r\n   *\r\n   * @param {String|Number} style A string or number identifying the type of line join.\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setLineJoin\r\n   */\r\n  API.__private__.setLineJoin = API.setLineJoin = function(style) {\r\n    var id = API.CapJoinStyles[style];\r\n    if (id === undefined) {\r\n      throw new Error(\r\n        \"Line join style of '\" +\r\n          style +\r\n          \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n      );\r\n    }\r\n    lineJoinID = id;\r\n    out(id + \" j\");\r\n\r\n    return this;\r\n  };\r\n\r\n  var miterLimit;\r\n  /**\r\n   * Sets the miterLimit property, which effects the maximum miter length.\r\n   *\r\n   * @param {number} length The length of the miter\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setLineMiterLimit\r\n   */\r\n  API.__private__.setLineMiterLimit = API.__private__.setMiterLimit = API.setLineMiterLimit = API.setMiterLimit = function(\r\n    length\r\n  ) {\r\n    length = length || 0;\r\n    if (isNaN(length)) {\r\n      throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");\r\n    }\r\n    out(hpf(scale(length)) + \" M\");\r\n\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * An object representing a pdf graphics state.\r\n   * @class GState\r\n   */\r\n\r\n  /**\r\n   *\r\n   * @param parameters A parameter object that contains all properties this graphics state wants to set.\r\n   * Supported are: opacity, stroke-opacity\r\n   * @constructor\r\n   */\r\n  API.GState = GState;\r\n\r\n  /**\r\n   * Sets a either previously added {@link GState} (via {@link addGState}) or a new {@link GState}.\r\n   * @param {String|GState} gState If type is string, a previously added GState is used, if type is GState\r\n   * it will be added before use.\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setGState\r\n   */\r\n  API.setGState = function(gState) {\r\n    if (typeof gState === \"string\") {\r\n      gState = gStates[gStatesMap[gState]];\r\n    } else {\r\n      gState = addGState(null, gState);\r\n    }\r\n\r\n    if (!gState.equals(activeGState)) {\r\n      out(\"/\" + gState.id + \" gs\");\r\n      activeGState = gState;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Adds a new Graphics State. Duplicates are automatically eliminated.\r\n   * @param {String} key Might also be null, if no later reference to this gState is needed\r\n   * @param {Object} gState The gState object\r\n   */\r\n  var addGState = function(key, gState) {\r\n    // only add it if it is not already present (the keys provided by the user must be unique!)\r\n    if (key && gStatesMap[key]) return;\r\n    var duplicate = false;\r\n    for (var s in gStates) {\r\n      if (gStates.hasOwnProperty(s)) {\r\n        if (gStates[s].equals(gState)) {\r\n          duplicate = true;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (duplicate) {\r\n      gState = gStates[s];\r\n    } else {\r\n      var gStateKey = \"GS\" + (Object.keys(gStates).length + 1).toString(10);\r\n      gStates[gStateKey] = gState;\r\n      gState.id = gStateKey;\r\n    }\r\n\r\n    // several user keys may point to the same GState object\r\n    key && (gStatesMap[key] = gState.id);\r\n\r\n    events.publish(\"addGState\", gState);\r\n\r\n    return gState;\r\n  };\r\n\r\n  /**\r\n   * Adds a new {@link GState} for later use. See {@link setGState}.\r\n   * @param {String} key\r\n   * @param {GState} gState\r\n   * @function\r\n   * @instance\r\n   * @returns {jsPDF}\r\n   *\r\n   * @memberof jsPDF#\r\n   * @name addGState\r\n   */\r\n  API.addGState = function(key, gState) {\r\n    addGState(key, gState);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Saves the current graphics state (\"pushes it on the stack\"). It can be restored by {@link restoreGraphicsState}\r\n   * later. Here, the general pdf graphics state is meant, also including the current transformation matrix,\r\n   * fill and stroke colors etc.\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name saveGraphicsState\r\n   */\r\n  API.saveGraphicsState = function() {\r\n    out(\"q\");\r\n    // as we cannot set font key and size independently we must keep track of both\r\n    fontStateStack.push({\r\n      key: activeFontKey,\r\n      size: activeFontSize,\r\n      color: textColor\r\n    });\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Restores a previously saved graphics state saved by {@link saveGraphicsState} (\"pops the stack\").\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name restoreGraphicsState\r\n   */\r\n  API.restoreGraphicsState = function() {\r\n    out(\"Q\");\r\n\r\n    // restore previous font state\r\n    var fontState = fontStateStack.pop();\r\n    activeFontKey = fontState.key;\r\n    activeFontSize = fontState.size;\r\n    textColor = fontState.color;\r\n\r\n    activeGState = null;\r\n\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Appends this matrix to the left of all previously applied matrices.\r\n   *\r\n   * @param {Matrix} matrix\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name setCurrentTransformationMatrix\r\n   */\r\n  API.setCurrentTransformationMatrix = function(matrix) {\r\n    out(matrix.toString() + \" cm\");\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Inserts a debug comment into the generated pdf.\r\n   * @function\r\n   * @instance\r\n   * @param {String} text\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name comment\r\n   */\r\n  API.comment = function(text) {\r\n    out(\"#\" + text);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Point\r\n   */\r\n  var Point = function(x, y) {\r\n    var _x = x || 0;\r\n    Object.defineProperty(this, \"x\", {\r\n      enumerable: true,\r\n      get: function() {\r\n        return _x;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          _x = parseFloat(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    var _y = y || 0;\r\n    Object.defineProperty(this, \"y\", {\r\n      enumerable: true,\r\n      get: function() {\r\n        return _y;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          _y = parseFloat(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    var _type = \"pt\";\r\n    Object.defineProperty(this, \"type\", {\r\n      enumerable: true,\r\n      get: function() {\r\n        return _type;\r\n      },\r\n      set: function(value) {\r\n        _type = value.toString();\r\n      }\r\n    });\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Rectangle\r\n   */\r\n  var Rectangle = function(x, y, w, h) {\r\n    Point.call(this, x, y);\r\n    this.type = \"rect\";\r\n\r\n    var _w = w || 0;\r\n    Object.defineProperty(this, \"w\", {\r\n      enumerable: true,\r\n      get: function() {\r\n        return _w;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          _w = parseFloat(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    var _h = h || 0;\r\n    Object.defineProperty(this, \"h\", {\r\n      enumerable: true,\r\n      get: function() {\r\n        return _h;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          _h = parseFloat(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * FormObject/RenderTarget\r\n   */\r\n\r\n  var RenderTarget = function() {\r\n    this.page = page;\r\n    this.currentPage = currentPage;\r\n    this.pages = pages.slice(0);\r\n    this.pagesContext = pagesContext.slice(0);\r\n    this.x = pageX;\r\n    this.y = pageY;\r\n    this.matrix = pageMatrix;\r\n    this.width = getPageWidth(currentPage);\r\n    this.height = getPageHeight(currentPage);\r\n    this.outputDestination = outputDestination;\r\n\r\n    this.id = \"\"; // set by endFormObject()\r\n    this.objectNumber = -1; // will be set by putXObject()\r\n  };\r\n\r\n  RenderTarget.prototype.restore = function() {\r\n    page = this.page;\r\n    currentPage = this.currentPage;\r\n    pagesContext = this.pagesContext;\r\n    pages = this.pages;\r\n    pageX = this.x;\r\n    pageY = this.y;\r\n    pageMatrix = this.matrix;\r\n    setPageWidth(currentPage, this.width);\r\n    setPageHeight(currentPage, this.height);\r\n    outputDestination = this.outputDestination;\r\n  };\r\n\r\n  var beginNewRenderTarget = function(x, y, width, height, matrix) {\r\n    // save current state\r\n    renderTargetStack.push(new RenderTarget());\r\n\r\n    // clear pages\r\n    page = currentPage = 0;\r\n    pages = [];\r\n    pageX = x;\r\n    pageY = y;\r\n\r\n    pageMatrix = matrix;\r\n\r\n    beginPage([width, height]);\r\n  };\r\n\r\n  var endFormObject = function(key) {\r\n    // only add it if it is not already present (the keys provided by the user must be unique!)\r\n    if (renderTargetMap[key]) {\r\n      renderTargetStack.pop().restore();\r\n      return;\r\n    }\r\n\r\n    // save the created xObject\r\n    var newXObject = new RenderTarget();\r\n\r\n    var xObjectId = \"Xo\" + (Object.keys(renderTargets).length + 1).toString(10);\r\n    newXObject.id = xObjectId;\r\n\r\n    renderTargetMap[key] = xObjectId;\r\n    renderTargets[xObjectId] = newXObject;\r\n\r\n    events.publish(\"addFormObject\", newXObject);\r\n\r\n    // restore state from stack\r\n    renderTargetStack.pop().restore();\r\n  };\r\n\r\n  /**\r\n   * Starts a new pdf form object, which means that all consequent draw calls target a new independent object\r\n   * until {@link endFormObject} is called. The created object can be referenced and drawn later using\r\n   * {@link doFormObject}. Nested form objects are possible.\r\n   * x, y, width, height set the bounding box that is used to clip the content.\r\n   *\r\n   * @param {number} x\r\n   * @param {number} y\r\n   * @param {number} width\r\n   * @param {number} height\r\n   * @param {Matrix} matrix The matrix that will be applied to convert the form objects coordinate system to\r\n   * the parent's.\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name beginFormObject\r\n   */\r\n  API.beginFormObject = function(x, y, width, height, matrix) {\r\n    // The user can set the output target to a new form object. Nested form objects are possible.\r\n    // Currently, they use the resource dictionary of the surrounding stream. This should be changed, as\r\n    // the PDF-Spec states:\r\n    // \"In PDF 1.2 and later versions, form XObjects may be independent of the content streams in which\r\n    // they appear, and this is strongly recommended although not requiredIn PDF 1.2 and later versions,\r\n    // form XObjects may be independent of the content streams in which they appear, and this is strongly\r\n    // recommended although not required\"\r\n    beginNewRenderTarget(x, y, width, height, matrix);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Completes and saves the form object.\r\n   * @param {String} key The key by which this form object can be referenced.\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name endFormObject\r\n   */\r\n  API.endFormObject = function(key) {\r\n    endFormObject(key);\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Draws the specified form object by referencing to the respective pdf XObject created with\r\n   * {@link API.beginFormObject} and {@link endFormObject}.\r\n   * The location is determined by matrix.\r\n   *\r\n   * @param {String} key The key to the form object.\r\n   * @param {Matrix} matrix The matrix applied before drawing the form object.\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name doFormObject\r\n   */\r\n  API.doFormObject = function(key, matrix) {\r\n    var xObject = renderTargets[renderTargetMap[key]];\r\n    out(\"q\");\r\n    out(matrix.toString() + \" cm\");\r\n    out(\"/\" + xObject.id + \" Do\");\r\n    out(\"Q\");\r\n    return this;\r\n  };\r\n\r\n  /**\r\n   * Returns the form object specified by key.\r\n   * @param key {String}\r\n   * @returns {{x: number, y: number, width: number, height: number, matrix: Matrix}}\r\n   * @function\r\n   * @returns {jsPDF}\r\n   * @memberof jsPDF#\r\n   * @name getFormObject\r\n   */\r\n  API.getFormObject = function(key) {\r\n    var xObject = renderTargets[renderTargetMap[key]];\r\n    return {\r\n      x: xObject.x,\r\n      y: xObject.y,\r\n      width: xObject.width,\r\n      height: xObject.height,\r\n      matrix: xObject.matrix\r\n    };\r\n  };\r\n\r\n  /**\r\n   * Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf').\r\n   * Uses FileSaver.js-method saveAs.\r\n   *\r\n   * @memberof jsPDF#\r\n   * @name save\r\n   * @function\r\n   * @instance\r\n   * @param  {string} filename The filename including extension.\r\n   * @param  {Object} options An Object with additional options, possible options: 'returnPromise'.\r\n   * @returns {jsPDF|Promise} jsPDF-instance     */\r\n  API.save = function(filename, options) {\r\n    filename = filename || \"generated.pdf\";\r\n\r\n    options = options || {};\r\n    options.returnPromise = options.returnPromise || false;\r\n\r\n    if (options.returnPromise === false) {\r\n      saveAs(getBlob(buildDocument()), filename);\r\n      if (typeof saveAs.unload === \"function\") {\r\n        if (globalObject.setTimeout) {\r\n          setTimeout(saveAs.unload, 911);\r\n        }\r\n      }\r\n      return this;\r\n    } else {\r\n      return new Promise(function(resolve, reject) {\r\n        try {\r\n          var result = saveAs(getBlob(buildDocument()), filename);\r\n          if (typeof saveAs.unload === \"function\") {\r\n            if (globalObject.setTimeout) {\r\n              setTimeout(saveAs.unload, 911);\r\n            }\r\n          }\r\n          resolve(result);\r\n        } catch (e) {\r\n          reject(e.message);\r\n        }\r\n      });\r\n    }\r\n\r\n  };\r\n\r\n  // applying plugins (more methods) ON TOP of built-in API.\r\n  // this is intentional as we allow plugins to override\r\n  // built-ins\r\n  for (var plugin in jsPDF.API) {\r\n    if (jsPDF.API.hasOwnProperty(plugin)) {\r\n      if (plugin === \"events\" && jsPDF.API.events.length) {\r\n        (function(events, newEvents) {\r\n          // jsPDF.API.events is a JS Array of Arrays\r\n          // where each Array is a pair of event name, handler\r\n          // Events were added by plugins to the jsPDF instantiator.\r\n          // These are always added to the new instance and some ran\r\n          // during instantiation.\r\n          var eventname, handler_and_args, i;\r\n\r\n          for (i = newEvents.length - 1; i !== -1; i--) {\r\n            // subscribe takes 3 args: 'topic', function, runonce_flag\r\n            // if undefined, runonce is false.\r\n            // users can attach callback directly,\r\n            // or they can attach an array with [callback, runonce_flag]\r\n            // that's what the \"apply\" magic is for below.\r\n            eventname = newEvents[i][0];\r\n            handler_and_args = newEvents[i][1];\r\n            events.subscribe.apply(\r\n              events,\r\n              [eventname].concat(\r\n                typeof handler_and_args === \"function\"\r\n                  ? [handler_and_args]\r\n                  : handler_and_args\r\n              )\r\n            );\r\n          }\r\n        })(events, jsPDF.API.events);\r\n      } else {\r\n        API[plugin] = jsPDF.API[plugin];\r\n      }\r\n    }\r\n  }\r\n\r\n  var getPageWidth = (API.getPageWidth = function(pageNumber) {\r\n    pageNumber = pageNumber || currentPage;\r\n    return (\r\n      (pagesContext[pageNumber].mediaBox.topRightX -\r\n        pagesContext[pageNumber].mediaBox.bottomLeftX) /\r\n      scaleFactor\r\n    );\r\n  });\r\n\r\n  var setPageWidth = (API.setPageWidth = function(pageNumber, value) {\r\n    pagesContext[pageNumber].mediaBox.topRightX =\r\n      value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftX;\r\n  });\r\n\r\n  var getPageHeight = (API.getPageHeight = function(pageNumber) {\r\n    pageNumber = pageNumber || currentPage;\r\n    return (\r\n      (pagesContext[pageNumber].mediaBox.topRightY -\r\n        pagesContext[pageNumber].mediaBox.bottomLeftY) /\r\n      scaleFactor\r\n    );\r\n  });\r\n\r\n  var setPageHeight = (API.setPageHeight = function(pageNumber, value) {\r\n    pagesContext[pageNumber].mediaBox.topRightY =\r\n      value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftY;\r\n  });\r\n\r\n  /**\r\n   * Object exposing internal API to plugins\r\n   * @public\r\n   * @ignore\r\n   */\r\n  API.internal = {\r\n    pdfEscape: pdfEscape,\r\n    getStyle: getStyle,\r\n    getFont: getFontEntry,\r\n    getFontSize: getFontSize,\r\n    getCharSpace: getCharSpace,\r\n    getTextColor: getTextColor,\r\n    getLineHeight: getLineHeight,\r\n    getLineHeightFactor: getLineHeightFactor,\r\n    getLineWidth: getLineWidth,\r\n    write: write,\r\n    getHorizontalCoordinate: getHorizontalCoordinate,\r\n    getVerticalCoordinate: getVerticalCoordinate,\r\n    getCoordinateString: getHorizontalCoordinateString,\r\n    getVerticalCoordinateString: getVerticalCoordinateString,\r\n    collections: {},\r\n    newObject: newObject,\r\n    newAdditionalObject: newAdditionalObject,\r\n    newObjectDeferred: newObjectDeferred,\r\n    newObjectDeferredBegin: newObjectDeferredBegin,\r\n    getFilters: getFilters,\r\n    putStream: putStream,\r\n    events: events,\r\n    scaleFactor: scaleFactor,\r\n    pageSize: {\r\n      getWidth: function() {\r\n        return getPageWidth(currentPage);\r\n      },\r\n      setWidth: function(value) {\r\n        setPageWidth(currentPage, value);\r\n      },\r\n      getHeight: function() {\r\n        return getPageHeight(currentPage);\r\n      },\r\n      setHeight: function(value) {\r\n        setPageHeight(currentPage, value);\r\n      }\r\n    },\r\n    encryptionOptions: encryptionOptions,\r\n    encryption: encryption,\r\n    getEncryptor: getEncryptor,\r\n    output: output,\r\n    getNumberOfPages: getNumberOfPages,\r\n    pages: pages,\r\n    out: out,\r\n    f2: f2,\r\n    f3: f3,\r\n    getPageInfo: getPageInfo,\r\n    getPageInfoByObjId: getPageInfoByObjId,\r\n    getCurrentPageInfo: getCurrentPageInfo,\r\n    getPDFVersion: getPdfVersion,\r\n    Point: Point,\r\n    Rectangle: Rectangle,\r\n    Matrix: Matrix,\r\n    hasHotfix: hasHotfix //Expose the hasHotfix check so plugins can also check them.\r\n  };\r\n\r\n  Object.defineProperty(API.internal.pageSize, \"width\", {\r\n    get: function() {\r\n      return getPageWidth(currentPage);\r\n    },\r\n    set: function(value) {\r\n      setPageWidth(currentPage, value);\r\n    },\r\n    enumerable: true,\r\n    configurable: true\r\n  });\r\n  Object.defineProperty(API.internal.pageSize, \"height\", {\r\n    get: function() {\r\n      return getPageHeight(currentPage);\r\n    },\r\n    set: function(value) {\r\n      setPageHeight(currentPage, value);\r\n    },\r\n    enumerable: true,\r\n    configurable: true\r\n  });\r\n\r\n  //////////////////////////////////////////////////////\r\n  // continuing initialization of jsPDF Document object\r\n  //////////////////////////////////////////////////////\r\n  // Add the first page automatically\r\n  addFonts.call(API, standardFonts);\r\n  activeFontKey = \"F1\";\r\n  _addPage(format, orientation);\r\n\r\n  events.publish(\"initialized\");\r\n  return API;\r\n}\r\n\r\n/**\r\n * jsPDF.API is a STATIC property of jsPDF class.\r\n * jsPDF.API is an object you can add methods and properties to.\r\n * The methods / properties you add will show up in new jsPDF objects.\r\n *\r\n * One property is prepopulated. It is the 'events' Object. Plugin authors can add topics,\r\n * callbacks to this object. These will be reassigned to all new instances of jsPDF.\r\n *\r\n * @static\r\n * @public\r\n * @memberof jsPDF#\r\n * @name API\r\n *\r\n * @example\r\n * jsPDF.API.mymethod = function(){\r\n *   // 'this' will be ref to internal API object. see jsPDF source\r\n *   // , so you can refer to built-in methods like so:\r\n *   //     this.line(....)\r\n *   //     this.text(....)\r\n * }\r\n * var pdfdoc = new jsPDF()\r\n * pdfdoc.mymethod() // <- !!!!!!\r\n */\r\njsPDF.API = {\r\n  events: []\r\n};\r\n/**\r\n * The version of jsPDF.\r\n * @name version\r\n * @type {string}\r\n * @memberof jsPDF#\r\n */\r\njsPDF.version = \"0.0.0\";\r\n\r\nexport { jsPDF, ShadingPattern, TilingPattern, GState };\r\nexport default jsPDF;\r\n","/* global jsPDF */\n/**\n * @license\n * Copyright (c) 2016 Alexander Weidt,\n * https://github.com/BiggA94\n *\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF AcroForm Plugin\n * @module AcroForm\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\nvar jsPDFAPI = jsPDF.API;\nvar scaleFactor = 1;\n\nvar pdfEscape = function(value) {\n  return value\n    .replace(/\\\\/g, \"\\\\\\\\\")\n    .replace(/\\(/g, \"\\\\(\")\n    .replace(/\\)/g, \"\\\\)\");\n};\nvar pdfUnescape = function(value) {\n  return value\n    .replace(/\\\\\\\\/g, \"\\\\\")\n    .replace(/\\\\\\(/g, \"(\")\n    .replace(/\\\\\\)/g, \")\");\n};\n\nvar f2 = function(number) {\n  return number.toFixed(2); // Ie, %.2f\n};\n\nvar f5 = function(number) {\n  return number.toFixed(5); // Ie, %.2f\n};\n\njsPDFAPI.__acroform__ = {};\nvar inherit = function(child, parent) {\n  child.prototype = Object.create(parent.prototype);\n  child.prototype.constructor = child;\n};\n\nvar scale = function(x) {\n  return x * scaleFactor;\n};\n\nvar createFormXObject = function(formObject) {\n  var xobj = new AcroFormXObject();\n  var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n  var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n  xobj.BBox = [0, 0, Number(f2(width)), Number(f2(height))];\n  return xobj;\n};\n\n/**\n * Bit-Operations\n */\nvar setBit = (jsPDFAPI.__acroform__.setBit = function(number, bitPosition) {\n  number = number || 0;\n  bitPosition = bitPosition || 0;\n\n  if (isNaN(number) || isNaN(bitPosition)) {\n    throw new Error(\n      \"Invalid arguments passed to jsPDF.API.__acroform__.setBit\"\n    );\n  }\n  var bitMask = 1 << bitPosition;\n\n  number |= bitMask;\n\n  return number;\n});\n\nvar clearBit = (jsPDFAPI.__acroform__.clearBit = function(number, bitPosition) {\n  number = number || 0;\n  bitPosition = bitPosition || 0;\n\n  if (isNaN(number) || isNaN(bitPosition)) {\n    throw new Error(\n      \"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\"\n    );\n  }\n  var bitMask = 1 << bitPosition;\n\n  number &= ~bitMask;\n\n  return number;\n});\n\nvar getBit = (jsPDFAPI.__acroform__.getBit = function(number, bitPosition) {\n  if (isNaN(number) || isNaN(bitPosition)) {\n    throw new Error(\n      \"Invalid arguments passed to jsPDF.API.__acroform__.getBit\"\n    );\n  }\n  return (number & (1 << bitPosition)) === 0 ? 0 : 1;\n});\n\n/*\n * Ff starts counting the bit position at 1 and not like javascript at 0\n */\nvar getBitForPdf = (jsPDFAPI.__acroform__.getBitForPdf = function(\n  number,\n  bitPosition\n) {\n  if (isNaN(number) || isNaN(bitPosition)) {\n    throw new Error(\n      \"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\"\n    );\n  }\n  return getBit(number, bitPosition - 1);\n});\n\nvar setBitForPdf = (jsPDFAPI.__acroform__.setBitForPdf = function(\n  number,\n  bitPosition\n) {\n  if (isNaN(number) || isNaN(bitPosition)) {\n    throw new Error(\n      \"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\"\n    );\n  }\n  return setBit(number, bitPosition - 1);\n});\n\nvar clearBitForPdf = (jsPDFAPI.__acroform__.clearBitForPdf = function(\n  number,\n  bitPosition\n) {\n  if (isNaN(number) || isNaN(bitPosition)) {\n    throw new Error(\n      \"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\"\n    );\n  }\n  return clearBit(number, bitPosition - 1);\n});\n\nvar calculateCoordinates = (jsPDFAPI.__acroform__.calculateCoordinates = function(\n  args,\n  scope\n) {\n  var getHorizontalCoordinate = scope.internal.getHorizontalCoordinate;\n  var getVerticalCoordinate = scope.internal.getVerticalCoordinate;\n  var x = args[0];\n  var y = args[1];\n  var w = args[2];\n  var h = args[3];\n\n  var coordinates = {};\n\n  coordinates.lowerLeft_X = getHorizontalCoordinate(x) || 0;\n  coordinates.lowerLeft_Y = getVerticalCoordinate(y + h) || 0;\n  coordinates.upperRight_X = getHorizontalCoordinate(x + w) || 0;\n  coordinates.upperRight_Y = getVerticalCoordinate(y) || 0;\n\n  return [\n    Number(f2(coordinates.lowerLeft_X)),\n    Number(f2(coordinates.lowerLeft_Y)),\n    Number(f2(coordinates.upperRight_X)),\n    Number(f2(coordinates.upperRight_Y))\n  ];\n});\n\nvar calculateAppearanceStream = function(formObject) {\n  if (formObject.appearanceStreamContent) {\n    return formObject.appearanceStreamContent;\n  }\n\n  if (!formObject.V && !formObject.DV) {\n    return;\n  }\n\n  // else calculate it\n\n  var stream = [];\n  var text = formObject._V || formObject.DV;\n  var calcRes = calculateX(formObject, text);\n  var fontKey = formObject.scope.internal.getFont(\n    formObject.fontName,\n    formObject.fontStyle\n  ).id;\n\n  //PDF 32000-1:2008, page 444\n  stream.push(\"/Tx BMC\");\n  stream.push(\"q\");\n  stream.push(\"BT\"); // Begin Text\n  stream.push(formObject.scope.__private__.encodeColorString(formObject.color));\n  stream.push(\"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf\");\n  stream.push(\"1 0 0 1 0 0 Tm\"); // Transformation Matrix\n  stream.push(calcRes.text);\n  stream.push(\"ET\"); // End Text\n  stream.push(\"Q\");\n  stream.push(\"EMC\");\n\n  var appearanceStreamContent = createFormXObject(formObject);\n  appearanceStreamContent.scope = formObject.scope;\n  appearanceStreamContent.stream = stream.join(\"\\n\");\n  return appearanceStreamContent;\n};\n\nvar calculateX = function(formObject, text) {\n  var maxFontSize =\n    formObject.fontSize === 0 ? formObject.maxFontSize : formObject.fontSize;\n  var returnValue = {\n    text: \"\",\n    fontSize: \"\"\n  };\n  // Remove Brackets\n  text = text.substr(0, 1) == \"(\" ? text.substr(1) : text;\n  text =\n    text.substr(text.length - 1) == \")\"\n      ? text.substr(0, text.length - 1)\n      : text;\n  // split into array of words\n  var textSplit = text.split(\" \");\n  if (formObject.multiline) {\n    textSplit = textSplit.map(word => word.split(\"\\n\"));\n  } else {\n    textSplit = textSplit.map(word => [word]);\n  }\n\n  var fontSize = maxFontSize; // The Starting fontSize (The Maximum)\n  var lineSpacing = 2;\n  var borderPadding = 2;\n\n  var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n  height = height < 0 ? -height : height;\n  var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n  width = width < 0 ? -width : width;\n\n  var isSmallerThanWidth = function(i, lastLine, fontSize) {\n    if (i + 1 < textSplit.length) {\n      var tmp = lastLine + \" \" + textSplit[i + 1][0];\n      var TextWidth = calculateFontSpace(tmp, formObject, fontSize).width;\n      var FieldWidth = width - 2 * borderPadding;\n      return TextWidth <= FieldWidth;\n    } else {\n      return false;\n    }\n  };\n\n  fontSize++;\n  FontSize: while (fontSize > 0) {\n    text = \"\";\n    fontSize--;\n    var textHeight = calculateFontSpace(\"3\", formObject, fontSize).height;\n    var startY = formObject.multiline\n      ? height - fontSize\n      : (height - textHeight) / 2;\n    startY += lineSpacing;\n    var startX;\n\n    var lastY = startY;\n    var firstWordInLine = 0,\n      lastWordInLine = 0;\n    var lastLength;\n    var currWord = 0;\n\n    if (fontSize <= 0) {\n      // In case, the Text doesn't fit at all\n      fontSize = 12;\n      text = \"(...) Tj\\n\";\n      text +=\n        \"% Width of Text: \" +\n        calculateFontSpace(text, formObject, fontSize).width +\n        \", FieldWidth:\" +\n        width +\n        \"\\n\";\n      break;\n    }\n\n    var lastLine = \"\";\n    var lineCount = 0;\n    Line: for (var i = 0; i < textSplit.length; i++) {\n      if (textSplit.hasOwnProperty(i)) {\n        let isWithNewLine = false;\n        if (textSplit[i].length !== 1 && currWord !== textSplit[i].length - 1) {\n          if (\n            (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n            height\n          ) {\n            continue FontSize;\n          }\n\n          lastLine += textSplit[i][currWord];\n          isWithNewLine = true;\n          lastWordInLine = i;\n          i--;\n        } else {\n          lastLine += textSplit[i][currWord] + \" \";\n          lastLine =\n            lastLine.substr(lastLine.length - 1) == \" \"\n              ? lastLine.substr(0, lastLine.length - 1)\n              : lastLine;\n          var key = parseInt(i);\n          var nextLineIsSmaller = isSmallerThanWidth(key, lastLine, fontSize);\n          var isLastWord = i >= textSplit.length - 1;\n\n          if (nextLineIsSmaller && !isLastWord) {\n            lastLine += \" \";\n            currWord = 0;\n            continue; // Line\n          } else if (!nextLineIsSmaller && !isLastWord) {\n            if (!formObject.multiline) {\n              continue FontSize;\n            } else {\n              if (\n                (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n                height\n              ) {\n                // If the Text is higher than the\n                // FieldObject\n                continue FontSize;\n              }\n              lastWordInLine = key;\n              // go on\n            }\n          } else if (isLastWord) {\n            lastWordInLine = key;\n          } else {\n            if (\n              formObject.multiline &&\n              (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n                height\n            ) {\n              // If the Text is higher than the FieldObject\n              continue FontSize;\n            }\n          }\n        }\n        // Remove last blank\n\n        var line = \"\";\n\n        for (var x = firstWordInLine; x <= lastWordInLine; x++) {\n          var currLine = textSplit[x];\n          if (formObject.multiline) {\n            if (x === lastWordInLine) {\n              line += currLine[currWord] + \" \";\n              currWord = (currWord + 1) % currLine.length;\n              continue;\n            }\n            if (x === firstWordInLine) {\n              line += currLine[currLine.length - 1] + \" \";\n              continue;\n            }\n          }\n          line += currLine[0] + \" \";\n        }\n\n        // Remove last blank\n        line =\n          line.substr(line.length - 1) == \" \"\n            ? line.substr(0, line.length - 1)\n            : line;\n        // lastLength -= blankSpace.width;\n        lastLength = calculateFontSpace(line, formObject, fontSize).width;\n\n        // Calculate startX\n        switch (formObject.textAlign) {\n          case \"right\":\n            startX = width - lastLength - borderPadding;\n            break;\n          case \"center\":\n            startX = (width - lastLength) / 2;\n            break;\n          case \"left\":\n          default:\n            startX = borderPadding;\n            break;\n        }\n        text += f2(startX) + \" \" + f2(lastY) + \" Td\\n\";\n        text += \"(\" + pdfEscape(line) + \") Tj\\n\";\n        // reset X in PDF\n        text += -f2(startX) + \" 0 Td\\n\";\n\n        // After a Line, adjust y position\n        lastY = -(fontSize + lineSpacing);\n\n        // Reset for next iteration step\n        lastLength = 0;\n        firstWordInLine = isWithNewLine ? lastWordInLine : lastWordInLine + 1;\n        lineCount++;\n\n        lastLine = \"\";\n        continue Line;\n      }\n    }\n    break;\n  }\n\n  returnValue.text = text;\n  returnValue.fontSize = fontSize;\n\n  return returnValue;\n};\n\n/**\n * Small workaround for calculating the TextMetric approximately.\n *\n * @param text\n * @param fontsize\n * @returns {TextMetrics} (Has Height and Width)\n */\nvar calculateFontSpace = function(text, formObject, fontSize) {\n  var font = formObject.scope.internal.getFont(\n    formObject.fontName,\n    formObject.fontStyle\n  );\n  var width =\n    formObject.scope.getStringUnitWidth(text, {\n      font: font,\n      fontSize: parseFloat(fontSize),\n      charSpace: 0\n    }) * parseFloat(fontSize);\n  var height =\n    formObject.scope.getStringUnitWidth(\"3\", {\n      font: font,\n      fontSize: parseFloat(fontSize),\n      charSpace: 0\n    }) *\n    parseFloat(fontSize) *\n    1.5;\n  return { height: height, width: width };\n};\n\nvar acroformPluginTemplate = {\n  fields: [],\n  xForms: [],\n  /**\n   * acroFormDictionaryRoot contains information about the AcroForm\n   * Dictionary 0: The Event-Token, the AcroFormDictionaryCallback has\n   * 1: The Object ID of the Root\n   */\n  acroFormDictionaryRoot: null,\n  /**\n   * After the PDF gets evaluated, the reference to the root has to be\n   * reset, this indicates, whether the root has already been printed\n   * out\n   */\n  printedOut: false,\n  internal: null,\n  isInitialized: false\n};\n\nvar annotReferenceCallback = function(scope) {\n  //set objId to undefined and force it to get a new objId on buildDocument\n  scope.internal.acroformPlugin.acroFormDictionaryRoot.objId = undefined;\n  var fields = scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields;\n  for (var i in fields) {\n    if (fields.hasOwnProperty(i)) {\n      var formObject = fields[i];\n      //set objId to undefined and force it to get a new objId on buildDocument\n      formObject.objId = undefined;\n      // add Annot Reference!\n      if (formObject.hasAnnotation) {\n        // If theres an Annotation Widget in the Form Object, put the\n        // Reference in the /Annot array\n        createAnnotationReference(formObject, scope);\n      }\n    }\n  }\n};\n\nvar putForm = function(formObject) {\n  if (formObject.scope.internal.acroformPlugin.printedOut) {\n    formObject.scope.internal.acroformPlugin.printedOut = false;\n    formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot = null;\n  }\n  formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(\n    formObject\n  );\n};\n/**\n * Create the Reference to the widgetAnnotation, so that it gets referenced\n * in the Annot[] int the+ (Requires the Annotation Plugin)\n */\nvar createAnnotationReference = function(object, scope) {\n  var options = {\n    type: \"reference\",\n    object: object\n  };\n  var findEntry = function(entry) {\n    return entry.type === options.type && entry.object === options.object;\n  };\n  if (\n    scope.internal\n      .getPageInfo(object.page)\n      .pageContext.annotations.find(findEntry) === undefined\n  ) {\n    scope.internal\n      .getPageInfo(object.page)\n      .pageContext.annotations.push(options);\n  }\n};\n\n// Callbacks\n\nvar putCatalogCallback = function(scope) {\n  // Put reference to AcroForm to DocumentCatalog\n  if (\n    typeof scope.internal.acroformPlugin.acroFormDictionaryRoot !== \"undefined\"\n  ) {\n    // for safety, shouldn't normally be the case\n    scope.internal.write(\n      \"/AcroForm \" +\n        scope.internal.acroformPlugin.acroFormDictionaryRoot.objId +\n        \" \" +\n        0 +\n        \" R\"\n    );\n  } else {\n    throw new Error(\"putCatalogCallback: Root missing.\");\n  }\n};\n\n/**\n * Adds /Acroform X 0 R to Document Catalog, and creates the AcroForm\n * Dictionary\n */\nvar AcroFormDictionaryCallback = function(scope) {\n  // Remove event\n  scope.internal.events.unsubscribe(\n    scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID\n  );\n  delete scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID;\n  scope.internal.acroformPlugin.printedOut = true;\n};\n\n/**\n * Creates the single Fields and writes them into the Document\n *\n * If fieldArray is set, use the fields that are inside it instead of the\n * fields from the AcroRoot (for the FormXObjects...)\n */\nvar createFieldCallback = function(fieldArray, scope) {\n  var standardFields = !fieldArray;\n\n  if (!fieldArray) {\n    // in case there is no fieldArray specified, we want to print out\n    // the Fields of the AcroForm\n    // Print out Root\n    scope.internal.newObjectDeferredBegin(\n      scope.internal.acroformPlugin.acroFormDictionaryRoot.objId,\n      true\n    );\n    scope.internal.acroformPlugin.acroFormDictionaryRoot.putStream();\n  }\n\n  fieldArray =\n    fieldArray || scope.internal.acroformPlugin.acroFormDictionaryRoot.Kids;\n\n  for (var i in fieldArray) {\n    if (fieldArray.hasOwnProperty(i)) {\n      var fieldObject = fieldArray[i];\n      var keyValueList = [];\n      var oldRect = fieldObject.Rect;\n\n      if (fieldObject.Rect) {\n        fieldObject.Rect = calculateCoordinates(fieldObject.Rect, scope);\n      }\n\n      // Start Writing the Object\n      scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n      fieldObject.DA = AcroFormAppearance.createDefaultAppearanceStream(\n        fieldObject\n      );\n\n      if (\n        typeof fieldObject === \"object\" &&\n        typeof fieldObject.getKeyValueListForStream === \"function\"\n      ) {\n        keyValueList = fieldObject.getKeyValueListForStream();\n      }\n\n      fieldObject.Rect = oldRect;\n\n      if (\n        fieldObject.hasAppearanceStream &&\n        !fieldObject.appearanceStreamContent\n      ) {\n        // Calculate Appearance\n        var appearance = calculateAppearanceStream(fieldObject);\n        keyValueList.push({ key: \"AP\", value: \"<</N \" + appearance + \">>\" });\n\n        scope.internal.acroformPlugin.xForms.push(appearance);\n      }\n\n      // Assume AppearanceStreamContent is a Array with N,R,D (at least\n      // one of them!)\n      if (fieldObject.appearanceStreamContent) {\n        var appearanceStreamString = \"\";\n        // Iterate over N,R and D\n        for (var k in fieldObject.appearanceStreamContent) {\n          if (fieldObject.appearanceStreamContent.hasOwnProperty(k)) {\n            var value = fieldObject.appearanceStreamContent[k];\n            appearanceStreamString += \"/\" + k + \" \";\n            appearanceStreamString += \"<<\";\n            if (Object.keys(value).length >= 1 || Array.isArray(value)) {\n              // appearanceStream is an Array or Object!\n              for (var i in value) {\n                if (value.hasOwnProperty(i)) {\n                  var obj = value[i];\n                  if (typeof obj === \"function\") {\n                    // if Function is referenced, call it in order\n                    // to get the FormXObject\n                    obj = obj.call(scope, fieldObject);\n                  }\n                  appearanceStreamString += \"/\" + i + \" \" + obj + \" \";\n\n                  // In case the XForm is already used, e.g. OffState\n                  // of CheckBoxes, don't add it\n                  if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n                    scope.internal.acroformPlugin.xForms.push(obj);\n                }\n              }\n            } else {\n              obj = value;\n              if (typeof obj === \"function\") {\n                // if Function is referenced, call it in order to\n                // get the FormXObject\n                obj = obj.call(scope, fieldObject);\n              }\n              appearanceStreamString += \"/\" + i + \" \" + obj;\n              if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n                scope.internal.acroformPlugin.xForms.push(obj);\n            }\n            appearanceStreamString += \">>\";\n          }\n        }\n\n        // appearance stream is a normal Object..\n        keyValueList.push({\n          key: \"AP\",\n          value: \"<<\\n\" + appearanceStreamString + \">>\"\n        });\n      }\n\n      scope.internal.putStream({\n        additionalKeyValues: keyValueList,\n        objectId: fieldObject.objId\n      });\n\n      scope.internal.out(\"endobj\");\n    }\n  }\n  if (standardFields) {\n    createXFormObjectCallback(scope.internal.acroformPlugin.xForms, scope);\n  }\n};\n\nvar createXFormObjectCallback = function(fieldArray, scope) {\n  for (var i in fieldArray) {\n    if (fieldArray.hasOwnProperty(i)) {\n      var key = i;\n      var fieldObject = fieldArray[i];\n      // Start Writing the Object\n      scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n      if (\n        typeof fieldObject === \"object\" &&\n        typeof fieldObject.putStream === \"function\"\n      ) {\n        fieldObject.putStream();\n      }\n      delete fieldArray[key];\n    }\n  }\n};\n\nvar initializeAcroForm = function(scope, formObject) {\n  formObject.scope = scope;\n  if (\n    scope.internal !== undefined &&\n    (scope.internal.acroformPlugin === undefined ||\n      scope.internal.acroformPlugin.isInitialized === false)\n  ) {\n    AcroFormField.FieldNum = 0;\n    scope.internal.acroformPlugin = JSON.parse(\n      JSON.stringify(acroformPluginTemplate)\n    );\n    if (scope.internal.acroformPlugin.acroFormDictionaryRoot) {\n      throw new Error(\"Exception while creating AcroformDictionary\");\n    }\n    scaleFactor = scope.internal.scaleFactor;\n    // The Object Number of the AcroForm Dictionary\n    scope.internal.acroformPlugin.acroFormDictionaryRoot = new AcroFormDictionary();\n    scope.internal.acroformPlugin.acroFormDictionaryRoot.scope = scope;\n\n    // add Callback for creating the AcroForm Dictionary\n    scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID = scope.internal.events.subscribe(\n      \"postPutResources\",\n      function() {\n        AcroFormDictionaryCallback(scope);\n      }\n    );\n\n    scope.internal.events.subscribe(\"buildDocument\", function() {\n      annotReferenceCallback(scope);\n    }); // buildDocument\n\n    // Register event, that is triggered when the DocumentCatalog is\n    // written, in order to add /AcroForm\n\n    scope.internal.events.subscribe(\"putCatalog\", function() {\n      putCatalogCallback(scope);\n    });\n\n    // Register event, that creates all Fields\n    scope.internal.events.subscribe(\"postPutPages\", function(fieldArray) {\n      createFieldCallback(fieldArray, scope);\n    });\n\n    scope.internal.acroformPlugin.isInitialized = true;\n  }\n};\n\n//PDF 32000-1:2008, page 26, 7.3.6\nvar arrayToPdfArray = (jsPDFAPI.__acroform__.arrayToPdfArray = function(\n  array,\n  objId,\n  scope\n) {\n  var encryptor = function(data) {\n    return data;\n  };\n  if (Array.isArray(array)) {\n    var content = \"[\";\n    for (var i = 0; i < array.length; i++) {\n      if (i !== 0) {\n        content += \" \";\n      }\n      switch (typeof array[i]) {\n        case \"boolean\":\n        case \"number\":\n        case \"object\":\n          content += array[i].toString();\n          break;\n        case \"string\":\n          if (array[i].substr(0, 1) !== \"/\") {\n            if (typeof objId !== \"undefined\" && scope)\n              encryptor = scope.internal.getEncryptor(objId);\n            content += \"(\" + pdfEscape(encryptor(array[i].toString())) + \")\";\n          } else {\n            content += array[i].toString();\n          }\n          break;\n      }\n    }\n    content += \"]\";\n    return content;\n  }\n  throw new Error(\n    \"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\"\n  );\n});\nfunction getMatches(string, regex, index) {\n  index || (index = 1); // default to the first capturing group\n  var matches = [];\n  var match;\n  while ((match = regex.exec(string))) {\n    matches.push(match[index]);\n  }\n  return matches;\n}\nvar pdfArrayToStringArray = function(array) {\n  var result = [];\n  if (typeof array === \"string\") {\n    result = getMatches(array, /\\((.*?)\\)/g);\n  }\n  return result;\n};\n\nvar toPdfString = function(string, objId, scope) {\n  var encryptor = function(data) {\n    return data;\n  };\n  if (typeof objId !== \"undefined\" && scope)\n    encryptor = scope.internal.getEncryptor(objId);\n  string = string || \"\";\n  string.toString();\n  string = \"(\" + pdfEscape(encryptor(string)) + \")\";\n  return string;\n};\n\n// ##########################\n// Classes\n// ##########################\n\n/**\n * @class AcroFormPDFObject\n * @classdesc A AcroFormPDFObject\n */\nvar AcroFormPDFObject = function() {\n  this._objId = undefined;\n  this._scope = undefined;\n\n  /**\n   * @name AcroFormPDFObject#objId\n   * @type {any}\n   */\n  Object.defineProperty(this, \"objId\", {\n    get: function() {\n      if (typeof this._objId === \"undefined\") {\n        if (typeof this.scope === \"undefined\") {\n          return undefined;\n        }\n        this._objId = this.scope.internal.newObjectDeferred();\n      }\n      return this._objId;\n    },\n    set: function(value) {\n      this._objId = value;\n    }\n  });\n  Object.defineProperty(this, \"scope\", {\n    value: this._scope,\n    writable: true\n  });\n};\n\n/**\n * @function AcroFormPDFObject.toString\n */\nAcroFormPDFObject.prototype.toString = function() {\n  return this.objId + \" 0 R\";\n};\n\nAcroFormPDFObject.prototype.putStream = function() {\n  var keyValueList = this.getKeyValueListForStream();\n  this.scope.internal.putStream({\n    data: this.stream,\n    additionalKeyValues: keyValueList,\n    objectId: this.objId\n  });\n  this.scope.internal.out(\"endobj\");\n};\n\n/**\n * Returns an key-value-List of all non-configurable Variables from the Object\n *\n * @name getKeyValueListForStream\n * @returns {string}\n */\nAcroFormPDFObject.prototype.getKeyValueListForStream = function() {\n  var keyValueList = [];\n  var keys = Object.getOwnPropertyNames(this).filter(function(key) {\n    return (\n      key != \"content\" &&\n      key != \"appearanceStreamContent\" &&\n      key != \"scope\" &&\n      key != \"objId\" &&\n      key.substring(0, 1) != \"_\"\n    );\n  });\n\n  for (var i in keys) {\n    if (Object.getOwnPropertyDescriptor(this, keys[i]).configurable === false) {\n      var key = keys[i];\n      var value = this[key];\n\n      if (value) {\n        if (Array.isArray(value)) {\n          keyValueList.push({\n            key: key,\n            value: arrayToPdfArray(value, this.objId, this.scope)\n          });\n        } else if (value instanceof AcroFormPDFObject) {\n          // In case it is a reference to another PDFObject,\n          // take the reference number\n          value.scope = this.scope;\n          keyValueList.push({ key: key, value: value.objId + \" 0 R\" });\n        } else if (typeof value !== \"function\") {\n          keyValueList.push({ key: key, value: value });\n        }\n      }\n    }\n  }\n  return keyValueList;\n};\n\nvar AcroFormXObject = function() {\n  AcroFormPDFObject.call(this);\n\n  Object.defineProperty(this, \"Type\", {\n    value: \"/XObject\",\n    configurable: false,\n    writable: true\n  });\n\n  Object.defineProperty(this, \"Subtype\", {\n    value: \"/Form\",\n    configurable: false,\n    writable: true\n  });\n\n  Object.defineProperty(this, \"FormType\", {\n    value: 1,\n    configurable: false,\n    writable: true\n  });\n\n  var _BBox = [];\n  Object.defineProperty(this, \"BBox\", {\n    configurable: false,\n    get: function() {\n      return _BBox;\n    },\n    set: function(value) {\n      _BBox = value;\n    }\n  });\n\n  Object.defineProperty(this, \"Resources\", {\n    value: \"2 0 R\",\n    configurable: false,\n    writable: true\n  });\n\n  var _stream;\n  Object.defineProperty(this, \"stream\", {\n    enumerable: false,\n    configurable: true,\n    set: function(value) {\n      _stream = value.trim();\n    },\n    get: function() {\n      if (_stream) {\n        return _stream;\n      } else {\n        return null;\n      }\n    }\n  });\n};\n\ninherit(AcroFormXObject, AcroFormPDFObject);\n\nvar AcroFormDictionary = function() {\n  AcroFormPDFObject.call(this);\n\n  var _Kids = [];\n\n  Object.defineProperty(this, \"Kids\", {\n    enumerable: false,\n    configurable: true,\n    get: function() {\n      if (_Kids.length > 0) {\n        return _Kids;\n      } else {\n        return undefined;\n      }\n    }\n  });\n  Object.defineProperty(this, \"Fields\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      return _Kids;\n    }\n  });\n\n  // Default Appearance\n  var _DA;\n  Object.defineProperty(this, \"DA\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      if (!_DA) {\n        return undefined;\n      }\n      var encryptor = function(data) {\n        return data;\n      };\n      if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n      return \"(\" + pdfEscape(encryptor(_DA)) + \")\";\n    },\n    set: function(value) {\n      _DA = value;\n    }\n  });\n};\n\ninherit(AcroFormDictionary, AcroFormPDFObject);\n\n/**\n * The Field Object contains the Variables, that every Field needs\n *\n * @class AcroFormField\n * @classdesc An AcroForm FieldObject\n */\nvar AcroFormField = function() {\n  AcroFormPDFObject.call(this);\n\n  //Annotation-Flag See Table 165\n  var _F = 4;\n  Object.defineProperty(this, \"F\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      return _F;\n    },\n    set: function(value) {\n      if (!isNaN(value)) {\n        _F = value;\n      } else {\n        throw new Error(\n          'Invalid value \"' + value + '\" for attribute F supplied.'\n        );\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.2) If set, print the annotation when the page is printed. If clear, never print the annotation, regardless of wether is is displayed on the screen.\n   * NOTE 2 This can be useful for annotations representing interactive pushbuttons, which would serve no meaningful purpose on the printed page.\n   *\n   * @name AcroFormField#showWhenPrinted\n   * @default true\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"showWhenPrinted\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(_F, 3));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.F = setBitForPdf(_F, 3);\n      } else {\n        this.F = clearBitForPdf(_F, 3);\n      }\n    }\n  });\n\n  var _Ff = 0;\n  Object.defineProperty(this, \"Ff\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      return _Ff;\n    },\n    set: function(value) {\n      if (!isNaN(value)) {\n        _Ff = value;\n      } else {\n        throw new Error(\n          'Invalid value \"' + value + '\" for attribute Ff supplied.'\n        );\n      }\n    }\n  });\n\n  var _Rect = [];\n  Object.defineProperty(this, \"Rect\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      if (_Rect.length === 0) {\n        return undefined;\n      }\n      return _Rect;\n    },\n    set: function(value) {\n      if (typeof value !== \"undefined\") {\n        _Rect = value;\n      } else {\n        _Rect = [];\n      }\n    }\n  });\n\n  /**\n   * The x-position of the field.\n   *\n   * @name AcroFormField#x\n   * @default null\n   * @type {number}\n   */\n  Object.defineProperty(this, \"x\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (!_Rect || isNaN(_Rect[0])) {\n        return 0;\n      }\n      return _Rect[0];\n    },\n    set: function(value) {\n      _Rect[0] = value;\n    }\n  });\n\n  /**\n   * The y-position of the field.\n   *\n   * @name AcroFormField#y\n   * @default null\n   * @type {number}\n   */\n  Object.defineProperty(this, \"y\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (!_Rect || isNaN(_Rect[1])) {\n        return 0;\n      }\n      return _Rect[1];\n    },\n    set: function(value) {\n      _Rect[1] = value;\n    }\n  });\n\n  /**\n   * The width of the field.\n   *\n   * @name AcroFormField#width\n   * @default null\n   * @type {number}\n   */\n  Object.defineProperty(this, \"width\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (!_Rect || isNaN(_Rect[2])) {\n        return 0;\n      }\n      return _Rect[2];\n    },\n    set: function(value) {\n      _Rect[2] = value;\n    }\n  });\n\n  /**\n   * The height of the field.\n   *\n   * @name AcroFormField#height\n   * @default null\n   * @type {number}\n   */\n  Object.defineProperty(this, \"height\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (!_Rect || isNaN(_Rect[3])) {\n        return 0;\n      }\n      return _Rect[3];\n    },\n    set: function(value) {\n      _Rect[3] = value;\n    }\n  });\n\n  var _FT = \"\";\n  Object.defineProperty(this, \"FT\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return _FT;\n    },\n    set: function(value) {\n      switch (value) {\n        case \"/Btn\":\n        case \"/Tx\":\n        case \"/Ch\":\n        case \"/Sig\":\n          _FT = value;\n          break;\n        default:\n          throw new Error(\n            'Invalid value \"' + value + '\" for attribute FT supplied.'\n          );\n      }\n    }\n  });\n\n  var _T = null;\n\n  Object.defineProperty(this, \"T\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      if (!_T || _T.length < 1) {\n        // In case of a Child from a Radio´Group, you don't need a FieldName\n        if (this instanceof AcroFormChildClass) {\n          return undefined;\n        }\n        _T = \"FieldObject\" + AcroFormField.FieldNum++;\n      }\n      var encryptor = function(data) {\n        return data;\n      };\n      if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n      return \"(\" + pdfEscape(encryptor(_T)) + \")\";\n    },\n    set: function(value) {\n      _T = value.toString();\n    }\n  });\n\n  /**\n   * (Optional) The partial field name (see 12.7.3.2, “Field Names”).\n   *\n   * @name AcroFormField#fieldName\n   * @default null\n   * @type {string}\n   */\n  Object.defineProperty(this, \"fieldName\", {\n    configurable: true,\n    enumerable: true,\n    get: function() {\n      return _T;\n    },\n    set: function(value) {\n      _T = value;\n    }\n  });\n\n  var _fontName = \"helvetica\";\n  /**\n   * The fontName of the font to be used.\n   *\n   * @name AcroFormField#fontName\n   * @default 'helvetica'\n   * @type {string}\n   */\n  Object.defineProperty(this, \"fontName\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _fontName;\n    },\n    set: function(value) {\n      _fontName = value;\n    }\n  });\n\n  var _fontStyle = \"normal\";\n  /**\n   * The fontStyle of the font to be used.\n   *\n   * @name AcroFormField#fontStyle\n   * @default 'normal'\n   * @type {string}\n   */\n  Object.defineProperty(this, \"fontStyle\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _fontStyle;\n    },\n    set: function(value) {\n      _fontStyle = value;\n    }\n  });\n\n  var _fontSize = 0;\n  /**\n   * The fontSize of the font to be used.\n   *\n   * @name AcroFormField#fontSize\n   * @default 0 (for auto)\n   * @type {number}\n   */\n  Object.defineProperty(this, \"fontSize\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _fontSize;\n    },\n    set: function(value) {\n      _fontSize = value;\n    }\n  });\n\n  var _maxFontSize = undefined;\n  /**\n   * The maximum fontSize of the font to be used.\n   *\n   * @name AcroFormField#maxFontSize\n   * @default 0 (for auto)\n   * @type {number}\n   */\n  Object.defineProperty(this, \"maxFontSize\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (_maxFontSize === undefined) {\n        // use the old default value here - the value is some kind of random as it depends on the scaleFactor (user unit)\n        // (\"50\" is transformed to the \"user space\" but then used in \"pdf space\")\n        return 50 / scaleFactor;\n      } else {\n        return _maxFontSize;\n      }\n    },\n    set: function(value) {\n      _maxFontSize = value;\n    }\n  });\n\n  var _color = \"black\";\n  /**\n   * The color of the text\n   *\n   * @name AcroFormField#color\n   * @default 'black'\n   * @type {string|rgba}\n   */\n  Object.defineProperty(this, \"color\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _color;\n    },\n    set: function(value) {\n      _color = value;\n    }\n  });\n\n  var _DA = \"/F1 0 Tf 0 g\";\n  // Defines the default appearance (Needed for variable Text)\n  Object.defineProperty(this, \"DA\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      if (\n        !_DA ||\n        this instanceof AcroFormChildClass ||\n        this instanceof AcroFormTextField\n      ) {\n        return undefined;\n      }\n      return toPdfString(_DA, this.objId, this.scope);\n    },\n    set: function(value) {\n      value = value.toString();\n      _DA = value;\n    }\n  });\n\n  var _DV = null;\n  Object.defineProperty(this, \"DV\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      if (!_DV) {\n        return undefined;\n      }\n      if (this instanceof AcroFormButton === false) {\n        return toPdfString(_DV, this.objId, this.scope);\n      }\n      return _DV;\n    },\n    set: function(value) {\n      value = value.toString();\n      if (this instanceof AcroFormButton === false) {\n        if (value.substr(0, 1) === \"(\") {\n          _DV = pdfUnescape(value.substr(1, value.length - 2));\n        } else {\n          _DV = pdfUnescape(value);\n        }\n      } else {\n        _DV = value;\n      }\n    }\n  });\n\n  /**\n   * (Optional; inheritable) The default value to which the field reverts when a reset-form action is executed (see 12.7.5.3, “Reset-Form Action”). The format of this value is the same as that of value.\n   *\n   * @name AcroFormField#defaultValue\n   * @default null\n   * @type {any}\n   */\n  Object.defineProperty(this, \"defaultValue\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (this instanceof AcroFormButton === true) {\n        return pdfUnescape(_DV.substr(1, _DV.length - 1));\n      } else {\n        return _DV;\n      }\n    },\n    set: function(value) {\n      value = value.toString();\n      if (this instanceof AcroFormButton === true) {\n        _DV = \"/\" + value;\n      } else {\n        _DV = value;\n      }\n    }\n  });\n\n  var _V = null;\n  Object.defineProperty(this, \"_V\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      if (!_V) {\n        return undefined;\n      }\n      return _V;\n    },\n    set: function(value) {\n      this.V = value;\n    }\n  });\n  Object.defineProperty(this, \"V\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      if (!_V) {\n        return undefined;\n      }\n      if (this instanceof AcroFormButton === false) {\n        return toPdfString(_V, this.objId, this.scope);\n      }\n      return _V;\n    },\n    set: function(value) {\n      value = value.toString();\n      if (this instanceof AcroFormButton === false) {\n        if (value.substr(0, 1) === \"(\") {\n          _V = pdfUnescape(value.substr(1, value.length - 2));\n        } else {\n          _V = pdfUnescape(value);\n        }\n      } else {\n        _V = value;\n      }\n    }\n  });\n\n  /**\n   * (Optional; inheritable) The field’s value, whose format varies depending on the field type. See the descriptions of individual field types for further information.\n   *\n   * @name AcroFormField#value\n   * @default null\n   * @type {any}\n   */\n  Object.defineProperty(this, \"value\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (this instanceof AcroFormButton === true) {\n        return pdfUnescape(_V.substr(1, _V.length - 1));\n      } else {\n        return _V;\n      }\n    },\n    set: function(value) {\n      value = value.toString();\n      if (this instanceof AcroFormButton === true) {\n        _V = \"/\" + value;\n      } else {\n        _V = value;\n      }\n    }\n  });\n\n  /**\n   * Check if field has annotations\n   *\n   * @name AcroFormField#hasAnnotation\n   * @readonly\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"hasAnnotation\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return this.Rect;\n    }\n  });\n\n  Object.defineProperty(this, \"Type\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return this.hasAnnotation ? \"/Annot\" : null;\n    }\n  });\n\n  Object.defineProperty(this, \"Subtype\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return this.hasAnnotation ? \"/Widget\" : null;\n    }\n  });\n\n  var _hasAppearanceStream = false;\n  /**\n   * true if field has an appearanceStream\n   *\n   * @name AcroFormField#hasAppearanceStream\n   * @readonly\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"hasAppearanceStream\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _hasAppearanceStream;\n    },\n    set: function(value) {\n      value = Boolean(value);\n      _hasAppearanceStream = value;\n    }\n  });\n\n  /**\n   * The page on which the AcroFormField is placed\n   *\n   * @name AcroFormField#page\n   * @type {number}\n   */\n  var _page;\n  Object.defineProperty(this, \"page\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      if (!_page) {\n        return undefined;\n      }\n      return _page;\n    },\n    set: function(value) {\n      _page = value;\n    }\n  });\n\n  /**\n   * If set, the user may not change the value of the field. Any associated widget annotations will not interact with the user; that is, they will not respond to mouse clicks or change their appearance in response to mouse motions. This flag is useful for fields whose values are computed or imported from a database.\n   *\n   * @name AcroFormField#readOnly\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"readOnly\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 1));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 1);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 1);\n      }\n    }\n  });\n\n  /**\n   * If set, the field shall have a value at the time it is exported by a submitform action (see 12.7.5.2, “Submit-Form Action”).\n   *\n   * @name AcroFormField#required\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"required\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 2));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 2);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 2);\n      }\n    }\n  });\n\n  /**\n   * If set, the field shall not be exported by a submit-form action (see 12.7.5.2, “Submit-Form Action”)\n   *\n   * @name AcroFormField#noExport\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"noExport\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 3));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 3);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 3);\n      }\n    }\n  });\n\n  var _Q = null;\n  Object.defineProperty(this, \"Q\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      if (_Q === null) {\n        return undefined;\n      }\n      return _Q;\n    },\n    set: function(value) {\n      if ([0, 1, 2].indexOf(value) !== -1) {\n        _Q = value;\n      } else {\n        throw new Error(\n          'Invalid value \"' + value + '\" for attribute Q supplied.'\n        );\n      }\n    }\n  });\n\n  /**\n   * (Optional; inheritable) A code specifying the form of quadding (justification) that shall be used in displaying the text:\n   * 'left', 'center', 'right'\n   *\n   * @name AcroFormField#textAlign\n   * @default 'left'\n   * @type {string}\n   */\n  Object.defineProperty(this, \"textAlign\", {\n    get: function() {\n      var result;\n      switch (_Q) {\n        case 0:\n        default:\n          result = \"left\";\n          break;\n        case 1:\n          result = \"center\";\n          break;\n        case 2:\n          result = \"right\";\n          break;\n      }\n      return result;\n    },\n    configurable: true,\n    enumerable: true,\n    set: function(value) {\n      switch (value) {\n        case \"right\":\n        case 2:\n          _Q = 2;\n          break;\n        case \"center\":\n        case 1:\n          _Q = 1;\n          break;\n        case \"left\":\n        case 0:\n        default:\n          _Q = 0;\n      }\n    }\n  });\n};\n\ninherit(AcroFormField, AcroFormPDFObject);\n\n/**\n * @class AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormChoiceField = function() {\n  AcroFormField.call(this);\n  // Field Type = Choice Field\n  this.FT = \"/Ch\";\n  // options\n  this.V = \"()\";\n\n  this.fontName = \"zapfdingbats\";\n  // Top Index\n  var _TI = 0;\n\n  Object.defineProperty(this, \"TI\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return _TI;\n    },\n    set: function(value) {\n      _TI = value;\n    }\n  });\n\n  /**\n   * (Optional) For scrollable list boxes, the top index (the index in the Opt array of the first option visible in the list). Default value: 0.\n   *\n   * @name AcroFormChoiceField#topIndex\n   * @default 0\n   * @type {number}\n   */\n  Object.defineProperty(this, \"topIndex\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _TI;\n    },\n    set: function(value) {\n      _TI = value;\n    }\n  });\n\n  var _Opt = [];\n  Object.defineProperty(this, \"Opt\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return arrayToPdfArray(_Opt, this.objId, this.scope);\n    },\n    set: function(value) {\n      _Opt = pdfArrayToStringArray(value);\n    }\n  });\n\n  /**\n   * @memberof AcroFormChoiceField\n   * @name getOptions\n   * @function\n   * @instance\n   * @returns {array} array of Options\n   */\n  this.getOptions = function() {\n    return _Opt;\n  };\n\n  /**\n   * @memberof AcroFormChoiceField\n   * @name setOptions\n   * @function\n   * @instance\n   * @param {array} value\n   */\n  this.setOptions = function(value) {\n    _Opt = value;\n    if (this.sort) {\n      _Opt.sort();\n    }\n  };\n\n  /**\n   * @memberof AcroFormChoiceField\n   * @name addOption\n   * @function\n   * @instance\n   * @param {string} value\n   */\n  this.addOption = function(value) {\n    value = value || \"\";\n    value = value.toString();\n    _Opt.push(value);\n    if (this.sort) {\n      _Opt.sort();\n    }\n  };\n\n  /**\n   * @memberof AcroFormChoiceField\n   * @name removeOption\n   * @function\n   * @instance\n   * @param {string} value\n   * @param {boolean} allEntries (default: false)\n   */\n  this.removeOption = function(value, allEntries) {\n    allEntries = allEntries || false;\n    value = value || \"\";\n    value = value.toString();\n\n    while (_Opt.indexOf(value) !== -1) {\n      _Opt.splice(_Opt.indexOf(value), 1);\n      if (allEntries === false) {\n        break;\n      }\n    }\n  };\n\n  /**\n   * If set, the field is a combo box; if clear, the field is a list box.\n   *\n   * @name AcroFormChoiceField#combo\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"combo\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 18));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 18);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 18);\n      }\n    }\n  });\n\n  /**\n   * If set, the combo box shall include an editable text box as well as a drop-down list; if clear, it shall include only a drop-down list. This flag shall be used only if the Combo flag is set.\n   *\n   * @name AcroFormChoiceField#edit\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"edit\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 19));\n    },\n    set: function(value) {\n      //PDF 32000-1:2008, page 444\n      if (this.combo === true) {\n        if (Boolean(value) === true) {\n          this.Ff = setBitForPdf(this.Ff, 19);\n        } else {\n          this.Ff = clearBitForPdf(this.Ff, 19);\n        }\n      }\n    }\n  });\n\n  /**\n   * If set, the field’s option items shall be sorted alphabetically. This flag is intended for use by writers, not by readers. Conforming readers shall display the options in the order in which they occur in the Opt array (see Table 231).\n   *\n   * @name AcroFormChoiceField#sort\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"sort\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 20));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 20);\n        _Opt.sort();\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 20);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.4) If set, more than one of the field’s option items may be selected simultaneously; if clear, at most one item shall be selected\n   *\n   * @name AcroFormChoiceField#multiSelect\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"multiSelect\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 22));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 22);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 22);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.4) If set, text entered in the field shall not be spellchecked. This flag shall not be used unless the Combo and Edit flags are both set.\n   *\n   * @name AcroFormChoiceField#doNotSpellCheck\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"doNotSpellCheck\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 23));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 23);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 23);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.5) If set, the new value shall be committed as soon as a selection is made (commonly with the pointing device). In this case, supplying a value for a field involves three actions: selecting the field for fill-in, selecting a choice for the fill-in value, and leaving that field, which finalizes or “commits” the data choice and triggers any actions associated with the entry or changing of this data. If this flag is on, then processing does not wait for leaving the field action to occur, but immediately proceeds to the third step.\n   * This option enables applications to perform an action once a selection is made, without requiring the user to exit the field. If clear, the new value is not committed until the user exits the field.\n   *\n   * @name AcroFormChoiceField#commitOnSelChange\n   * @default false\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"commitOnSelChange\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 27));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 27);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 27);\n      }\n    }\n  });\n\n  this.hasAppearanceStream = false;\n};\ninherit(AcroFormChoiceField, AcroFormField);\n\n/**\n * @class AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormListBox = function() {\n  AcroFormChoiceField.call(this);\n  this.fontName = \"helvetica\";\n\n  //PDF 32000-1:2008, page 444\n  this.combo = false;\n};\ninherit(AcroFormListBox, AcroFormChoiceField);\n\n/**\n * @class AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormComboBox = function() {\n  AcroFormListBox.call(this);\n  this.combo = true;\n};\ninherit(AcroFormComboBox, AcroFormListBox);\n\n/**\n * @class AcroFormEditBox\n * @extends AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormEditBox = function() {\n  AcroFormComboBox.call(this);\n  this.edit = true;\n};\ninherit(AcroFormEditBox, AcroFormComboBox);\n\n/**\n * @class AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormButton = function() {\n  AcroFormField.call(this);\n  this.FT = \"/Btn\";\n\n  /**\n   * (Radio buttons only) If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. If clear, clicking the selected button deselects it, leaving no button selected.\n   *\n   * @name AcroFormButton#noToggleToOff\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"noToggleToOff\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 15));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 15);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 15);\n      }\n    }\n  });\n\n  /**\n   * If set, the field is a set of radio buttons; if clear, the field is a checkbox. This flag may be set only if the Pushbutton flag is clear.\n   *\n   * @name AcroFormButton#radio\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"radio\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 16));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 16);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 16);\n      }\n    }\n  });\n\n  /**\n   * If set, the field is a pushbutton that does not retain a permanent value.\n   *\n   * @name AcroFormButton#pushButton\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"pushButton\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 17));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 17);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 17);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.5) If set, a group of radio buttons within a radio button field that use the same value for the on state will turn on and off in unison; that is if one is checked, they are all checked. If clear, the buttons are mutually exclusive (the same behavior as HTML radio buttons).\n   *\n   * @name AcroFormButton#radioIsUnison\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"radioIsUnison\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 26));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 26);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 26);\n      }\n    }\n  });\n\n  var _MK = {};\n  Object.defineProperty(this, \"MK\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      var encryptor = function(data) {\n        return data;\n      };\n      if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n      if (Object.keys(_MK).length !== 0) {\n        var result = [];\n        result.push(\"<<\");\n        var key;\n        for (key in _MK) {\n          result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n        }\n        result.push(\">>\");\n        return result.join(\"\\n\");\n      }\n      return undefined;\n    },\n    set: function(value) {\n      if (typeof value === \"object\") {\n        _MK = value;\n      }\n    }\n  });\n\n  /**\n   * From the PDF reference:\n   * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n   * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n   *\n   * - '8' = Cross,\n   * - 'l' =  Circle,\n   * - '' = nothing\n   * @name AcroFormButton#caption\n   * @type {string}\n   */\n  Object.defineProperty(this, \"caption\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _MK.CA || \"\";\n    },\n    set: function(value) {\n      if (typeof value === \"string\") {\n        _MK.CA = value;\n      }\n    }\n  });\n\n  var _AS;\n  Object.defineProperty(this, \"AS\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      return _AS;\n    },\n    set: function(value) {\n      _AS = value;\n    }\n  });\n\n  /**\n   * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n   *\n   * @name AcroFormButton#appearanceState\n   * @type {any}\n   */\n  Object.defineProperty(this, \"appearanceState\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _AS.substr(1, _AS.length - 1);\n    },\n    set: function(value) {\n      _AS = \"/\" + value;\n    }\n  });\n};\ninherit(AcroFormButton, AcroFormField);\n\n/**\n * @class AcroFormPushButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormPushButton = function() {\n  AcroFormButton.call(this);\n  this.pushButton = true;\n};\ninherit(AcroFormPushButton, AcroFormButton);\n\n/**\n * @class AcroFormRadioButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormRadioButton = function() {\n  AcroFormButton.call(this);\n  this.radio = true;\n  this.pushButton = false;\n\n  var _Kids = [];\n  Object.defineProperty(this, \"Kids\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return _Kids;\n    },\n    set: function(value) {\n      if (typeof value !== \"undefined\") {\n        _Kids = value;\n      } else {\n        _Kids = [];\n      }\n    }\n  });\n};\ninherit(AcroFormRadioButton, AcroFormButton);\n\n/**\n * The Child class of a RadioButton (the radioGroup) -> The single Buttons\n *\n * @class AcroFormChildClass\n * @extends AcroFormField\n * @ignore\n */\nvar AcroFormChildClass = function() {\n  AcroFormField.call(this);\n\n  var _parent;\n  Object.defineProperty(this, \"Parent\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      return _parent;\n    },\n    set: function(value) {\n      _parent = value;\n    }\n  });\n\n  var _optionName;\n  Object.defineProperty(this, \"optionName\", {\n    enumerable: false,\n    configurable: true,\n    get: function() {\n      return _optionName;\n    },\n    set: function(value) {\n      _optionName = value;\n    }\n  });\n\n  var _MK = {};\n  Object.defineProperty(this, \"MK\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      var encryptor = function(data) {\n        return data;\n      };\n      if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n      var result = [];\n      result.push(\"<<\");\n      var key;\n      for (key in _MK) {\n        result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n      }\n      result.push(\">>\");\n      return result.join(\"\\n\");\n    },\n    set: function(value) {\n      if (typeof value === \"object\") {\n        _MK = value;\n      }\n    }\n  });\n\n  /**\n   * From the PDF reference:\n   * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n   * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n   *\n   * - '8' = Cross,\n   * - 'l' =  Circle,\n   * - '' = nothing\n   * @name AcroFormButton#caption\n   * @type {string}\n   */\n  Object.defineProperty(this, \"caption\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _MK.CA || \"\";\n    },\n    set: function(value) {\n      if (typeof value === \"string\") {\n        _MK.CA = value;\n      }\n    }\n  });\n\n  var _AS;\n  Object.defineProperty(this, \"AS\", {\n    enumerable: false,\n    configurable: false,\n    get: function() {\n      return _AS;\n    },\n    set: function(value) {\n      _AS = value;\n    }\n  });\n\n  /**\n   * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n   *\n   * @name AcroFormButton#appearanceState\n   * @type {any}\n   */\n  Object.defineProperty(this, \"appearanceState\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _AS.substr(1, _AS.length - 1);\n    },\n    set: function(value) {\n      _AS = \"/\" + value;\n    }\n  });\n  this.caption = \"l\";\n  this.appearanceState = \"Off\";\n  // todo: set AppearanceType as variable that can be set from the\n  // outside...\n  this._AppearanceType = AcroFormAppearance.RadioButton.Circle;\n  // The Default appearanceType is the Circle\n  this.appearanceStreamContent = this._AppearanceType.createAppearanceStream(\n    this.optionName\n  );\n};\ninherit(AcroFormChildClass, AcroFormField);\n\nAcroFormRadioButton.prototype.setAppearance = function(appearance) {\n  if (!(\"createAppearanceStream\" in appearance && \"getCA\" in appearance)) {\n    throw new Error(\n      \"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\"\n    );\n  }\n  for (var objId in this.Kids) {\n    if (this.Kids.hasOwnProperty(objId)) {\n      var child = this.Kids[objId];\n      child.appearanceStreamContent = appearance.createAppearanceStream(\n        child.optionName\n      );\n      child.caption = appearance.getCA();\n    }\n  }\n};\n\nAcroFormRadioButton.prototype.createOption = function(name) {\n  // Create new Child for RadioGroup\n  var child = new AcroFormChildClass();\n  child.Parent = this;\n  child.optionName = name;\n  // Add to Parent\n  this.Kids.push(child);\n\n  addField.call(this.scope, child);\n\n  return child;\n};\n\n/**\n * @class AcroFormCheckBox\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormCheckBox = function() {\n  AcroFormButton.call(this);\n\n  this.fontName = \"zapfdingbats\";\n  this.caption = \"3\";\n  this.appearanceState = \"On\";\n  this.value = \"On\";\n  this.textAlign = \"center\";\n  this.appearanceStreamContent = AcroFormAppearance.CheckBox.createAppearanceStream();\n};\ninherit(AcroFormCheckBox, AcroFormButton);\n\n/**\n * @class AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormTextField = function() {\n  AcroFormField.call(this);\n  this.FT = \"/Tx\";\n\n  /**\n   * If set, the field may contain multiple lines of text; if clear, the field’s text shall be restricted to a single line.\n   *\n   * @name AcroFormTextField#multiline\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"multiline\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 13));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 13);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 13);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.4) If set, the text entered in the field represents the pathname of a file whose contents shall be submitted as the value of the field.\n   *\n   * @name AcroFormTextField#fileSelect\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"fileSelect\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 21));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 21);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 21);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.4) If set, text entered in the field shall not be spell-checked.\n   *\n   * @name AcroFormTextField#doNotSpellCheck\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"doNotSpellCheck\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 23));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 23);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 23);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.4) If set, the field shall not scroll (horizontally for single-line fields, vertically for multiple-line fields) to accommodate more text than fits within its annotation rectangle. Once the field is full, no further text shall be accepted for interactive form filling; for noninteractive form filling, the filler should take care not to add more character than will visibly fit in the defined area.\n   *\n   * @name AcroFormTextField#doNotScroll\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"doNotScroll\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 24));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 24);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 24);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.5) May be set only if the MaxLen entry is present in the text field dictionary (see Table 229) and if the Multiline, Password, and FileSelect flags are clear. If set, the field shall be automatically divided into as many equally spaced positions, or combs, as the value of MaxLen, and the text is laid out into those combs.\n   *\n   * @name AcroFormTextField#comb\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"comb\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 25));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 25);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 25);\n      }\n    }\n  });\n\n  /**\n   * (PDF 1.5) If set, the value of this field shall be a rich text string (see 12.7.3.4, “Rich Text Strings”). If the field has a value, the RV entry of the field dictionary (Table 222) shall specify the rich text string.\n   *\n   * @name AcroFormTextField#richText\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"richText\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 26));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 26);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 26);\n      }\n    }\n  });\n\n  var _MaxLen = null;\n  Object.defineProperty(this, \"MaxLen\", {\n    enumerable: true,\n    configurable: false,\n    get: function() {\n      return _MaxLen;\n    },\n    set: function(value) {\n      _MaxLen = value;\n    }\n  });\n\n  /**\n   * (Optional; inheritable) The maximum length of the field’s text, in characters.\n   *\n   * @name AcroFormTextField#maxLength\n   * @type {number}\n   */\n  Object.defineProperty(this, \"maxLength\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return _MaxLen;\n    },\n    set: function(value) {\n      if (Number.isInteger(value)) {\n        _MaxLen = value;\n      }\n    }\n  });\n\n  Object.defineProperty(this, \"hasAppearanceStream\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return this.V || this.DV;\n    }\n  });\n};\ninherit(AcroFormTextField, AcroFormField);\n\n/**\n * @class AcroFormPasswordField\n * @extends AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormPasswordField = function() {\n  AcroFormTextField.call(this);\n\n  /**\n   * If set, the field is intended for entering a secure password that should not be echoed visibly to the screen. Characters typed from the keyboard shall instead be echoed in some unreadable form, such as asterisks or bullet characters.\n   * NOTE To protect password confidentiality, readers should never store the value of the text field in the PDF file if this flag is set.\n   *\n   * @name AcroFormTextField#password\n   * @type {boolean}\n   */\n  Object.defineProperty(this, \"password\", {\n    enumerable: true,\n    configurable: true,\n    get: function() {\n      return Boolean(getBitForPdf(this.Ff, 14));\n    },\n    set: function(value) {\n      if (Boolean(value) === true) {\n        this.Ff = setBitForPdf(this.Ff, 14);\n      } else {\n        this.Ff = clearBitForPdf(this.Ff, 14);\n      }\n    }\n  });\n  this.password = true;\n};\ninherit(AcroFormPasswordField, AcroFormTextField);\n\n// Contains Methods for creating standard appearances\nvar AcroFormAppearance = {\n  CheckBox: {\n    createAppearanceStream: function() {\n      var appearance = {\n        N: {\n          On: AcroFormAppearance.CheckBox.YesNormal\n        },\n        D: {\n          On: AcroFormAppearance.CheckBox.YesPushDown,\n          Off: AcroFormAppearance.CheckBox.OffPushDown\n        }\n      };\n\n      return appearance;\n    },\n    /**\n     * Returns the standard On Appearance for a CheckBox\n     *\n     * @returns {AcroFormXObject}\n     */\n    YesPushDown: function(formObject) {\n      var xobj = createFormXObject(formObject);\n      xobj.scope = formObject.scope;\n      var stream = [];\n      var fontKey = formObject.scope.internal.getFont(\n        formObject.fontName,\n        formObject.fontStyle\n      ).id;\n      var encodedColor = formObject.scope.__private__.encodeColorString(\n        formObject.color\n      );\n      var calcRes = calculateX(formObject, formObject.caption);\n      stream.push(\"0.749023 g\");\n      stream.push(\n        \"0 0 \" +\n          f2(AcroFormAppearance.internal.getWidth(formObject)) +\n          \" \" +\n          f2(AcroFormAppearance.internal.getHeight(formObject)) +\n          \" re\"\n      );\n      stream.push(\"f\");\n      stream.push(\"BMC\");\n      stream.push(\"q\");\n      stream.push(\"0 0 1 rg\");\n      stream.push(\n        \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n      );\n      stream.push(\"BT\");\n      stream.push(calcRes.text);\n      stream.push(\"ET\");\n      stream.push(\"Q\");\n      stream.push(\"EMC\");\n      xobj.stream = stream.join(\"\\n\");\n      return xobj;\n    },\n\n    YesNormal: function(formObject) {\n      var xobj = createFormXObject(formObject);\n      xobj.scope = formObject.scope;\n      var fontKey = formObject.scope.internal.getFont(\n        formObject.fontName,\n        formObject.fontStyle\n      ).id;\n      var encodedColor = formObject.scope.__private__.encodeColorString(\n        formObject.color\n      );\n      var stream = [];\n      var height = AcroFormAppearance.internal.getHeight(formObject);\n      var width = AcroFormAppearance.internal.getWidth(formObject);\n      var calcRes = calculateX(formObject, formObject.caption);\n      stream.push(\"1 g\");\n      stream.push(\"0 0 \" + f2(width) + \" \" + f2(height) + \" re\");\n      stream.push(\"f\");\n      stream.push(\"q\");\n      stream.push(\"0 0 1 rg\");\n      stream.push(\"0 0 \" + f2(width - 1) + \" \" + f2(height - 1) + \" re\");\n      stream.push(\"W\");\n      stream.push(\"n\");\n      stream.push(\"0 g\");\n      stream.push(\"BT\");\n      stream.push(\n        \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n      );\n      stream.push(calcRes.text);\n      stream.push(\"ET\");\n      stream.push(\"Q\");\n      xobj.stream = stream.join(\"\\n\");\n      return xobj;\n    },\n\n    /**\n     * Returns the standard Off Appearance for a CheckBox\n     *\n     * @returns {AcroFormXObject}\n     */\n    OffPushDown: function(formObject) {\n      var xobj = createFormXObject(formObject);\n      xobj.scope = formObject.scope;\n      var stream = [];\n      stream.push(\"0.749023 g\");\n      stream.push(\n        \"0 0 \" +\n          f2(AcroFormAppearance.internal.getWidth(formObject)) +\n          \" \" +\n          f2(AcroFormAppearance.internal.getHeight(formObject)) +\n          \" re\"\n      );\n      stream.push(\"f\");\n      xobj.stream = stream.join(\"\\n\");\n      return xobj;\n    }\n  },\n\n  RadioButton: {\n    Circle: {\n      createAppearanceStream: function(name) {\n        var appearanceStreamContent = {\n          D: {\n            Off: AcroFormAppearance.RadioButton.Circle.OffPushDown\n          },\n          N: {}\n        };\n        appearanceStreamContent.N[name] =\n          AcroFormAppearance.RadioButton.Circle.YesNormal;\n        appearanceStreamContent.D[name] =\n          AcroFormAppearance.RadioButton.Circle.YesPushDown;\n        return appearanceStreamContent;\n      },\n      getCA: function() {\n        return \"l\";\n      },\n\n      YesNormal: function(formObject) {\n        var xobj = createFormXObject(formObject);\n        xobj.scope = formObject.scope;\n        var stream = [];\n        // Make the Radius of the Circle relative to min(height, width) of formObject\n        var DotRadius =\n          AcroFormAppearance.internal.getWidth(formObject) <=\n          AcroFormAppearance.internal.getHeight(formObject)\n            ? AcroFormAppearance.internal.getWidth(formObject) / 4\n            : AcroFormAppearance.internal.getHeight(formObject) / 4;\n        // The Borderpadding...\n        DotRadius = Number((DotRadius * 0.9).toFixed(5));\n        var c = AcroFormAppearance.internal.Bezier_C;\n        var DotRadiusBezier = Number((DotRadius * c).toFixed(5));\n        /*\n         * The Following is a Circle created with Bezier-Curves.\n         */\n        stream.push(\"q\");\n        stream.push(\n          \"1 0 0 1 \" +\n            f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n            \" \" +\n            f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n            \" cm\"\n        );\n        stream.push(DotRadius + \" 0 m\");\n        stream.push(\n          DotRadius +\n            \" \" +\n            DotRadiusBezier +\n            \" \" +\n            DotRadiusBezier +\n            \" \" +\n            DotRadius +\n            \" 0 \" +\n            DotRadius +\n            \" c\"\n        );\n        stream.push(\n          \"-\" +\n            DotRadiusBezier +\n            \" \" +\n            DotRadius +\n            \" -\" +\n            DotRadius +\n            \" \" +\n            DotRadiusBezier +\n            \" -\" +\n            DotRadius +\n            \" 0 c\"\n        );\n        stream.push(\n          \"-\" +\n            DotRadius +\n            \" -\" +\n            DotRadiusBezier +\n            \" -\" +\n            DotRadiusBezier +\n            \" -\" +\n            DotRadius +\n            \" 0 -\" +\n            DotRadius +\n            \" c\"\n        );\n        stream.push(\n          DotRadiusBezier +\n            \" -\" +\n            DotRadius +\n            \" \" +\n            DotRadius +\n            \" -\" +\n            DotRadiusBezier +\n            \" \" +\n            DotRadius +\n            \" 0 c\"\n        );\n        stream.push(\"f\");\n        stream.push(\"Q\");\n        xobj.stream = stream.join(\"\\n\");\n        return xobj;\n      },\n      YesPushDown: function(formObject) {\n        var xobj = createFormXObject(formObject);\n        xobj.scope = formObject.scope;\n        var stream = [];\n        var DotRadius =\n          AcroFormAppearance.internal.getWidth(formObject) <=\n          AcroFormAppearance.internal.getHeight(formObject)\n            ? AcroFormAppearance.internal.getWidth(formObject) / 4\n            : AcroFormAppearance.internal.getHeight(formObject) / 4;\n        // The Borderpadding...\n        DotRadius = Number((DotRadius * 0.9).toFixed(5));\n        // Save results for later use; no need to waste\n        // processor ticks on doing math\n        var k = Number((DotRadius * 2).toFixed(5));\n        var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n        var dc = Number(\n          (DotRadius * AcroFormAppearance.internal.Bezier_C).toFixed(5)\n        );\n\n        stream.push(\"0.749023 g\");\n        stream.push(\"q\");\n        stream.push(\n          \"1 0 0 1 \" +\n            f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n            \" \" +\n            f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n            \" cm\"\n        );\n        stream.push(k + \" 0 m\");\n        stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n        stream.push(\n          \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n        );\n        stream.push(\n          \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n        );\n        stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n        stream.push(\"f\");\n        stream.push(\"Q\");\n        stream.push(\"0 g\");\n        stream.push(\"q\");\n        stream.push(\n          \"1 0 0 1 \" +\n            f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n            \" \" +\n            f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n            \" cm\"\n        );\n        stream.push(DotRadius + \" 0 m\");\n        stream.push(\n          \"\" +\n            DotRadius +\n            \" \" +\n            dc +\n            \" \" +\n            dc +\n            \" \" +\n            DotRadius +\n            \" 0 \" +\n            DotRadius +\n            \" c\"\n        );\n        stream.push(\n          \"-\" +\n            dc +\n            \" \" +\n            DotRadius +\n            \" -\" +\n            DotRadius +\n            \" \" +\n            dc +\n            \" -\" +\n            DotRadius +\n            \" 0 c\"\n        );\n        stream.push(\n          \"-\" +\n            DotRadius +\n            \" -\" +\n            dc +\n            \" -\" +\n            dc +\n            \" -\" +\n            DotRadius +\n            \" 0 -\" +\n            DotRadius +\n            \" c\"\n        );\n        stream.push(\n          dc +\n            \" -\" +\n            DotRadius +\n            \" \" +\n            DotRadius +\n            \" -\" +\n            dc +\n            \" \" +\n            DotRadius +\n            \" 0 c\"\n        );\n        stream.push(\"f\");\n        stream.push(\"Q\");\n        xobj.stream = stream.join(\"\\n\");\n        return xobj;\n      },\n      OffPushDown: function(formObject) {\n        var xobj = createFormXObject(formObject);\n        xobj.scope = formObject.scope;\n        var stream = [];\n        var DotRadius =\n          AcroFormAppearance.internal.getWidth(formObject) <=\n          AcroFormAppearance.internal.getHeight(formObject)\n            ? AcroFormAppearance.internal.getWidth(formObject) / 4\n            : AcroFormAppearance.internal.getHeight(formObject) / 4;\n        // The Borderpadding...\n        DotRadius = Number((DotRadius * 0.9).toFixed(5));\n        // Save results for later use; no need to waste\n        // processor ticks on doing math\n        var k = Number((DotRadius * 2).toFixed(5));\n        var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n\n        stream.push(\"0.749023 g\");\n        stream.push(\"q\");\n        stream.push(\n          \"1 0 0 1 \" +\n            f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n            \" \" +\n            f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n            \" cm\"\n        );\n        stream.push(k + \" 0 m\");\n        stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n        stream.push(\n          \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n        );\n        stream.push(\n          \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n        );\n        stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n        stream.push(\"f\");\n        stream.push(\"Q\");\n        xobj.stream = stream.join(\"\\n\");\n        return xobj;\n      }\n    },\n\n    Cross: {\n      /**\n       * Creates the Actual AppearanceDictionary-References\n       *\n       * @param {string} name\n       * @returns {Object}\n       * @ignore\n       */\n      createAppearanceStream: function(name) {\n        var appearanceStreamContent = {\n          D: {\n            Off: AcroFormAppearance.RadioButton.Cross.OffPushDown\n          },\n          N: {}\n        };\n        appearanceStreamContent.N[name] =\n          AcroFormAppearance.RadioButton.Cross.YesNormal;\n        appearanceStreamContent.D[name] =\n          AcroFormAppearance.RadioButton.Cross.YesPushDown;\n        return appearanceStreamContent;\n      },\n      getCA: function() {\n        return \"8\";\n      },\n\n      YesNormal: function(formObject) {\n        var xobj = createFormXObject(formObject);\n        xobj.scope = formObject.scope;\n        var stream = [];\n        var cross = AcroFormAppearance.internal.calculateCross(formObject);\n        stream.push(\"q\");\n        stream.push(\n          \"1 1 \" +\n            f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n            \" \" +\n            f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n            \" re\"\n        );\n        stream.push(\"W\");\n        stream.push(\"n\");\n        stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n        stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n        stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n        stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n        stream.push(\"s\");\n        stream.push(\"Q\");\n        xobj.stream = stream.join(\"\\n\");\n        return xobj;\n      },\n      YesPushDown: function(formObject) {\n        var xobj = createFormXObject(formObject);\n        xobj.scope = formObject.scope;\n        var cross = AcroFormAppearance.internal.calculateCross(formObject);\n        var stream = [];\n        stream.push(\"0.749023 g\");\n        stream.push(\n          \"0 0 \" +\n            f2(AcroFormAppearance.internal.getWidth(formObject)) +\n            \" \" +\n            f2(AcroFormAppearance.internal.getHeight(formObject)) +\n            \" re\"\n        );\n        stream.push(\"f\");\n        stream.push(\"q\");\n        stream.push(\n          \"1 1 \" +\n            f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n            \" \" +\n            f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n            \" re\"\n        );\n        stream.push(\"W\");\n        stream.push(\"n\");\n        stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n        stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n        stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n        stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n        stream.push(\"s\");\n        stream.push(\"Q\");\n        xobj.stream = stream.join(\"\\n\");\n        return xobj;\n      },\n      OffPushDown: function(formObject) {\n        var xobj = createFormXObject(formObject);\n        xobj.scope = formObject.scope;\n        var stream = [];\n        stream.push(\"0.749023 g\");\n        stream.push(\n          \"0 0 \" +\n            f2(AcroFormAppearance.internal.getWidth(formObject)) +\n            \" \" +\n            f2(AcroFormAppearance.internal.getHeight(formObject)) +\n            \" re\"\n        );\n        stream.push(\"f\");\n        xobj.stream = stream.join(\"\\n\");\n        return xobj;\n      }\n    }\n  },\n\n  /**\n   * Returns the standard Appearance\n   *\n   * @returns {AcroFormXObject}\n   */\n  createDefaultAppearanceStream: function(formObject) {\n    // Set Helvetica to Standard Font (size: auto)\n    // Color: Black\n    var fontKey = formObject.scope.internal.getFont(\n      formObject.fontName,\n      formObject.fontStyle\n    ).id;\n    var encodedColor = formObject.scope.__private__.encodeColorString(\n      formObject.color\n    );\n    var fontSize = formObject.fontSize;\n    var result = \"/\" + fontKey + \" \" + fontSize + \" Tf \" + encodedColor;\n    return result;\n  }\n};\n\nAcroFormAppearance.internal = {\n  Bezier_C: 0.551915024494,\n\n  calculateCross: function(formObject) {\n    var width = AcroFormAppearance.internal.getWidth(formObject);\n    var height = AcroFormAppearance.internal.getHeight(formObject);\n    var a = Math.min(width, height);\n\n    var cross = {\n      x1: {\n        // upperLeft\n        x: (width - a) / 2,\n        y: (height - a) / 2 + a // height - borderPadding\n      },\n      x2: {\n        // lowerRight\n        x: (width - a) / 2 + a,\n        y: (height - a) / 2 // borderPadding\n      },\n      x3: {\n        // lowerLeft\n        x: (width - a) / 2,\n        y: (height - a) / 2 // borderPadding\n      },\n      x4: {\n        // upperRight\n        x: (width - a) / 2 + a,\n        y: (height - a) / 2 + a // height - borderPadding\n      }\n    };\n\n    return cross;\n  }\n};\nAcroFormAppearance.internal.getWidth = function(formObject) {\n  var result = 0;\n  if (typeof formObject === \"object\") {\n    result = scale(formObject.Rect[2]);\n  }\n  return result;\n};\nAcroFormAppearance.internal.getHeight = function(formObject) {\n  var result = 0;\n  if (typeof formObject === \"object\") {\n    result = scale(formObject.Rect[3]);\n  }\n  return result;\n};\n\n// Public:\n\n/**\n * Add an AcroForm-Field to the jsPDF-instance\n *\n * @name addField\n * @function\n * @instance\n * @param {Object} fieldObject\n * @returns {jsPDF}\n */\nvar addField = (jsPDFAPI.addField = function(fieldObject) {\n  initializeAcroForm(this, fieldObject);\n\n  if (fieldObject instanceof AcroFormField) {\n    putForm(fieldObject);\n  } else {\n    throw new Error(\"Invalid argument passed to jsPDF.addField.\");\n  }\n  fieldObject.page = fieldObject.scope.internal.getCurrentPageInfo().pageNumber;\n  return this;\n});\n\njsPDFAPI.AcroFormChoiceField = AcroFormChoiceField;\njsPDFAPI.AcroFormListBox = AcroFormListBox;\njsPDFAPI.AcroFormComboBox = AcroFormComboBox;\njsPDFAPI.AcroFormEditBox = AcroFormEditBox;\njsPDFAPI.AcroFormButton = AcroFormButton;\njsPDFAPI.AcroFormPushButton = AcroFormPushButton;\njsPDFAPI.AcroFormRadioButton = AcroFormRadioButton;\njsPDFAPI.AcroFormCheckBox = AcroFormCheckBox;\njsPDFAPI.AcroFormTextField = AcroFormTextField;\njsPDFAPI.AcroFormPasswordField = AcroFormPasswordField;\njsPDFAPI.AcroFormAppearance = AcroFormAppearance;\n\njsPDFAPI.AcroForm = {\n  ChoiceField: AcroFormChoiceField,\n  ListBox: AcroFormListBox,\n  ComboBox: AcroFormComboBox,\n  EditBox: AcroFormEditBox,\n  Button: AcroFormButton,\n  PushButton: AcroFormPushButton,\n  RadioButton: AcroFormRadioButton,\n  CheckBox: AcroFormCheckBox,\n  TextField: AcroFormTextField,\n  PasswordField: AcroFormPasswordField,\n  Appearance: AcroFormAppearance\n};\n\njsPDF.AcroForm = {\n  ChoiceField: AcroFormChoiceField,\n  ListBox: AcroFormListBox,\n  ComboBox: AcroFormComboBox,\n  EditBox: AcroFormEditBox,\n  Button: AcroFormButton,\n  PushButton: AcroFormPushButton,\n  RadioButton: AcroFormRadioButton,\n  CheckBox: AcroFormCheckBox,\n  TextField: AcroFormTextField,\n  PasswordField: AcroFormPasswordField,\n  Appearance: AcroFormAppearance\n};\n\nvar AcroForm = jsPDF.AcroForm;\n\nexport {\n  AcroForm,\n  AcroFormChoiceField,\n  AcroFormListBox,\n  AcroFormComboBox,\n  AcroFormEditBox,\n  AcroFormButton,\n  AcroFormPushButton,\n  AcroFormRadioButton,\n  AcroFormCheckBox,\n  AcroFormTextField,\n  AcroFormPasswordField,\n  AcroFormAppearance\n};\n","function toLookup(arr) {\n  return arr.reduce(function(lookup, name, index) {\n    lookup[name] = index;\n\n    return lookup;\n  }, {});\n}\n\nvar fontStyleOrder = {\n  italic: [\"italic\", \"oblique\", \"normal\"],\n  oblique: [\"oblique\", \"italic\", \"normal\"],\n  normal: [\"normal\", \"oblique\", \"italic\"]\n};\n\nvar fontStretchOrder = [\n  \"ultra-condensed\",\n  \"extra-condensed\",\n  \"condensed\",\n  \"semi-condensed\",\n  \"normal\",\n  \"semi-expanded\",\n  \"expanded\",\n  \"extra-expanded\",\n  \"ultra-expanded\"\n];\n\n// For a given font-stretch value, we need to know where to start our search\n// from in the fontStretchOrder list.\nvar fontStretchLookup = toLookup(fontStretchOrder);\n\nvar fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900];\nvar fontWeightsLookup = toLookup(fontWeights);\n\nfunction normalizeFontStretch(stretch) {\n  stretch = stretch || \"normal\";\n\n  return typeof fontStretchLookup[stretch] === \"number\" ? stretch : \"normal\";\n}\n\nfunction normalizeFontStyle(style) {\n  style = style || \"normal\";\n\n  return fontStyleOrder[style] ? style : \"normal\";\n}\n\nfunction normalizeFontWeight(weight) {\n  if (!weight) {\n    return 400;\n  }\n\n  if (typeof weight === \"number\") {\n    // Ignore values which aren't valid font-weights.\n    return weight >= 100 && weight <= 900 && weight % 100 === 0 ? weight : 400;\n  }\n\n  if (/^\\d00$/.test(weight)) {\n    return parseInt(weight);\n  }\n\n  switch (weight) {\n    case \"bold\":\n      return 700;\n\n    case \"normal\":\n    default:\n      return 400;\n  }\n}\n\nexport function normalizeFontFace(fontFace) {\n  var family = fontFace.family.replace(/\"|'/g, \"\").toLowerCase();\n\n  var style = normalizeFontStyle(fontFace.style);\n  var weight = normalizeFontWeight(fontFace.weight);\n  var stretch = normalizeFontStretch(fontFace.stretch);\n\n  return {\n    family: family,\n    style: style,\n    weight: weight,\n    stretch: stretch,\n    src: fontFace.src || [],\n\n    // The ref property maps this font-face to the font\n    // added by the .addFont() method.\n    ref: fontFace.ref || {\n      name: family,\n      style: [stretch, style, weight].join(\" \")\n    }\n  };\n}\n\n/**\n * Turns a list of font-faces into a map, for easier lookup when resolving\n * fonts.\n * @private\n */\nexport function buildFontFaceMap(fontFaces) {\n  var map = {};\n\n  for (var i = 0; i < fontFaces.length; ++i) {\n    var normalized = normalizeFontFace(fontFaces[i]);\n\n    var name = normalized.family;\n    var stretch = normalized.stretch;\n    var style = normalized.style;\n    var weight = normalized.weight;\n\n    map[name] = map[name] || {};\n\n    map[name][stretch] = map[name][stretch] || {};\n    map[name][stretch][style] = map[name][stretch][style] || {};\n    map[name][stretch][style][weight] = normalized;\n  }\n\n  return map;\n}\n\n/**\n * Searches a map of stretches, weights, etc. in the given direction and\n * then, if no match has been found, in the opposite directions.\n *\n * @param {Object.<string, any>} matchingSet A map of the various font variations.\n * @param {any[]} order The order of the different variations\n * @param {number} pivot The starting point of the search in the order list.\n * @param {number} dir The initial direction of the search (desc = -1, asc = 1)\n * @private\n */\n\nfunction searchFromPivot(matchingSet, order, pivot, dir) {\n  var i;\n\n  for (i = pivot; i >= 0 && i < order.length; i += dir) {\n    if (matchingSet[order[i]]) {\n      return matchingSet[order[i]];\n    }\n  }\n\n  for (i = pivot; i >= 0 && i < order.length; i -= dir) {\n    if (matchingSet[order[i]]) {\n      return matchingSet[order[i]];\n    }\n  }\n}\n\nfunction resolveFontStretch(stretch, matchingSet) {\n  if (matchingSet[stretch]) {\n    return matchingSet[stretch];\n  }\n\n  var pivot = fontStretchLookup[stretch];\n\n  // If the font-stretch value is normal or more condensed, we want to\n  // start with a descending search, otherwise we should do ascending.\n  var dir = pivot <= fontStretchLookup[\"normal\"] ? -1 : 1;\n  var match = searchFromPivot(matchingSet, fontStretchOrder, pivot, dir);\n\n  if (!match) {\n    // Since a font-family cannot exist without having at least one stretch value\n    // we should never reach this point.\n    throw new Error(\n      \"Could not find a matching font-stretch value for \" + stretch\n    );\n  }\n\n  return match;\n}\n\nfunction resolveFontStyle(fontStyle, matchingSet) {\n  if (matchingSet[fontStyle]) {\n    return matchingSet[fontStyle];\n  }\n\n  var ordering = fontStyleOrder[fontStyle];\n\n  for (var i = 0; i < ordering.length; ++i) {\n    if (matchingSet[ordering[i]]) {\n      return matchingSet[ordering[i]];\n    }\n  }\n\n  // Since a font-family cannot exist without having at least one style value\n  // we should never reach this point.\n  throw new Error(\"Could not find a matching font-style for \" + fontStyle);\n}\n\nfunction resolveFontWeight(weight, matchingSet) {\n  if (matchingSet[weight]) {\n    return matchingSet[weight];\n  }\n\n  if (weight === 400 && matchingSet[500]) {\n    return matchingSet[500];\n  }\n\n  if (weight === 500 && matchingSet[400]) {\n    return matchingSet[400];\n  }\n\n  var pivot = fontWeightsLookup[weight];\n\n  // If the font-stretch value is normal or more condensed, we want to\n  // start with a descending search, otherwise we should do ascending.\n  var dir = weight < 400 ? -1 : 1;\n  var match = searchFromPivot(matchingSet, fontWeights, pivot, dir);\n\n  if (!match) {\n    // Since a font-family cannot exist without having at least one stretch value\n    // we should never reach this point.\n    throw new Error(\n      \"Could not find a matching font-weight for value \" + weight\n    );\n  }\n\n  return match;\n}\n\nvar defaultGenericFontFamilies = {\n  \"sans-serif\": \"helvetica\",\n  fixed: \"courier\",\n  monospace: \"courier\",\n  terminal: \"courier\",\n  cursive: \"times\",\n  fantasy: \"times\",\n  serif: \"times\"\n};\n\nvar systemFonts = {\n  caption: \"times\",\n  icon: \"times\",\n  menu: \"times\",\n  \"message-box\": \"times\",\n  \"small-caption\": \"times\",\n  \"status-bar\": \"times\"\n};\n\nfunction ruleToString(rule) {\n  return [rule.stretch, rule.style, rule.weight, rule.family].join(\" \");\n}\n\nexport function resolveFontFace(fontFaceMap, rules, opts) {\n  opts = opts || {};\n\n  var defaultFontFamily = opts.defaultFontFamily || \"times\";\n  var genericFontFamilies = Object.assign(\n    {},\n    defaultGenericFontFamilies,\n    opts.genericFontFamilies || {}\n  );\n\n  var rule = null;\n  var matches = null;\n\n  for (var i = 0; i < rules.length; ++i) {\n    rule = normalizeFontFace(rules[i]);\n\n    if (genericFontFamilies[rule.family]) {\n      rule.family = genericFontFamilies[rule.family];\n    }\n\n    if (fontFaceMap.hasOwnProperty(rule.family)) {\n      matches = fontFaceMap[rule.family];\n\n      break;\n    }\n  }\n\n  // Always fallback to a known font family.\n  matches = matches || fontFaceMap[defaultFontFamily];\n\n  if (!matches) {\n    // At this point we should definitiely have a font family, but if we\n    // don't there is something wrong with our configuration\n    throw new Error(\n      \"Could not find a font-family for the rule '\" +\n        ruleToString(rule) +\n        \"' and default family '\" +\n        defaultFontFamily +\n        \"'.\"\n    );\n  }\n\n  matches = resolveFontStretch(rule.stretch, matches);\n  matches = resolveFontStyle(rule.style, matches);\n  matches = resolveFontWeight(rule.weight, matches);\n\n  if (!matches) {\n    // We should've fount\n    throw new Error(\n      \"Failed to resolve a font for the rule '\" + ruleToString(rule) + \"'.\"\n    );\n  }\n\n  return matches;\n}\n\n/**\n * Builds a style id for use with the addFont() method.\n * @param {FontFace} font\n * @private\n */\nexport function toStyleName(font) {\n  return [font.weight, font.style, font.stretch].join(\" \");\n}\n\nfunction eatWhiteSpace(input) {\n  return input.trimLeft();\n}\n\nfunction parseQuotedFontFamily(input, quote) {\n  var index = 0;\n\n  while (index < input.length) {\n    var current = input.charAt(index);\n\n    if (current === quote) {\n      return [input.substring(0, index), input.substring(index + 1)];\n    }\n\n    index += 1;\n  }\n\n  // Unexpected end of input\n  return null;\n}\n\nfunction parseNonQuotedFontFamily(input) {\n  // It implements part of the identifier parser here: https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n  //\n  // NOTE: This parser pretty much ignores escaped identifiers and that there is a thing called unicode.\n  //\n  // Breakdown of regexp:\n  // -[a-z_]     - when identifier starts with a hyphen, you're not allowed to have another hyphen or a digit\n  // [a-z_]      - allow a-z and underscore at beginning of input\n  // [a-z0-9_-]* - after that, anything goes\n  var match = input.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i);\n\n  // non quoted value contains illegal characters\n  if (match === null) {\n    return null;\n  }\n\n  return [match[0], input.substring(match[0].length)];\n}\n\nvar defaultFont = [\"times\"];\n\nexport function parseFontFamily(input) {\n  var result = [];\n  var ch, parsed;\n  var remaining = input.trim();\n\n  if (remaining === \"\") {\n    return defaultFont;\n  }\n\n  if (remaining in systemFonts) {\n    return [systemFonts[remaining]];\n  }\n\n  while (remaining !== \"\") {\n    parsed = null;\n    remaining = eatWhiteSpace(remaining);\n    ch = remaining.charAt(0);\n\n    switch (ch) {\n      case '\"':\n      case \"'\":\n        parsed = parseQuotedFontFamily(remaining.substring(1), ch);\n        break;\n\n      default:\n        parsed = parseNonQuotedFontFamily(remaining);\n        break;\n    }\n\n    if (parsed === null) {\n      return defaultFont;\n    }\n\n    result.push(parsed[0]);\n\n    remaining = eatWhiteSpace(parsed[1]);\n\n    // We expect end of input or a comma separator here\n    if (remaining !== \"\" && remaining.charAt(0) !== \",\") {\n      return defaultFont;\n    }\n\n    remaining = remaining.replace(/^,/, \"\");\n  }\n\n  return result;\n}\n","/** @license\n * jsPDF addImage plugin\n * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/\n *               2013 Chris Dowling, https://github.com/gingerchris\n *               2013 Trinh Ho, https://github.com/ineedfat\n *               2013 Edwin Alejandro Perez, https://github.com/eaparango\n *               2013 Norah Smith, https://github.com/burnburnrocket\n *               2014 Diego Casorran, https://github.com/diegocr\n *               2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n/**\n * @name addImage\n * @module\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob, btoa } from \"../libs/AtobBtoa.js\";\n\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var namespace = \"addImage_\";\n  jsPDFAPI.__addimage__ = {};\n\n  var UNKNOWN = \"UNKNOWN\";\n\n  // Heuristic selection of a good batch for large array .apply. Not limiting make the call overflow.\n  // With too small batch iteration will be slow as more calls are made,\n  // higher values cause larger and slower garbage collection.\n  var ARRAY_APPLY_BATCH = 8192;\n\n  var imageFileTypeHeaders = {\n    PNG: [[0x89, 0x50, 0x4e, 0x47]],\n    TIFF: [\n      [0x4d, 0x4d, 0x00, 0x2a], //Motorola\n      [0x49, 0x49, 0x2a, 0x00] //Intel\n    ],\n    JPEG: [\n      [\n        0xff,\n        0xd8,\n        0xff,\n        0xe0,\n        undefined,\n        undefined,\n        0x4a,\n        0x46,\n        0x49,\n        0x46,\n        0x00\n      ], //JFIF\n      [\n        0xff,\n        0xd8,\n        0xff,\n        0xe1,\n        undefined,\n        undefined,\n        0x45,\n        0x78,\n        0x69,\n        0x66,\n        0x00,\n        0x00\n      ], //Exif\n      [0xff, 0xd8, 0xff, 0xdb], //JPEG RAW\n      [0xff, 0xd8, 0xff, 0xee] //EXIF RAW\n    ],\n    JPEG2000: [[0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20]],\n    GIF87a: [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61]],\n    GIF89a: [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61]],\n    WEBP: [\n      [\n        0x52,\n        0x49,\n        0x46,\n        0x46,\n        undefined,\n        undefined,\n        undefined,\n        undefined,\n        0x57,\n        0x45,\n        0x42,\n        0x50\n      ]\n    ],\n    BMP: [\n      [0x42, 0x4d], //BM - Windows 3.1x, 95, NT, ... etc.\n      [0x42, 0x41], //BA - OS/2 struct bitmap array\n      [0x43, 0x49], //CI - OS/2 struct color icon\n      [0x43, 0x50], //CP - OS/2 const color pointer\n      [0x49, 0x43], //IC - OS/2 struct icon\n      [0x50, 0x54] //PT - OS/2 pointer\n    ]\n  };\n\n  /**\n   * Recognize filetype of Image by magic-bytes\n   *\n   * https://en.wikipedia.org/wiki/List_of_file_signatures\n   *\n   * @name getImageFileTypeByImageData\n   * @public\n   * @function\n   * @param {string|arraybuffer} imageData imageData as binary String or arraybuffer\n   * @param {string} format format of file if filetype-recognition fails, e.g. 'JPEG'\n   *\n   * @returns {string} filetype of Image\n   */\n  var getImageFileTypeByImageData = (jsPDFAPI.__addimage__.getImageFileTypeByImageData = function(\n    imageData,\n    fallbackFormat\n  ) {\n    fallbackFormat = fallbackFormat || UNKNOWN;\n    var i;\n    var j;\n    var result = UNKNOWN;\n    var headerSchemata;\n    var compareResult;\n    var fileType;\n\n    if (\n      fallbackFormat === \"RGBA\" ||\n      (imageData.data !== undefined &&\n        imageData.data instanceof Uint8ClampedArray &&\n        \"height\" in imageData &&\n        \"width\" in imageData)\n    ) {\n      return \"RGBA\";\n    }\n\n    if (isArrayBufferView(imageData)) {\n      for (fileType in imageFileTypeHeaders) {\n        headerSchemata = imageFileTypeHeaders[fileType];\n        for (i = 0; i < headerSchemata.length; i += 1) {\n          compareResult = true;\n          for (j = 0; j < headerSchemata[i].length; j += 1) {\n            if (headerSchemata[i][j] === undefined) {\n              continue;\n            }\n            if (headerSchemata[i][j] !== imageData[j]) {\n              compareResult = false;\n              break;\n            }\n          }\n          if (compareResult === true) {\n            result = fileType;\n            break;\n          }\n        }\n      }\n    } else {\n      for (fileType in imageFileTypeHeaders) {\n        headerSchemata = imageFileTypeHeaders[fileType];\n        for (i = 0; i < headerSchemata.length; i += 1) {\n          compareResult = true;\n          for (j = 0; j < headerSchemata[i].length; j += 1) {\n            if (headerSchemata[i][j] === undefined) {\n              continue;\n            }\n            if (headerSchemata[i][j] !== imageData.charCodeAt(j)) {\n              compareResult = false;\n              break;\n            }\n          }\n          if (compareResult === true) {\n            result = fileType;\n            break;\n          }\n        }\n      }\n    }\n\n    if (result === UNKNOWN && fallbackFormat !== UNKNOWN) {\n      result = fallbackFormat;\n    }\n    return result;\n  });\n\n  // Image functionality ported from pdf.js\n  var putImage = function(image) {\n    var out = this.internal.write;\n    var putStream = this.internal.putStream;\n    var getFilters = this.internal.getFilters;\n\n    var filter = getFilters();\n    while (filter.indexOf(\"FlateEncode\") !== -1) {\n      filter.splice(filter.indexOf(\"FlateEncode\"), 1);\n    }\n\n    image.objectId = this.internal.newObject();\n\n    var additionalKeyValues = [];\n    additionalKeyValues.push({ key: \"Type\", value: \"/XObject\" });\n    additionalKeyValues.push({ key: \"Subtype\", value: \"/Image\" });\n    additionalKeyValues.push({ key: \"Width\", value: image.width });\n    additionalKeyValues.push({ key: \"Height\", value: image.height });\n\n    if (image.colorSpace === color_spaces.INDEXED) {\n      additionalKeyValues.push({\n        key: \"ColorSpace\",\n        value:\n          \"[/Indexed /DeviceRGB \" +\n          // if an indexed png defines more than one colour with transparency, we've created a sMask\n          (image.palette.length / 3 - 1) +\n          \" \" +\n          (\"sMask\" in image && typeof image.sMask !== \"undefined\"\n            ? image.objectId + 2\n            : image.objectId + 1) +\n          \" 0 R]\"\n      });\n    } else {\n      additionalKeyValues.push({\n        key: \"ColorSpace\",\n        value: \"/\" + image.colorSpace\n      });\n      if (image.colorSpace === color_spaces.DEVICE_CMYK) {\n        additionalKeyValues.push({ key: \"Decode\", value: \"[1 0 1 0 1 0 1 0]\" });\n      }\n    }\n    additionalKeyValues.push({\n      key: \"BitsPerComponent\",\n      value: image.bitsPerComponent\n    });\n    if (\n      \"decodeParameters\" in image &&\n      typeof image.decodeParameters !== \"undefined\"\n    ) {\n      additionalKeyValues.push({\n        key: \"DecodeParms\",\n        value: \"<<\" + image.decodeParameters + \">>\"\n      });\n    }\n    if (\"transparency\" in image && Array.isArray(image.transparency)) {\n      var transparency = \"\",\n        i = 0,\n        len = image.transparency.length;\n      for (; i < len; i++)\n        transparency +=\n          image.transparency[i] + \" \" + image.transparency[i] + \" \";\n\n      additionalKeyValues.push({\n        key: \"Mask\",\n        value: \"[\" + transparency + \"]\"\n      });\n    }\n    if (typeof image.sMask !== \"undefined\") {\n      additionalKeyValues.push({\n        key: \"SMask\",\n        value: image.objectId + 1 + \" 0 R\"\n      });\n    }\n\n    var alreadyAppliedFilters =\n      typeof image.filter !== \"undefined\" ? [\"/\" + image.filter] : undefined;\n\n    putStream({\n      data: image.data,\n      additionalKeyValues: additionalKeyValues,\n      alreadyAppliedFilters: alreadyAppliedFilters,\n      objectId: image.objectId\n    });\n\n    out(\"endobj\");\n\n    // Soft mask\n    if (\"sMask\" in image && typeof image.sMask !== \"undefined\") {\n      var decodeParameters =\n        \"/Predictor \" +\n        image.predictor +\n        \" /Colors 1 /BitsPerComponent \" +\n        image.bitsPerComponent +\n        \" /Columns \" +\n        image.width;\n      var sMask = {\n        width: image.width,\n        height: image.height,\n        colorSpace: \"DeviceGray\",\n        bitsPerComponent: image.bitsPerComponent,\n        decodeParameters: decodeParameters,\n        data: image.sMask\n      };\n      if (\"filter\" in image) {\n        sMask.filter = image.filter;\n      }\n      putImage.call(this, sMask);\n    }\n\n    //Palette\n    if (image.colorSpace === color_spaces.INDEXED) {\n      var objId = this.internal.newObject();\n      //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>');\n      //putStream(zlib.compress(img['pal']));\n      putStream({\n        data: arrayBufferToBinaryString(new Uint8Array(image.palette)),\n        objectId: objId\n      });\n      out(\"endobj\");\n    }\n  };\n  var putResourcesCallback = function() {\n    var images = this.internal.collections[namespace + \"images\"];\n    for (var i in images) {\n      putImage.call(this, images[i]);\n    }\n  };\n  var putXObjectsDictCallback = function() {\n    var images = this.internal.collections[namespace + \"images\"],\n      out = this.internal.write,\n      image;\n    for (var i in images) {\n      image = images[i];\n      out(\"/I\" + image.index, image.objectId, \"0\", \"R\");\n    }\n  };\n\n  var checkCompressValue = function(value) {\n    if (value && typeof value === \"string\") value = value.toUpperCase();\n    return value in jsPDFAPI.image_compression ? value : image_compression.NONE;\n  };\n\n  var initialize = function() {\n    if (!this.internal.collections[namespace + \"images\"]) {\n      this.internal.collections[namespace + \"images\"] = {};\n      this.internal.events.subscribe(\"putResources\", putResourcesCallback);\n      this.internal.events.subscribe(\"putXobjectDict\", putXObjectsDictCallback);\n    }\n  };\n\n  var getImages = function() {\n    var images = this.internal.collections[namespace + \"images\"];\n    initialize.call(this);\n    return images;\n  };\n  var getImageIndex = function() {\n    return Object.keys(this.internal.collections[namespace + \"images\"]).length;\n  };\n  var notDefined = function(value) {\n    return typeof value === \"undefined\" || value === null || value.length === 0;\n  };\n  var generateAliasFromImageData = function(imageData) {\n    if (typeof imageData === \"string\" || isArrayBufferView(imageData)) {\n      return sHashCode(imageData);\n    } else if (isArrayBufferView(imageData.data)) {\n      return sHashCode(imageData.data);\n    }\n\n    return null;\n  };\n\n  var isImageTypeSupported = function(type) {\n    return typeof jsPDFAPI[\"process\" + type.toUpperCase()] === \"function\";\n  };\n\n  var isDOMElement = function(object) {\n    return typeof object === \"object\" && object.nodeType === 1;\n  };\n\n  var getImageDataFromElement = function(element, format) {\n    //if element is an image which uses data url definition, just return the dataurl\n    if (element.nodeName === \"IMG\" && element.hasAttribute(\"src\")) {\n      var src = \"\" + element.getAttribute(\"src\");\n\n      //is base64 encoded dataUrl, directly process it\n      if (src.indexOf(\"data:image/\") === 0) {\n        return atob(\n          unescape(src)\n            .split(\"base64,\")\n            .pop()\n        );\n      }\n\n      //it is probably an url, try to load it\n      var tmpImageData = jsPDFAPI.loadFile(src, true);\n      if (tmpImageData !== undefined) {\n        return tmpImageData;\n      }\n    }\n\n    if (element.nodeName === \"CANVAS\") {\n      if (element.width === 0 || element.height === 0) {\n        throw new Error(\n          \"Given canvas must have data. Canvas width: \" +\n            element.width +\n            \", height: \" +\n            element.height\n        );\n      }\n      var mimeType;\n      switch (format) {\n        case \"PNG\":\n          mimeType = \"image/png\";\n          break;\n        case \"WEBP\":\n          mimeType = \"image/webp\";\n          break;\n        case \"JPEG\":\n        case \"JPG\":\n        default:\n          mimeType = \"image/jpeg\";\n          break;\n      }\n      return atob(\n        element\n          .toDataURL(mimeType, 1.0)\n          .split(\"base64,\")\n          .pop()\n      );\n    }\n  };\n\n  var checkImagesForAlias = function(alias) {\n    var images = this.internal.collections[namespace + \"images\"];\n    if (images) {\n      for (var e in images) {\n        if (alias === images[e].alias) {\n          return images[e];\n        }\n      }\n    }\n  };\n\n  var determineWidthAndHeight = function(width, height, image) {\n    if (!width && !height) {\n      width = -96;\n      height = -96;\n    }\n    if (width < 0) {\n      width = (-1 * image.width * 72) / width / this.internal.scaleFactor;\n    }\n    if (height < 0) {\n      height = (-1 * image.height * 72) / height / this.internal.scaleFactor;\n    }\n    if (width === 0) {\n      width = (height * image.width) / image.height;\n    }\n    if (height === 0) {\n      height = (width * image.height) / image.width;\n    }\n\n    return [width, height];\n  };\n\n  var writeImageToPDF = function(x, y, width, height, image, rotation) {\n    var dims = determineWidthAndHeight.call(this, width, height, image),\n      coord = this.internal.getCoordinateString,\n      vcoord = this.internal.getVerticalCoordinateString;\n\n    var images = getImages.call(this);\n\n    width = dims[0];\n    height = dims[1];\n    images[image.index] = image;\n\n    if (rotation) {\n      rotation *= Math.PI / 180;\n      var c = Math.cos(rotation);\n      var s = Math.sin(rotation);\n      //like in pdf Reference do it 4 digits instead of 2\n      var f4 = function(number) {\n        return number.toFixed(4);\n      };\n      var rotationTransformationMatrix = [\n        f4(c),\n        f4(s),\n        f4(s * -1),\n        f4(c),\n        0,\n        0,\n        \"cm\"\n      ];\n    }\n    this.internal.write(\"q\"); //Save graphics state\n    if (rotation) {\n      this.internal.write(\n        [1, \"0\", \"0\", 1, coord(x), vcoord(y + height), \"cm\"].join(\" \")\n      ); //Translate\n      this.internal.write(rotationTransformationMatrix.join(\" \")); //Rotate\n      this.internal.write(\n        [coord(width), \"0\", \"0\", coord(height), \"0\", \"0\", \"cm\"].join(\" \")\n      ); //Scale\n    } else {\n      this.internal.write(\n        [\n          coord(width),\n          \"0\",\n          \"0\",\n          coord(height),\n          coord(x),\n          vcoord(y + height),\n          \"cm\"\n        ].join(\" \")\n      ); //Translate and Scale\n    }\n\n    if (this.isAdvancedAPI()) {\n      // draw image bottom up when in \"advanced\" API mode\n      this.internal.write([1, 0, 0, -1, 0, 0, \"cm\"].join(\" \"));\n    }\n\n    this.internal.write(\"/I\" + image.index + \" Do\"); //Paint Image\n    this.internal.write(\"Q\"); //Restore graphics state\n  };\n\n  /**\n   * COLOR SPACES\n   */\n  var color_spaces = (jsPDFAPI.color_spaces = {\n    DEVICE_RGB: \"DeviceRGB\",\n    DEVICE_GRAY: \"DeviceGray\",\n    DEVICE_CMYK: \"DeviceCMYK\",\n    CAL_GREY: \"CalGray\",\n    CAL_RGB: \"CalRGB\",\n    LAB: \"Lab\",\n    ICC_BASED: \"ICCBased\",\n    INDEXED: \"Indexed\",\n    PATTERN: \"Pattern\",\n    SEPARATION: \"Separation\",\n    DEVICE_N: \"DeviceN\"\n  });\n\n  /**\n   * DECODE METHODS\n   */\n  jsPDFAPI.decode = {\n    DCT_DECODE: \"DCTDecode\",\n    FLATE_DECODE: \"FlateDecode\",\n    LZW_DECODE: \"LZWDecode\",\n    JPX_DECODE: \"JPXDecode\",\n    JBIG2_DECODE: \"JBIG2Decode\",\n    ASCII85_DECODE: \"ASCII85Decode\",\n    ASCII_HEX_DECODE: \"ASCIIHexDecode\",\n    RUN_LENGTH_DECODE: \"RunLengthDecode\",\n    CCITT_FAX_DECODE: \"CCITTFaxDecode\"\n  };\n\n  /**\n   * IMAGE COMPRESSION TYPES\n   */\n  var image_compression = (jsPDFAPI.image_compression = {\n    NONE: \"NONE\",\n    FAST: \"FAST\",\n    MEDIUM: \"MEDIUM\",\n    SLOW: \"SLOW\"\n  });\n\n  /**\n   * @name sHashCode\n   * @function\n   * @param {string} data\n   * @returns {string}\n   */\n  var sHashCode = (jsPDFAPI.__addimage__.sHashCode = function(data) {\n    var hash = 0,\n      i,\n      len;\n\n    if (typeof data === \"string\") {\n      len = data.length;\n      for (i = 0; i < len; i++) {\n        hash = (hash << 5) - hash + data.charCodeAt(i);\n        hash |= 0; // Convert to 32bit integer\n      }\n    } else if (isArrayBufferView(data)) {\n      len = data.byteLength / 2;\n      for (i = 0; i < len; i++) {\n        hash = (hash << 5) - hash + data[i];\n        hash |= 0; // Convert to 32bit integer\n      }\n    }\n    return hash;\n  });\n\n  /**\n   * Validates if given String is a valid Base64-String\n   *\n   * @name validateStringAsBase64\n   * @public\n   * @function\n   * @param {String} possible Base64-String\n   *\n   * @returns {boolean}\n   */\n  var validateStringAsBase64 = (jsPDFAPI.__addimage__.validateStringAsBase64 = function(\n    possibleBase64String\n  ) {\n    possibleBase64String = possibleBase64String || \"\";\n    possibleBase64String.toString().trim();\n\n    var result = true;\n\n    if (possibleBase64String.length === 0) {\n      result = false;\n    }\n\n    if (possibleBase64String.length % 4 !== 0) {\n      result = false;\n    }\n\n    if (\n      /^[A-Za-z0-9+/]+$/.test(\n        possibleBase64String.substr(0, possibleBase64String.length - 2)\n      ) === false\n    ) {\n      result = false;\n    }\n\n    if (\n      /^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(\n        possibleBase64String.substr(-2)\n      ) === false\n    ) {\n      result = false;\n    }\n    return result;\n  });\n\n  /**\n   * Strips out and returns info from a valid base64 data URI\n   *\n   * @name extractImageFromDataUrl\n   * @function\n   * @param {string} dataUrl a valid data URI of format 'data:[<MIME-type>][;base64],<data>'\n   * @returns {Array}an Array containing the following\n   * [0] the complete data URI\n   * [1] <MIME-type>\n   * [2] format - the second part of the mime-type i.e 'png' in 'image/png'\n   * [4] <data>\n   */\n  var extractImageFromDataUrl = (jsPDFAPI.__addimage__.extractImageFromDataUrl = function(\n    dataUrl\n  ) {\n    dataUrl = dataUrl || \"\";\n    var dataUrlParts = dataUrl.split(\"base64,\");\n    var result = null;\n\n    if (dataUrlParts.length === 2) {\n      var extractedInfo = /^data:(\\w*\\/\\w*);*(charset=(?!charset=)[\\w=-]*)*;*$/.exec(\n        dataUrlParts[0]\n      );\n      if (Array.isArray(extractedInfo)) {\n        result = {\n          mimeType: extractedInfo[1],\n          charset: extractedInfo[2],\n          data: dataUrlParts[1]\n        };\n      }\n    }\n    return result;\n  });\n\n  /**\n   * Check to see if ArrayBuffer is supported\n   *\n   * @name supportsArrayBuffer\n   * @function\n   * @returns {boolean}\n   */\n  var supportsArrayBuffer = (jsPDFAPI.__addimage__.supportsArrayBuffer = function() {\n    return (\n      typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\"\n    );\n  });\n\n  /**\n   * Tests supplied object to determine if ArrayBuffer\n   *\n   * @name isArrayBuffer\n   * @function\n   * @param {Object} object an Object\n   *\n   * @returns {boolean}\n   */\n  jsPDFAPI.__addimage__.isArrayBuffer = function(object) {\n    return supportsArrayBuffer() && object instanceof ArrayBuffer;\n  };\n\n  /**\n   * Tests supplied object to determine if it implements the ArrayBufferView (TypedArray) interface\n   *\n   * @name isArrayBufferView\n   * @function\n   * @param {Object} object an Object\n   * @returns {boolean}\n   */\n  var isArrayBufferView = (jsPDFAPI.__addimage__.isArrayBufferView = function(\n    object\n  ) {\n    return (\n      supportsArrayBuffer() &&\n      typeof Uint32Array !== \"undefined\" &&\n      (object instanceof Int8Array ||\n        object instanceof Uint8Array ||\n        (typeof Uint8ClampedArray !== \"undefined\" &&\n          object instanceof Uint8ClampedArray) ||\n        object instanceof Int16Array ||\n        object instanceof Uint16Array ||\n        object instanceof Int32Array ||\n        object instanceof Uint32Array ||\n        object instanceof Float32Array ||\n        object instanceof Float64Array)\n    );\n  });\n\n  /**\n   * Convert Binary String to ArrayBuffer\n   *\n   * @name binaryStringToUint8Array\n   * @public\n   * @function\n   * @param {string} BinaryString with ImageData\n   * @returns {Uint8Array}\n   */\n  var binaryStringToUint8Array = (jsPDFAPI.__addimage__.binaryStringToUint8Array = function(\n    binary_string\n  ) {\n    var len = binary_string.length;\n    var bytes = new Uint8Array(len);\n    for (var i = 0; i < len; i++) {\n      bytes[i] = binary_string.charCodeAt(i);\n    }\n    return bytes;\n  });\n\n  /**\n   * Convert the Buffer to a Binary String\n   *\n   * @name arrayBufferToBinaryString\n   * @public\n   * @function\n   * @param {ArrayBuffer|ArrayBufferView} ArrayBuffer buffer or bufferView with ImageData\n   *\n   * @returns {String}\n   */\n  var arrayBufferToBinaryString = (jsPDFAPI.__addimage__.arrayBufferToBinaryString = function(\n    buffer\n  ) {\n    var out = \"\";\n    // There are calls with both ArrayBuffer and already converted Uint8Array or other BufferView.\n    // Do not copy the array if input is already an array.\n    var buf = isArrayBufferView(buffer) ? buffer : new Uint8Array(buffer);\n    for (var i = 0; i < buf.length; i += ARRAY_APPLY_BATCH) {\n      // Limit the amount of characters being parsed to prevent overflow.\n      // Note that while TextDecoder would be faster, it does not have the same\n      // functionality as fromCharCode with any provided encodings as of 3/2021.\n      out += String.fromCharCode.apply(\n        null,\n        buf.subarray(i, i + ARRAY_APPLY_BATCH)\n      );\n    }\n    return out;\n  });\n\n  /**\n   * Possible parameter for addImage, an RGBA buffer with size.\n   *\n   * @typedef {Object} RGBAData\n   * @property {Uint8ClampedArray} data - Single dimensional array of RGBA values. For example from canvas getImageData.\n   * @property {number} width - Image width as the data does not carry this information in itself.\n   * @property {number} height - Image height as the data does not carry this information in itself.\n   */\n\n  /**\n   * Adds an Image to the PDF.\n   *\n   * @name addImage\n   * @public\n   * @function\n   * @param {string|HTMLImageElement|HTMLCanvasElement|Uint8Array|RGBAData} imageData imageData as base64 encoded DataUrl or Image-HTMLElement or Canvas-HTMLElement or object containing RGBA array (like output from canvas.getImageData).\n   * @param {string} format format of file if filetype-recognition fails or in case of a Canvas-Element needs to be specified (default for Canvas is JPEG), e.g. 'JPEG', 'PNG', 'WEBP'\n   * @param {number} x x Coordinate (in units declared at inception of PDF document) against left edge of the page\n   * @param {number} y y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n   * @param {number} width width of the image (in units declared at inception of PDF document)\n   * @param {number} height height of the Image (in units declared at inception of PDF document)\n   * @param {string} alias alias of the image (if used multiple times)\n   * @param {string} compression compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n   * @param {number} rotation rotation of the image in degrees (0-359)\n   *\n   * @returns jsPDF\n   */\n  jsPDFAPI.addImage = function() {\n    var imageData, format, x, y, w, h, alias, compression, rotation;\n\n    imageData = arguments[0];\n    if (typeof arguments[1] === \"number\") {\n      format = UNKNOWN;\n      x = arguments[1];\n      y = arguments[2];\n      w = arguments[3];\n      h = arguments[4];\n      alias = arguments[5];\n      compression = arguments[6];\n      rotation = arguments[7];\n    } else {\n      format = arguments[1];\n      x = arguments[2];\n      y = arguments[3];\n      w = arguments[4];\n      h = arguments[5];\n      alias = arguments[6];\n      compression = arguments[7];\n      rotation = arguments[8];\n    }\n\n    if (\n      typeof imageData === \"object\" &&\n      !isDOMElement(imageData) &&\n      \"imageData\" in imageData\n    ) {\n      var options = imageData;\n\n      imageData = options.imageData;\n      format = options.format || format || UNKNOWN;\n      x = options.x || x || 0;\n      y = options.y || y || 0;\n      w = options.w || options.width || w;\n      h = options.h || options.height || h;\n      alias = options.alias || alias;\n      compression = options.compression || compression;\n      rotation = options.rotation || options.angle || rotation;\n    }\n\n    //If compression is not explicitly set, determine if we should use compression\n    var filter = this.internal.getFilters();\n    if (compression === undefined && filter.indexOf(\"FlateEncode\") !== -1) {\n      compression = \"SLOW\";\n    }\n\n    if (isNaN(x) || isNaN(y)) {\n      throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");\n    }\n\n    initialize.call(this);\n\n    var image = processImageData.call(\n      this,\n      imageData,\n      format,\n      alias,\n      compression\n    );\n\n    writeImageToPDF.call(this, x, y, w, h, image, rotation);\n\n    return this;\n  };\n\n  var processImageData = function(imageData, format, alias, compression) {\n    var result, dataAsBinaryString;\n\n    if (\n      typeof imageData === \"string\" &&\n      getImageFileTypeByImageData(imageData) === UNKNOWN\n    ) {\n      imageData = unescape(imageData);\n      var tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n      if (tmpImageData !== \"\") {\n        imageData = tmpImageData;\n      } else {\n        tmpImageData = jsPDFAPI.loadFile(imageData, true);\n        if (tmpImageData !== undefined) {\n          imageData = tmpImageData;\n        }\n      }\n    }\n\n    if (isDOMElement(imageData)) {\n      imageData = getImageDataFromElement(imageData, format);\n    }\n\n    format = getImageFileTypeByImageData(imageData, format);\n    if (!isImageTypeSupported(format)) {\n      throw new Error(\n        \"addImage does not support files of type '\" +\n          format +\n          \"', please ensure that a plugin for '\" +\n          format +\n          \"' support is added.\"\n      );\n    }\n\n    // now do the heavy lifting\n\n    if (notDefined(alias)) {\n      alias = generateAliasFromImageData(imageData);\n    }\n    result = checkImagesForAlias.call(this, alias);\n\n    if (!result) {\n      if (supportsArrayBuffer()) {\n        // no need to convert if imageData is already uint8array\n        if (!(imageData instanceof Uint8Array) && format !== \"RGBA\") {\n          dataAsBinaryString = imageData;\n          imageData = binaryStringToUint8Array(imageData);\n        }\n      }\n\n      result = this[\"process\" + format.toUpperCase()](\n        imageData,\n        getImageIndex.call(this),\n        alias,\n        checkCompressValue(compression),\n        dataAsBinaryString\n      );\n    }\n\n    if (!result) {\n      throw new Error(\"An unknown error occurred whilst processing the image.\");\n    }\n    return result;\n  };\n\n  /**\n   * @name convertBase64ToBinaryString\n   * @function\n   * @param {string} stringData\n   * @returns {string} binary string\n   */\n  var convertBase64ToBinaryString = (jsPDFAPI.__addimage__.convertBase64ToBinaryString = function(\n    stringData,\n    throwError\n  ) {\n    throwError = typeof throwError === \"boolean\" ? throwError : true;\n    var base64Info;\n    var imageData = \"\";\n    var rawData;\n\n    if (typeof stringData === \"string\") {\n      base64Info = extractImageFromDataUrl(stringData);\n      rawData = base64Info !== null ? base64Info.data : stringData;\n\n      try {\n        imageData = atob(rawData);\n      } catch (e) {\n        if (throwError) {\n          if (!validateStringAsBase64(rawData)) {\n            throw new Error(\n              \"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \"\n            );\n          } else {\n            throw new Error(\n              \"atob-Error in jsPDF.convertBase64ToBinaryString \" + e.message\n            );\n          }\n        }\n      }\n    }\n    return imageData;\n  });\n\n  /**\n   * @name getImageProperties\n   * @function\n   * @param {Object} imageData\n   * @returns {Object}\n   */\n  jsPDFAPI.getImageProperties = function(imageData) {\n    var image;\n    var tmpImageData = \"\";\n    var format;\n\n    if (isDOMElement(imageData)) {\n      imageData = getImageDataFromElement(imageData);\n    }\n\n    if (\n      typeof imageData === \"string\" &&\n      getImageFileTypeByImageData(imageData) === UNKNOWN\n    ) {\n      tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n      if (tmpImageData === \"\") {\n        tmpImageData = jsPDFAPI.loadFile(imageData) || \"\";\n      }\n      imageData = tmpImageData;\n    }\n\n    format = getImageFileTypeByImageData(imageData);\n    if (!isImageTypeSupported(format)) {\n      throw new Error(\n        \"addImage does not support files of type '\" +\n          format +\n          \"', please ensure that a plugin for '\" +\n          format +\n          \"' support is added.\"\n      );\n    }\n\n    if (supportsArrayBuffer() && !(imageData instanceof Uint8Array)) {\n      imageData = binaryStringToUint8Array(imageData);\n    }\n\n    image = this[\"process\" + format.toUpperCase()](imageData);\n\n    if (!image) {\n      throw new Error(\"An unknown error occurred whilst processing the image\");\n    }\n\n    image.fileType = format;\n\n    return image;\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC)  steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF Annotations PlugIn\n *\n * There are many types of annotations in a PDF document. Annotations are placed\n * on a page at a particular location. They are not 'attached' to an object.\n * <br />\n * This plugin current supports <br />\n * <li> Goto Page (set pageNumber and top in options)\n * <li> Goto Name (set name and top in options)\n * <li> Goto URL (set url in options)\n * <p>\n * \tThe destination magnification factor can also be specified when goto is a page number or a named destination. (see documentation below)\n *  (set magFactor in options).  XYZ is the default.\n * </p>\n * <p>\n *  Links, Text, Popup, and FreeText are supported.\n * </p>\n * <p>\n * Options In PDF spec Not Implemented Yet\n * <li> link border\n * <li> named target\n * <li> page coordinates\n * <li> destination page scaling and layout\n * <li> actions other than URL and GotoPage\n * <li> background / hover actions\n * </p>\n * @name annotations\n * @module\n */\n\n/*\n    Destination Magnification Factors\n    See PDF 1.3 Page 386 for meanings and options\n\n    [supported]\n\tXYZ (options; left top zoom)\n\tFit (no options)\n\tFitH (options: top)\n\tFitV (options: left)\n\n\t[not supported]\n\tFitR\n\tFitB\n\tFitBH\n\tFitBV\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var notEmpty = function(obj) {\n    if (typeof obj != \"undefined\") {\n      if (obj != \"\") {\n        return true;\n      }\n    }\n  };\n\n  jsPDF.API.events.push([\n    \"addPage\",\n    function(addPageData) {\n      var pageInfo = this.internal.getPageInfo(addPageData.pageNumber);\n      pageInfo.pageContext.annotations = [];\n    }\n  ]);\n\n  jsPDFAPI.events.push([\n    \"putPage\",\n    function(putPageData) {\n      var getHorizontalCoordinateString = this.internal.getCoordinateString;\n      var getVerticalCoordinateString = this.internal\n        .getVerticalCoordinateString;\n      var pageInfo = this.internal.getPageInfoByObjId(putPageData.objId);\n      var pageAnnos = putPageData.pageContext.annotations;\n\n      var anno, rect, line;\n      var found = false;\n      for (var a = 0; a < pageAnnos.length && !found; a++) {\n        anno = pageAnnos[a];\n        switch (anno.type) {\n          case \"link\":\n            if (\n              notEmpty(anno.options.url) ||\n              notEmpty(anno.options.pageNumber)\n            ) {\n              found = true;\n            }\n            break;\n          case \"reference\":\n          case \"text\":\n          case \"freetext\":\n            found = true;\n            break;\n        }\n      }\n      if (found == false) {\n        return;\n      }\n\n      this.internal.write(\"/Annots [\");\n      for (var i = 0; i < pageAnnos.length; i++) {\n        anno = pageAnnos[i];\n        var escape = this.internal.pdfEscape;\n        var encryptor = this.internal.getEncryptor(putPageData.objId);\n\n        switch (anno.type) {\n          case \"reference\":\n            // References to Widget Annotations (for AcroForm Fields)\n            this.internal.write(\" \" + anno.object.objId + \" 0 R \");\n            break;\n          case \"text\":\n            // Create a an object for both the text and the popup\n            var objText = this.internal.newAdditionalObject();\n            var objPopup = this.internal.newAdditionalObject();\n            var encryptorText = this.internal.getEncryptor(objText.objId);\n\n            var title = anno.title || \"Note\";\n            rect =\n              \"/Rect [\" +\n              getHorizontalCoordinateString(anno.bounds.x) +\n              \" \" +\n              getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n              \" \" +\n              getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n              \" \" +\n              getVerticalCoordinateString(anno.bounds.y) +\n              \"] \";\n\n            line =\n              \"<</Type /Annot /Subtype /\" +\n              \"Text\" +\n              \" \" +\n              rect +\n              \"/Contents (\" +\n              escape(encryptorText(anno.contents)) +\n              \")\";\n            line += \" /Popup \" + objPopup.objId + \" 0 R\";\n            line += \" /P \" + pageInfo.objId + \" 0 R\";\n            line += \" /T (\" + escape(encryptorText(title)) + \") >>\";\n            objText.content = line;\n\n            var parent = objText.objId + \" 0 R\";\n            var popoff = 30;\n            rect =\n              \"/Rect [\" +\n              getHorizontalCoordinateString(anno.bounds.x + popoff) +\n              \" \" +\n              getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n              \" \" +\n              getHorizontalCoordinateString(\n                anno.bounds.x + anno.bounds.w + popoff\n              ) +\n              \" \" +\n              getVerticalCoordinateString(anno.bounds.y) +\n              \"] \";\n            line =\n              \"<</Type /Annot /Subtype /\" +\n              \"Popup\" +\n              \" \" +\n              rect +\n              \" /Parent \" +\n              parent;\n            if (anno.open) {\n              line += \" /Open true\";\n            }\n            line += \" >>\";\n            objPopup.content = line;\n\n            this.internal.write(objText.objId, \"0 R\", objPopup.objId, \"0 R\");\n\n            break;\n          case \"freetext\":\n            rect =\n              \"/Rect [\" +\n              getHorizontalCoordinateString(anno.bounds.x) +\n              \" \" +\n              getVerticalCoordinateString(anno.bounds.y) +\n              \" \" +\n              getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n              \" \" +\n              getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n              \"] \";\n            var color = anno.color || \"#000000\";\n            line =\n              \"<</Type /Annot /Subtype /\" +\n              \"FreeText\" +\n              \" \" +\n              rect +\n              \"/Contents (\" +\n              escape(encryptor(anno.contents)) +\n              \")\";\n            line +=\n              \" /DS(font: Helvetica,sans-serif 12.0pt; text-align:left; color:#\" +\n              color +\n              \")\";\n            line += \" /Border [0 0 0]\";\n            line += \" >>\";\n            this.internal.write(line);\n            break;\n          case \"link\":\n            if (anno.options.name) {\n              var loc = this.annotations._nameMap[anno.options.name];\n              anno.options.pageNumber = loc.page;\n              anno.options.top = loc.y;\n            } else {\n              if (!anno.options.top) {\n                anno.options.top = 0;\n              }\n            }\n\n            rect =\n              \"/Rect [\" +\n              anno.finalBounds.x +\n              \" \" +\n              anno.finalBounds.y +\n              \" \" +\n              anno.finalBounds.w +\n              \" \" +\n              anno.finalBounds.h +\n              \"] \";\n\n            line = \"\";\n            if (anno.options.url) {\n              line =\n                \"<</Type /Annot /Subtype /Link \" +\n                rect +\n                \"/Border [0 0 0] /A <</S /URI /URI (\" +\n                escape(encryptor(anno.options.url)) +\n                \") >>\";\n            } else if (anno.options.pageNumber) {\n              // first page is 0\n              var info = this.internal.getPageInfo(anno.options.pageNumber);\n              line =\n                \"<</Type /Annot /Subtype /Link \" +\n                rect +\n                \"/Border [0 0 0] /Dest [\" +\n                info.objId +\n                \" 0 R\";\n              anno.options.magFactor = anno.options.magFactor || \"XYZ\";\n              switch (anno.options.magFactor) {\n                case \"Fit\":\n                  line += \" /Fit]\";\n                  break;\n                case \"FitH\":\n                  line += \" /FitH \" + anno.options.top + \"]\";\n                  break;\n                case \"FitV\":\n                  anno.options.left = anno.options.left || 0;\n                  line += \" /FitV \" + anno.options.left + \"]\";\n                  break;\n                case \"XYZ\":\n                default:\n                  var top = getVerticalCoordinateString(anno.options.top);\n                  anno.options.left = anno.options.left || 0;\n                  // 0 or null zoom will not change zoom factor\n                  if (typeof anno.options.zoom === \"undefined\") {\n                    anno.options.zoom = 0;\n                  }\n                  line +=\n                    \" /XYZ \" +\n                    anno.options.left +\n                    \" \" +\n                    top +\n                    \" \" +\n                    anno.options.zoom +\n                    \"]\";\n                  break;\n              }\n            }\n\n            if (line != \"\") {\n              line += \" >>\";\n              this.internal.write(line);\n            }\n            break;\n        }\n      }\n      this.internal.write(\"]\");\n    }\n  ]);\n\n  /**\n   * @name createAnnotation\n   * @function\n   * @param {Object} options\n   */\n  jsPDFAPI.createAnnotation = function(options) {\n    var pageInfo = this.internal.getCurrentPageInfo();\n    switch (options.type) {\n      case \"link\":\n        this.link(\n          options.bounds.x,\n          options.bounds.y,\n          options.bounds.w,\n          options.bounds.h,\n          options\n        );\n        break;\n      case \"text\":\n      case \"freetext\":\n        pageInfo.pageContext.annotations.push(options);\n        break;\n    }\n  };\n\n  /**\n   * Create a link\n   *\n   * valid options\n   * <li> pageNumber or url [required]\n   * <p>If pageNumber is specified, top and zoom may also be specified</p>\n   * @name link\n   * @function\n   * @param {number} x\n   * @param {number} y\n   * @param {number} w\n   * @param {number} h\n   * @param {Object} options\n   */\n  jsPDFAPI.link = function(x, y, w, h, options) {\n    var pageInfo = this.internal.getCurrentPageInfo();\n    var getHorizontalCoordinateString = this.internal.getCoordinateString;\n    var getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\n\n    pageInfo.pageContext.annotations.push({\n      finalBounds: {\n        x: getHorizontalCoordinateString(x),\n        y: getVerticalCoordinateString(y),\n        w: getHorizontalCoordinateString(x + w),\n        h: getVerticalCoordinateString(y + h)\n      },\n      options: options,\n      type: \"link\"\n    });\n  };\n\n  /**\n   * Currently only supports single line text.\n   * Returns the width of the text/link\n   *\n   * @name textWithLink\n   * @function\n   * @param {string} text\n   * @param {number} x\n   * @param {number} y\n   * @param {Object} options\n   * @returns {number} width the width of the text/link\n   */\n  jsPDFAPI.textWithLink = function(text, x, y, options) {\n    var totalLineWidth = this.getTextWidth(text);\n    var lineHeight = this.internal.getLineHeight() / this.internal.scaleFactor;\n    var linkHeight, linkWidth;\n\n    // Checking if maxWidth option is passed to determine lineWidth and number of lines for each line\n    if (options.maxWidth !== undefined) {\n      var { maxWidth } = options;\n      linkWidth = maxWidth;\n      var numOfLines = this.splitTextToSize(text, linkWidth).length;\n      linkHeight = Math.ceil(lineHeight * numOfLines);\n    } else {\n      linkWidth = totalLineWidth;\n      linkHeight = lineHeight;\n    }\n\n    this.text(text, x, y, options);\n\n    //TODO We really need the text baseline height to do this correctly.\n    // Or ability to draw text on top, bottom, center, or baseline.\n    y += lineHeight * 0.2;\n    //handle x position based on the align option\n    if (options.align === \"center\") {\n      x = x - totalLineWidth / 2; //since starting from center move the x position by half of text width\n    }\n    if (options.align === \"right\") {\n      x = x - totalLineWidth;\n    }\n    this.link(x, y - lineHeight, linkWidth, linkHeight, options);\n    return totalLineWidth;\n  };\n\n  //TODO move into external library\n  /**\n   * @name getTextWidth\n   * @function\n   * @param {string} text\n   * @returns {number} txtWidth\n   */\n  jsPDFAPI.getTextWidth = function(text) {\n    var fontSize = this.internal.getFontSize();\n    var txtWidth =\n      (this.getStringUnitWidth(text) * fontSize) / this.internal.scaleFactor;\n    return txtWidth;\n  };\n\n  return this;\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF arabic parser PlugIn\n *\n * @name arabic\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * Arabic shape substitutions: char code => (isolated, final, initial, medial).\n   * Arabic Substition A\n   */\n  var arabicSubstitionA = {\n    0x0621: [0xfe80], // ARABIC LETTER HAMZA\n    0x0622: [0xfe81, 0xfe82], // ARABIC LETTER ALEF WITH MADDA ABOVE\n    0x0623: [0xfe83, 0xfe84], // ARABIC LETTER ALEF WITH HAMZA ABOVE\n    0x0624: [0xfe85, 0xfe86], // ARABIC LETTER WAW WITH HAMZA ABOVE\n    0x0625: [0xfe87, 0xfe88], // ARABIC LETTER ALEF WITH HAMZA BELOW\n    0x0626: [0xfe89, 0xfe8a, 0xfe8b, 0xfe8c], // ARABIC LETTER YEH WITH HAMZA ABOVE\n    0x0627: [0xfe8d, 0xfe8e], // ARABIC LETTER ALEF\n    0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92], // ARABIC LETTER BEH\n    0x0629: [0xfe93, 0xfe94], // ARABIC LETTER TEH MARBUTA\n    0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98], // ARABIC LETTER TEH\n    0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c], // ARABIC LETTER THEH\n    0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0], // ARABIC LETTER JEEM\n    0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4], // ARABIC LETTER HAH\n    0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8], // ARABIC LETTER KHAH\n    0x062f: [0xfea9, 0xfeaa], // ARABIC LETTER DAL\n    0x0630: [0xfeab, 0xfeac], // ARABIC LETTER THAL\n    0x0631: [0xfead, 0xfeae], // ARABIC LETTER REH\n    0x0632: [0xfeaf, 0xfeb0], // ARABIC LETTER ZAIN\n    0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4], // ARABIC LETTER SEEN\n    0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8], // ARABIC LETTER SHEEN\n    0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc], // ARABIC LETTER SAD\n    0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0], // ARABIC LETTER DAD\n    0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4], // ARABIC LETTER TAH\n    0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8], // ARABIC LETTER ZAH\n    0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc], // ARABIC LETTER AIN\n    0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0], // ARABIC LETTER GHAIN\n    0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4], // ARABIC LETTER FEH\n    0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8], // ARABIC LETTER QAF\n    0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc], // ARABIC LETTER KAF\n    0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0], // ARABIC LETTER LAM\n    0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4], // ARABIC LETTER MEEM\n    0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8], // ARABIC LETTER NOON\n    0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec], // ARABIC LETTER HEH\n    0x0648: [0xfeed, 0xfeee], // ARABIC LETTER WAW\n    0x0649: [0xfeef, 0xfef0, 64488, 64489], // ARABIC LETTER ALEF MAKSURA\n    0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4], // ARABIC LETTER YEH\n    0x0671: [0xfb50, 0xfb51], // ARABIC LETTER ALEF WASLA\n    0x0677: [0xfbdd], // ARABIC LETTER U WITH HAMZA ABOVE\n    0x0679: [0xfb66, 0xfb67, 0xfb68, 0xfb69], // ARABIC LETTER TTEH\n    0x067a: [0xfb5e, 0xfb5f, 0xfb60, 0xfb61], // ARABIC LETTER TTEHEH\n    0x067b: [0xfb52, 0xfb53, 0xfb54, 0xfb55], // ARABIC LETTER BEEH\n    0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59], // ARABIC LETTER PEH\n    0x067f: [0xfb62, 0xfb63, 0xfb64, 0xfb65], // ARABIC LETTER TEHEH\n    0x0680: [0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d], // ARABIC LETTER BEHEH\n    0x0683: [0xfb76, 0xfb77, 0xfb78, 0xfb79], // ARABIC LETTER NYEH\n    0x0684: [0xfb72, 0xfb73, 0xfb74, 0xfb75], // ARABIC LETTER DYEH\n    0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d], // ARABIC LETTER TCHEH\n    0x0687: [0xfb7e, 0xfb7f, 0xfb80, 0xfb81], // ARABIC LETTER TCHEHEH\n    0x0688: [0xfb88, 0xfb89], // ARABIC LETTER DDAL\n    0x068c: [0xfb84, 0xfb85], // ARABIC LETTER DAHAL\n    0x068d: [0xfb82, 0xfb83], // ARABIC LETTER DDAHAL\n    0x068e: [0xfb86, 0xfb87], // ARABIC LETTER DUL\n    0x0691: [0xfb8c, 0xfb8d], // ARABIC LETTER RREH\n    0x0698: [0xfb8a, 0xfb8b], // ARABIC LETTER JEH\n    0x06a4: [0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d], // ARABIC LETTER VEH\n    0x06a6: [0xfb6e, 0xfb6f, 0xfb70, 0xfb71], // ARABIC LETTER PEHEH\n    0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91], // ARABIC LETTER KEHEH\n    0x06ad: [0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6], // ARABIC LETTER NG\n    0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95], // ARABIC LETTER GAF\n    0x06b1: [0xfb9a, 0xfb9b, 0xfb9c, 0xfb9d], // ARABIC LETTER NGOEH\n    0x06b3: [0xfb96, 0xfb97, 0xfb98, 0xfb99], // ARABIC LETTER GUEH\n    0x06ba: [0xfb9e, 0xfb9f], // ARABIC LETTER NOON GHUNNA\n    0x06bb: [0xfba0, 0xfba1, 0xfba2, 0xfba3], // ARABIC LETTER RNOON\n    0x06be: [0xfbaa, 0xfbab, 0xfbac, 0xfbad], // ARABIC LETTER HEH DOACHASHMEE\n    0x06c0: [0xfba4, 0xfba5], // ARABIC LETTER HEH WITH YEH ABOVE\n    0x06c1: [0xfba6, 0xfba7, 0xfba8, 0xfba9], // ARABIC LETTER HEH GOAL\n    0x06c5: [0xfbe0, 0xfbe1], // ARABIC LETTER KIRGHIZ OE\n    0x06c6: [0xfbd9, 0xfbda], // ARABIC LETTER OE\n    0x06c7: [0xfbd7, 0xfbd8], // ARABIC LETTER U\n    0x06c8: [0xfbdb, 0xfbdc], // ARABIC LETTER YU\n    0x06c9: [0xfbe2, 0xfbe3], // ARABIC LETTER KIRGHIZ YU\n    0x06cb: [0xfbde, 0xfbdf], // ARABIC LETTER VE\n    0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff], // ARABIC LETTER FARSI YEH\n    0x06d0: [0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7], //ARABIC LETTER E\n    0x06d2: [0xfbae, 0xfbaf], // ARABIC LETTER YEH BARREE\n    0x06d3: [0xfbb0, 0xfbb1] // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n  };\n\n  /*\n    var ligaturesSubstitutionA = {\n        0xFBEA: []// ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM\n    };\n    */\n\n  var ligatures = {\n    0xfedf: {\n      0xfe82: 0xfef5, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM\n      0xfe84: 0xfef7, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM\n      0xfe88: 0xfef9, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM\n      0xfe8e: 0xfefb // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM\n    },\n    0xfee0: {\n      0xfe82: 0xfef6, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM\n      0xfe84: 0xfef8, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM\n      0xfe88: 0xfefa, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM\n      0xfe8e: 0xfefc // ARABIC LIGATURE LAM WITH ALEF FINAL FORM\n    },\n    0xfe8d: { 0xfedf: { 0xfee0: { 0xfeea: 0xfdf2 } } }, // ALLAH\n    0x0651: {\n      0x064c: 0xfc5e, // Shadda + Dammatan\n      0x064d: 0xfc5f, // Shadda + Kasratan\n      0x064e: 0xfc60, // Shadda + Fatha\n      0x064f: 0xfc61, // Shadda + Damma\n      0x0650: 0xfc62 // Shadda + Kasra\n    }\n  };\n\n  var arabic_diacritics = {\n    1612: 64606, // Shadda + Dammatan\n    1613: 64607, // Shadda + Kasratan\n    1614: 64608, // Shadda + Fatha\n    1615: 64609, // Shadda + Damma\n    1616: 64610 // Shadda + Kasra\n  };\n\n  var alfletter = [1570, 1571, 1573, 1575];\n\n  var noChangeInForm = -1;\n  var isolatedForm = 0;\n  var finalForm = 1;\n  var initialForm = 2;\n  var medialForm = 3;\n\n  jsPDFAPI.__arabicParser__ = {};\n\n  //private\n  var isInArabicSubstitutionA = (jsPDFAPI.__arabicParser__.isInArabicSubstitutionA = function(\n    letter\n  ) {\n    return typeof arabicSubstitionA[letter.charCodeAt(0)] !== \"undefined\";\n  });\n\n  var isArabicLetter = (jsPDFAPI.__arabicParser__.isArabicLetter = function(\n    letter\n  ) {\n    return (\n      typeof letter === \"string\" &&\n      /^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(\n        letter\n      )\n    );\n  });\n\n  var isArabicEndLetter = (jsPDFAPI.__arabicParser__.isArabicEndLetter = function(\n    letter\n  ) {\n    return (\n      isArabicLetter(letter) &&\n      isInArabicSubstitutionA(letter) &&\n      arabicSubstitionA[letter.charCodeAt(0)].length <= 2\n    );\n  });\n\n  var isArabicAlfLetter = (jsPDFAPI.__arabicParser__.isArabicAlfLetter = function(\n    letter\n  ) {\n    return (\n      isArabicLetter(letter) && alfletter.indexOf(letter.charCodeAt(0)) >= 0\n    );\n  });\n\n  jsPDFAPI.__arabicParser__.arabicLetterHasIsolatedForm = function(letter) {\n    return (\n      isArabicLetter(letter) &&\n      isInArabicSubstitutionA(letter) &&\n      arabicSubstitionA[letter.charCodeAt(0)].length >= 1\n    );\n  };\n\n  var arabicLetterHasFinalForm = (jsPDFAPI.__arabicParser__.arabicLetterHasFinalForm = function(\n    letter\n  ) {\n    return (\n      isArabicLetter(letter) &&\n      isInArabicSubstitutionA(letter) &&\n      arabicSubstitionA[letter.charCodeAt(0)].length >= 2\n    );\n  });\n\n  jsPDFAPI.__arabicParser__.arabicLetterHasInitialForm = function(letter) {\n    return (\n      isArabicLetter(letter) &&\n      isInArabicSubstitutionA(letter) &&\n      arabicSubstitionA[letter.charCodeAt(0)].length >= 3\n    );\n  };\n\n  var arabicLetterHasMedialForm = (jsPDFAPI.__arabicParser__.arabicLetterHasMedialForm = function(\n    letter\n  ) {\n    return (\n      isArabicLetter(letter) &&\n      isInArabicSubstitutionA(letter) &&\n      arabicSubstitionA[letter.charCodeAt(0)].length == 4\n    );\n  });\n\n  var resolveLigatures = (jsPDFAPI.__arabicParser__.resolveLigatures = function(\n    letters\n  ) {\n    var i = 0;\n    var tmpLigatures = ligatures;\n    var result = \"\";\n    var effectedLetters = 0;\n\n    for (i = 0; i < letters.length; i += 1) {\n      if (typeof tmpLigatures[letters.charCodeAt(i)] !== \"undefined\") {\n        effectedLetters++;\n        tmpLigatures = tmpLigatures[letters.charCodeAt(i)];\n\n        if (typeof tmpLigatures === \"number\") {\n          result += String.fromCharCode(tmpLigatures);\n          tmpLigatures = ligatures;\n          effectedLetters = 0;\n        }\n        if (i === letters.length - 1) {\n          tmpLigatures = ligatures;\n          result += letters.charAt(i - (effectedLetters - 1));\n          i = i - (effectedLetters - 1);\n          effectedLetters = 0;\n        }\n      } else {\n        tmpLigatures = ligatures;\n        result += letters.charAt(i - effectedLetters);\n        i = i - effectedLetters;\n        effectedLetters = 0;\n      }\n    }\n\n    return result;\n  });\n\n  jsPDFAPI.__arabicParser__.isArabicDiacritic = function(letter) {\n    return (\n      letter !== undefined &&\n      arabic_diacritics[letter.charCodeAt(0)] !== undefined\n    );\n  };\n\n  var getCorrectForm = (jsPDFAPI.__arabicParser__.getCorrectForm = function(\n    currentChar,\n    beforeChar,\n    nextChar\n  ) {\n    if (!isArabicLetter(currentChar)) {\n      return -1;\n    }\n\n    if (isInArabicSubstitutionA(currentChar) === false) {\n      return noChangeInForm;\n    }\n    if (\n      !arabicLetterHasFinalForm(currentChar) ||\n      (!isArabicLetter(beforeChar) && !isArabicLetter(nextChar)) ||\n      (!isArabicLetter(nextChar) && isArabicEndLetter(beforeChar)) ||\n      (isArabicEndLetter(currentChar) && !isArabicLetter(beforeChar)) ||\n      (isArabicEndLetter(currentChar) && isArabicAlfLetter(beforeChar)) ||\n      (isArabicEndLetter(currentChar) && isArabicEndLetter(beforeChar))\n    ) {\n      return isolatedForm;\n    }\n\n    if (\n      arabicLetterHasMedialForm(currentChar) &&\n      isArabicLetter(beforeChar) &&\n      !isArabicEndLetter(beforeChar) &&\n      isArabicLetter(nextChar) &&\n      arabicLetterHasFinalForm(nextChar)\n    ) {\n      return medialForm;\n    }\n\n    if (isArabicEndLetter(currentChar) || !isArabicLetter(nextChar)) {\n      return finalForm;\n    }\n    return initialForm;\n  });\n\n  /**\n   * @name processArabic\n   * @function\n   * @param {string} text\n   * @returns {string}\n   */\n  var parseArabic = function(text) {\n    text = text || \"\";\n\n    var result = \"\";\n    var i = 0;\n    var j = 0;\n    var position = 0;\n    var currentLetter = \"\";\n    var prevLetter = \"\";\n    var nextLetter = \"\";\n\n    var words = text.split(\"\\\\s+\");\n    var newWords = [];\n    for (i = 0; i < words.length; i += 1) {\n      newWords.push(\"\");\n      for (j = 0; j < words[i].length; j += 1) {\n        currentLetter = words[i][j];\n        prevLetter = words[i][j - 1];\n        nextLetter = words[i][j + 1];\n        if (isArabicLetter(currentLetter)) {\n          position = getCorrectForm(currentLetter, prevLetter, nextLetter);\n          if (position !== -1) {\n            newWords[i] += String.fromCharCode(\n              arabicSubstitionA[currentLetter.charCodeAt(0)][position]\n            );\n          } else {\n            newWords[i] += currentLetter;\n          }\n        } else {\n          newWords[i] += currentLetter;\n        }\n      }\n\n      newWords[i] = resolveLigatures(newWords[i]);\n    }\n    result = newWords.join(\" \");\n\n    return result;\n  };\n\n  var processArabic = (jsPDFAPI.__arabicParser__.processArabic = jsPDFAPI.processArabic = function() {\n    var text =\n      typeof arguments[0] === \"string\" ? arguments[0] : arguments[0].text;\n    var tmpText = [];\n    var result;\n\n    if (Array.isArray(text)) {\n      var i = 0;\n      tmpText = [];\n      for (i = 0; i < text.length; i += 1) {\n        if (Array.isArray(text[i])) {\n          tmpText.push([parseArabic(text[i][0]), text[i][1], text[i][2]]);\n        } else {\n          tmpText.push([parseArabic(text[i])]);\n        }\n      }\n      result = tmpText;\n    } else {\n      result = parseArabic(text);\n    }\n    if (typeof arguments[0] === \"string\") {\n      return result;\n    } else {\n      arguments[0].text = result;\n      return arguments[0];\n    }\n  });\n\n  jsPDFAPI.events.push([\"preProcessText\", processArabic]);\n})(jsPDF.API);\n","/** @license\n * jsPDF Autoprint Plugin\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name autoprint\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * Makes the PDF automatically open the print-Dialog when opened in a PDF-viewer.\n   *\n   * @name autoPrint\n   * @function\n   * @param {Object} options (optional) Set the attribute variant to 'non-conform' (default) or 'javascript' to activate different methods of automatic printing when opening in a PDF-viewer .\n   * @returns {jsPDF}\n   * @example\n   * var doc = new jsPDF();\n   * doc.text(10, 10, 'This is a test');\n   * doc.autoPrint({variant: 'non-conform'});\n   * doc.save('autoprint.pdf');\n   */\n  jsPDFAPI.autoPrint = function(options) {\n    \"use strict\";\n    var refAutoPrintTag;\n    options = options || {};\n    options.variant = options.variant || \"non-conform\";\n\n    switch (options.variant) {\n      case \"javascript\":\n        //https://github.com/Rob--W/pdf.js/commit/c676ecb5a0f54677b9f3340c3ef2cf42225453bb\n        this.addJS(\"print({});\");\n        break;\n      case \"non-conform\":\n      default:\n        this.internal.events.subscribe(\"postPutResources\", function() {\n          refAutoPrintTag = this.internal.newObject();\n          this.internal.out(\"<<\");\n          this.internal.out(\"/S /Named\");\n          this.internal.out(\"/Type /Action\");\n          this.internal.out(\"/N /Print\");\n          this.internal.out(\">>\");\n          this.internal.out(\"endobj\");\n        });\n\n        this.internal.events.subscribe(\"putCatalog\", function() {\n          this.internal.out(\"/OpenAction \" + refAutoPrintTag + \" 0 R\");\n        });\n        break;\n    }\n    return this;\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC)  steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Canvas PlugIn\n * This plugin mimics the HTML5 Canvas\n *\n * The goal is to provide a way for current canvas users to print directly to a PDF.\n * @name canvas\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * @class Canvas\n   * @classdesc A Canvas Wrapper for jsPDF\n   */\n  var Canvas = function() {\n    var jsPdfInstance = undefined;\n    Object.defineProperty(this, \"pdf\", {\n      get: function() {\n        return jsPdfInstance;\n      },\n      set: function(value) {\n        jsPdfInstance = value;\n      }\n    });\n\n    var _width = 150;\n    /**\n     * The height property is a positive integer reflecting the height HTML attribute of the <canvas> element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 150 is used.\n     * This is one of the two properties, the other being width, that controls the size of the canvas.\n     *\n     * @name width\n     */\n    Object.defineProperty(this, \"width\", {\n      get: function() {\n        return _width;\n      },\n      set: function(value) {\n        if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n          _width = 150;\n        } else {\n          _width = value;\n        }\n        if (this.getContext(\"2d\").pageWrapXEnabled) {\n          this.getContext(\"2d\").pageWrapX = _width + 1;\n        }\n      }\n    });\n\n    var _height = 300;\n    /**\n     * The width property is a positive integer reflecting the width HTML attribute of the <canvas> element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 300 is used.\n     * This is one of the two properties, the other being height, that controls the size of the canvas.\n     *\n     * @name height\n     */\n    Object.defineProperty(this, \"height\", {\n      get: function() {\n        return _height;\n      },\n      set: function(value) {\n        if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n          _height = 300;\n        } else {\n          _height = value;\n        }\n        if (this.getContext(\"2d\").pageWrapYEnabled) {\n          this.getContext(\"2d\").pageWrapY = _height + 1;\n        }\n      }\n    });\n\n    var _childNodes = [];\n    Object.defineProperty(this, \"childNodes\", {\n      get: function() {\n        return _childNodes;\n      },\n      set: function(value) {\n        _childNodes = value;\n      }\n    });\n\n    var _style = {};\n    Object.defineProperty(this, \"style\", {\n      get: function() {\n        return _style;\n      },\n      set: function(value) {\n        _style = value;\n      }\n    });\n\n    Object.defineProperty(this, \"parentNode\", {});\n  };\n\n  /**\n   * The getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported.\n   *\n   * @name getContext\n   * @function\n   * @param {string} contextType Is a String containing the context identifier defining the drawing context associated to the canvas. Possible value is \"2d\", leading to the creation of a Context2D object representing a two-dimensional rendering context.\n   * @param {object} contextAttributes\n   */\n  Canvas.prototype.getContext = function(contextType, contextAttributes) {\n    contextType = contextType || \"2d\";\n    var key;\n\n    if (contextType !== \"2d\") {\n      return null;\n    }\n    for (key in contextAttributes) {\n      if (this.pdf.context2d.hasOwnProperty(key)) {\n        this.pdf.context2d[key] = contextAttributes[key];\n      }\n    }\n    this.pdf.context2d._canvas = this;\n    return this.pdf.context2d;\n  };\n\n  /**\n   * The toDataURL() method is just a stub to throw an error if accidently called.\n   *\n   * @name toDataURL\n   * @function\n   */\n  Canvas.prototype.toDataURL = function() {\n    throw new Error(\"toDataURL is not implemented.\");\n  };\n\n  jsPDFAPI.events.push([\n    \"initialized\",\n    function() {\n      this.canvas = new Canvas();\n      this.canvas.pdf = this;\n    }\n  ]);\n\n  return this;\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n *               2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n *               2013 Lee Driscoll, https://github.com/lsdriscoll\n *               2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n *               2014 James Hall, james@parall.ax\n *               2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name cell\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var NO_MARGINS = { left: 0, top: 0, bottom: 0, right: 0 };\n\n  var px2pt = (0.264583 * 72) / 25.4;\n  var printingHeaderRow = false;\n\n  var _initialize = function() {\n    if (typeof this.internal.__cell__ === \"undefined\") {\n      this.internal.__cell__ = {};\n      this.internal.__cell__.padding = 3;\n      this.internal.__cell__.headerFunction = undefined;\n      this.internal.__cell__.margins = Object.assign({}, NO_MARGINS);\n      this.internal.__cell__.margins.width = this.getPageWidth();\n      _reset.call(this);\n    }\n  };\n\n  var _reset = function() {\n    this.internal.__cell__.lastCell = new Cell();\n    this.internal.__cell__.pages = 1;\n  };\n\n  var Cell = function() {\n    var _x = arguments[0];\n    Object.defineProperty(this, \"x\", {\n      enumerable: true,\n      get: function() {\n        return _x;\n      },\n      set: function(value) {\n        _x = value;\n      }\n    });\n    var _y = arguments[1];\n    Object.defineProperty(this, \"y\", {\n      enumerable: true,\n      get: function() {\n        return _y;\n      },\n      set: function(value) {\n        _y = value;\n      }\n    });\n    var _width = arguments[2];\n    Object.defineProperty(this, \"width\", {\n      enumerable: true,\n      get: function() {\n        return _width;\n      },\n      set: function(value) {\n        _width = value;\n      }\n    });\n    var _height = arguments[3];\n    Object.defineProperty(this, \"height\", {\n      enumerable: true,\n      get: function() {\n        return _height;\n      },\n      set: function(value) {\n        _height = value;\n      }\n    });\n    var _text = arguments[4];\n    Object.defineProperty(this, \"text\", {\n      enumerable: true,\n      get: function() {\n        return _text;\n      },\n      set: function(value) {\n        _text = value;\n      }\n    });\n    var _lineNumber = arguments[5];\n    Object.defineProperty(this, \"lineNumber\", {\n      enumerable: true,\n      get: function() {\n        return _lineNumber;\n      },\n      set: function(value) {\n        _lineNumber = value;\n      }\n    });\n    var _align = arguments[6];\n    Object.defineProperty(this, \"align\", {\n      enumerable: true,\n      get: function() {\n        return _align;\n      },\n      set: function(value) {\n        _align = value;\n      }\n    });\n\n    return this;\n  };\n\n  Cell.prototype.clone = function() {\n    return new Cell(\n      this.x,\n      this.y,\n      this.width,\n      this.height,\n      this.text,\n      this.lineNumber,\n      this.align\n    );\n  };\n\n  Cell.prototype.toArray = function() {\n    return [\n      this.x,\n      this.y,\n      this.width,\n      this.height,\n      this.text,\n      this.lineNumber,\n      this.align\n    ];\n  };\n\n  /**\n   * @name setHeaderFunction\n   * @function\n   * @param {function} func\n   */\n  jsPDFAPI.setHeaderFunction = function(func) {\n    _initialize.call(this);\n    this.internal.__cell__.headerFunction =\n      typeof func === \"function\" ? func : undefined;\n    return this;\n  };\n\n  /**\n   * @name getTextDimensions\n   * @function\n   * @param {string} txt\n   * @returns {Object} dimensions\n   */\n  jsPDFAPI.getTextDimensions = function(text, options) {\n    _initialize.call(this);\n    options = options || {};\n    var fontSize = options.fontSize || this.getFontSize();\n    var font = options.font || this.getFont();\n    var scaleFactor = options.scaleFactor || this.internal.scaleFactor;\n    var width = 0;\n    var amountOfLines = 0;\n    var height = 0;\n    var tempWidth = 0;\n    var scope = this;\n\n    if (!Array.isArray(text) && typeof text !== \"string\") {\n      if (typeof text === \"number\") {\n        text = String(text);\n      } else {\n        throw new Error(\n          \"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\"\n        );\n      }\n    }\n\n    const maxWidth = options.maxWidth;\n    if (maxWidth > 0) {\n      if (typeof text === \"string\") {\n        text = this.splitTextToSize(text, maxWidth);\n      } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\n        text = text.reduce(function(acc, textLine) {\n          return acc.concat(scope.splitTextToSize(textLine, maxWidth));\n        }, []);\n      }\n    } else {\n      // Without the else clause, it will not work if you do not pass along maxWidth\n      text = Array.isArray(text) ? text : [text];\n    }\n\n    for (var i = 0; i < text.length; i++) {\n      tempWidth = this.getStringUnitWidth(text[i], { font: font }) * fontSize;\n      if (width < tempWidth) {\n        width = tempWidth;\n      }\n    }\n\n    if (width !== 0) {\n      amountOfLines = text.length;\n    }\n\n    width = width / scaleFactor;\n    height = Math.max(\n      (amountOfLines * fontSize * this.getLineHeightFactor() -\n        fontSize * (this.getLineHeightFactor() - 1)) /\n        scaleFactor,\n      0\n    );\n    return { w: width, h: height };\n  };\n\n  /**\n   * @name cellAddPage\n   * @function\n   */\n  jsPDFAPI.cellAddPage = function() {\n    _initialize.call(this);\n\n    this.addPage();\n\n    var margins = this.internal.__cell__.margins || NO_MARGINS;\n    this.internal.__cell__.lastCell = new Cell(\n      margins.left,\n      margins.top,\n      undefined,\n      undefined\n    );\n    this.internal.__cell__.pages += 1;\n\n    return this;\n  };\n\n  /**\n   * @name cell\n   * @function\n   * @param {number} x\n   * @param {number} y\n   * @param {number} width\n   * @param {number} height\n   * @param {string} text\n   * @param {number} lineNumber lineNumber\n   * @param {string} align\n   * @return {jsPDF} jsPDF-instance\n   */\n  var cell = (jsPDFAPI.cell = function() {\n    var currentCell;\n\n    if (arguments[0] instanceof Cell) {\n      currentCell = arguments[0];\n    } else {\n      currentCell = new Cell(\n        arguments[0],\n        arguments[1],\n        arguments[2],\n        arguments[3],\n        arguments[4],\n        arguments[5]\n      );\n    }\n    _initialize.call(this);\n    var lastCell = this.internal.__cell__.lastCell;\n    var padding = this.internal.__cell__.padding;\n    var margins = this.internal.__cell__.margins || NO_MARGINS;\n    var tableHeaderRow = this.internal.__cell__.tableHeaderRow;\n    var printHeaders = this.internal.__cell__.printHeaders;\n    // If this is not the first cell, we must change its position\n    if (typeof lastCell.lineNumber !== \"undefined\") {\n      if (lastCell.lineNumber === currentCell.lineNumber) {\n        //Same line\n        currentCell.x = (lastCell.x || 0) + (lastCell.width || 0);\n        currentCell.y = lastCell.y || 0;\n      } else {\n        //New line\n        if (\n          lastCell.y + lastCell.height + currentCell.height + margins.bottom >\n          this.getPageHeight()\n        ) {\n          this.cellAddPage();\n          currentCell.y = margins.top;\n          if (printHeaders && tableHeaderRow) {\n            this.printHeaderRow(currentCell.lineNumber, true);\n            currentCell.y += tableHeaderRow[0].height;\n          }\n        } else {\n          currentCell.y = lastCell.y + lastCell.height || currentCell.y;\n        }\n      }\n    }\n\n    if (typeof currentCell.text[0] !== \"undefined\") {\n      this.rect(\n        currentCell.x,\n        currentCell.y,\n        currentCell.width,\n        currentCell.height,\n        printingHeaderRow === true ? \"FD\" : undefined\n      );\n      if (currentCell.align === \"right\") {\n        this.text(\n          currentCell.text,\n          currentCell.x + currentCell.width - padding,\n          currentCell.y + padding,\n          { align: \"right\", baseline: \"top\" }\n        );\n      } else if (currentCell.align === \"center\") {\n        this.text(\n          currentCell.text,\n          currentCell.x + currentCell.width / 2,\n          currentCell.y + padding,\n          {\n            align: \"center\",\n            baseline: \"top\",\n            maxWidth: currentCell.width - padding - padding\n          }\n        );\n      } else {\n        this.text(\n          currentCell.text,\n          currentCell.x + padding,\n          currentCell.y + padding,\n          {\n            align: \"left\",\n            baseline: \"top\",\n            maxWidth: currentCell.width - padding - padding\n          }\n        );\n      }\n    }\n    this.internal.__cell__.lastCell = currentCell;\n    return this;\n  });\n\n  /**\n     * Create a table from a set of data.\n     * @name table\n     * @function\n     * @param {Integer} [x] : left-position for top-left corner of table\n     * @param {Integer} [y] top-position for top-left corner of table\n     * @param {Object[]} [data] An array of objects containing key-value pairs corresponding to a row of data.\n     * @param {String[]} [headers] Omit or null to auto-generate headers at a performance cost\n\n     * @param {Object} [config.printHeaders] True to print column headers at the top of every page\n     * @param {Object} [config.autoSize] True to dynamically set the column widths to match the widest cell value\n     * @param {Object} [config.margins] margin values for left, top, bottom, and width\n     * @param {Object} [config.fontSize] Integer fontSize to use (optional)\n     * @param {Object} [config.padding] cell-padding in pt to use (optional)\n     * @param {Object} [config.headerBackgroundColor] default is #c8c8c8 (optional)\n     * @param {Object} [config.headerTextColor] default is #000 (optional)\n     * @param {Object} [config.rowStart] callback to handle before print each row (optional)\n     * @param {Object} [config.cellStart] callback to handle before print each cell (optional)\n     * @returns {jsPDF} jsPDF-instance\n     */\n\n  jsPDFAPI.table = function(x, y, data, headers, config) {\n    _initialize.call(this);\n    if (!data) {\n      throw new Error(\"No data for PDF table.\");\n    }\n\n    config = config || {};\n\n    var headerNames = [],\n      headerLabels = [],\n      headerAligns = [],\n      i,\n      columnMatrix = {},\n      columnWidths = {},\n      column,\n      columnMinWidths = [],\n      j,\n      tableHeaderConfigs = [],\n      //set up defaults. If a value is provided in config, defaults will be overwritten:\n      autoSize = config.autoSize || false,\n      printHeaders = config.printHeaders === false ? false : true,\n      fontSize =\n        config.css && typeof config.css[\"font-size\"] !== \"undefined\"\n          ? config.css[\"font-size\"] * 16\n          : config.fontSize || 12,\n      margins =\n        config.margins ||\n        Object.assign({ width: this.getPageWidth() }, NO_MARGINS),\n      padding = typeof config.padding === \"number\" ? config.padding : 3,\n      headerBackgroundColor = config.headerBackgroundColor || \"#c8c8c8\",\n      headerTextColor = config.headerTextColor || \"#000\";\n\n    _reset.call(this);\n\n    this.internal.__cell__.printHeaders = printHeaders;\n    this.internal.__cell__.margins = margins;\n    this.internal.__cell__.table_font_size = fontSize;\n    this.internal.__cell__.padding = padding;\n    this.internal.__cell__.headerBackgroundColor = headerBackgroundColor;\n    this.internal.__cell__.headerTextColor = headerTextColor;\n    this.setFontSize(fontSize);\n\n    // Set header values\n    if (headers === undefined || headers === null) {\n      // No headers defined so we derive from data\n      headerNames = Object.keys(data[0]);\n      headerLabels = headerNames;\n      headerAligns = headerNames.map(function() {\n        return \"left\";\n      });\n    } else if (Array.isArray(headers) && typeof headers[0] === \"object\") {\n      headerNames = headers.map(function(header) {\n        return header.name;\n      });\n      headerLabels = headers.map(function(header) {\n        return header.prompt || header.name || \"\";\n      });\n      headerAligns = headers.map(function(header) {\n        return header.align || \"left\";\n      });\n      // Split header configs into names and prompts\n      for (i = 0; i < headers.length; i += 1) {\n        columnWidths[headers[i].name] = headers[i].width * px2pt;\n      }\n    } else if (Array.isArray(headers) && typeof headers[0] === \"string\") {\n      headerNames = headers;\n      headerLabels = headerNames;\n      headerAligns = headerNames.map(function() {\n        return \"left\";\n      });\n    }\n\n    if (\n      autoSize ||\n      (Array.isArray(headers) && typeof headers[0] === \"string\")\n    ) {\n      var headerName;\n      for (i = 0; i < headerNames.length; i += 1) {\n        headerName = headerNames[i];\n\n        // Create a matrix of columns e.g., {column_title: [row1_Record, row2_Record]}\n\n        columnMatrix[headerName] = data.map(function(rec) {\n          return rec[headerName];\n        });\n\n        // get header width\n        this.setFont(undefined, \"bold\");\n        columnMinWidths.push(\n          this.getTextDimensions(headerLabels[i], {\n            fontSize: this.internal.__cell__.table_font_size,\n            scaleFactor: this.internal.scaleFactor\n          }).w\n        );\n        column = columnMatrix[headerName];\n\n        // get cell widths\n        this.setFont(undefined, \"normal\");\n        for (j = 0; j < column.length; j += 1) {\n          columnMinWidths.push(\n            this.getTextDimensions(column[j], {\n              fontSize: this.internal.__cell__.table_font_size,\n              scaleFactor: this.internal.scaleFactor\n            }).w\n          );\n        }\n\n        // get final column width\n        columnWidths[headerName] =\n          Math.max.apply(null, columnMinWidths) + padding + padding;\n\n        //have to reset\n        columnMinWidths = [];\n      }\n    }\n\n    // -- Construct the table\n\n    if (printHeaders) {\n      var row = {};\n      for (i = 0; i < headerNames.length; i += 1) {\n        row[headerNames[i]] = {};\n        row[headerNames[i]].text = headerLabels[i];\n        row[headerNames[i]].align = headerAligns[i];\n      }\n\n      var rowHeight = calculateLineHeight.call(this, row, columnWidths);\n\n      // Construct the header row\n      tableHeaderConfigs = headerNames.map(function(value) {\n        return new Cell(\n          x,\n          y,\n          columnWidths[value],\n          rowHeight,\n          row[value].text,\n          undefined,\n          row[value].align\n        );\n      });\n\n      // Store the table header config\n      this.setTableHeaderRow(tableHeaderConfigs);\n\n      // Print the header for the start of the table\n      this.printHeaderRow(1, false);\n    }\n\n    // Construct the data rows\n\n    var align = headers.reduce(function(pv, cv) {\n      pv[cv.name] = cv.align;\n      return pv;\n    }, {});\n    for (i = 0; i < data.length; i += 1) {\n      if (\"rowStart\" in config && config.rowStart instanceof Function) {\n        config.rowStart(\n          {\n            row: i,\n            data: data[i]\n          },\n          this\n        );\n      }\n      var lineHeight = calculateLineHeight.call(this, data[i], columnWidths);\n\n      for (j = 0; j < headerNames.length; j += 1) {\n        var cellData = data[i][headerNames[j]];\n        if (\"cellStart\" in config && config.cellStart instanceof Function) {\n          config.cellStart(\n            {\n              row: i,\n              col: j,\n              data: cellData\n            },\n            this\n          );\n        }\n        cell.call(\n          this,\n          new Cell(\n            x,\n            y,\n            columnWidths[headerNames[j]],\n            lineHeight,\n            cellData,\n            i + 2,\n            align[headerNames[j]]\n          )\n        );\n      }\n    }\n    this.internal.__cell__.table_x = x;\n    this.internal.__cell__.table_y = y;\n    return this;\n  };\n\n  /**\n   * Calculate the height for containing the highest column\n   *\n   * @name calculateLineHeight\n   * @function\n   * @param {Object[]} model is the line of data we want to calculate the height of\n   * @param {Integer[]} columnWidths is size of each column\n   * @returns {number} lineHeight\n   * @private\n   */\n  var calculateLineHeight = function calculateLineHeight(model, columnWidths) {\n    var padding = this.internal.__cell__.padding;\n    var fontSize = this.internal.__cell__.table_font_size;\n    var scaleFactor = this.internal.scaleFactor;\n\n    return Object.keys(model)\n      .map(function(key) {\n        var value = model[key];\n        return this.splitTextToSize(\n          value.hasOwnProperty(\"text\") ? value.text : value,\n          columnWidths[key] - padding - padding\n        );\n      }, this)\n      .map(function(value) {\n        return (\n          (this.getLineHeightFactor() * value.length * fontSize) / scaleFactor +\n          padding +\n          padding\n        );\n      }, this)\n      .reduce(function(pv, cv) {\n        return Math.max(pv, cv);\n      }, 0);\n  };\n\n  /**\n   * Store the config for outputting a table header\n   *\n   * @name setTableHeaderRow\n   * @function\n   * @param {Object[]} config\n   * An array of cell configs that would define a header row: Each config matches the config used by jsPDFAPI.cell\n   * except the lineNumber parameter is excluded\n   */\n  jsPDFAPI.setTableHeaderRow = function(config) {\n    _initialize.call(this);\n    this.internal.__cell__.tableHeaderRow = config;\n  };\n\n  /**\n   * Output the store header row\n   *\n   * @name printHeaderRow\n   * @function\n   * @param {number} lineNumber The line number to output the header at\n   * @param {boolean} new_page\n   */\n  jsPDFAPI.printHeaderRow = function(lineNumber, new_page) {\n    _initialize.call(this);\n    if (!this.internal.__cell__.tableHeaderRow) {\n      throw new Error(\"Property tableHeaderRow does not exist.\");\n    }\n\n    var tableHeaderCell;\n\n    printingHeaderRow = true;\n    if (typeof this.internal.__cell__.headerFunction === \"function\") {\n      var position = this.internal.__cell__.headerFunction(\n        this,\n        this.internal.__cell__.pages\n      );\n      this.internal.__cell__.lastCell = new Cell(\n        position[0],\n        position[1],\n        position[2],\n        position[3],\n        undefined,\n        -1\n      );\n    }\n    this.setFont(undefined, \"bold\");\n\n    var tempHeaderConf = [];\n    for (var i = 0; i < this.internal.__cell__.tableHeaderRow.length; i += 1) {\n      tableHeaderCell = this.internal.__cell__.tableHeaderRow[i].clone();\n      if (new_page) {\n        tableHeaderCell.y = this.internal.__cell__.margins.top || 0;\n        tempHeaderConf.push(tableHeaderCell);\n      }\n      tableHeaderCell.lineNumber = lineNumber;\n      var currentTextColor = this.getTextColor();\n      this.setTextColor(this.internal.__cell__.headerTextColor);\n      this.setFillColor(this.internal.__cell__.headerBackgroundColor);\n      cell.call(this, tableHeaderCell);\n      this.setTextColor(currentTextColor);\n    }\n    if (tempHeaderConf.length > 0) {\n      this.setTableHeaderRow(tempHeaderConf);\n    }\n    this.setFont(undefined, \"normal\");\n    printingHeaderRow = false;\n  };\n})(jsPDF.API);\n","/* eslint-disable no-fallthrough */\r\n/* eslint-disable no-console */\r\n/**\r\n * @license\r\n * jsPDF Context2D PlugIn Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\r\n *\r\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\r\n */\r\n\r\nimport { jsPDF } from \"../jspdf.js\";\r\nimport { RGBColor } from \"../libs/rgbcolor.js\";\r\nimport { console } from \"../libs/console.js\";\r\nimport {\r\n  buildFontFaceMap,\r\n  parseFontFamily,\r\n  resolveFontFace\r\n} from \"../libs/fontFace.js\";\r\n\r\n/**\r\n * This plugin mimics the HTML5 CanvasRenderingContext2D.\r\n *\r\n * The goal is to provide a way for current canvas implementations to print directly to a PDF.\r\n *\r\n * @name context2d\r\n * @module\r\n */\r\n(function(jsPDFAPI) {\r\n  \"use strict\";\r\n  var ContextLayer = function(ctx) {\r\n    ctx = ctx || {};\r\n    this.isStrokeTransparent = ctx.isStrokeTransparent || false;\r\n    this.strokeOpacity = ctx.strokeOpacity || 1;\r\n    this.strokeStyle = ctx.strokeStyle || \"#000000\";\r\n    this.fillStyle = ctx.fillStyle || \"#000000\";\r\n    this.isFillTransparent = ctx.isFillTransparent || false;\r\n    this.fillOpacity = ctx.fillOpacity || 1;\r\n    this.font = ctx.font || \"10px sans-serif\";\r\n    this.textBaseline = ctx.textBaseline || \"alphabetic\";\r\n    this.textAlign = ctx.textAlign || \"left\";\r\n    this.lineWidth = ctx.lineWidth || 1;\r\n    this.lineJoin = ctx.lineJoin || \"miter\";\r\n    this.lineCap = ctx.lineCap || \"butt\";\r\n    this.path = ctx.path || [];\r\n    this.transform =\r\n      typeof ctx.transform !== \"undefined\"\r\n        ? ctx.transform.clone()\r\n        : new Matrix();\r\n    this.globalCompositeOperation = ctx.globalCompositeOperation || \"normal\";\r\n    this.globalAlpha = ctx.globalAlpha || 1.0;\r\n    this.clip_path = ctx.clip_path || [];\r\n    this.currentPoint = ctx.currentPoint || new Point();\r\n    this.miterLimit = ctx.miterLimit || 10.0;\r\n    this.lastPoint = ctx.lastPoint || new Point();\r\n    this.lineDashOffset = ctx.lineDashOffset || 0.0;\r\n    this.lineDash = ctx.lineDash || [];\r\n    this.margin = ctx.margin || [0, 0, 0, 0];\r\n    this.prevPageLastElemOffset = ctx.prevPageLastElemOffset || 0;\r\n\r\n    this.ignoreClearRect =\r\n      typeof ctx.ignoreClearRect === \"boolean\" ? ctx.ignoreClearRect : true;\r\n    return this;\r\n  };\r\n\r\n  //stub\r\n  var f2,\r\n    getHorizontalCoordinateString,\r\n    getVerticalCoordinateString,\r\n    getHorizontalCoordinate,\r\n    getVerticalCoordinate,\r\n    Point,\r\n    Rectangle,\r\n    Matrix,\r\n    _ctx;\r\n  jsPDFAPI.events.push([\r\n    \"initialized\",\r\n    function() {\r\n      this.context2d = new Context2D(this);\r\n\r\n      f2 = this.internal.f2;\r\n      getHorizontalCoordinateString = this.internal.getCoordinateString;\r\n      getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\r\n      getHorizontalCoordinate = this.internal.getHorizontalCoordinate;\r\n      getVerticalCoordinate = this.internal.getVerticalCoordinate;\r\n      Point = this.internal.Point;\r\n      Rectangle = this.internal.Rectangle;\r\n      Matrix = this.internal.Matrix;\r\n      _ctx = new ContextLayer();\r\n    }\r\n  ]);\r\n\r\n  var Context2D = function(pdf) {\r\n    Object.defineProperty(this, \"canvas\", {\r\n      get: function() {\r\n        return { parentNode: false, style: false };\r\n      }\r\n    });\r\n\r\n    var _pdf = pdf;\r\n    Object.defineProperty(this, \"pdf\", {\r\n      get: function() {\r\n        return _pdf;\r\n      }\r\n    });\r\n\r\n    var _pageWrapXEnabled = false;\r\n    /**\r\n     * @name pageWrapXEnabled\r\n     * @type {boolean}\r\n     * @default false\r\n     */\r\n    Object.defineProperty(this, \"pageWrapXEnabled\", {\r\n      get: function() {\r\n        return _pageWrapXEnabled;\r\n      },\r\n      set: function(value) {\r\n        _pageWrapXEnabled = Boolean(value);\r\n      }\r\n    });\r\n\r\n    var _pageWrapYEnabled = false;\r\n    /**\r\n     * @name pageWrapYEnabled\r\n     * @type {boolean}\r\n     * @default true\r\n     */\r\n    Object.defineProperty(this, \"pageWrapYEnabled\", {\r\n      get: function() {\r\n        return _pageWrapYEnabled;\r\n      },\r\n      set: function(value) {\r\n        _pageWrapYEnabled = Boolean(value);\r\n      }\r\n    });\r\n\r\n    var _posX = 0;\r\n    /**\r\n     * @name posX\r\n     * @type {number}\r\n     * @default 0\r\n     */\r\n    Object.defineProperty(this, \"posX\", {\r\n      get: function() {\r\n        return _posX;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          _posX = value;\r\n        }\r\n      }\r\n    });\r\n\r\n    var _posY = 0;\r\n    /**\r\n     * @name posY\r\n     * @type {number}\r\n     * @default 0\r\n     */\r\n    Object.defineProperty(this, \"posY\", {\r\n      get: function() {\r\n        return _posY;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          _posY = value;\r\n        }\r\n      }\r\n    });\r\n\r\n    /**\r\n     * Gets or sets the page margin when using auto paging. Has no effect when {@link autoPaging} is off.\r\n     * @name margin\r\n     * @type {number|number[]}\r\n     * @default [0, 0, 0, 0]\r\n     */\r\n    Object.defineProperty(this, \"margin\", {\r\n      get: function() {\r\n        return _ctx.margin;\r\n      },\r\n      set: function(value) {\r\n        var margin;\r\n        if (typeof value === \"number\") {\r\n          margin = [value, value, value, value];\r\n        } else {\r\n          margin = new Array(4);\r\n          margin[0] = value[0];\r\n          margin[1] = value.length >= 2 ? value[1] : margin[0];\r\n          margin[2] = value.length >= 3 ? value[2] : margin[0];\r\n          margin[3] = value.length >= 4 ? value[3] : margin[1];\r\n        }\r\n        _ctx.margin = margin;\r\n      }\r\n    });\r\n\r\n    var _autoPaging = false;\r\n    /**\r\n     * Gets or sets the auto paging mode. When auto paging is enabled, the context2d will automatically draw on the\r\n     * next page if a shape or text chunk doesn't fit entirely on the current page. The context2d will create new\r\n     * pages if required.\r\n     *\r\n     * Context2d supports different modes:\r\n     * <ul>\r\n     * <li>\r\n     *   <code>false</code>: Auto paging is disabled.\r\n     * </li>\r\n     * <li>\r\n     *   <code>true</code> or <code>'slice'</code>: Will cut shapes or text chunks across page breaks. Will possibly\r\n     *   slice text in half, making it difficult to read.\r\n     * </li>\r\n     * <li>\r\n     *   <code>'text'</code>: Trys not to cut text in half across page breaks. Works best for documents consisting\r\n     *   mostly of a single column of text.\r\n     * </li>\r\n     * </ul>\r\n     * @name Context2D#autoPaging\r\n     * @type {boolean|\"slice\"|\"text\"}\r\n     * @default false\r\n     */\r\n    Object.defineProperty(this, \"autoPaging\", {\r\n      get: function() {\r\n        return _autoPaging;\r\n      },\r\n      set: function(value) {\r\n        _autoPaging = value;\r\n      }\r\n    });\r\n\r\n    var lastBreak = 0;\r\n    /**\r\n     * @name lastBreak\r\n     * @type {number}\r\n     * @default 0\r\n     */\r\n    Object.defineProperty(this, \"lastBreak\", {\r\n      get: function() {\r\n        return lastBreak;\r\n      },\r\n      set: function(value) {\r\n        lastBreak = value;\r\n      }\r\n    });\r\n\r\n    var pageBreaks = [];\r\n    /**\r\n     * Y Position of page breaks.\r\n     * @name pageBreaks\r\n     * @type {number}\r\n     * @default 0\r\n     */\r\n    Object.defineProperty(this, \"pageBreaks\", {\r\n      get: function() {\r\n        return pageBreaks;\r\n      },\r\n      set: function(value) {\r\n        pageBreaks = value;\r\n      }\r\n    });\r\n\r\n    /**\r\n     * @name ctx\r\n     * @type {object}\r\n     * @default {}\r\n     */\r\n    Object.defineProperty(this, \"ctx\", {\r\n      get: function() {\r\n        return _ctx;\r\n      },\r\n      set: function(value) {\r\n        if (value instanceof ContextLayer) {\r\n          _ctx = value;\r\n        }\r\n      }\r\n    });\r\n\r\n    /**\r\n     * @name path\r\n     * @type {array}\r\n     * @default []\r\n     */\r\n    Object.defineProperty(this, \"path\", {\r\n      get: function() {\r\n        return _ctx.path;\r\n      },\r\n      set: function(value) {\r\n        _ctx.path = value;\r\n      }\r\n    });\r\n\r\n    /**\r\n     * @name ctxStack\r\n     * @type {array}\r\n     * @default []\r\n     */\r\n    var _ctxStack = [];\r\n    Object.defineProperty(this, \"ctxStack\", {\r\n      get: function() {\r\n        return _ctxStack;\r\n      },\r\n      set: function(value) {\r\n        _ctxStack = value;\r\n      }\r\n    });\r\n\r\n    /**\r\n     * Sets or returns the color, gradient, or pattern used to fill the drawing\r\n     *\r\n     * @name fillStyle\r\n     * @default #000000\r\n     * @property {(color|gradient|pattern)} value The color of the drawing. Default value is #000000<br />\r\n     * A gradient object (linear or radial) used to fill the drawing (not supported by context2d)<br />\r\n     * A pattern object to use to fill the drawing (not supported by context2d)\r\n     */\r\n    Object.defineProperty(this, \"fillStyle\", {\r\n      get: function() {\r\n        return this.ctx.fillStyle;\r\n      },\r\n      set: function(value) {\r\n        var rgba;\r\n        rgba = getRGBA(value);\r\n\r\n        this.ctx.fillStyle = rgba.style;\r\n        this.ctx.isFillTransparent = rgba.a === 0;\r\n        this.ctx.fillOpacity = rgba.a;\r\n\r\n        this.pdf.setFillColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n        this.pdf.setTextColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n      }\r\n    });\r\n\r\n    /**\r\n     * Sets or returns the color, gradient, or pattern used for strokes\r\n     *\r\n     * @name strokeStyle\r\n     * @default #000000\r\n     * @property {color} color A CSS color value that indicates the stroke color of the drawing. Default value is #000000 (not supported by context2d)\r\n     * @property {gradient} gradient A gradient object (linear or radial) used to create a gradient stroke (not supported by context2d)\r\n     * @property {pattern} pattern A pattern object used to create a pattern stroke (not supported by context2d)\r\n     */\r\n    Object.defineProperty(this, \"strokeStyle\", {\r\n      get: function() {\r\n        return this.ctx.strokeStyle;\r\n      },\r\n      set: function(value) {\r\n        var rgba = getRGBA(value);\r\n\r\n        this.ctx.strokeStyle = rgba.style;\r\n        this.ctx.isStrokeTransparent = rgba.a === 0;\r\n        this.ctx.strokeOpacity = rgba.a;\r\n\r\n        if (rgba.a === 0) {\r\n          this.pdf.setDrawColor(255, 255, 255);\r\n        } else if (rgba.a === 1) {\r\n          this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n        } else {\r\n          this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n        }\r\n      }\r\n    });\r\n\r\n    /**\r\n     * Sets or returns the style of the end caps for a line\r\n     *\r\n     * @name lineCap\r\n     * @default butt\r\n     * @property {(butt|round|square)} lineCap butt A flat edge is added to each end of the line <br/>\r\n     * round A rounded end cap is added to each end of the line<br/>\r\n     * square A square end cap is added to each end of the line<br/>\r\n     */\r\n    Object.defineProperty(this, \"lineCap\", {\r\n      get: function() {\r\n        return this.ctx.lineCap;\r\n      },\r\n      set: function(value) {\r\n        if ([\"butt\", \"round\", \"square\"].indexOf(value) !== -1) {\r\n          this.ctx.lineCap = value;\r\n          this.pdf.setLineCap(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    /**\r\n     * Sets or returns the current line width\r\n     *\r\n     * @name lineWidth\r\n     * @default 1\r\n     * @property {number} lineWidth The current line width, in pixels\r\n     */\r\n    Object.defineProperty(this, \"lineWidth\", {\r\n      get: function() {\r\n        return this.ctx.lineWidth;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          this.ctx.lineWidth = value;\r\n          this.pdf.setLineWidth(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    /**\r\n     * Sets or returns the type of corner created, when two lines meet\r\n     */\r\n    Object.defineProperty(this, \"lineJoin\", {\r\n      get: function() {\r\n        return this.ctx.lineJoin;\r\n      },\r\n      set: function(value) {\r\n        if ([\"bevel\", \"round\", \"miter\"].indexOf(value) !== -1) {\r\n          this.ctx.lineJoin = value;\r\n          this.pdf.setLineJoin(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    /**\r\n     * A number specifying the miter limit ratio in coordinate space units. Zero, negative, Infinity, and NaN values are ignored. The default value is 10.0.\r\n     *\r\n     * @name miterLimit\r\n     * @default 10\r\n     */\r\n    Object.defineProperty(this, \"miterLimit\", {\r\n      get: function() {\r\n        return this.ctx.miterLimit;\r\n      },\r\n      set: function(value) {\r\n        if (!isNaN(value)) {\r\n          this.ctx.miterLimit = value;\r\n          this.pdf.setMiterLimit(value);\r\n        }\r\n      }\r\n    });\r\n\r\n    Object.defineProperty(this, \"textBaseline\", {\r\n      get: function() {\r\n        return this.ctx.textBaseline;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.textBaseline = value;\r\n      }\r\n    });\r\n\r\n    Object.defineProperty(this, \"textAlign\", {\r\n      get: function() {\r\n        return this.ctx.textAlign;\r\n      },\r\n      set: function(value) {\r\n        if ([\"right\", \"end\", \"center\", \"left\", \"start\"].indexOf(value) !== -1) {\r\n          this.ctx.textAlign = value;\r\n        }\r\n      }\r\n    });\r\n\r\n    var _fontFaceMap = null;\r\n\r\n    function getFontFaceMap(pdf, fontFaces) {\r\n      if (_fontFaceMap === null) {\r\n        var fontMap = pdf.getFontList();\r\n\r\n        var convertedFontFaces = convertToFontFaces(fontMap);\r\n\r\n        _fontFaceMap = buildFontFaceMap(convertedFontFaces.concat(fontFaces));\r\n      }\r\n\r\n      return _fontFaceMap;\r\n    }\r\n\r\n    function convertToFontFaces(fontMap) {\r\n      var fontFaces = [];\r\n\r\n      Object.keys(fontMap).forEach(function(family) {\r\n        var styles = fontMap[family];\r\n\r\n        styles.forEach(function(style) {\r\n          var fontFace = null;\r\n\r\n          switch (style) {\r\n            case \"bold\":\r\n              fontFace = {\r\n                family: family,\r\n                weight: \"bold\"\r\n              };\r\n              break;\r\n\r\n            case \"italic\":\r\n              fontFace = {\r\n                family: family,\r\n                style: \"italic\"\r\n              };\r\n              break;\r\n\r\n            case \"bolditalic\":\r\n              fontFace = {\r\n                family: family,\r\n                weight: \"bold\",\r\n                style: \"italic\"\r\n              };\r\n              break;\r\n\r\n            case \"\":\r\n            case \"normal\":\r\n              fontFace = {\r\n                family: family\r\n              };\r\n              break;\r\n          }\r\n\r\n          // If font-face is still null here, it is a font with some styling we don't recognize and\r\n          // cannot map or it is a font added via the fontFaces option of .html().\r\n          if (fontFace !== null) {\r\n            fontFace.ref = {\r\n              name: family,\r\n              style: style\r\n            };\r\n\r\n            fontFaces.push(fontFace);\r\n          }\r\n        });\r\n      });\r\n\r\n      return fontFaces;\r\n    }\r\n\r\n    var _fontFaces = null;\r\n    /**\r\n     * A map of available font-faces, as passed in the options of\r\n     * .html(). If set a limited implementation of the font style matching\r\n     * algorithm defined by https://www.w3.org/TR/css-fonts-3/#font-matching-algorithm\r\n     * will be used. If not set it will fallback to previous behavior.\r\n     */\r\n\r\n    Object.defineProperty(this, \"fontFaces\", {\r\n      get: function() {\r\n        return _fontFaces;\r\n      },\r\n      set: function(value) {\r\n        _fontFaceMap = null;\r\n        _fontFaces = value;\r\n      }\r\n    });\r\n\r\n    Object.defineProperty(this, \"font\", {\r\n      get: function() {\r\n        return this.ctx.font;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.font = value;\r\n        var rx, matches;\r\n\r\n        //source: https://stackoverflow.com/a/10136041\r\n        // eslint-disable-next-line no-useless-escape\r\n        rx = /^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z]+?)\\s*$/i;\r\n        matches = rx.exec(value);\r\n        if (matches !== null) {\r\n          var fontStyle = matches[1];\r\n          var fontVariant = matches[2];\r\n          var fontWeight = matches[3];\r\n          var fontSize = matches[4];\r\n          var lineHeight = matches[5];\r\n          var fontFamily = matches[6];\r\n        } else {\r\n          return;\r\n        }\r\n        var rxFontSize = /^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i;\r\n        var fontSizeUnit = rxFontSize.exec(fontSize)[2];\r\n\r\n        if (\"px\" === fontSizeUnit) {\r\n          fontSize = Math.floor(\r\n            parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n          );\r\n        } else if (\"em\" === fontSizeUnit) {\r\n          fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize());\r\n        } else {\r\n          fontSize = Math.floor(\r\n            parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n          );\r\n        }\r\n\r\n        this.pdf.setFontSize(fontSize);\r\n        var parts = parseFontFamily(fontFamily);\r\n\r\n        if (this.fontFaces) {\r\n          var fontFaceMap = getFontFaceMap(this.pdf, this.fontFaces);\r\n\r\n          var rules = parts.map(function(ff) {\r\n            return {\r\n              family: ff,\r\n              stretch: \"normal\", // TODO: Extract font-stretch from font rule (perhaps write proper parser for it?)\r\n              weight: fontWeight,\r\n              style: fontStyle\r\n            };\r\n          });\r\n\r\n          var font = resolveFontFace(fontFaceMap, rules);\r\n          this.pdf.setFont(font.ref.name, font.ref.style);\r\n          return;\r\n        }\r\n\r\n        var style = \"\";\r\n        if (\r\n          fontWeight === \"bold\" ||\r\n          parseInt(fontWeight, 10) >= 700 ||\r\n          fontStyle === \"bold\"\r\n        ) {\r\n          style = \"bold\";\r\n        }\r\n\r\n        if (fontStyle === \"italic\") {\r\n          style += \"italic\";\r\n        }\r\n\r\n        if (style.length === 0) {\r\n          style = \"normal\";\r\n        }\r\n        var jsPdfFontName = \"\";\r\n\r\n        var fallbackFonts = {\r\n          arial: \"Helvetica\",\r\n          Arial: \"Helvetica\",\r\n          verdana: \"Helvetica\",\r\n          Verdana: \"Helvetica\",\r\n          helvetica: \"Helvetica\",\r\n          Helvetica: \"Helvetica\",\r\n          \"sans-serif\": \"Helvetica\",\r\n          fixed: \"Courier\",\r\n          monospace: \"Courier\",\r\n          terminal: \"Courier\",\r\n          cursive: \"Times\",\r\n          fantasy: \"Times\",\r\n          serif: \"Times\"\r\n        };\r\n\r\n        for (var i = 0; i < parts.length; i++) {\r\n          if (\r\n            this.pdf.internal.getFont(parts[i], style, {\r\n              noFallback: true,\r\n              disableWarning: true\r\n            }) !== undefined\r\n          ) {\r\n            jsPdfFontName = parts[i];\r\n            break;\r\n          } else if (\r\n            style === \"bolditalic\" &&\r\n            this.pdf.internal.getFont(parts[i], \"bold\", {\r\n              noFallback: true,\r\n              disableWarning: true\r\n            }) !== undefined\r\n          ) {\r\n            jsPdfFontName = parts[i];\r\n            style = \"bold\";\r\n          } else if (\r\n            this.pdf.internal.getFont(parts[i], \"normal\", {\r\n              noFallback: true,\r\n              disableWarning: true\r\n            }) !== undefined\r\n          ) {\r\n            jsPdfFontName = parts[i];\r\n            style = \"normal\";\r\n            break;\r\n          }\r\n        }\r\n        if (jsPdfFontName === \"\") {\r\n          for (var j = 0; j < parts.length; j++) {\r\n            if (fallbackFonts[parts[j]]) {\r\n              jsPdfFontName = fallbackFonts[parts[j]];\r\n              break;\r\n            }\r\n          }\r\n        }\r\n        jsPdfFontName = jsPdfFontName === \"\" ? \"Times\" : jsPdfFontName;\r\n        this.pdf.setFont(jsPdfFontName, style);\r\n      }\r\n    });\r\n\r\n    Object.defineProperty(this, \"globalCompositeOperation\", {\r\n      get: function() {\r\n        return this.ctx.globalCompositeOperation;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.globalCompositeOperation = value;\r\n      }\r\n    });\r\n\r\n    Object.defineProperty(this, \"globalAlpha\", {\r\n      get: function() {\r\n        return this.ctx.globalAlpha;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.globalAlpha = value;\r\n      }\r\n    });\r\n\r\n    /**\r\n     * A float specifying the amount of the line dash offset. The default value is 0.0.\r\n     *\r\n     * @name lineDashOffset\r\n     * @default 0.0\r\n     */\r\n    Object.defineProperty(this, \"lineDashOffset\", {\r\n      get: function() {\r\n        return this.ctx.lineDashOffset;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.lineDashOffset = value;\r\n        setLineDash.call(this);\r\n      }\r\n    });\r\n\r\n    // Not HTML API\r\n    Object.defineProperty(this, \"lineDash\", {\r\n      get: function() {\r\n        return this.ctx.lineDash;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.lineDash = value;\r\n        setLineDash.call(this);\r\n      }\r\n    });\r\n\r\n    // Not HTML API\r\n    Object.defineProperty(this, \"ignoreClearRect\", {\r\n      get: function() {\r\n        return this.ctx.ignoreClearRect;\r\n      },\r\n      set: function(value) {\r\n        this.ctx.ignoreClearRect = Boolean(value);\r\n      }\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Sets the line dash pattern used when stroking lines.\r\n   * @name setLineDash\r\n   * @function\r\n   * @description It uses an array of values that specify alternating lengths of lines and gaps which describe the pattern.\r\n   */\r\n  Context2D.prototype.setLineDash = function(dashArray) {\r\n    this.lineDash = dashArray;\r\n  };\r\n\r\n  /**\r\n   * gets the current line dash pattern.\r\n   * @name getLineDash\r\n   * @function\r\n   * @returns {Array} An Array of numbers that specify distances to alternately draw a line and a gap (in coordinate space units). If the number, when setting the elements, is odd, the elements of the array get copied and concatenated. For example, setting the line dash to [5, 15, 25] will result in getting back [5, 15, 25, 5, 15, 25].\r\n   */\r\n  Context2D.prototype.getLineDash = function() {\r\n    if (this.lineDash.length % 2) {\r\n      // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getLineDash#return_value\r\n      return this.lineDash.concat(this.lineDash);\r\n    } else {\r\n      // The copied value is returned to prevent contamination from outside.\r\n      return this.lineDash.slice();\r\n    }\r\n  };\r\n\r\n  Context2D.prototype.fill = function() {\r\n    pathPreProcess.call(this, \"fill\", false);\r\n  };\r\n\r\n  /**\r\n   * Actually draws the path you have defined\r\n   *\r\n   * @name stroke\r\n   * @function\r\n   * @description The stroke() method actually draws the path you have defined with all those moveTo() and lineTo() methods. The default color is black.\r\n   */\r\n  Context2D.prototype.stroke = function() {\r\n    pathPreProcess.call(this, \"stroke\", false);\r\n  };\r\n\r\n  /**\r\n   * Begins a path, or resets the current\r\n   *\r\n   * @name beginPath\r\n   * @function\r\n   * @description The beginPath() method begins a path, or resets the current path.\r\n   */\r\n  Context2D.prototype.beginPath = function() {\r\n    this.path = [\r\n      {\r\n        type: \"begin\"\r\n      }\r\n    ];\r\n  };\r\n\r\n  /**\r\n   * Moves the path to the specified point in the canvas, without creating a line\r\n   *\r\n   * @name moveTo\r\n   * @function\r\n   * @param x {Number} The x-coordinate of where to move the path to\r\n   * @param y {Number} The y-coordinate of where to move the path to\r\n   */\r\n  Context2D.prototype.moveTo = function(x, y) {\r\n    if (isNaN(x) || isNaN(y)) {\r\n      console.error(\"jsPDF.context2d.moveTo: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");\r\n    }\r\n\r\n    var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n    this.path.push({\r\n      type: \"mt\",\r\n      x: pt.x,\r\n      y: pt.y\r\n    });\r\n    this.ctx.lastPoint = new Point(x, y);\r\n  };\r\n\r\n  /**\r\n   * Creates a path from the current point back to the starting point\r\n   *\r\n   * @name closePath\r\n   * @function\r\n   * @description The closePath() method creates a path from the current point back to the starting point.\r\n   */\r\n  Context2D.prototype.closePath = function() {\r\n    var pathBegin = new Point(0, 0);\r\n    var i = 0;\r\n    for (i = this.path.length - 1; i !== -1; i--) {\r\n      if (this.path[i].type === \"begin\") {\r\n        if (\r\n          typeof this.path[i + 1] === \"object\" &&\r\n          typeof this.path[i + 1].x === \"number\"\r\n        ) {\r\n          pathBegin = new Point(this.path[i + 1].x, this.path[i + 1].y);\r\n          break;\r\n        }\r\n      }\r\n    }\r\n    this.path.push({\r\n      type: \"close\"\r\n    });\r\n    this.ctx.lastPoint = new Point(pathBegin.x, pathBegin.y);\r\n  };\r\n\r\n  /**\r\n   * Adds a new point and creates a line to that point from the last specified point in the canvas\r\n   *\r\n   * @name lineTo\r\n   * @function\r\n   * @param x The x-coordinate of where to create the line to\r\n   * @param y The y-coordinate of where to create the line to\r\n   * @description The lineTo() method adds a new point and creates a line TO that point FROM the last specified point in the canvas (this method does not draw the line).\r\n   */\r\n  Context2D.prototype.lineTo = function(x, y) {\r\n    if (isNaN(x) || isNaN(y)) {\r\n      console.error(\"jsPDF.context2d.lineTo: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");\r\n    }\r\n\r\n    var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n    this.path.push({\r\n      type: \"lt\",\r\n      x: pt.x,\r\n      y: pt.y\r\n    });\r\n    this.ctx.lastPoint = new Point(pt.x, pt.y);\r\n  };\r\n\r\n  /**\r\n   * Clips a region of any shape and size from the original canvas\r\n   *\r\n   * @name clip\r\n   * @function\r\n   * @description The clip() method clips a region of any shape and size from the original canvas.\r\n   */\r\n  Context2D.prototype.clip = function() {\r\n    this.ctx.clip_path = JSON.parse(JSON.stringify(this.path));\r\n    pathPreProcess.call(this, null, true);\r\n  };\r\n\r\n  /**\r\n   * Creates a cubic Bézier curve\r\n   *\r\n   * @name quadraticCurveTo\r\n   * @function\r\n   * @param cpx {Number} The x-coordinate of the Bézier control point\r\n   * @param cpy {Number} The y-coordinate of the Bézier control point\r\n   * @param x {Number} The x-coordinate of the ending point\r\n   * @param y {Number} The y-coordinate of the ending point\r\n   * @description The quadraticCurveTo() method adds a point to the current path by using the specified control points that represent a quadratic Bézier curve.<br /><br /> A quadratic Bézier curve requires two points. The first point is a control point that is used in the quadratic Bézier calculation and the second point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n   */\r\n  Context2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(cpx) || isNaN(cpy)) {\r\n      console.error(\r\n        \"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",\r\n        arguments\r\n      );\r\n      throw new Error(\r\n        \"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\"\r\n      );\r\n    }\r\n\r\n    var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n    var pt1 = this.ctx.transform.applyToPoint(new Point(cpx, cpy));\r\n\r\n    this.path.push({\r\n      type: \"qct\",\r\n      x1: pt1.x,\r\n      y1: pt1.y,\r\n      x: pt0.x,\r\n      y: pt0.y\r\n    });\r\n    this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n  };\r\n\r\n  /**\r\n   * Creates a cubic Bézier curve\r\n   *\r\n   * @name bezierCurveTo\r\n   * @function\r\n   * @param cp1x {Number} The x-coordinate of the first Bézier control point\r\n   * @param cp1y {Number} The y-coordinate of the first Bézier control point\r\n   * @param cp2x {Number} The x-coordinate of the second Bézier control point\r\n   * @param cp2y {Number} The y-coordinate of the second Bézier control point\r\n   * @param x {Number} The x-coordinate of the ending point\r\n   * @param y {Number} The y-coordinate of the ending point\r\n   * @description The bezierCurveTo() method adds a point to the current path by using the specified control points that represent a cubic Bézier curve. <br /><br />A cubic bezier curve requires three points. The first two points are control points that are used in the cubic Bézier calculation and the last point is the ending point for the curve.  The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n   */\r\n  Context2D.prototype.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n    if (\r\n      isNaN(x) ||\r\n      isNaN(y) ||\r\n      isNaN(cp1x) ||\r\n      isNaN(cp1y) ||\r\n      isNaN(cp2x) ||\r\n      isNaN(cp2y)\r\n    ) {\r\n      console.error(\r\n        \"jsPDF.context2d.bezierCurveTo: Invalid arguments\",\r\n        arguments\r\n      );\r\n      throw new Error(\r\n        \"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\"\r\n      );\r\n    }\r\n    var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n    var pt1 = this.ctx.transform.applyToPoint(new Point(cp1x, cp1y));\r\n    var pt2 = this.ctx.transform.applyToPoint(new Point(cp2x, cp2y));\r\n\r\n    this.path.push({\r\n      type: \"bct\",\r\n      x1: pt1.x,\r\n      y1: pt1.y,\r\n      x2: pt2.x,\r\n      y2: pt2.y,\r\n      x: pt0.x,\r\n      y: pt0.y\r\n    });\r\n    this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n  };\r\n\r\n  /**\r\n   * Creates an arc/curve (used to create circles, or parts of circles)\r\n   *\r\n   * @name arc\r\n   * @function\r\n   * @param x {Number} The x-coordinate of the center of the circle\r\n   * @param y {Number} The y-coordinate of the center of the circle\r\n   * @param radius {Number} The radius of the circle\r\n   * @param startAngle {Number} The starting angle, in radians (0 is at the 3 o'clock position of the arc's circle)\r\n   * @param endAngle {Number} The ending angle, in radians\r\n   * @param counterclockwise {Boolean} Optional. Specifies whether the drawing should be counterclockwise or clockwise. False is default, and indicates clockwise, while true indicates counter-clockwise.\r\n   * @description The arc() method creates an arc/curve (used to create circles, or parts of circles).\r\n   */\r\n  Context2D.prototype.arc = function(\r\n    x,\r\n    y,\r\n    radius,\r\n    startAngle,\r\n    endAngle,\r\n    counterclockwise\r\n  ) {\r\n    if (\r\n      isNaN(x) ||\r\n      isNaN(y) ||\r\n      isNaN(radius) ||\r\n      isNaN(startAngle) ||\r\n      isNaN(endAngle)\r\n    ) {\r\n      console.error(\"jsPDF.context2d.arc: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");\r\n    }\r\n    counterclockwise = Boolean(counterclockwise);\r\n\r\n    if (!this.ctx.transform.isIdentity) {\r\n      var xpt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n      x = xpt.x;\r\n      y = xpt.y;\r\n\r\n      var x_radPt = this.ctx.transform.applyToPoint(new Point(0, radius));\r\n      var x_radPt0 = this.ctx.transform.applyToPoint(new Point(0, 0));\r\n      radius = Math.sqrt(\r\n        Math.pow(x_radPt.x - x_radPt0.x, 2) +\r\n          Math.pow(x_radPt.y - x_radPt0.y, 2)\r\n      );\r\n    }\r\n    if (Math.abs(endAngle - startAngle) >= 2 * Math.PI) {\r\n      startAngle = 0;\r\n      endAngle = 2 * Math.PI;\r\n    }\r\n\r\n    this.path.push({\r\n      type: \"arc\",\r\n      x: x,\r\n      y: y,\r\n      radius: radius,\r\n      startAngle: startAngle,\r\n      endAngle: endAngle,\r\n      counterclockwise: counterclockwise\r\n    });\r\n    // this.ctx.lastPoint(new Point(pt.x,pt.y));\r\n  };\r\n\r\n  /**\r\n   * Creates an arc/curve between two tangents\r\n   *\r\n   * @name arcTo\r\n   * @function\r\n   * @param x1 {Number} The x-coordinate of the first tangent\r\n   * @param y1 {Number} The y-coordinate of the first tangent\r\n   * @param x2 {Number} The x-coordinate of the second tangent\r\n   * @param y2 {Number} The y-coordinate of the second tangent\r\n   * @param radius The radius of the arc\r\n   * @description The arcTo() method creates an arc/curve between two tangents on the canvas.\r\n   */\r\n  // eslint-disable-next-line no-unused-vars\r\n  Context2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {\r\n    throw new Error(\"arcTo not implemented.\");\r\n  };\r\n\r\n  /**\r\n   * Creates a rectangle\r\n   *\r\n   * @name rect\r\n   * @function\r\n   * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n   * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n   * @param w {Number} The width of the rectangle, in pixels\r\n   * @param h {Number} The height of the rectangle, in pixels\r\n   * @description The rect() method creates a rectangle.\r\n   */\r\n  Context2D.prototype.rect = function(x, y, w, h) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n      console.error(\"jsPDF.context2d.rect: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");\r\n    }\r\n    this.moveTo(x, y);\r\n    this.lineTo(x + w, y);\r\n    this.lineTo(x + w, y + h);\r\n    this.lineTo(x, y + h);\r\n    this.lineTo(x, y);\r\n    this.lineTo(x + w, y);\r\n    this.lineTo(x, y);\r\n  };\r\n\r\n  /**\r\n   * Draws a \"filled\" rectangle\r\n   *\r\n   * @name fillRect\r\n   * @function\r\n   * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n   * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n   * @param w {Number} The width of the rectangle, in pixels\r\n   * @param h {Number} The height of the rectangle, in pixels\r\n   * @description The fillRect() method draws a \"filled\" rectangle. The default color of the fill is black.\r\n   */\r\n  Context2D.prototype.fillRect = function(x, y, w, h) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n      console.error(\"jsPDF.context2d.fillRect: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");\r\n    }\r\n    if (isFillTransparent.call(this)) {\r\n      return;\r\n    }\r\n    var tmp = {};\r\n    if (this.lineCap !== \"butt\") {\r\n      tmp.lineCap = this.lineCap;\r\n      this.lineCap = \"butt\";\r\n    }\r\n    if (this.lineJoin !== \"miter\") {\r\n      tmp.lineJoin = this.lineJoin;\r\n      this.lineJoin = \"miter\";\r\n    }\r\n\r\n    this.beginPath();\r\n    this.rect(x, y, w, h);\r\n    this.fill();\r\n\r\n    if (tmp.hasOwnProperty(\"lineCap\")) {\r\n      this.lineCap = tmp.lineCap;\r\n    }\r\n    if (tmp.hasOwnProperty(\"lineJoin\")) {\r\n      this.lineJoin = tmp.lineJoin;\r\n    }\r\n  };\r\n\r\n  /**\r\n   *     Draws a rectangle (no fill)\r\n   *\r\n   * @name strokeRect\r\n   * @function\r\n   * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n   * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n   * @param w {Number} The width of the rectangle, in pixels\r\n   * @param h {Number} The height of the rectangle, in pixels\r\n   * @description The strokeRect() method draws a rectangle (no fill). The default color of the stroke is black.\r\n   */\r\n  Context2D.prototype.strokeRect = function strokeRect(x, y, w, h) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n      console.error(\"jsPDF.context2d.strokeRect: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");\r\n    }\r\n    if (isStrokeTransparent.call(this)) {\r\n      return;\r\n    }\r\n    this.beginPath();\r\n    this.rect(x, y, w, h);\r\n    this.stroke();\r\n  };\r\n\r\n  /**\r\n   * Clears the specified pixels within a given rectangle\r\n   *\r\n   * @name clearRect\r\n   * @function\r\n   * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n   * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n   * @param w {Number} The width of the rectangle to clear, in pixels\r\n   * @param h {Number} The height of the rectangle to clear, in pixels\r\n   * @description We cannot clear PDF commands that were already written to PDF, so we use white instead. <br />\r\n   * As a special case, read a special flag (ignoreClearRect) and do nothing if it is set.\r\n   * This results in all calls to clearRect() to do nothing, and keep the canvas transparent.\r\n   * This flag is stored in the save/restore context and is managed the same way as other drawing states.\r\n   *\r\n   */\r\n  Context2D.prototype.clearRect = function(x, y, w, h) {\r\n    if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n      console.error(\"jsPDF.context2d.clearRect: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");\r\n    }\r\n    if (this.ignoreClearRect) {\r\n      return;\r\n    }\r\n\r\n    this.fillStyle = \"#ffffff\";\r\n    this.fillRect(x, y, w, h);\r\n  };\r\n\r\n  /**\r\n   * Saves the state of the current context\r\n   *\r\n   * @name save\r\n   * @function\r\n   */\r\n  Context2D.prototype.save = function(doStackPush) {\r\n    doStackPush = typeof doStackPush === \"boolean\" ? doStackPush : true;\r\n    var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n    for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n      this.pdf.setPage(i + 1);\r\n      this.pdf.internal.out(\"q\");\r\n    }\r\n    this.pdf.setPage(tmpPageNumber);\r\n\r\n    if (doStackPush) {\r\n      this.ctx.fontSize = this.pdf.internal.getFontSize();\r\n      var ctx = new ContextLayer(this.ctx);\r\n      this.ctxStack.push(this.ctx);\r\n      this.ctx = ctx;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Returns previously saved path state and attributes\r\n   *\r\n   * @name restore\r\n   * @function\r\n   */\r\n  Context2D.prototype.restore = function(doStackPop) {\r\n    doStackPop = typeof doStackPop === \"boolean\" ? doStackPop : true;\r\n    var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n    for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n      this.pdf.setPage(i + 1);\r\n      this.pdf.internal.out(\"Q\");\r\n    }\r\n    this.pdf.setPage(tmpPageNumber);\r\n\r\n    if (doStackPop && this.ctxStack.length !== 0) {\r\n      this.ctx = this.ctxStack.pop();\r\n      this.fillStyle = this.ctx.fillStyle;\r\n      this.strokeStyle = this.ctx.strokeStyle;\r\n      this.font = this.ctx.font;\r\n      this.lineCap = this.ctx.lineCap;\r\n      this.lineWidth = this.ctx.lineWidth;\r\n      this.lineJoin = this.ctx.lineJoin;\r\n      this.lineDash = this.ctx.lineDash;\r\n      this.lineDashOffset = this.ctx.lineDashOffset;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * @name toDataURL\r\n   * @function\r\n   */\r\n  Context2D.prototype.toDataURL = function() {\r\n    throw new Error(\"toDataUrl not implemented.\");\r\n  };\r\n\r\n  //helper functions\r\n\r\n  /**\r\n   * Get the decimal values of r, g, b and a\r\n   *\r\n   * @name getRGBA\r\n   * @function\r\n   * @private\r\n   * @ignore\r\n   */\r\n  var getRGBA = function(style) {\r\n    var rxRgb = /rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/;\r\n    var rxRgba = /rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)/;\r\n    var rxTransparent = /transparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)/;\r\n\r\n    var r, g, b, a;\r\n\r\n    if (style.isCanvasGradient === true) {\r\n      style = style.getColor();\r\n    }\r\n\r\n    if (!style) {\r\n      return { r: 0, g: 0, b: 0, a: 0, style: style };\r\n    }\r\n\r\n    if (rxTransparent.test(style)) {\r\n      r = 0;\r\n      g = 0;\r\n      b = 0;\r\n      a = 0;\r\n    } else {\r\n      var matches = rxRgb.exec(style);\r\n      if (matches !== null) {\r\n        r = parseInt(matches[1]);\r\n        g = parseInt(matches[2]);\r\n        b = parseInt(matches[3]);\r\n        a = 1;\r\n      } else {\r\n        matches = rxRgba.exec(style);\r\n        if (matches !== null) {\r\n          r = parseInt(matches[1]);\r\n          g = parseInt(matches[2]);\r\n          b = parseInt(matches[3]);\r\n          a = parseFloat(matches[4]);\r\n        } else {\r\n          a = 1;\r\n\r\n          if (typeof style === \"string\" && style.charAt(0) !== \"#\") {\r\n            var rgbColor = new RGBColor(style);\r\n            if (rgbColor.ok) {\r\n              style = rgbColor.toHex();\r\n            } else {\r\n              style = \"#000000\";\r\n            }\r\n          }\r\n\r\n          if (style.length === 4) {\r\n            r = style.substring(1, 2);\r\n            r += r;\r\n            g = style.substring(2, 3);\r\n            g += g;\r\n            b = style.substring(3, 4);\r\n            b += b;\r\n          } else {\r\n            r = style.substring(1, 3);\r\n            g = style.substring(3, 5);\r\n            b = style.substring(5, 7);\r\n          }\r\n          r = parseInt(r, 16);\r\n          g = parseInt(g, 16);\r\n          b = parseInt(b, 16);\r\n        }\r\n      }\r\n    }\r\n    return { r: r, g: g, b: b, a: a, style: style };\r\n  };\r\n\r\n  /**\r\n   * @name isFillTransparent\r\n   * @function\r\n   * @private\r\n   * @ignore\r\n   * @returns {Boolean}\r\n   */\r\n  var isFillTransparent = function() {\r\n    return this.ctx.isFillTransparent || this.globalAlpha == 0;\r\n  };\r\n\r\n  /**\r\n   * @name isStrokeTransparent\r\n   * @function\r\n   * @private\r\n   * @ignore\r\n   * @returns {Boolean}\r\n   */\r\n  var isStrokeTransparent = function() {\r\n    return Boolean(this.ctx.isStrokeTransparent || this.globalAlpha == 0);\r\n  };\r\n\r\n  /**\r\n   * Draws \"filled\" text on the canvas\r\n   *\r\n   * @name fillText\r\n   * @function\r\n   * @param text {String} Specifies the text that will be written on the canvas\r\n   * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n   * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n   * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n   * @description The fillText() method draws filled text on the canvas. The default color of the text is black.\r\n   */\r\n  Context2D.prototype.fillText = function(text, x, y, maxWidth) {\r\n    if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n      console.error(\"jsPDF.context2d.fillText: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");\r\n    }\r\n    maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n    if (isFillTransparent.call(this)) {\r\n      return;\r\n    }\r\n\r\n    var degs = rad2deg(this.ctx.transform.rotation);\r\n\r\n    // We only use X axis as scale hint\r\n    var scale = this.ctx.transform.scaleX;\r\n\r\n    putText.call(this, {\r\n      text: text,\r\n      x: x,\r\n      y: y,\r\n      scale: scale,\r\n      angle: degs,\r\n      align: this.textAlign,\r\n      maxWidth: maxWidth\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Draws text on the canvas (no fill)\r\n   *\r\n   * @name strokeText\r\n   * @function\r\n   * @param text {String} Specifies the text that will be written on the canvas\r\n   * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n   * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n   * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n   * @description The strokeText() method draws text (with no fill) on the canvas. The default color of the text is black.\r\n   */\r\n  Context2D.prototype.strokeText = function(text, x, y, maxWidth) {\r\n    if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n      console.error(\"jsPDF.context2d.strokeText: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");\r\n    }\r\n    if (isStrokeTransparent.call(this)) {\r\n      return;\r\n    }\r\n\r\n    maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n\r\n    var degs = rad2deg(this.ctx.transform.rotation);\r\n    var scale = this.ctx.transform.scaleX;\r\n\r\n    putText.call(this, {\r\n      text: text,\r\n      x: x,\r\n      y: y,\r\n      scale: scale,\r\n      renderingMode: \"stroke\",\r\n      angle: degs,\r\n      align: this.textAlign,\r\n      maxWidth: maxWidth\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Returns an object that contains the width of the specified text\r\n   *\r\n   * @name measureText\r\n   * @function\r\n   * @param text {String} The text to be measured\r\n   * @description The measureText() method returns an object that contains the width of the specified text, in pixels.\r\n   * @returns {Number}\r\n   */\r\n  Context2D.prototype.measureText = function(text) {\r\n    if (typeof text !== \"string\") {\r\n      console.error(\r\n        \"jsPDF.context2d.measureText: Invalid arguments\",\r\n        arguments\r\n      );\r\n      throw new Error(\r\n        \"Invalid arguments passed to jsPDF.context2d.measureText\"\r\n      );\r\n    }\r\n    var pdf = this.pdf;\r\n    var k = this.pdf.internal.scaleFactor;\r\n\r\n    var fontSize = pdf.internal.getFontSize();\r\n    var txtWidth =\r\n      (pdf.getStringUnitWidth(text) * fontSize) / pdf.internal.scaleFactor;\r\n    txtWidth *= Math.round(((k * 96) / 72) * 10000) / 10000;\r\n\r\n    var TextMetrics = function(options) {\r\n      options = options || {};\r\n      var _width = options.width || 0;\r\n      Object.defineProperty(this, \"width\", {\r\n        get: function() {\r\n          return _width;\r\n        }\r\n      });\r\n      return this;\r\n    };\r\n    return new TextMetrics({ width: txtWidth });\r\n  };\r\n\r\n  //Transformations\r\n\r\n  /**\r\n   * Scales the current drawing bigger or smaller\r\n   *\r\n   * @name scale\r\n   * @function\r\n   * @param scalewidth {Number} Scales the width of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n   * @param scaleheight {Number} Scales the height of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n   * @description The scale() method scales the current drawing, bigger or smaller.\r\n   */\r\n  Context2D.prototype.scale = function(scalewidth, scaleheight) {\r\n    if (isNaN(scalewidth) || isNaN(scaleheight)) {\r\n      console.error(\"jsPDF.context2d.scale: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");\r\n    }\r\n    var matrix = new Matrix(scalewidth, 0.0, 0.0, scaleheight, 0.0, 0.0);\r\n    this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n  };\r\n\r\n  /**\r\n   * Rotates the current drawing\r\n   *\r\n   * @name rotate\r\n   * @function\r\n   * @param angle {Number} The rotation angle, in radians.\r\n   * @description To calculate from degrees to radians: degrees*Math.PI/180. <br />\r\n   * Example: to rotate 5 degrees, specify the following: 5*Math.PI/180\r\n   */\r\n  Context2D.prototype.rotate = function(angle) {\r\n    if (isNaN(angle)) {\r\n      console.error(\"jsPDF.context2d.rotate: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");\r\n    }\r\n    var matrix = new Matrix(\r\n      Math.cos(angle),\r\n      Math.sin(angle),\r\n      -Math.sin(angle),\r\n      Math.cos(angle),\r\n      0.0,\r\n      0.0\r\n    );\r\n    this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n  };\r\n\r\n  /**\r\n   * Remaps the (0,0) position on the canvas\r\n   *\r\n   * @name translate\r\n   * @function\r\n   * @param x {Number} The value to add to horizontal (x) coordinates\r\n   * @param y {Number} The value to add to vertical (y) coordinates\r\n   * @description The translate() method remaps the (0,0) position on the canvas.\r\n   */\r\n  Context2D.prototype.translate = function(x, y) {\r\n    if (isNaN(x) || isNaN(y)) {\r\n      console.error(\"jsPDF.context2d.translate: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");\r\n    }\r\n    var matrix = new Matrix(1.0, 0.0, 0.0, 1.0, x, y);\r\n    this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n  };\r\n\r\n  /**\r\n   * Replaces the current transformation matrix for the drawing\r\n   *\r\n   * @name transform\r\n   * @function\r\n   * @param a {Number} Horizontal scaling\r\n   * @param b {Number} Horizontal skewing\r\n   * @param c {Number} Vertical skewing\r\n   * @param d {Number} Vertical scaling\r\n   * @param e {Number} Horizontal moving\r\n   * @param f {Number} Vertical moving\r\n   * @description Each object on the canvas has a current transformation matrix.<br /><br />The transform() method replaces the current transformation matrix. It multiplies the current transformation matrix with the matrix described by:<br /><br /><br /><br />a    c    e<br /><br />b    d    f<br /><br />0    0    1<br /><br />In other words, the transform() method lets you scale, rotate, move, and skew the current context.\r\n   */\r\n  Context2D.prototype.transform = function(a, b, c, d, e, f) {\r\n    if (isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d) || isNaN(e) || isNaN(f)) {\r\n      console.error(\"jsPDF.context2d.transform: Invalid arguments\", arguments);\r\n      throw new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");\r\n    }\r\n    var matrix = new Matrix(a, b, c, d, e, f);\r\n    this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n  };\r\n\r\n  /**\r\n   * Resets the current transform to the identity matrix. Then runs transform()\r\n   *\r\n   * @name setTransform\r\n   * @function\r\n   * @param a {Number} Horizontal scaling\r\n   * @param b {Number} Horizontal skewing\r\n   * @param c {Number} Vertical skewing\r\n   * @param d {Number} Vertical scaling\r\n   * @param e {Number} Horizontal moving\r\n   * @param f {Number} Vertical moving\r\n   * @description Each object on the canvas has a current transformation matrix. <br /><br />The setTransform() method resets the current transform to the identity matrix, and then runs transform() with the same arguments.<br /><br />In other words, the setTransform() method lets you scale, rotate, move, and skew the current context.\r\n   */\r\n  Context2D.prototype.setTransform = function(a, b, c, d, e, f) {\r\n    a = isNaN(a) ? 1 : a;\r\n    b = isNaN(b) ? 0 : b;\r\n    c = isNaN(c) ? 0 : c;\r\n    d = isNaN(d) ? 1 : d;\r\n    e = isNaN(e) ? 0 : e;\r\n    f = isNaN(f) ? 0 : f;\r\n    this.ctx.transform = new Matrix(a, b, c, d, e, f);\r\n  };\r\n\r\n  /**\r\n   * Should only be used if pageWrapYEnabled is true\r\n   *\r\n   * @name setPageByYPosition\r\n   * @function\r\n   * @private\r\n   * @ignore\r\n   * @returns One-based Page Number\r\n   */\r\n  var setPageByYPosition = function(y) {\r\n    if (this.pageWrapYEnabled) {\r\n      this.lastBreak = 0;\r\n      var manualBreaks = 0;\r\n      var autoBreaks = 0;\r\n      for (var i = 0; i < this.pageBreaks.length; i++) {\r\n        if (y >= this.pageBreaks[i]) {\r\n          manualBreaks++;\r\n          if (this.lastBreak === 0) {\r\n            autoBreaks++;\r\n          }\r\n          var spaceBetweenLastBreak = this.pageBreaks[i] - this.lastBreak;\r\n          this.lastBreak = this.pageBreaks[i];\r\n          var pagesSinceLastBreak = Math.floor(\r\n            spaceBetweenLastBreak / this.pageWrapY\r\n          );\r\n          autoBreaks += pagesSinceLastBreak;\r\n        }\r\n      }\r\n      if (this.lastBreak === 0) {\r\n        var pagesSinceLastBreak = Math.floor(y / this.pageWrapY) + 1;\r\n        autoBreaks += pagesSinceLastBreak;\r\n      }\r\n      return autoBreaks + manualBreaks;\r\n    } else {\r\n      return this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n    }\r\n  };\r\n\r\n  var hasMargins = function() {\r\n    return (\r\n      this.margin[0] > 0 ||\r\n      this.margin[1] > 0 ||\r\n      this.margin[2] > 0 ||\r\n      this.margin[3] > 0\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Draws an image, canvas, or video onto the canvas\r\n   *\r\n   * @function\r\n   * @param img {} Specifies the image, canvas, or video element to use\r\n   * @param sx {Number} Optional. The x coordinate where to start clipping\r\n   * @param sy {Number} Optional. The y coordinate where to start clipping\r\n   * @param swidth {Number} Optional. The width of the clipped image\r\n   * @param sheight {Number} Optional. The height of the clipped image\r\n   * @param x {Number} The x coordinate where to place the image on the canvas\r\n   * @param y {Number} The y coordinate where to place the image on the canvas\r\n   * @param width {Number} Optional. The width of the image to use (stretch or reduce the image)\r\n   * @param height {Number} Optional. The height of the image to use (stretch or reduce the image)\r\n   */\r\n  Context2D.prototype.drawImage = function(\r\n    img,\r\n    sx,\r\n    sy,\r\n    swidth,\r\n    sheight,\r\n    x,\r\n    y,\r\n    width,\r\n    height\r\n  ) {\r\n    var imageProperties = this.pdf.getImageProperties(img);\r\n    var factorX = 1;\r\n    var factorY = 1;\r\n    var isClip;\r\n\r\n    var clipFactorX = 1;\r\n    var clipFactorY = 1;\r\n\r\n    if (typeof swidth !== \"undefined\" && typeof width !== \"undefined\") {\r\n      isClip = true;\r\n      clipFactorX = width / swidth;\r\n      clipFactorY = height / sheight;\r\n      factorX = ((imageProperties.width / swidth) * width) / swidth;\r\n      factorY = ((imageProperties.height / sheight) * height) / sheight;\r\n    }\r\n\r\n    //is sx and sy are set and x and y not, set x and y with values of sx and sy\r\n    if (typeof x === \"undefined\") {\r\n      x = sx;\r\n      y = sy;\r\n      sx = 0;\r\n      sy = 0;\r\n    }\r\n\r\n    if (typeof swidth !== \"undefined\" && typeof width === \"undefined\") {\r\n      width = swidth;\r\n      height = sheight;\r\n    }\r\n    if (typeof swidth === \"undefined\" && typeof width === \"undefined\") {\r\n      width = imageProperties.width;\r\n      height = imageProperties.height;\r\n    }\r\n\r\n    var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n    var angle = rad2deg(decomposedTransformationMatrix.rotate.shx);\r\n    var matrix = new Matrix();\r\n    matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n    matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n    matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n    var xRect = matrix.applyToRectangle(\r\n      new Rectangle(\r\n        x - sx * clipFactorX,\r\n        y - sy * clipFactorY,\r\n        swidth * factorX,\r\n        sheight * factorY\r\n      )\r\n    );\r\n    var pageArray = getPagesByPath.call(this, xRect);\r\n    var pages = [];\r\n    for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n      if (pages.indexOf(pageArray[ii]) === -1) {\r\n        pages.push(pageArray[ii]);\r\n      }\r\n    }\r\n\r\n    sortPages(pages);\r\n\r\n    var clipPath;\r\n    if (this.autoPaging) {\r\n      var min = pages[0];\r\n      var max = pages[pages.length - 1];\r\n      for (var i = min; i < max + 1; i++) {\r\n        this.pdf.setPage(i);\r\n\r\n        var pageWidthMinusMargins =\r\n          this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n        var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n        var firstPageHeight =\r\n          this.pdf.internal.pageSize.height -\r\n          this.posY -\r\n          this.margin[0] -\r\n          this.margin[2];\r\n        var pageHeightMinusMargins =\r\n          this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n        var previousPageHeightSum =\r\n          i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n        if (this.ctx.clip_path.length !== 0) {\r\n          var tmpPaths = this.path;\r\n          clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n          this.path = pathPositionRedo(\r\n            clipPath,\r\n            this.posX + this.margin[3],\r\n            -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n          );\r\n          drawPaths.call(this, \"fill\", true);\r\n          this.path = tmpPaths;\r\n        }\r\n        var tmpRect = JSON.parse(JSON.stringify(xRect));\r\n        tmpRect = pathPositionRedo(\r\n          [tmpRect],\r\n          this.posX + this.margin[3],\r\n          -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n        )[0];\r\n\r\n        const needsClipping = (i > min || i < max) && hasMargins.call(this);\r\n\r\n        if (needsClipping) {\r\n          this.pdf.saveGraphicsState();\r\n          this.pdf\r\n            .rect(\r\n              this.margin[3],\r\n              this.margin[0],\r\n              pageWidthMinusMargins,\r\n              pageHeightMinusMargins,\r\n              null\r\n            )\r\n            .clip()\r\n            .discardPath();\r\n        }\r\n        this.pdf.addImage(\r\n          img,\r\n          \"JPEG\",\r\n          tmpRect.x,\r\n          tmpRect.y,\r\n          tmpRect.w,\r\n          tmpRect.h,\r\n          null,\r\n          null,\r\n          angle\r\n        );\r\n        if (needsClipping) {\r\n          this.pdf.restoreGraphicsState();\r\n        }\r\n      }\r\n    } else {\r\n      this.pdf.addImage(\r\n        img,\r\n        \"JPEG\",\r\n        xRect.x,\r\n        xRect.y,\r\n        xRect.w,\r\n        xRect.h,\r\n        null,\r\n        null,\r\n        angle\r\n      );\r\n    }\r\n  };\r\n\r\n  var getPagesByPath = function(path, pageWrapX, pageWrapY) {\r\n    var result = [];\r\n    pageWrapX = pageWrapX || this.pdf.internal.pageSize.width;\r\n    pageWrapY =\r\n      pageWrapY ||\r\n      this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n    var yOffset = this.posY + this.ctx.prevPageLastElemOffset;\r\n\r\n    switch (path.type) {\r\n      default:\r\n      case \"mt\":\r\n      case \"lt\":\r\n        result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n        break;\r\n      case \"arc\":\r\n        result.push(\r\n          Math.floor((path.y + yOffset - path.radius) / pageWrapY) + 1\r\n        );\r\n        result.push(\r\n          Math.floor((path.y + yOffset + path.radius) / pageWrapY) + 1\r\n        );\r\n        break;\r\n      case \"qct\":\r\n        var rectOfQuadraticCurve = getQuadraticCurveBoundary(\r\n          this.ctx.lastPoint.x,\r\n          this.ctx.lastPoint.y,\r\n          path.x1,\r\n          path.y1,\r\n          path.x,\r\n          path.y\r\n        );\r\n        result.push(\r\n          Math.floor((rectOfQuadraticCurve.y + yOffset) / pageWrapY) + 1\r\n        );\r\n        result.push(\r\n          Math.floor(\r\n            (rectOfQuadraticCurve.y + rectOfQuadraticCurve.h + yOffset) /\r\n              pageWrapY\r\n          ) + 1\r\n        );\r\n        break;\r\n      case \"bct\":\r\n        var rectOfBezierCurve = getBezierCurveBoundary(\r\n          this.ctx.lastPoint.x,\r\n          this.ctx.lastPoint.y,\r\n          path.x1,\r\n          path.y1,\r\n          path.x2,\r\n          path.y2,\r\n          path.x,\r\n          path.y\r\n        );\r\n        result.push(\r\n          Math.floor((rectOfBezierCurve.y + yOffset) / pageWrapY) + 1\r\n        );\r\n        result.push(\r\n          Math.floor(\r\n            (rectOfBezierCurve.y + rectOfBezierCurve.h + yOffset) / pageWrapY\r\n          ) + 1\r\n        );\r\n        break;\r\n      case \"rect\":\r\n        result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n        result.push(Math.floor((path.y + path.h + yOffset) / pageWrapY) + 1);\r\n    }\r\n\r\n    for (var i = 0; i < result.length; i += 1) {\r\n      while (this.pdf.internal.getNumberOfPages() < result[i]) {\r\n        addPage.call(this);\r\n      }\r\n    }\r\n    return result;\r\n  };\r\n\r\n  var addPage = function() {\r\n    var fillStyle = this.fillStyle;\r\n    var strokeStyle = this.strokeStyle;\r\n    var font = this.font;\r\n    var lineCap = this.lineCap;\r\n    var lineWidth = this.lineWidth;\r\n    var lineJoin = this.lineJoin;\r\n    this.pdf.addPage();\r\n    this.fillStyle = fillStyle;\r\n    this.strokeStyle = strokeStyle;\r\n    this.font = font;\r\n    this.lineCap = lineCap;\r\n    this.lineWidth = lineWidth;\r\n    this.lineJoin = lineJoin;\r\n  };\r\n\r\n  var pathPositionRedo = function(paths, x, y) {\r\n    for (var i = 0; i < paths.length; i++) {\r\n      switch (paths[i].type) {\r\n        case \"bct\":\r\n          paths[i].x2 += x;\r\n          paths[i].y2 += y;\r\n        case \"qct\":\r\n          paths[i].x1 += x;\r\n          paths[i].y1 += y;\r\n        case \"mt\":\r\n        case \"lt\":\r\n        case \"arc\":\r\n        default:\r\n          paths[i].x += x;\r\n          paths[i].y += y;\r\n      }\r\n    }\r\n    return paths;\r\n  };\r\n\r\n  var sortPages = function(pages) {\r\n    return pages.sort(function(a, b) {\r\n      return a - b;\r\n    });\r\n  };\r\n\r\n  var pathPreProcess = function(rule, isClip) {\r\n    var fillStyle = this.fillStyle;\r\n    var strokeStyle = this.strokeStyle;\r\n    var lineCap = this.lineCap;\r\n    var oldLineWidth = this.lineWidth;\r\n    var lineWidth = Math.abs(oldLineWidth * this.ctx.transform.scaleX);\r\n    var lineJoin = this.lineJoin;\r\n\r\n    var origPath = JSON.parse(JSON.stringify(this.path));\r\n    var xPath = JSON.parse(JSON.stringify(this.path));\r\n    var clipPath;\r\n    var tmpPath;\r\n    var pages = [];\r\n\r\n    for (var i = 0; i < xPath.length; i++) {\r\n      if (typeof xPath[i].x !== \"undefined\") {\r\n        var page = getPagesByPath.call(this, xPath[i]);\r\n\r\n        for (var ii = 0; ii < page.length; ii += 1) {\r\n          if (pages.indexOf(page[ii]) === -1) {\r\n            pages.push(page[ii]);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (var j = 0; j < pages.length; j++) {\r\n      while (this.pdf.internal.getNumberOfPages() < pages[j]) {\r\n        addPage.call(this);\r\n      }\r\n    }\r\n    sortPages(pages);\r\n\r\n    if (this.autoPaging) {\r\n      var min = pages[0];\r\n      var max = pages[pages.length - 1];\r\n      for (var k = min; k < max + 1; k++) {\r\n        this.pdf.setPage(k);\r\n\r\n        this.fillStyle = fillStyle;\r\n        this.strokeStyle = strokeStyle;\r\n        this.lineCap = lineCap;\r\n        this.lineWidth = lineWidth;\r\n        this.lineJoin = lineJoin;\r\n\r\n        var pageWidthMinusMargins =\r\n          this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n        var topMargin = k === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n        var firstPageHeight =\r\n          this.pdf.internal.pageSize.height -\r\n          this.posY -\r\n          this.margin[0] -\r\n          this.margin[2];\r\n        var pageHeightMinusMargins =\r\n          this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n        var previousPageHeightSum =\r\n          k === 1 ? 0 : firstPageHeight + (k - 2) * pageHeightMinusMargins;\r\n\r\n        if (this.ctx.clip_path.length !== 0) {\r\n          var tmpPaths = this.path;\r\n          clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n          this.path = pathPositionRedo(\r\n            clipPath,\r\n            this.posX + this.margin[3],\r\n            -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n          );\r\n          drawPaths.call(this, rule, true);\r\n          this.path = tmpPaths;\r\n        }\r\n        tmpPath = JSON.parse(JSON.stringify(origPath));\r\n        this.path = pathPositionRedo(\r\n          tmpPath,\r\n          this.posX + this.margin[3],\r\n          -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n        );\r\n        if (isClip === false || k === 0) {\r\n          const needsClipping = (k > min || k < max) && hasMargins.call(this);\r\n          if (needsClipping) {\r\n            this.pdf.saveGraphicsState();\r\n            this.pdf\r\n              .rect(\r\n                this.margin[3],\r\n                this.margin[0],\r\n                pageWidthMinusMargins,\r\n                pageHeightMinusMargins,\r\n                null\r\n              )\r\n              .clip()\r\n              .discardPath();\r\n          }\r\n          drawPaths.call(this, rule, isClip);\r\n          if (needsClipping) {\r\n            this.pdf.restoreGraphicsState();\r\n          }\r\n        }\r\n        this.lineWidth = oldLineWidth;\r\n      }\r\n    } else {\r\n      this.lineWidth = lineWidth;\r\n      drawPaths.call(this, rule, isClip);\r\n      this.lineWidth = oldLineWidth;\r\n    }\r\n    this.path = origPath;\r\n  };\r\n\r\n  /**\r\n   * Processes the paths\r\n   *\r\n   * @function\r\n   * @param rule {String}\r\n   * @param isClip {Boolean}\r\n   * @private\r\n   * @ignore\r\n   */\r\n  var drawPaths = function(rule, isClip) {\r\n    if (rule === \"stroke\" && !isClip && isStrokeTransparent.call(this)) {\r\n      return;\r\n    }\r\n\r\n    if (rule !== \"stroke\" && !isClip && isFillTransparent.call(this)) {\r\n      return;\r\n    }\r\n\r\n    var moves = [];\r\n\r\n    //var alpha = (this.ctx.fillOpacity < 1) ? this.ctx.fillOpacity : this.ctx.globalAlpha;\r\n    var delta;\r\n    var xPath = this.path;\r\n    for (var i = 0; i < xPath.length; i++) {\r\n      var pt = xPath[i];\r\n\r\n      switch (pt.type) {\r\n        case \"begin\":\r\n          moves.push({\r\n            begin: true\r\n          });\r\n          break;\r\n\r\n        case \"close\":\r\n          moves.push({\r\n            close: true\r\n          });\r\n          break;\r\n\r\n        case \"mt\":\r\n          moves.push({\r\n            start: pt,\r\n            deltas: [],\r\n            abs: []\r\n          });\r\n          break;\r\n\r\n        case \"lt\":\r\n          var iii = moves.length;\r\n          if (xPath[i - 1] && !isNaN(xPath[i - 1].x)) {\r\n            delta = [pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y];\r\n            if (iii > 0) {\r\n              for (iii; iii >= 0; iii--) {\r\n                if (\r\n                  moves[iii - 1].close !== true &&\r\n                  moves[iii - 1].begin !== true\r\n                ) {\r\n                  moves[iii - 1].deltas.push(delta);\r\n                  moves[iii - 1].abs.push(pt);\r\n                  break;\r\n                }\r\n              }\r\n            }\r\n          }\r\n          break;\r\n\r\n        case \"bct\":\r\n          delta = [\r\n            pt.x1 - xPath[i - 1].x,\r\n            pt.y1 - xPath[i - 1].y,\r\n            pt.x2 - xPath[i - 1].x,\r\n            pt.y2 - xPath[i - 1].y,\r\n            pt.x - xPath[i - 1].x,\r\n            pt.y - xPath[i - 1].y\r\n          ];\r\n          moves[moves.length - 1].deltas.push(delta);\r\n          break;\r\n\r\n        case \"qct\":\r\n          var x1 = xPath[i - 1].x + (2.0 / 3.0) * (pt.x1 - xPath[i - 1].x);\r\n          var y1 = xPath[i - 1].y + (2.0 / 3.0) * (pt.y1 - xPath[i - 1].y);\r\n          var x2 = pt.x + (2.0 / 3.0) * (pt.x1 - pt.x);\r\n          var y2 = pt.y + (2.0 / 3.0) * (pt.y1 - pt.y);\r\n          var x3 = pt.x;\r\n          var y3 = pt.y;\r\n          delta = [\r\n            x1 - xPath[i - 1].x,\r\n            y1 - xPath[i - 1].y,\r\n            x2 - xPath[i - 1].x,\r\n            y2 - xPath[i - 1].y,\r\n            x3 - xPath[i - 1].x,\r\n            y3 - xPath[i - 1].y\r\n          ];\r\n          moves[moves.length - 1].deltas.push(delta);\r\n          break;\r\n\r\n        case \"arc\":\r\n          moves.push({\r\n            deltas: [],\r\n            abs: [],\r\n            arc: true\r\n          });\r\n\r\n          if (Array.isArray(moves[moves.length - 1].abs)) {\r\n            moves[moves.length - 1].abs.push(pt);\r\n          }\r\n          break;\r\n      }\r\n    }\r\n    var style;\r\n    if (!isClip) {\r\n      if (rule === \"stroke\") {\r\n        style = \"stroke\";\r\n      } else {\r\n        style = \"fill\";\r\n      }\r\n    } else {\r\n      style = null;\r\n    }\r\n\r\n    var began = false;\r\n    for (var k = 0; k < moves.length; k++) {\r\n      if (moves[k].arc) {\r\n        var arcs = moves[k].abs;\r\n\r\n        for (var ii = 0; ii < arcs.length; ii++) {\r\n          var arc = arcs[ii];\r\n\r\n          if (arc.type === \"arc\") {\r\n            drawArc.call(\r\n              this,\r\n              arc.x,\r\n              arc.y,\r\n              arc.radius,\r\n              arc.startAngle,\r\n              arc.endAngle,\r\n              arc.counterclockwise,\r\n              undefined,\r\n              isClip,\r\n              !began\r\n            );\r\n          } else {\r\n            drawLine.call(this, arc.x, arc.y);\r\n          }\r\n          began = true;\r\n        }\r\n      } else if (moves[k].close === true) {\r\n        this.pdf.internal.out(\"h\");\r\n        began = false;\r\n      } else if (moves[k].begin !== true) {\r\n        var x = moves[k].start.x;\r\n        var y = moves[k].start.y;\r\n        drawLines.call(this, moves[k].deltas, x, y);\r\n        began = true;\r\n      }\r\n    }\r\n\r\n    if (style) {\r\n      putStyle.call(this, style);\r\n    }\r\n    if (isClip) {\r\n      doClip.call(this);\r\n    }\r\n  };\r\n\r\n  var getBaseline = function(y) {\r\n    var height =\r\n      this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n    var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n    switch (this.ctx.textBaseline) {\r\n      case \"bottom\":\r\n        return y - descent;\r\n      case \"top\":\r\n        return y + height - descent;\r\n      case \"hanging\":\r\n        return y + height - 2 * descent;\r\n      case \"middle\":\r\n        return y + height / 2 - descent;\r\n      case \"ideographic\":\r\n        // TODO not implemented\r\n        return y;\r\n      case \"alphabetic\":\r\n      default:\r\n        return y;\r\n    }\r\n  };\r\n\r\n  var getTextBottom = function(yBaseLine) {\r\n    var height =\r\n      this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n    var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n    return yBaseLine + descent;\r\n  };\r\n\r\n  Context2D.prototype.createLinearGradient = function createLinearGradient() {\r\n    var canvasGradient = function canvasGradient() {};\r\n\r\n    canvasGradient.colorStops = [];\r\n    canvasGradient.addColorStop = function(offset, color) {\r\n      this.colorStops.push([offset, color]);\r\n    };\r\n\r\n    canvasGradient.getColor = function() {\r\n      if (this.colorStops.length === 0) {\r\n        return \"#000000\";\r\n      }\r\n\r\n      return this.colorStops[0][1];\r\n    };\r\n\r\n    canvasGradient.isCanvasGradient = true;\r\n    return canvasGradient;\r\n  };\r\n  Context2D.prototype.createPattern = function createPattern() {\r\n    return this.createLinearGradient();\r\n  };\r\n  Context2D.prototype.createRadialGradient = function createRadialGradient() {\r\n    return this.createLinearGradient();\r\n  };\r\n\r\n  /**\r\n   *\r\n   * @param x Edge point X\r\n   * @param y Edge point Y\r\n   * @param r Radius\r\n   * @param a1 start angle\r\n   * @param a2 end angle\r\n   * @param counterclockwise\r\n   * @param style\r\n   * @param isClip\r\n   */\r\n  var drawArc = function(\r\n    x,\r\n    y,\r\n    r,\r\n    a1,\r\n    a2,\r\n    counterclockwise,\r\n    style,\r\n    isClip,\r\n    includeMove\r\n  ) {\r\n    // http://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html\r\n    var curves = createArc.call(this, r, a1, a2, counterclockwise);\r\n\r\n    for (var i = 0; i < curves.length; i++) {\r\n      var curve = curves[i];\r\n      if (i === 0) {\r\n        if (includeMove) {\r\n          doMove.call(this, curve.x1 + x, curve.y1 + y);\r\n        } else {\r\n          drawLine.call(this, curve.x1 + x, curve.y1 + y);\r\n        }\r\n      }\r\n      drawCurve.call(\r\n        this,\r\n        x,\r\n        y,\r\n        curve.x2,\r\n        curve.y2,\r\n        curve.x3,\r\n        curve.y3,\r\n        curve.x4,\r\n        curve.y4\r\n      );\r\n    }\r\n\r\n    if (!isClip) {\r\n      putStyle.call(this, style);\r\n    } else {\r\n      doClip.call(this);\r\n    }\r\n  };\r\n\r\n  var putStyle = function(style) {\r\n    switch (style) {\r\n      case \"stroke\":\r\n        this.pdf.internal.out(\"S\");\r\n        break;\r\n      case \"fill\":\r\n        this.pdf.internal.out(\"f\");\r\n        break;\r\n    }\r\n  };\r\n\r\n  var doClip = function() {\r\n    this.pdf.clip();\r\n    this.pdf.discardPath();\r\n  };\r\n\r\n  var doMove = function(x, y) {\r\n    this.pdf.internal.out(\r\n      getHorizontalCoordinateString(x) +\r\n        \" \" +\r\n        getVerticalCoordinateString(y) +\r\n        \" m\"\r\n    );\r\n  };\r\n\r\n  var putText = function(options) {\r\n    var textAlign;\r\n    switch (options.align) {\r\n      case \"right\":\r\n      case \"end\":\r\n        textAlign = \"right\";\r\n        break;\r\n      case \"center\":\r\n        textAlign = \"center\";\r\n        break;\r\n      case \"left\":\r\n      case \"start\":\r\n      default:\r\n        textAlign = \"left\";\r\n        break;\r\n    }\r\n\r\n    var textDimensions = this.pdf.getTextDimensions(options.text);\r\n    var yBaseLine = getBaseline.call(this, options.y);\r\n    var yBottom = getTextBottom.call(this, yBaseLine);\r\n    var yTop = yBottom - textDimensions.h;\r\n\r\n    var pt = this.ctx.transform.applyToPoint(new Point(options.x, yBaseLine));\r\n    var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n    var matrix = new Matrix();\r\n    matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n    matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n    matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n\r\n    var baselineRect = this.ctx.transform.applyToRectangle(\r\n      new Rectangle(options.x, yBaseLine, textDimensions.w, textDimensions.h)\r\n    );\r\n    var textBounds = matrix.applyToRectangle(\r\n      new Rectangle(options.x, yTop, textDimensions.w, textDimensions.h)\r\n    );\r\n    var pageArray = getPagesByPath.call(this, textBounds);\r\n    var pages = [];\r\n    for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n      if (pages.indexOf(pageArray[ii]) === -1) {\r\n        pages.push(pageArray[ii]);\r\n      }\r\n    }\r\n\r\n    sortPages(pages);\r\n\r\n    var clipPath, oldSize, oldLineWidth;\r\n    if (this.autoPaging) {\r\n      var min = pages[0];\r\n      var max = pages[pages.length - 1];\r\n      for (var i = min; i < max + 1; i++) {\r\n        this.pdf.setPage(i);\r\n\r\n        var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n        var firstPageHeight =\r\n          this.pdf.internal.pageSize.height -\r\n          this.posY -\r\n          this.margin[0] -\r\n          this.margin[2];\r\n        var pageHeightMinusBottomMargin =\r\n          this.pdf.internal.pageSize.height - this.margin[2];\r\n        var pageHeightMinusMargins =\r\n          pageHeightMinusBottomMargin - this.margin[0];\r\n        var pageWidthMinusRightMargin =\r\n          this.pdf.internal.pageSize.width - this.margin[1];\r\n        var pageWidthMinusMargins = pageWidthMinusRightMargin - this.margin[3];\r\n        var previousPageHeightSum =\r\n          i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n        if (this.ctx.clip_path.length !== 0) {\r\n          var tmpPaths = this.path;\r\n          clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n          this.path = pathPositionRedo(\r\n            clipPath,\r\n            this.posX + this.margin[3],\r\n            -1 * previousPageHeightSum + topMargin\r\n          );\r\n          drawPaths.call(this, \"fill\", true);\r\n          this.path = tmpPaths;\r\n        }\r\n        var textBoundsOnPage = pathPositionRedo(\r\n          [JSON.parse(JSON.stringify(textBounds))],\r\n          this.posX + this.margin[3],\r\n          -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n        )[0];\r\n\r\n        if (options.scale >= 0.01) {\r\n          oldSize = this.pdf.internal.getFontSize();\r\n          this.pdf.setFontSize(oldSize * options.scale);\r\n          oldLineWidth = this.lineWidth;\r\n          this.lineWidth = oldLineWidth * options.scale;\r\n        }\r\n\r\n        var doSlice = this.autoPaging !== \"text\";\r\n\r\n        if (\r\n          doSlice ||\r\n          textBoundsOnPage.y + textBoundsOnPage.h <= pageHeightMinusBottomMargin\r\n        ) {\r\n          if (\r\n            doSlice ||\r\n            (textBoundsOnPage.y >= topMargin &&\r\n              textBoundsOnPage.x <= pageWidthMinusRightMargin)\r\n          ) {\r\n            var croppedText = doSlice\r\n              ? options.text\r\n              : this.pdf.splitTextToSize(\r\n                  options.text,\r\n                  options.maxWidth ||\r\n                    pageWidthMinusRightMargin - textBoundsOnPage.x\r\n                )[0];\r\n            var baseLineRectOnPage = pathPositionRedo(\r\n              [JSON.parse(JSON.stringify(baselineRect))],\r\n              this.posX + this.margin[3],\r\n              -previousPageHeightSum +\r\n                topMargin +\r\n                this.ctx.prevPageLastElemOffset\r\n            )[0];\r\n\r\n            const needsClipping =\r\n              doSlice && (i > min || i < max) && hasMargins.call(this);\r\n\r\n            if (needsClipping) {\r\n              this.pdf.saveGraphicsState();\r\n              this.pdf\r\n                .rect(\r\n                  this.margin[3],\r\n                  this.margin[0],\r\n                  pageWidthMinusMargins,\r\n                  pageHeightMinusMargins,\r\n                  null\r\n                )\r\n                .clip()\r\n                .discardPath();\r\n            }\r\n\r\n            this.pdf.text(\r\n              croppedText,\r\n              baseLineRectOnPage.x,\r\n              baseLineRectOnPage.y,\r\n              {\r\n                angle: options.angle,\r\n                align: textAlign,\r\n                renderingMode: options.renderingMode\r\n              }\r\n            );\r\n\r\n            if (needsClipping) {\r\n              this.pdf.restoreGraphicsState();\r\n            }\r\n          }\r\n        } else {\r\n          // This text is the last element of the page, but it got cut off due to the margin\r\n          // so we render it in the next page\r\n\r\n          if (textBoundsOnPage.y < pageHeightMinusBottomMargin) {\r\n            // As a result, all other elements have their y offset increased\r\n            this.ctx.prevPageLastElemOffset +=\r\n              pageHeightMinusBottomMargin - textBoundsOnPage.y;\r\n          }\r\n        }\r\n\r\n        if (options.scale >= 0.01) {\r\n          this.pdf.setFontSize(oldSize);\r\n          this.lineWidth = oldLineWidth;\r\n        }\r\n      }\r\n    } else {\r\n      if (options.scale >= 0.01) {\r\n        oldSize = this.pdf.internal.getFontSize();\r\n        this.pdf.setFontSize(oldSize * options.scale);\r\n        oldLineWidth = this.lineWidth;\r\n        this.lineWidth = oldLineWidth * options.scale;\r\n      }\r\n      this.pdf.text(options.text, pt.x + this.posX, pt.y + this.posY, {\r\n        angle: options.angle,\r\n        align: textAlign,\r\n        renderingMode: options.renderingMode,\r\n        maxWidth: options.maxWidth\r\n      });\r\n\r\n      if (options.scale >= 0.01) {\r\n        this.pdf.setFontSize(oldSize);\r\n        this.lineWidth = oldLineWidth;\r\n      }\r\n    }\r\n  };\r\n\r\n  var drawLine = function(x, y, prevX, prevY) {\r\n    prevX = prevX || 0;\r\n    prevY = prevY || 0;\r\n\r\n    this.pdf.internal.out(\r\n      getHorizontalCoordinateString(x + prevX) +\r\n        \" \" +\r\n        getVerticalCoordinateString(y + prevY) +\r\n        \" l\"\r\n    );\r\n  };\r\n\r\n  var drawLines = function(lines, x, y) {\r\n    return this.pdf.lines(lines, x, y, null, null);\r\n  };\r\n\r\n  var drawCurve = function(x, y, x1, y1, x2, y2, x3, y3) {\r\n    this.pdf.internal.out(\r\n      [\r\n        f2(getHorizontalCoordinate(x1 + x)),\r\n        f2(getVerticalCoordinate(y1 + y)),\r\n        f2(getHorizontalCoordinate(x2 + x)),\r\n        f2(getVerticalCoordinate(y2 + y)),\r\n        f2(getHorizontalCoordinate(x3 + x)),\r\n        f2(getVerticalCoordinate(y3 + y)),\r\n        \"c\"\r\n      ].join(\" \")\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Return a array of objects that represent bezier curves which approximate the circular arc centered at the origin, from startAngle to endAngle (radians) with the specified radius.\r\n   *\r\n   * Each bezier curve is an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n   * @function createArc\r\n   */\r\n  var createArc = function(radius, startAngle, endAngle, anticlockwise) {\r\n    var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below\r\n    var twoPi = Math.PI * 2;\r\n    var halfPi = Math.PI / 2.0;\r\n\r\n    while (startAngle > endAngle) {\r\n      startAngle = startAngle - twoPi;\r\n    }\r\n    var totalAngle = Math.abs(endAngle - startAngle);\r\n    if (totalAngle < twoPi) {\r\n      if (anticlockwise) {\r\n        totalAngle = twoPi - totalAngle;\r\n      }\r\n    }\r\n\r\n    // Compute the sequence of arc curves, up to PI/2 at a time.\r\n    var curves = [];\r\n\r\n    // clockwise or counterclockwise\r\n    var sgn = anticlockwise ? -1 : +1;\r\n\r\n    var a1 = startAngle;\r\n    for (; totalAngle > EPSILON; ) {\r\n      var remain = sgn * Math.min(totalAngle, halfPi);\r\n      var a2 = a1 + remain;\r\n      curves.push(createSmallArc.call(this, radius, a1, a2));\r\n      totalAngle -= Math.abs(a2 - a1);\r\n      a1 = a2;\r\n    }\r\n\r\n    return curves;\r\n  };\r\n\r\n  /**\r\n   * Cubic bezier approximation of a circular arc centered at the origin, from (radians) a1 to a2, where a2-a1 < pi/2. The arc's radius is r.\r\n   *\r\n   * Returns an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n   *\r\n   * This algorithm is based on the approach described in: A. Riškus, \"Approximation of a Cubic Bezier Curve by Circular Arcs and Vice Versa,\" Information Technology and Control, 35(4), 2006 pp. 371-378.\r\n   */\r\n  var createSmallArc = function(r, a1, a2) {\r\n    var a = (a2 - a1) / 2.0;\r\n\r\n    var x4 = r * Math.cos(a);\r\n    var y4 = r * Math.sin(a);\r\n    var x1 = x4;\r\n    var y1 = -y4;\r\n\r\n    var q1 = x1 * x1 + y1 * y1;\r\n    var q2 = q1 + x1 * x4 + y1 * y4;\r\n    var k2 = ((4 / 3) * (Math.sqrt(2 * q1 * q2) - q2)) / (x1 * y4 - y1 * x4);\r\n\r\n    var x2 = x1 - k2 * y1;\r\n    var y2 = y1 + k2 * x1;\r\n    var x3 = x2;\r\n    var y3 = -y2;\r\n\r\n    var ar = a + a1;\r\n    var cos_ar = Math.cos(ar);\r\n    var sin_ar = Math.sin(ar);\r\n\r\n    return {\r\n      x1: r * Math.cos(a1),\r\n      y1: r * Math.sin(a1),\r\n      x2: x2 * cos_ar - y2 * sin_ar,\r\n      y2: x2 * sin_ar + y2 * cos_ar,\r\n      x3: x3 * cos_ar - y3 * sin_ar,\r\n      y3: x3 * sin_ar + y3 * cos_ar,\r\n      x4: r * Math.cos(a2),\r\n      y4: r * Math.sin(a2)\r\n    };\r\n  };\r\n\r\n  var rad2deg = function(value) {\r\n    return (value * 180) / Math.PI;\r\n  };\r\n\r\n  var getQuadraticCurveBoundary = function(sx, sy, cpx, cpy, ex, ey) {\r\n    var midX1 = sx + (cpx - sx) * 0.5;\r\n    var midY1 = sy + (cpy - sy) * 0.5;\r\n    var midX2 = ex + (cpx - ex) * 0.5;\r\n    var midY2 = ey + (cpy - ey) * 0.5;\r\n    var resultX1 = Math.min(sx, ex, midX1, midX2);\r\n    var resultX2 = Math.max(sx, ex, midX1, midX2);\r\n    var resultY1 = Math.min(sy, ey, midY1, midY2);\r\n    var resultY2 = Math.max(sy, ey, midY1, midY2);\r\n    return new Rectangle(\r\n      resultX1,\r\n      resultY1,\r\n      resultX2 - resultX1,\r\n      resultY2 - resultY1\r\n    );\r\n  };\r\n\r\n  //De Casteljau algorithm\r\n  var getBezierCurveBoundary = function(ax, ay, bx, by, cx, cy, dx, dy) {\r\n    var tobx = bx - ax;\r\n    var toby = by - ay;\r\n    var tocx = cx - bx;\r\n    var tocy = cy - by;\r\n    var todx = dx - cx;\r\n    var tody = dy - cy;\r\n    var precision = 40;\r\n    var d,\r\n      i,\r\n      px,\r\n      py,\r\n      qx,\r\n      qy,\r\n      rx,\r\n      ry,\r\n      tx,\r\n      ty,\r\n      sx,\r\n      sy,\r\n      x,\r\n      y,\r\n      minx,\r\n      miny,\r\n      maxx,\r\n      maxy,\r\n      toqx,\r\n      toqy,\r\n      torx,\r\n      tory,\r\n      totx,\r\n      toty;\r\n    for (i = 0; i < precision + 1; i++) {\r\n      d = i / precision;\r\n      px = ax + d * tobx;\r\n      py = ay + d * toby;\r\n      qx = bx + d * tocx;\r\n      qy = by + d * tocy;\r\n      rx = cx + d * todx;\r\n      ry = cy + d * tody;\r\n      toqx = qx - px;\r\n      toqy = qy - py;\r\n      torx = rx - qx;\r\n      tory = ry - qy;\r\n\r\n      sx = px + d * toqx;\r\n      sy = py + d * toqy;\r\n      tx = qx + d * torx;\r\n      ty = qy + d * tory;\r\n      totx = tx - sx;\r\n      toty = ty - sy;\r\n\r\n      x = sx + d * totx;\r\n      y = sy + d * toty;\r\n      if (i == 0) {\r\n        minx = x;\r\n        miny = y;\r\n        maxx = x;\r\n        maxy = y;\r\n      } else {\r\n        minx = Math.min(minx, x);\r\n        miny = Math.min(miny, y);\r\n        maxx = Math.max(maxx, x);\r\n        maxy = Math.max(maxy, y);\r\n      }\r\n    }\r\n    return new Rectangle(\r\n      Math.round(minx),\r\n      Math.round(miny),\r\n      Math.round(maxx - minx),\r\n      Math.round(maxy - miny)\r\n    );\r\n  };\r\n\r\n  var getPrevLineDashValue = function(lineDash, lineDashOffset) {\r\n    return JSON.stringify({\r\n      lineDash: lineDash,\r\n      lineDashOffset: lineDashOffset\r\n    });\r\n  };\r\n\r\n  var setLineDash = function() {\r\n    // Avoid unnecessary line dash declarations.\r\n    if (\r\n      !this.prevLineDash &&\r\n      !this.ctx.lineDash.length &&\r\n      !this.ctx.lineDashOffset\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    // Avoid unnecessary line dash declarations.\r\n    const nextLineDash = getPrevLineDashValue(\r\n      this.ctx.lineDash,\r\n      this.ctx.lineDashOffset\r\n    );\r\n    if (this.prevLineDash !== nextLineDash) {\r\n      this.pdf.setLineDash(this.ctx.lineDash, this.ctx.lineDashOffset);\r\n      this.prevLineDash = nextLineDash;\r\n    }\r\n  };\r\n})(jsPDF.API);\r\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Much of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// Many optimizations have been made, so the bundle size is ultimately smaller but performance is similar.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\n// Mediocre shim\nvar Worker;\nvar workerAdd = \";var __w=require('worker_threads');__w.parentPort.on('message',function(m){onmessage({data:m})}),postMessage=function(m,t){__w.parentPort.postMessage(m,t)},close=process.exit;self=global\";\ntry {\n    Worker = require('worker_threads').Worker;\n}\ncatch (e) {\n}\nvar wk = Worker ? function (c, _, msg, transfer, cb) {\n    var done = false;\n    var w = new Worker(c + workerAdd, { eval: true })\n        .on('error', function (e) { return cb(e, null); })\n        .on('message', function (m) { return cb(null, m); })\n        .on('exit', function (c) {\n        if (c && !done)\n            cb(new Error('exited with code ' + c), null);\n    });\n    w.postMessage(msg, transfer);\n    w.terminate = function () {\n        done = true;\n        return Worker.prototype.terminate.call(w);\n    };\n    return w;\n} : function (_, __, ___, ____, cb) {\n    setImmediate(function () { return cb(new Error('async operations unsupported - update to Node 12+ (or Node 10-11 with the --experimental-worker CLI flag)'), null); });\n    var NOP = function () { };\n    return {\n        terminate: NOP,\n        postMessage: NOP\n    };\n};\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n    var b = new u16(31);\n    for (var i = 0; i < 31; ++i) {\n        b[i] = start += 1 << eb[i - 1];\n    }\n    // numbers here are at max 18 bits\n    var r = new u32(b[30]);\n    for (var i = 1; i < 30; ++i) {\n        for (var j = b[i]; j < b[i + 1]; ++j) {\n            r[j] = ((j - b[i]) << 5) | i;\n        }\n    }\n    return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n    // reverse table algorithm from SO\n    var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n    x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n    x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n    rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n    var s = cd.length;\n    // index\n    var i = 0;\n    // u16 \"map\": index -> # of codes with bit length = index\n    var l = new u16(mb);\n    // length of cd must be 288 (total # of codes)\n    for (; i < s; ++i)\n        ++l[cd[i] - 1];\n    // u16 \"map\": index -> minimum code for bit length = index\n    var le = new u16(mb);\n    for (i = 0; i < mb; ++i) {\n        le[i] = (le[i - 1] + l[i - 1]) << 1;\n    }\n    var co;\n    if (r) {\n        // u16 \"map\": index -> number of actual bits, symbol for code\n        co = new u16(1 << mb);\n        // bits to remove for reverser\n        var rvb = 15 - mb;\n        for (i = 0; i < s; ++i) {\n            // ignore 0 lengths\n            if (cd[i]) {\n                // num encoding both symbol and bits read\n                var sv = (i << 4) | cd[i];\n                // free bits\n                var r_1 = mb - cd[i];\n                // start value\n                var v = le[cd[i] - 1]++ << r_1;\n                // m is end value\n                for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n                    // every 16 bit value starting with the code yields the same result\n                    co[rev[v] >>> rvb] = sv;\n                }\n            }\n        }\n    }\n    else {\n        co = new u16(s);\n        for (i = 0; i < s; ++i)\n            co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n    }\n    return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n    flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n    flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n    flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n    flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n    fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n    var m = a[0];\n    for (var i = 1; i < a.length; ++i) {\n        if (a[i] > m)\n            m = a[i];\n    }\n    return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n    var o = (p / 8) >> 0;\n    return ((d[o] | (d[o + 1] << 8)) >>> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n    var o = (p / 8) >> 0;\n    return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >>> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p / 8) >> 0) + (p & 7 && 1); };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n    if (s == null || s < 0)\n        s = 0;\n    if (e == null || e > v.length)\n        e = v.length;\n    // can't use .constructor in case user-supplied\n    var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n    n.set(v.subarray(s, e));\n    return n;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n    // source length\n    var sl = dat.length;\n    // have to estimate size\n    var noBuf = !buf || st;\n    // no state\n    var noSt = !st || st.i;\n    if (!st)\n        st = {};\n    // Assumes roughly 33% compression ratio average\n    if (!buf)\n        buf = new u8(sl * 3);\n    // ensure buffer can fit at least l elements\n    var cbuf = function (l) {\n        var bl = buf.length;\n        // need to increase size to fit\n        if (l > bl) {\n            // Double or set to necessary, whichever is greater\n            var nbuf = new u8(Math.max(bl * 2, l));\n            nbuf.set(buf);\n            buf = nbuf;\n        }\n    };\n    //  last chunk         bitpos           bytes\n    var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n    // total bits\n    var tbts = sl * 8;\n    do {\n        if (!lm) {\n            // BFINAL - this is only 1 when last chunk is next\n            st.f = final = bits(dat, pos, 1);\n            // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n            var type = bits(dat, pos + 1, 3);\n            pos += 3;\n            if (!type) {\n                // go to end of byte boundary\n                var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n                if (t > sl) {\n                    if (noSt)\n                        throw 'unexpected EOF';\n                    break;\n                }\n                // ensure size\n                if (noBuf)\n                    cbuf(bt + l);\n                // Copy over uncompressed data\n                buf.set(dat.subarray(s, t), bt);\n                // Get new bitpos, update byte count\n                st.b = bt += l, st.p = pos = t * 8;\n                continue;\n            }\n            else if (type == 1)\n                lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n            else if (type == 2) {\n                //  literal                            lengths\n                var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n                var tl = hLit + bits(dat, pos + 5, 31) + 1;\n                pos += 14;\n                // length+distance tree\n                var ldt = new u8(tl);\n                // code length tree\n                var clt = new u8(19);\n                for (var i = 0; i < hcLen; ++i) {\n                    // use index map to get real code\n                    clt[clim[i]] = bits(dat, pos + i * 3, 7);\n                }\n                pos += hcLen * 3;\n                // code lengths bits\n                var clb = max(clt), clbmsk = (1 << clb) - 1;\n                if (!noSt && pos + tl * (clb + 7) > tbts)\n                    break;\n                // code lengths map\n                var clm = hMap(clt, clb, 1);\n                for (var i = 0; i < tl;) {\n                    var r = clm[bits(dat, pos, clbmsk)];\n                    // bits read\n                    pos += r & 15;\n                    // symbol\n                    var s = r >>> 4;\n                    // code length to copy\n                    if (s < 16) {\n                        ldt[i++] = s;\n                    }\n                    else {\n                        //  copy   count\n                        var c = 0, n = 0;\n                        if (s == 16)\n                            n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n                        else if (s == 17)\n                            n = 3 + bits(dat, pos, 7), pos += 3;\n                        else if (s == 18)\n                            n = 11 + bits(dat, pos, 127), pos += 7;\n                        while (n--)\n                            ldt[i++] = c;\n                    }\n                }\n                //    length tree                 distance tree\n                var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n                // max length bits\n                lbt = max(lt);\n                // max dist bits\n                dbt = max(dt);\n                lm = hMap(lt, lbt, 1);\n                dm = hMap(dt, dbt, 1);\n            }\n            else\n                throw 'invalid block type';\n            if (pos > tbts)\n                throw 'unexpected EOF';\n        }\n        // Make sure the buffer can hold this + the largest possible addition\n        // Maximum chunk size (practically, theoretically infinite) is 2^17;\n        if (noBuf)\n            cbuf(bt + 131072);\n        var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n        var mxa = lbt + dbt + 18;\n        while (noSt || pos + mxa < tbts) {\n            // bits read, code\n            var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n            pos += c & 15;\n            if (pos > tbts)\n                throw 'unexpected EOF';\n            if (!c)\n                throw 'invalid length/literal';\n            if (sym < 256)\n                buf[bt++] = sym;\n            else if (sym == 256) {\n                lm = null;\n                break;\n            }\n            else {\n                var add = sym - 254;\n                // no extra bits needed if less\n                if (sym > 264) {\n                    // index\n                    var i = sym - 257, b = fleb[i];\n                    add = bits(dat, pos, (1 << b) - 1) + fl[i];\n                    pos += b;\n                }\n                // dist\n                var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n                if (!d)\n                    throw 'invalid distance';\n                pos += d & 15;\n                var dt = fd[dsym];\n                if (dsym > 3) {\n                    var b = fdeb[dsym];\n                    dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n                }\n                if (pos > tbts)\n                    throw 'unexpected EOF';\n                if (noBuf)\n                    cbuf(bt + 131072);\n                var end = bt + add;\n                for (; bt < end; bt += 4) {\n                    buf[bt] = buf[bt - dt];\n                    buf[bt + 1] = buf[bt + 1 - dt];\n                    buf[bt + 2] = buf[bt + 2 - dt];\n                    buf[bt + 3] = buf[bt + 3 - dt];\n                }\n                bt = end;\n            }\n        }\n        st.l = lm, st.p = pos, st.b = bt;\n        if (lm)\n            final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n    } while (!final);\n    return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) >> 0;\n    d[o] |= v;\n    d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) >> 0;\n    d[o] |= v;\n    d[o + 1] |= v >>> 8;\n    d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n    // Need extra info to make a tree\n    var t = [];\n    for (var i = 0; i < d.length; ++i) {\n        if (d[i])\n            t.push({ s: i, f: d[i] });\n    }\n    var s = t.length;\n    var t2 = t.slice();\n    if (!s)\n        return [new u8(0), 0];\n    if (s == 1) {\n        var v = new u8(t[0].s + 1);\n        v[t[0].s] = 1;\n        return [v, 1];\n    }\n    t.sort(function (a, b) { return a.f - b.f; });\n    // after i2 reaches last ind, will be stopped\n    // freq must be greater than largest possible number of symbols\n    t.push({ s: -1, f: 25001 });\n    var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n    t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n    // efficient algorithm from UZIP.js\n    // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n    // symbols that combined have high freq, will start processing i2 (high-freq,\n    // non-composite) symbols instead\n    // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n    while (i1 != s - 1) {\n        l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n        r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n        t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n    }\n    var maxSym = t2[0].s;\n    for (var i = 1; i < s; ++i) {\n        if (t2[i].s > maxSym)\n            maxSym = t2[i].s;\n    }\n    // code lengths\n    var tr = new u16(maxSym + 1);\n    // max bits in tree\n    var mbt = ln(t[i1 - 1], tr, 0);\n    if (mbt > mb) {\n        // more algorithms from UZIP.js\n        // TODO: find out how this code works (debt)\n        //  ind    debt\n        var i = 0, dt = 0;\n        //    left            cost\n        var lft = mbt - mb, cst = 1 << lft;\n        t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n        for (; i < s; ++i) {\n            var i2_1 = t2[i].s;\n            if (tr[i2_1] > mb) {\n                dt += cst - (1 << (mbt - tr[i2_1]));\n                tr[i2_1] = mb;\n            }\n            else\n                break;\n        }\n        dt >>>= lft;\n        while (dt > 0) {\n            var i2_2 = t2[i].s;\n            if (tr[i2_2] < mb)\n                dt -= 1 << (mb - tr[i2_2]++ - 1);\n            else\n                ++i;\n        }\n        for (; i >= 0 && dt; --i) {\n            var i2_3 = t2[i].s;\n            if (tr[i2_3] == mb) {\n                --tr[i2_3];\n                ++dt;\n            }\n        }\n        mbt = mb;\n    }\n    return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n    return n.s == -1\n        ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n        : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n    var s = c.length;\n    // Note that the semicolon was intentional\n    while (s && !c[--s])\n        ;\n    var cl = new u16(++s);\n    //  ind      num         streak\n    var cli = 0, cln = c[0], cls = 1;\n    var w = function (v) { cl[cli++] = v; };\n    for (var i = 1; i <= s; ++i) {\n        if (c[i] == cln && i != s)\n            ++cls;\n        else {\n            if (!cln && cls > 2) {\n                for (; cls > 138; cls -= 138)\n                    w(32754);\n                if (cls > 2) {\n                    w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n                    cls = 0;\n                }\n            }\n            else if (cls > 3) {\n                w(cln), --cls;\n                for (; cls > 6; cls -= 6)\n                    w(8304);\n                if (cls > 2)\n                    w(((cls - 3) << 5) | 8208), cls = 0;\n            }\n            while (cls--)\n                w(cln);\n            cls = 1;\n            cln = c[i];\n        }\n    }\n    return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n    var l = 0;\n    for (var i = 0; i < cl.length; ++i)\n        l += cf[i] * cl[i];\n    return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n    // no need to write 00 as type: TypedArray defaults to 0\n    var s = dat.length;\n    var o = shft(pos + 2);\n    out[o] = s & 255;\n    out[o + 1] = s >>> 8;\n    out[o + 2] = out[o] ^ 255;\n    out[o + 3] = out[o + 1] ^ 255;\n    for (var i = 0; i < s; ++i)\n        out[o + i + 4] = dat[i];\n    return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n    wbits(out, p++, final);\n    ++lf[256];\n    var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n    var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n    var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n    var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n    var lcfreq = new u16(19);\n    for (var i = 0; i < lclt.length; ++i)\n        lcfreq[lclt[i] & 31]++;\n    for (var i = 0; i < lcdt.length; ++i)\n        lcfreq[lcdt[i] & 31]++;\n    var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n    var nlcc = 19;\n    for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n        ;\n    var flen = (bl + 5) << 3;\n    var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n    var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n    if (flen <= ftlen && flen <= dtlen)\n        return wfblk(out, p, dat.subarray(bs, bs + bl));\n    var lm, ll, dm, dl;\n    wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n    if (dtlen < ftlen) {\n        lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n        var llm = hMap(lct, mlcb, 0);\n        wbits(out, p, nlc - 257);\n        wbits(out, p + 5, ndc - 1);\n        wbits(out, p + 10, nlcc - 4);\n        p += 14;\n        for (var i = 0; i < nlcc; ++i)\n            wbits(out, p + 3 * i, lct[clim[i]]);\n        p += 3 * nlcc;\n        var lcts = [lclt, lcdt];\n        for (var it = 0; it < 2; ++it) {\n            var clct = lcts[it];\n            for (var i = 0; i < clct.length; ++i) {\n                var len = clct[i] & 31;\n                wbits(out, p, llm[len]), p += lct[len];\n                if (len > 15)\n                    wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n            }\n        }\n    }\n    else {\n        lm = flm, ll = flt, dm = fdm, dl = fdt;\n    }\n    for (var i = 0; i < li; ++i) {\n        if (syms[i] > 255) {\n            var len = (syms[i] >>> 18) & 31;\n            wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n            if (len > 7)\n                wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n            var dst = syms[i] & 31;\n            wbits16(out, p, dm[dst]), p += dl[dst];\n            if (dst > 3)\n                wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n        }\n        else {\n            wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n        }\n    }\n    wbits16(out, p, lm[256]);\n    return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n    var s = dat.length;\n    var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7000)) + post);\n    // writing to this writes to the output buffer\n    var w = o.subarray(pre, o.length - post);\n    var pos = 0;\n    if (!lvl || s < 8) {\n        for (var i = 0; i <= s; i += 65535) {\n            // end\n            var e = i + 65535;\n            if (e < s) {\n                // write full block\n                pos = wfblk(w, pos, dat.subarray(i, e));\n            }\n            else {\n                // write final block\n                w[i] = lst;\n                pos = wfblk(w, pos, dat.subarray(i, s));\n            }\n        }\n    }\n    else {\n        var opt = deo[lvl - 1];\n        var n = opt >>> 13, c = opt & 8191;\n        var msk_1 = (1 << plvl) - 1;\n        //    prev 2-byte val map    curr 2-byte val map\n        var prev = new u16(32768), head = new u16(msk_1 + 1);\n        var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n        var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n        // 24576 is an arbitrary number of maximum symbols per block\n        // 424 buffer for last block\n        var syms = new u32(25000);\n        // length/literal freq   distance freq\n        var lf = new u16(288), df = new u16(32);\n        //  l/lcnt  exbits  index  l/lind  waitdx  bitpos\n        var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n        for (; i < s; ++i) {\n            // hash value\n            var hv = hsh(i);\n            // index mod 32768\n            var imod = i & 32767;\n            // previous index with this value\n            var pimod = head[hv];\n            prev[imod] = pimod;\n            head[hv] = imod;\n            // We always should modify head and prev, but only add symbols if\n            // this data is not yet processed (\"wait\" for wait index)\n            if (wi <= i) {\n                // bytes remaining\n                var rem = s - i;\n                if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n                    pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n                    li = lc_1 = eb = 0, bs = i;\n                    for (var j = 0; j < 286; ++j)\n                        lf[j] = 0;\n                    for (var j = 0; j < 30; ++j)\n                        df[j] = 0;\n                }\n                //  len    dist   chain\n                var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n                if (rem > 2 && hv == hsh(i - dif)) {\n                    var maxn = Math.min(n, rem) - 1;\n                    var maxd = Math.min(32767, i);\n                    // max possible length\n                    // not capped at dif because decompressors implement \"rolling\" index population\n                    var ml = Math.min(258, rem);\n                    while (dif <= maxd && --ch_1 && imod != pimod) {\n                        if (dat[i + l] == dat[i + l - dif]) {\n                            var nl = 0;\n                            for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n                                ;\n                            if (nl > l) {\n                                l = nl, d = dif;\n                                // break out early when we reach \"nice\" (we are satisfied enough)\n                                if (nl > maxn)\n                                    break;\n                                // now, find the rarest 2-byte sequence within this\n                                // length of literals and search for that instead.\n                                // Much faster than just using the start\n                                var mmd = Math.min(dif, nl - 2);\n                                var md = 0;\n                                for (var j = 0; j < mmd; ++j) {\n                                    var ti = (i - dif + j + 32768) & 32767;\n                                    var pti = prev[ti];\n                                    var cd = (ti - pti + 32768) & 32767;\n                                    if (cd > md)\n                                        md = cd, pimod = ti;\n                                }\n                            }\n                        }\n                        // check the previous match\n                        imod = pimod, pimod = prev[imod];\n                        dif += (imod - pimod + 32768) & 32767;\n                    }\n                }\n                // d will be nonzero only when a match was found\n                if (d) {\n                    // store both dist and len data in one Uint32\n                    // Make sure this is recognized as a len/dist with 28th bit (2^28)\n                    syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n                    var lin = revfl[l] & 31, din = revfd[d] & 31;\n                    eb += fleb[lin] + fdeb[din];\n                    ++lf[257 + lin];\n                    ++df[din];\n                    wi = i + l;\n                    ++lc_1;\n                }\n                else {\n                    syms[li++] = dat[i];\n                    ++lf[dat[i]];\n                }\n            }\n        }\n        pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n        // this is the easiest way to avoid needing to maintain state\n        if (!lst)\n            pos = wfblk(w, pos, et);\n    }\n    return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n    var t = new u32(256);\n    for (var i = 0; i < 256; ++i) {\n        var c = i, k = 9;\n        while (--k)\n            c = ((c & 1) && 0xEDB88320) ^ (c >>> 1);\n        t[i] = c;\n    }\n    return t;\n})();\n// CRC32\nvar crc = function () {\n    var c = 0xFFFFFFFF;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var cr = c;\n            for (var i = 0; i < d.length; ++i)\n                cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n            c = cr;\n        },\n        d: function () { return c ^ 0xFFFFFFFF; }\n    };\n};\n// Alder32\nvar adler = function () {\n    var a = 1, b = 0;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var n = a, m = b;\n            var l = d.length;\n            for (var i = 0; i != l;) {\n                var e = Math.min(i + 5552, l);\n                for (; i < e; ++i)\n                    n += d[i], m += n;\n                n %= 65521, m %= 65521;\n            }\n            a = n, b = m;\n        },\n        d: function () { return ((a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8)) + ((a & 255) << 23) * 2; }\n    };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n    return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n    var o = {};\n    for (var k in a)\n        o[k] = a[k];\n    for (var k in b)\n        o[k] = b[k];\n    return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n    var dt = fn();\n    var st = fn.toString();\n    var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/ /g, '').split(',');\n    for (var i = 0; i < dt.length; ++i) {\n        var v = dt[i], k = ks[i];\n        if (typeof v == 'function') {\n            fnStr += ';' + k + '=';\n            var st_1 = v.toString();\n            if (v.prototype) {\n                // for global objects\n                if (st_1.indexOf('[native code]') != -1) {\n                    var spInd = st_1.indexOf(' ', 8) + 1;\n                    fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n                }\n                else {\n                    fnStr += st_1;\n                    for (var t in v.prototype)\n                        fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n                }\n            }\n            else\n                fnStr += st_1;\n        }\n        else\n            td[k] = v;\n    }\n    return [fnStr, td];\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n    var tl = [];\n    for (var k in v) {\n        if (v[k] instanceof u8 || v[k] instanceof u16 || v[k] instanceof u32)\n            tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n    }\n    return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n    var _a;\n    if (!ch[id]) {\n        var fnStr = '', td_1 = {}, m = fns.length - 1;\n        for (var i = 0; i < m; ++i)\n            _a = wcln(fns[i], fnStr, td_1), fnStr = _a[0], td_1 = _a[1];\n        ch[id] = wcln(fns[m], fnStr, td_1);\n    }\n    var td = mrg({}, ch[id][1]);\n    return wk(ch[id][0] + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, u32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, hMap, max, bits, bits16, shft, slc, inflt, inflateSync, pbf, gu8]; };\nvar bDflt = function () { return [u8, u16, u32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zlv]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get u8\nvar gu8 = function (o) { return o && o.size && new u8(o.size); };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n    var w = wrkr(fns, init, id, function (err, dat) {\n        w.terminate();\n        cb(err, dat);\n    });\n    if (!opts.consume)\n        dat = new u8(dat);\n    w.postMessage([dat, opts], [dat.buffer]);\n    return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n    strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n    return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id) {\n    var t;\n    var w = wrkr(fns, init, id, function (err, dat) {\n        if (err)\n            w.terminate(), strm.ondata.call(strm, err);\n        else {\n            if (dat[1])\n                w.terminate();\n            strm.ondata.call(strm, err, dat[0], dat[1]);\n        }\n    });\n    w.postMessage(opts);\n    strm.push = function (d, f) {\n        if (t)\n            throw 'stream finished';\n        if (!strm.ondata)\n            throw 'no stream handler';\n        w.postMessage([d, t = f], [d.buffer]);\n    };\n    strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16)) + (d[b + 3] << 23) * 2; };\n// write bytes\nvar wbytes = function (d, b, v) {\n    for (; v; ++b)\n        d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n    var fn = o.filename;\n    c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n    if (o.mtime != 0)\n        wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n    if (fn) {\n        c[3] = 8;\n        for (var i = 0; i <= fn.length; ++i)\n            c[i + 10] = fn.charCodeAt(i);\n    }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n    if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n        throw 'invalid gzip data';\n    var flg = d[3];\n    var st = 10;\n    if (flg & 4)\n        st += d[10] | (d[11] << 8) + 2;\n    for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n        ;\n    return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n    var l = d.length;\n    return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) + (2 * (d[l - 1] << 23));\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + ((o.filename && (o.filename.length + 1)) || 0); };\n// zlib header\nvar zlh = function (c, o) {\n    var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n    c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n    if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n        throw 'invalid zlib data';\n    if (d[1] & 32)\n        throw 'invalid zlib data: preset dictionaries not supported';\n};\nfunction AsyncCmpStrm(opts, cb) {\n    if (!cb && typeof opts == 'function')\n        cb = opts, opts = {};\n    this.ondata = cb;\n    return opts;\n}\n// zlib footer: -4 to -0 is Adler32\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n    function Deflate(opts, cb) {\n        if (!cb && typeof opts == 'function')\n            cb = opts, opts = {};\n        this.ondata = cb;\n        this.o = opts || {};\n    }\n    Deflate.prototype.p = function (c, f) {\n        this.ondata(dopt(c, this.o, 0, 0, !f), f);\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Deflate.prototype.push = function (chunk, final) {\n        if (this.d)\n            throw 'stream finished';\n        if (!this.ondata)\n            throw 'no stream handler';\n        this.d = final;\n        this.p(chunk, final || false);\n    };\n    return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n    function AsyncDeflate(opts, cb) {\n        astrmify([\n            bDflt,\n            function () { return [astrm, Deflate]; }\n        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n            var strm = new Deflate(ev.data);\n            onmessage = astrm(strm);\n        }, 6);\n    }\n    return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return cbify(data, opts, [\n        bDflt,\n    ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n    if (opts === void 0) { opts = {}; }\n    return dopt(data, opts, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates an inflation stream\n     * @param cb The callback to call whenever data is inflated\n     */\n    function Inflate(cb) {\n        this.s = {};\n        this.p = new u8(0);\n        this.ondata = cb;\n    }\n    Inflate.prototype.e = function (c) {\n        if (this.d)\n            throw 'stream finished';\n        if (!this.ondata)\n            throw 'no stream handler';\n        var l = this.p.length;\n        var n = new u8(l + c.length);\n        n.set(this.p), n.set(c, l), this.p = n;\n    };\n    Inflate.prototype.c = function (final) {\n        this.d = this.s.i = final || false;\n        var bts = this.s.b;\n        var dt = inflt(this.p, this.o, this.s);\n        this.ondata(slc(dt, bts, this.s.b), this.d);\n        this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n        this.p = slc(this.p, (this.s.p / 8) >> 0), this.s.p &= 7;\n    };\n    /**\n     * Pushes a chunk to be inflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the final chunk\n     */\n    Inflate.prototype.push = function (chunk, final) {\n        this.e(chunk), this.c(final);\n    };\n    return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous inflation stream\n     * @param cb The callback to call whenever data is deflated\n     */\n    function AsyncInflate(cb) {\n        this.ondata = cb;\n        astrmify([\n            bInflt,\n            function () { return [astrm, Inflate]; }\n        ], this, 0, function () {\n            var strm = new Inflate();\n            onmessage = astrm(strm);\n        }, 7);\n    }\n    return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return cbify(data, opts, [\n        bInflt\n    ], function (ev) { return pbf(inflateSync(ev.data[0], gu8(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, out) {\n    return inflt(data, out);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n    function Gzip(opts, cb) {\n        this.c = crc();\n        this.l = 0;\n        this.v = 1;\n        Deflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be GZIPped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Gzip.prototype.push = function (chunk, final) {\n        Deflate.prototype.push.call(this, chunk, final);\n    };\n    Gzip.prototype.p = function (c, f) {\n        this.c.p(c);\n        this.l += c.length;\n        var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, !f);\n        if (this.v)\n            gzh(raw, this.o), this.v = 0;\n        if (f)\n            wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n        this.ondata(raw, f);\n    };\n    return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n    function AsyncGzip(opts, cb) {\n        astrmify([\n            bDflt,\n            gze,\n            function () { return [astrm, Deflate, Gzip]; }\n        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n            var strm = new Gzip(ev.data);\n            onmessage = astrm(strm);\n        }, 8);\n    }\n    return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return cbify(data, opts, [\n        bDflt,\n        gze,\n        function () { return [gzipSync]; }\n    ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n    if (opts === void 0) { opts = {}; }\n    var c = crc(), l = data.length;\n    c.p(data);\n    var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n    return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n    /**\n     * Creates a GUNZIP stream\n     * @param cb The callback to call whenever data is inflated\n     */\n    function Gunzip(cb) {\n        this.v = 1;\n        Inflate.call(this, cb);\n    }\n    /**\n     * Pushes a chunk to be GUNZIPped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Gunzip.prototype.push = function (chunk, final) {\n        Inflate.prototype.e.call(this, chunk);\n        if (this.v) {\n            var s = gzs(this.p);\n            if (s >= this.p.length && !final)\n                return;\n            this.p = this.p.subarray(s), this.v = 0;\n        }\n        if (final) {\n            if (this.p.length < 8)\n                throw 'invalid gzip stream';\n            this.p = this.p.subarray(0, -8);\n        }\n        // necessary to prevent TS from using the closure value\n        // This allows for workerization to function correctly\n        Inflate.prototype.c.call(this, final);\n    };\n    return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous GUNZIP stream\n     * @param cb The callback to call whenever data is deflated\n     */\n    function AsyncGunzip(cb) {\n        this.ondata = cb;\n        astrmify([\n            bInflt,\n            guze,\n            function () { return [astrm, Inflate, Gunzip]; }\n        ], this, 0, function () {\n            var strm = new Gunzip();\n            onmessage = astrm(strm);\n        }, 9);\n    }\n    return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return cbify(data, opts, [\n        bInflt,\n        guze,\n        function () { return [gunzipSync]; }\n    ], function (ev) { return pbf(gunzipSync(ev.data[0])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, out) {\n    return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n    function Zlib(opts, cb) {\n        this.c = adler();\n        this.v = 1;\n        Deflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be zlibbed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Zlib.prototype.push = function (chunk, final) {\n        Deflate.prototype.push.call(this, chunk, final);\n    };\n    Zlib.prototype.p = function (c, f) {\n        this.c.p(c);\n        var raw = dopt(c, this.o, this.v && 2, f && 4, !f);\n        if (this.v)\n            zlh(raw, this.o), this.v = 0;\n        if (f)\n            wbytes(raw, raw.length - 4, this.c.d());\n        this.ondata(raw, f);\n    };\n    return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n    function AsyncZlib(opts, cb) {\n        astrmify([\n            bDflt,\n            zle,\n            function () { return [astrm, Deflate, Zlib]; }\n        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n            var strm = new Zlib(ev.data);\n            onmessage = astrm(strm);\n        }, 10);\n    }\n    return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return cbify(data, opts, [\n        bDflt,\n        zle,\n        function () { return [zlibSync]; }\n    ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n    if (opts === void 0) { opts = {}; }\n    var a = adler();\n    a.p(data);\n    var d = dopt(data, opts, 2, 4);\n    return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n    /**\n     * Creates a Zlib decompression stream\n     * @param cb The callback to call whenever data is inflated\n     */\n    function Unzlib(cb) {\n        this.v = 1;\n        Inflate.call(this, cb);\n    }\n    /**\n     * Pushes a chunk to be unzlibbed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Unzlib.prototype.push = function (chunk, final) {\n        Inflate.prototype.e.call(this, chunk);\n        if (this.v) {\n            if (this.p.length < 2 && !final)\n                return;\n            this.p = this.p.subarray(2), this.v = 0;\n        }\n        if (final) {\n            if (this.p.length < 4)\n                throw 'invalid zlib stream';\n            this.p = this.p.subarray(0, -4);\n        }\n        // necessary to prevent TS from using the closure value\n        // This allows for workerization to function correctly\n        Inflate.prototype.c.call(this, final);\n    };\n    return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous Zlib decompression stream\n     * @param cb The callback to call whenever data is deflated\n     */\n    function AsyncUnzlib(cb) {\n        this.ondata = cb;\n        astrmify([\n            bInflt,\n            zule,\n            function () { return [astrm, Inflate, Unzlib]; }\n        ], this, 0, function () {\n            var strm = new Unzlib();\n            onmessage = astrm(strm);\n        }, 11);\n    }\n    return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return cbify(data, opts, [\n        bInflt,\n        zule,\n        function () { return [unzlibSync]; }\n    ], function (ev) { return pbf(unzlibSync(ev.data[0], gu8(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, out) {\n    return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n    /**\n     * Creates a decompression stream\n     * @param cb The callback to call whenever data is decompressed\n     */\n    function Decompress(cb) {\n        this.G = Gunzip;\n        this.I = Inflate;\n        this.Z = Unzlib;\n        this.ondata = cb;\n    }\n    /**\n     * Pushes a chunk to be decompressed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Decompress.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            throw 'no stream handler';\n        if (!this.s) {\n            if (this.p && this.p.length) {\n                var n = new u8(this.p.length + chunk.length);\n                n.set(this.p), n.set(chunk, this.p.length);\n            }\n            else\n                this.p = chunk;\n            if (this.p.length > 2) {\n                var _this_1 = this;\n                var cb = function () { _this_1.ondata.apply(_this_1, arguments); };\n                this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n                    ? new this.G(cb)\n                    : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n                        ? new this.I(cb)\n                        : new this.Z(cb);\n                this.s.push(this.p, final);\n                this.p = null;\n            }\n        }\n        else\n            this.s.push(chunk, final);\n    };\n    return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n    /**\n   * Creates an asynchronous decompression stream\n   * @param cb The callback to call whenever data is decompressed\n   */\n    function AsyncDecompress(cb) {\n        this.G = AsyncGunzip;\n        this.I = AsyncInflate;\n        this.Z = AsyncUnzlib;\n        this.ondata = cb;\n    }\n    /**\n     * Pushes a chunk to be decompressed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    AsyncDecompress.prototype.push = function (chunk, final) {\n        Decompress.prototype.push.call(this, chunk, final);\n    };\n    return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n        ? gunzip(data, opts, cb)\n        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n            ? inflate(data, opts, cb)\n            : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, out) {\n    return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n        ? gunzipSync(data, out)\n        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n            ? inflateSync(data, out)\n            : unzlibSync(data, out);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n    for (var k in d) {\n        var val = d[k], n = p + k;\n        if (val instanceof u8)\n            t[n] = [val, o];\n        else if (Array.isArray(val))\n            t[n] = [val[0], mrg(o, val[1])];\n        else\n            fltn(val, n + '/', t, o);\n    }\n};\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n    var l = str.length;\n    if (!latin1 && typeof TextEncoder != 'undefined')\n        return new TextEncoder().encode(str);\n    var ar = new u8(str.length + (str.length >>> 1));\n    var ai = 0;\n    var w = function (v) { ar[ai++] = v; };\n    for (var i = 0; i < l; ++i) {\n        if (ai + 5 > ar.length) {\n            var n = new u8(ai + 8 + ((l - i) << 1));\n            n.set(ar);\n            ar = n;\n        }\n        var c = str.charCodeAt(i);\n        if (c < 128 || latin1)\n            w(c);\n        else if (c < 2048)\n            w(192 | (c >>> 6)), w(128 | (c & 63));\n        else if (c > 55295 && c < 57344)\n            c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n                w(240 | (c >>> 18)), w(128 | ((c >>> 12) & 63)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n        else\n            w(224 | (c >>> 12)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n    }\n    return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n    var r = '';\n    if (!latin1 && typeof TextDecoder != 'undefined')\n        return new TextDecoder().decode(dat);\n    for (var i = 0; i < dat.length;) {\n        var c = dat[i++];\n        if (c < 128 || latin1)\n            r += String.fromCharCode(c);\n        else if (c < 224)\n            r += String.fromCharCode((c & 31) << 6 | (dat[i++] & 63));\n        else if (c < 240)\n            r += String.fromCharCode((c & 15) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63));\n        else\n            c = ((c & 15) << 18 | (dat[i++] & 63) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63)) - 65536,\n                r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n    }\n    return r;\n}\n;\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n    var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;\n    var _a = z ? z64e(d, es) : [b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n    return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n    for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n        ;\n    return [b4(d, b + 12), b4(d, b + 4), b4(d, b + 20)];\n};\n// write zip header\nvar wzh = function (d, b, c, cmp, su, fn, u, o, ce, t) {\n    var fl = fn.length, l = cmp.length;\n    wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n    if (ce != null)\n        d[b] = 20, b += 2;\n    d[b] = 20, b += 2; // spec compliance? what's that?\n    d[b++] = (t == 8 && (o.level == 1 ? 6 : o.level < 6 ? 4 : o.level == 9 ? 2 : 0)), d[b++] = u && 8;\n    d[b] = t, b += 2;\n    var dt = new Date(o.mtime || Date.now()), y = dt.getFullYear() - 1980;\n    if (y < 0 || y > 119)\n        throw 'date not in range 1980-2099';\n    wbytes(d, b, ((y << 24) * 2) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1));\n    b += 4;\n    wbytes(d, b, c);\n    wbytes(d, b + 4, l);\n    wbytes(d, b + 8, su);\n    wbytes(d, b + 12, fl), b += 16; // skip extra field, comment\n    if (ce != null)\n        wbytes(d, b += 10, ce), b += 4;\n    d.set(fn, b);\n    b += fl;\n    if (ce == null)\n        d.set(cmp, b);\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n    wbytes(o, b, 0x6054B50); // skip disk\n    wbytes(o, b + 8, c);\n    wbytes(o, b + 10, c);\n    wbytes(o, b + 12, d);\n    wbytes(o, b + 16, e);\n};\nexport function zip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        throw 'no callback';\n    var r = {};\n    fltn(data, '', r, opts);\n    var k = Object.keys(r);\n    var lft = k.length, o = 0, tot = 0;\n    var slft = lft, files = new Array(lft);\n    var term = [];\n    var tAll = function () {\n        for (var i = 0; i < term.length; ++i)\n            term[i]();\n    };\n    var cbf = function () {\n        var out = new u8(tot + 22), oe = o, cdl = tot - o;\n        tot = 0;\n        for (var i = 0; i < slft; ++i) {\n            var f = files[i];\n            try {\n                wzh(out, tot, f.c, f.d, f.m, f.n, f.u, f.p, null, f.t);\n                wzh(out, o, f.c, f.d, f.m, f.n, f.u, f.p, tot, f.t), o += 46 + f.n.length, tot += 30 + f.n.length + f.d.length;\n            }\n            catch (e) {\n                return cb(e, null);\n            }\n        }\n        wzf(out, o, files.length, cdl, oe);\n        cb(null, out);\n    };\n    if (!lft)\n        cbf();\n    var _loop_1 = function (i) {\n        var fn = k[i];\n        var _a = r[fn], file = _a[0], p = _a[1];\n        var c = crc(), m = file.length;\n        c.p(file);\n        var n = strToU8(fn), s = n.length;\n        var t = p.level == 0 ? 0 : 8;\n        var cbl = function (e, d) {\n            if (e) {\n                tAll();\n                cb(e, null);\n            }\n            else {\n                var l = d.length;\n                files[i] = {\n                    t: t,\n                    d: d,\n                    m: m,\n                    c: c.d(),\n                    u: fn.length != l,\n                    n: n,\n                    p: p\n                };\n                o += 30 + s + l;\n                tot += 76 + 2 * s + l;\n                if (!--lft)\n                    cbf();\n            }\n        };\n        if (n.length > 65535)\n            cbl('filename too long', null);\n        if (!t)\n            cbl(null, file);\n        else if (m < 160000) {\n            try {\n                cbl(null, deflateSync(file, p));\n            }\n            catch (e) {\n                cbl(e, null);\n            }\n        }\n        else\n            term.push(deflate(file, p, cbl));\n    };\n    // Cannot use lft because it can decrease\n    for (var i = 0; i < slft; ++i) {\n        _loop_1(i);\n    }\n    return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n    if (opts === void 0) { opts = {}; }\n    var r = {};\n    var files = [];\n    fltn(data, '', r, opts);\n    var o = 0;\n    var tot = 0;\n    for (var fn in r) {\n        var _a = r[fn], file = _a[0], p = _a[1];\n        var t = p.level == 0 ? 0 : 8;\n        var n = strToU8(fn), s = n.length;\n        if (n.length > 65535)\n            throw 'filename too long';\n        var d = t ? deflateSync(file, p) : file, l = d.length;\n        var c = crc();\n        c.p(file);\n        files.push({\n            t: t,\n            d: d,\n            m: file.length,\n            c: c.d(),\n            u: fn.length != s,\n            n: n,\n            o: o,\n            p: p\n        });\n        o += 30 + s + l;\n        tot += 76 + 2 * s + l;\n    }\n    var out = new u8(tot + 22), oe = o, cdl = tot - o;\n    for (var i = 0; i < files.length; ++i) {\n        var f = files[i];\n        wzh(out, f.o, f.c, f.d, f.m, f.n, f.u, f.p, null, f.t);\n        wzh(out, o, f.c, f.d, f.m, f.n, f.u, f.p, f.o, f.t), o += 46 + f.n.length;\n    }\n    wzf(out, o, files.length, cdl, oe);\n    return out;\n}\n/**\n * Asynchronously decompresses a ZIP archive\n * @param data The raw compressed ZIP file\n * @param cb The callback to call with the decompressed files\n * @returns A function that can be used to immediately terminate the unzipping\n */\nexport function unzip(data, cb) {\n    if (typeof cb != 'function')\n        throw 'no callback';\n    var term = [];\n    var tAll = function () {\n        for (var i = 0; i < term.length; ++i)\n            term[i]();\n    };\n    var files = {};\n    var e = data.length - 22;\n    for (; b4(data, e) != 0x6054B50; --e) {\n        if (!e || data.length - e > 65558) {\n            cb('invalid zip file', null);\n            return;\n        }\n    }\n    ;\n    var lft = b2(data, e + 8);\n    if (!lft)\n        cb(null, {});\n    var c = lft;\n    var o = b4(data, e + 16);\n    var z = o == 4294967295;\n    if (z) {\n        e = b4(data, e - 12);\n        if (b4(data, e) != 0x6064B50)\n            throw 'invalid zip file';\n        c = lft = b4(data, e + 32);\n        o = b4(data, e + 48);\n    }\n    var _loop_2 = function (i) {\n        var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n        o = no;\n        var cbl = function (e, d) {\n            if (e) {\n                tAll();\n                cb(e, null);\n            }\n            else {\n                files[fn] = d;\n                if (!--lft)\n                    cb(null, files);\n            }\n        };\n        if (!c_1)\n            cbl(null, slc(data, b, b + sc));\n        else if (c_1 == 8) {\n            var infl = data.subarray(b, b + sc);\n            if (sc < 320000) {\n                try {\n                    cbl(null, inflateSync(infl, new u8(su)));\n                }\n                catch (e) {\n                    cbl(e, null);\n                }\n            }\n            else\n                term.push(inflate(infl, { size: su }, cbl));\n        }\n        else\n            cbl('unknown compression type ' + c_1, null);\n    };\n    for (var i = 0; i < c; ++i) {\n        _loop_2(i);\n    }\n    return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @returns The decompressed files\n */\nexport function unzipSync(data) {\n    var files = {};\n    var e = data.length - 22;\n    for (; b4(data, e) != 0x6054B50; --e) {\n        if (!e || data.length - e > 65558)\n            throw 'invalid zip file';\n    }\n    ;\n    var c = b2(data, e + 8);\n    if (!c)\n        return {};\n    var o = b4(data, e + 16);\n    var z = o == 4294967295;\n    if (z) {\n        e = b4(data, e - 12);\n        if (b4(data, e) != 0x6064B50)\n            throw 'invalid zip file';\n        c = b4(data, e + 32);\n        o = b4(data, e + 48);\n    }\n    for (var i = 0; i < c; ++i) {\n        var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n        o = no;\n        if (!c_2)\n            files[fn] = slc(data, b, b + sc);\n        else if (c_2 == 8)\n            files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su));\n        else\n            throw 'unknown compression type ' + c_2;\n    }\n    return files;\n}\n","/**\n * @license\n * jsPDF filters PlugIn\n * Copyright (c) 2014 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\n\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var ASCII85Encode = function(a) {\n    var b, c, d, e, f, g, h, i, j, k;\n    // eslint-disable-next-line no-control-regex\n    for (\n      !/[^\\x00-\\xFF]/.test(a),\n        b = \"\\x00\\x00\\x00\\x00\".slice(a.length % 4 || 4),\n        a += b,\n        c = [],\n        d = 0,\n        e = a.length;\n      e > d;\n      d += 4\n    )\n      (f =\n        (a.charCodeAt(d) << 24) +\n        (a.charCodeAt(d + 1) << 16) +\n        (a.charCodeAt(d + 2) << 8) +\n        a.charCodeAt(d + 3)),\n        0 !== f\n          ? ((k = f % 85),\n            (f = (f - k) / 85),\n            (j = f % 85),\n            (f = (f - j) / 85),\n            (i = f % 85),\n            (f = (f - i) / 85),\n            (h = f % 85),\n            (f = (f - h) / 85),\n            (g = f % 85),\n            c.push(g + 33, h + 33, i + 33, j + 33, k + 33))\n          : c.push(122);\n    return (\n      (function(a, b) {\n        for (var c = b; c > 0; c--) a.pop();\n      })(c, b.length),\n      String.fromCharCode.apply(String, c) + \"~>\"\n    );\n  };\n\n  var ASCII85Decode = function(a) {\n    var c,\n      d,\n      e,\n      f,\n      g,\n      h = String,\n      l = \"length\",\n      w = 255,\n      x = \"charCodeAt\",\n      y = \"slice\",\n      z = \"replace\";\n    for (\n      \"~>\" === a[y](-2),\n        a = a[y](0, -2)\n          [z](/\\s/g, \"\")\n          [z](\"z\", \"!!!!!\"),\n        c = \"uuuuu\"[y](a[l] % 5 || 5),\n        a += c,\n        e = [],\n        f = 0,\n        g = a[l];\n      g > f;\n      f += 5\n    )\n      (d =\n        52200625 * (a[x](f) - 33) +\n        614125 * (a[x](f + 1) - 33) +\n        7225 * (a[x](f + 2) - 33) +\n        85 * (a[x](f + 3) - 33) +\n        (a[x](f + 4) - 33)),\n        e.push(w & (d >> 24), w & (d >> 16), w & (d >> 8), w & d);\n    return (\n      (function(a, b) {\n        for (var c = b; c > 0; c--) a.pop();\n      })(e, c[l]),\n      h.fromCharCode.apply(h, e)\n    );\n  };\n\n  var ASCIIHexEncode = function(value) {\n    return (\n      value\n        .split(\"\")\n        .map(function(value) {\n          return (\"0\" + value.charCodeAt().toString(16)).slice(-2);\n        })\n        .join(\"\") + \">\"\n    );\n  };\n\n  var ASCIIHexDecode = function(value) {\n    var regexCheckIfHex = new RegExp(/^([0-9A-Fa-f]{2})+$/);\n    value = value.replace(/\\s/g, \"\");\n    if (value.indexOf(\">\") !== -1) {\n      value = value.substr(0, value.indexOf(\">\"));\n    }\n    if (value.length % 2) {\n      value += \"0\";\n    }\n    if (regexCheckIfHex.test(value) === false) {\n      return \"\";\n    }\n    var result = \"\";\n    for (var i = 0; i < value.length; i += 2) {\n      result += String.fromCharCode(\"0x\" + (value[i] + value[i + 1]));\n    }\n    return result;\n  };\n  /*\n  var FlatePredictors = {\n      None: 1,\n      TIFF: 2,\n      PNG_None: 10,\n      PNG_Sub: 11,\n      PNG_Up: 12,\n      PNG_Average: 13,\n      PNG_Paeth: 14,\n      PNG_Optimum: 15\n  };\n  */\n\n  var FlateEncode = function(data) {\n    var arr = new Uint8Array(data.length);\n    var i = data.length;\n    while (i--) {\n      arr[i] = data.charCodeAt(i);\n    }\n    arr = zlibSync(arr);\n    data = arr.reduce(function(data, byte) {\n      return data + String.fromCharCode(byte);\n    }, \"\");\n    return data;\n  };\n\n  jsPDFAPI.processDataByFilters = function(origData, filterChain) {\n    \"use strict\";\n    var i = 0;\n    var data = origData || \"\";\n    var reverseChain = [];\n    filterChain = filterChain || [];\n\n    if (typeof filterChain === \"string\") {\n      filterChain = [filterChain];\n    }\n\n    for (i = 0; i < filterChain.length; i += 1) {\n      switch (filterChain[i]) {\n        case \"ASCII85Decode\":\n        case \"/ASCII85Decode\":\n          data = ASCII85Decode(data);\n          reverseChain.push(\"/ASCII85Encode\");\n          break;\n        case \"ASCII85Encode\":\n        case \"/ASCII85Encode\":\n          data = ASCII85Encode(data);\n          reverseChain.push(\"/ASCII85Decode\");\n          break;\n        case \"ASCIIHexDecode\":\n        case \"/ASCIIHexDecode\":\n          data = ASCIIHexDecode(data);\n          reverseChain.push(\"/ASCIIHexEncode\");\n          break;\n        case \"ASCIIHexEncode\":\n        case \"/ASCIIHexEncode\":\n          data = ASCIIHexEncode(data);\n          reverseChain.push(\"/ASCIIHexDecode\");\n          break;\n        case \"FlateEncode\":\n        case \"/FlateEncode\":\n          data = FlateEncode(data);\n          reverseChain.push(\"/FlateDecode\");\n          break;\n        default:\n          throw new Error(\n            'The filter: \"' + filterChain[i] + '\" is not implemented'\n          );\n      }\n    }\n\n    return { data: data, reverseChain: reverseChain.reverse().join(\" \") };\n  };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF fileloading PlugIn\n * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name fileloading\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * @name loadFile\n   * @function\n   * @param {string} url\n   * @param {boolean} sync\n   * @param {function} callback\n   * @returns {string|undefined} result\n   */\n  jsPDFAPI.loadFile = function(url, sync, callback) {\n    return browserRequest(url, sync, callback);\n\n  };\n\n  /**\n   * @name loadImageFile\n   * @function\n   * @param {string} path\n   * @param {boolean} sync\n   * @param {function} callback\n   */\n  jsPDFAPI.loadImageFile = jsPDFAPI.loadFile;\n\n  function browserRequest(url, sync, callback) {\n    sync = sync === false ? false : true;\n    callback = typeof callback === \"function\" ? callback : function() {};\n    var result = undefined;\n\n    var xhr = function(url, sync, callback) {\n      var request = new XMLHttpRequest();\n      var i = 0;\n\n      var sanitizeUnicode = function(data) {\n        var dataLength = data.length;\n        var charArray = [];\n        var StringFromCharCode = String.fromCharCode;\n\n        //Transform Unicode to ASCII\n        for (i = 0; i < dataLength; i += 1) {\n          charArray.push(StringFromCharCode(data.charCodeAt(i) & 0xff));\n        }\n        return charArray.join(\"\");\n      };\n\n      request.open(\"GET\", url, !sync);\n      // XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]\n      request.overrideMimeType(\"text/plain; charset=x-user-defined\");\n\n      if (sync === false) {\n        request.onload = function() {\n          if (request.status === 200) {\n            callback(sanitizeUnicode(this.responseText));\n          } else {\n            callback(undefined);\n          }\n        };\n      }\n      request.send(null);\n\n      if (sync && request.status === 200) {\n        return sanitizeUnicode(request.responseText);\n      }\n    };\n    try {\n      result = xhr(url, sync, callback);\n      // eslint-disable-next-line no-empty\n    } catch (e) {}\n    return result;\n  }\n\n  function nodeReadFile(url, sync, callback) {\n    sync = sync === false ? false : true;\n    var result = undefined;\n\n    var fs = require(\"fs\");\n    var path = require(\"path\");\n\n    url = path.resolve(url);\n    if (sync) {\n      try {\n        result = fs.readFileSync(url, { encoding: \"latin1\" });\n      } catch (e) {\n        return undefined;\n      }\n    } else {\n      fs.readFile(url, { encoding: \"latin1\" }, function(err, data) {\n        if (!callback) {\n          return;\n        }\n        if (err) {\n          callback(undefined);\n        }\n        callback(data);\n      });\n    }\n\n    return result;\n  }\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2018 Erik Koopmans\n * Released under the MIT License.\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { normalizeFontFace } from \"../libs/fontFace.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF html PlugIn\n *\n * @name html\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  function loadHtml2Canvas() {\n    return (function() {\n      if (globalObject[\"html2canvas\"]) {\n        return Promise.resolve(globalObject[\"html2canvas\"]);\n      }\n\n\n      if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n        return new Promise(function(resolve, reject) {\n          try {\n            resolve(require(\"html2canvas\"));\n          } catch (e) {\n            reject(e);\n          }\n        });\n      }\n      if (typeof define === \"function\" && define.amd) {\n        return new Promise(function(resolve, reject) {\n          try {\n            require([\"html2canvas\"], resolve);\n          } catch (e) {\n            reject(e);\n          }\n        });\n      }\n      return Promise.reject(new Error(\"Could not load html2canvas\"));\n    })()\n      .catch(function(e) {\n        return Promise.reject(new Error(\"Could not load html2canvas: \" + e));\n      })\n      .then(function(html2canvas) {\n        return html2canvas.default ? html2canvas.default : html2canvas;\n      });\n  }\n\n  function loadDomPurify() {\n    return (function() {\n      if (globalObject[\"DOMPurify\"]) {\n        return Promise.resolve(globalObject[\"DOMPurify\"]);\n      }\n\n\n      if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n        return new Promise(function(resolve, reject) {\n          try {\n            resolve(require(\"dompurify\"));\n          } catch (e) {\n            reject(e);\n          }\n        });\n      }\n      if (typeof define === \"function\" && define.amd) {\n        return new Promise(function(resolve, reject) {\n          try {\n            require([\"dompurify\"], resolve);\n          } catch (e) {\n            reject(e);\n          }\n        });\n      }\n      return Promise.reject(new Error(\"Could not load dompurify\"));\n    })()\n      .catch(function(e) {\n        return Promise.reject(new Error(\"Could not load dompurify: \" + e));\n      })\n      .then(function(dompurify) {\n        return dompurify.default ? dompurify.default : dompurify;\n      });\n  }\n\n  /**\n   * Determine the type of a variable/object.\n   *\n   * @private\n   * @ignore\n   */\n  var objType = function(obj) {\n    var type = typeof obj;\n    if (type === \"undefined\") return \"undefined\";\n    else if (type === \"string\" || obj instanceof String) return \"string\";\n    else if (type === \"number\" || obj instanceof Number) return \"number\";\n    else if (type === \"function\" || obj instanceof Function) return \"function\";\n    else if (!!obj && obj.constructor === Array) return \"array\";\n    else if (obj && obj.nodeType === 1) return \"element\";\n    else if (type === \"object\") return \"object\";\n    else return \"unknown\";\n  };\n\n  /**\n   * Create an HTML element with optional className, innerHTML, and style.\n   *\n   * @private\n   * @ignore\n   */\n  var createElement = function(tagName, opt) {\n    var el = document.createElement(tagName);\n    if (opt.className) el.className = opt.className;\n    if (opt.innerHTML && opt.dompurify) {\n      el.innerHTML = opt.dompurify.sanitize(opt.innerHTML);\n    }\n    for (var key in opt.style) {\n      el.style[key] = opt.style[key];\n    }\n    return el;\n  };\n\n  /**\n   * Deep-clone a node and preserve contents/properties.\n   *\n   * @private\n   * @ignore\n   */\n  var cloneNode = function(node, javascriptEnabled) {\n    // Recursively clone the node.\n    var clone =\n      node.nodeType === 3\n        ? document.createTextNode(node.nodeValue)\n        : node.cloneNode(false);\n    for (var child = node.firstChild; child; child = child.nextSibling) {\n      if (\n        javascriptEnabled === true ||\n        child.nodeType !== 1 ||\n        child.nodeName !== \"SCRIPT\"\n      ) {\n        clone.appendChild(cloneNode(child, javascriptEnabled));\n      }\n    }\n\n    if (node.nodeType === 1) {\n      // Preserve contents/properties of special nodes.\n      if (node.nodeName === \"CANVAS\") {\n        clone.width = node.width;\n        clone.height = node.height;\n        clone.getContext(\"2d\").drawImage(node, 0, 0);\n      } else if (node.nodeName === \"TEXTAREA\" || node.nodeName === \"SELECT\") {\n        clone.value = node.value;\n      }\n\n      // Preserve the node's scroll position when it loads.\n      clone.addEventListener(\n        \"load\",\n        function() {\n          clone.scrollTop = node.scrollTop;\n          clone.scrollLeft = node.scrollLeft;\n        },\n        true\n      );\n    }\n\n    // Return the cloned node.\n    return clone;\n  };\n\n  /* ----- CONSTRUCTOR ----- */\n\n  var Worker = function Worker(opt) {\n    // Create the root parent for the proto chain, and the starting Worker.\n    var root = Object.assign(\n      Worker.convert(Promise.resolve()),\n      JSON.parse(JSON.stringify(Worker.template))\n    );\n    var self = Worker.convert(Promise.resolve(), root);\n\n    // Set progress, optional settings, and return.\n    self = self.setProgress(1, Worker, 1, [Worker]);\n    self = self.set(opt);\n    return self;\n  };\n\n  // Boilerplate for subclassing Promise.\n  Worker.prototype = Object.create(Promise.prototype);\n  Worker.prototype.constructor = Worker;\n\n  // Converts/casts promises into Workers.\n  Worker.convert = function convert(promise, inherit) {\n    // Uses prototypal inheritance to receive changes made to ancestors' properties.\n    promise.__proto__ = inherit || Worker.prototype;\n    return promise;\n  };\n\n  Worker.template = {\n    prop: {\n      src: null,\n      container: null,\n      overlay: null,\n      canvas: null,\n      img: null,\n      pdf: null,\n      pageSize: null,\n      callback: function() {}\n    },\n    progress: {\n      val: 0,\n      state: null,\n      n: 0,\n      stack: []\n    },\n    opt: {\n      filename: \"file.pdf\",\n      margin: [0, 0, 0, 0],\n      enableLinks: true,\n      x: 0,\n      y: 0,\n      html2canvas: {},\n      jsPDF: {},\n      backgroundColor: \"transparent\"\n    }\n  };\n\n  /* ----- FROM / TO ----- */\n\n  Worker.prototype.from = function from(src, type) {\n    function getType(src) {\n      switch (objType(src)) {\n        case \"string\":\n          return \"string\";\n        case \"element\":\n          return src.nodeName.toLowerCase() === \"canvas\" ? \"canvas\" : \"element\";\n        default:\n          return \"unknown\";\n      }\n    }\n\n    return this.then(function from_main() {\n      type = type || getType(src);\n      switch (type) {\n        case \"string\":\n          return this.then(loadDomPurify).then(function(dompurify) {\n            return this.set({\n              src: createElement(\"div\", {\n                innerHTML: src,\n                dompurify: dompurify\n              })\n            });\n          });\n        case \"element\":\n          return this.set({ src: src });\n        case \"canvas\":\n          return this.set({ canvas: src });\n        case \"img\":\n          return this.set({ img: src });\n        default:\n          return this.error(\"Unknown source type.\");\n      }\n    });\n  };\n\n  Worker.prototype.to = function to(target) {\n    // Route the 'to' request to the appropriate method.\n    switch (target) {\n      case \"container\":\n        return this.toContainer();\n      case \"canvas\":\n        return this.toCanvas();\n      case \"img\":\n        return this.toImg();\n      case \"pdf\":\n        return this.toPdf();\n      default:\n        return this.error(\"Invalid target.\");\n    }\n  };\n\n  Worker.prototype.toContainer = function toContainer() {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkSrc() {\n        return (\n          this.prop.src || this.error(\"Cannot duplicate - no source HTML.\")\n        );\n      },\n      function checkPageSize() {\n        return this.prop.pageSize || this.setPageSize();\n      }\n    ];\n    return this.thenList(prereqs).then(function toContainer_main() {\n      // Define the CSS styles for the container and its overlay parent.\n      var overlayCSS = {\n        position: \"fixed\",\n        overflow: \"hidden\",\n        zIndex: 1000,\n        left: \"-100000px\",\n        right: 0,\n        bottom: 0,\n        top: 0\n      };\n      var containerCSS = {\n        position: \"relative\",\n        display: \"inline-block\",\n        width:\n          (typeof this.opt.width === \"number\" &&\n          !isNaN(this.opt.width) &&\n          typeof this.opt.windowWidth === \"number\" &&\n          !isNaN(this.opt.windowWidth)\n            ? this.opt.windowWidth\n            : Math.max(\n                this.prop.src.clientWidth,\n                this.prop.src.scrollWidth,\n                this.prop.src.offsetWidth\n              )) + \"px\",\n        left: 0,\n        right: 0,\n        top: 0,\n        margin: \"auto\",\n        backgroundColor: this.opt.backgroundColor\n      }; // Set the overlay to hidden (could be changed in the future to provide a print preview).\n\n      var source = cloneNode(\n        this.prop.src,\n        this.opt.html2canvas.javascriptEnabled\n      );\n\n      if (source.tagName === \"BODY\") {\n        containerCSS.height =\n          Math.max(\n            document.body.scrollHeight,\n            document.body.offsetHeight,\n            document.documentElement.clientHeight,\n            document.documentElement.scrollHeight,\n            document.documentElement.offsetHeight\n          ) + \"px\";\n      }\n\n      this.prop.overlay = createElement(\"div\", {\n        className: \"html2pdf__overlay\",\n        style: overlayCSS\n      });\n      this.prop.container = createElement(\"div\", {\n        className: \"html2pdf__container\",\n        style: containerCSS\n      });\n      this.prop.container.appendChild(source);\n      this.prop.container.firstChild.appendChild(\n        createElement(\"div\", {\n          style: {\n            clear: \"both\",\n            border: \"0 none transparent\",\n            margin: 0,\n            padding: 0,\n            height: 0\n          }\n        })\n      );\n      this.prop.container.style.float = \"none\";\n      this.prop.overlay.appendChild(this.prop.container);\n      document.body.appendChild(this.prop.overlay);\n      this.prop.container.firstChild.style.position = \"relative\";\n      this.prop.container.height =\n        Math.max(\n          this.prop.container.firstChild.clientHeight,\n          this.prop.container.firstChild.scrollHeight,\n          this.prop.container.firstChild.offsetHeight\n        ) + \"px\";\n    });\n  };\n\n  Worker.prototype.toCanvas = function toCanvas() {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkContainer() {\n        return (\n          document.body.contains(this.prop.container) || this.toContainer()\n        );\n      }\n    ];\n\n    // Fulfill prereqs then create the canvas.\n    return this.thenList(prereqs)\n      .then(loadHtml2Canvas)\n      .then(function toCanvas_main(html2canvas) {\n        // Handle old-fashioned 'onrendered' argument.\n        var options = Object.assign({}, this.opt.html2canvas);\n        delete options.onrendered;\n\n        return html2canvas(this.prop.container, options);\n      })\n      .then(function toCanvas_post(canvas) {\n        // Handle old-fashioned 'onrendered' argument.\n        var onRendered = this.opt.html2canvas.onrendered || function() {};\n        onRendered(canvas);\n\n        this.prop.canvas = canvas;\n        document.body.removeChild(this.prop.overlay);\n      });\n  };\n\n  Worker.prototype.toContext2d = function toContext2d() {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkContainer() {\n        return (\n          document.body.contains(this.prop.container) || this.toContainer()\n        );\n      }\n    ];\n\n    // Fulfill prereqs then create the canvas.\n    return this.thenList(prereqs)\n      .then(loadHtml2Canvas)\n      .then(function toContext2d_main(html2canvas) {\n        // Handle old-fashioned 'onrendered' argument.\n\n        var pdf = this.opt.jsPDF;\n        var fontFaces = this.opt.fontFaces;\n\n        var scale =\n          typeof this.opt.width === \"number\" &&\n          !isNaN(this.opt.width) &&\n          typeof this.opt.windowWidth === \"number\" &&\n          !isNaN(this.opt.windowWidth)\n            ? this.opt.width / this.opt.windowWidth\n            : 1;\n\n        var options = Object.assign(\n          {\n            async: true,\n            allowTaint: true,\n            scale: scale,\n            scrollX: this.opt.scrollX || 0,\n            scrollY: this.opt.scrollY || 0,\n            backgroundColor: \"#ffffff\",\n            imageTimeout: 15000,\n            logging: true,\n            proxy: null,\n            removeContainer: true,\n            foreignObjectRendering: false,\n            useCORS: false\n          },\n          this.opt.html2canvas\n        );\n        delete options.onrendered;\n\n        pdf.context2d.autoPaging =\n          typeof this.opt.autoPaging === \"undefined\"\n            ? true\n            : this.opt.autoPaging;\n        pdf.context2d.posX = this.opt.x;\n        pdf.context2d.posY = this.opt.y;\n        pdf.context2d.margin = this.opt.margin;\n        pdf.context2d.fontFaces = fontFaces;\n\n        if (fontFaces) {\n          for (var i = 0; i < fontFaces.length; ++i) {\n            var font = fontFaces[i];\n            var src = font.src.find(function(src) {\n              return src.format === \"truetype\";\n            });\n\n            if (src) {\n              pdf.addFont(src.url, font.ref.name, font.ref.style);\n            }\n          }\n        }\n\n        options.windowHeight = options.windowHeight || 0;\n        options.windowHeight =\n          options.windowHeight == 0\n            ? Math.max(\n                this.prop.container.clientHeight,\n                this.prop.container.scrollHeight,\n                this.prop.container.offsetHeight\n              )\n            : options.windowHeight;\n\n        pdf.context2d.save(true);\n        return html2canvas(this.prop.container, options);\n      })\n      .then(function toContext2d_post(canvas) {\n        this.opt.jsPDF.context2d.restore(true);\n\n        // Handle old-fashioned 'onrendered' argument.\n        var onRendered = this.opt.html2canvas.onrendered || function() {};\n        onRendered(canvas);\n\n        this.prop.canvas = canvas;\n        document.body.removeChild(this.prop.overlay);\n      });\n  };\n\n  Worker.prototype.toImg = function toImg() {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkCanvas() {\n        return this.prop.canvas || this.toCanvas();\n      }\n    ];\n\n    // Fulfill prereqs then create the image.\n    return this.thenList(prereqs).then(function toImg_main() {\n      var imgData = this.prop.canvas.toDataURL(\n        \"image/\" + this.opt.image.type,\n        this.opt.image.quality\n      );\n      this.prop.img = document.createElement(\"img\");\n      this.prop.img.src = imgData;\n    });\n  };\n\n  Worker.prototype.toPdf = function toPdf() {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkContext2d() {\n        return this.toContext2d();\n      }\n      //function checkCanvas() { return this.prop.canvas || this.toCanvas(); }\n    ];\n\n    // Fulfill prereqs then create the image.\n    return this.thenList(prereqs).then(function toPdf_main() {\n      // Create local copies of frequently used properties.\n      this.prop.pdf = this.prop.pdf || this.opt.jsPDF;\n    });\n  };\n\n  /* ----- OUTPUT / SAVE ----- */\n\n  Worker.prototype.output = function output(type, options, src) {\n    // Redirect requests to the correct function (outputPdf / outputImg).\n    src = src || \"pdf\";\n    if (src.toLowerCase() === \"img\" || src.toLowerCase() === \"image\") {\n      return this.outputImg(type, options);\n    } else {\n      return this.outputPdf(type, options);\n    }\n  };\n\n  Worker.prototype.outputPdf = function outputPdf(type, options) {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkPdf() {\n        return this.prop.pdf || this.toPdf();\n      }\n    ];\n\n    // Fulfill prereqs then perform the appropriate output.\n    return this.thenList(prereqs).then(function outputPdf_main() {\n      /* Currently implemented output types:\n       *    https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992\n       *  save(options), arraybuffer, blob, bloburi/bloburl,\n       *  datauristring/dataurlstring, dataurlnewwindow, datauri/dataurl\n       */\n      return this.prop.pdf.output(type, options);\n    });\n  };\n\n  Worker.prototype.outputImg = function outputImg(type) {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkImg() {\n        return this.prop.img || this.toImg();\n      }\n    ];\n\n    // Fulfill prereqs then perform the appropriate output.\n    return this.thenList(prereqs).then(function outputImg_main() {\n      switch (type) {\n        case undefined:\n        case \"img\":\n          return this.prop.img;\n        case \"datauristring\":\n        case \"dataurlstring\":\n          return this.prop.img.src;\n        case \"datauri\":\n        case \"dataurl\":\n          return (document.location.href = this.prop.img.src);\n        default:\n          throw 'Image output type \"' + type + '\" is not supported.';\n      }\n    });\n  };\n\n  Worker.prototype.save = function save(filename) {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkPdf() {\n        return this.prop.pdf || this.toPdf();\n      }\n    ];\n\n    // Fulfill prereqs, update the filename (if provided), and save the PDF.\n    return this.thenList(prereqs)\n      .set(filename ? { filename: filename } : null)\n      .then(function save_main() {\n        this.prop.pdf.save(this.opt.filename);\n      });\n  };\n\n  Worker.prototype.doCallback = function doCallback() {\n    // Set up function prerequisites.\n    var prereqs = [\n      function checkPdf() {\n        return this.prop.pdf || this.toPdf();\n      }\n    ];\n\n    // Fulfill prereqs, update the filename (if provided), and save the PDF.\n    return this.thenList(prereqs).then(function doCallback_main() {\n      this.prop.callback(this.prop.pdf);\n    });\n  };\n\n  /* ----- SET / GET ----- */\n\n  Worker.prototype.set = function set(opt) {\n    // TODO: Implement ordered pairs?\n\n    // Silently ignore invalid or empty input.\n    if (objType(opt) !== \"object\") {\n      return this;\n    }\n\n    // Build an array of setter functions to queue.\n    var fns = Object.keys(opt || {}).map(function(key) {\n      if (key in Worker.template.prop) {\n        // Set pre-defined properties.\n        return function set_prop() {\n          this.prop[key] = opt[key];\n        };\n      } else {\n        switch (key) {\n          case \"margin\":\n            return this.setMargin.bind(this, opt.margin);\n          case \"jsPDF\":\n            return function set_jsPDF() {\n              this.opt.jsPDF = opt.jsPDF;\n              return this.setPageSize();\n            };\n          case \"pageSize\":\n            return this.setPageSize.bind(this, opt.pageSize);\n          default:\n            // Set any other properties in opt.\n            return function set_opt() {\n              this.opt[key] = opt[key];\n            };\n        }\n      }\n    }, this);\n\n    // Set properties within the promise chain.\n    return this.then(function set_main() {\n      return this.thenList(fns);\n    });\n  };\n\n  Worker.prototype.get = function get(key, cbk) {\n    return this.then(function get_main() {\n      // Fetch the requested property, either as a predefined prop or in opt.\n      var val = key in Worker.template.prop ? this.prop[key] : this.opt[key];\n      return cbk ? cbk(val) : val;\n    });\n  };\n\n  Worker.prototype.setMargin = function setMargin(margin) {\n    return this.then(function setMargin_main() {\n      // Parse the margin property.\n      switch (objType(margin)) {\n        case \"number\":\n          margin = [margin, margin, margin, margin];\n        // eslint-disable-next-line no-fallthrough\n        case \"array\":\n          if (margin.length === 2) {\n            margin = [margin[0], margin[1], margin[0], margin[1]];\n          }\n          if (margin.length === 4) {\n            break;\n          }\n        // eslint-disable-next-line no-fallthrough\n        default:\n          return this.error(\"Invalid margin array.\");\n      }\n\n      // Set the margin property, then update pageSize.\n      this.opt.margin = margin;\n    }).then(this.setPageSize);\n  };\n\n  Worker.prototype.setPageSize = function setPageSize(pageSize) {\n    function toPx(val, k) {\n      return Math.floor(((val * k) / 72) * 96);\n    }\n\n    return this.then(function setPageSize_main() {\n      // Retrieve page-size based on jsPDF settings, if not explicitly provided.\n      pageSize = pageSize || jsPDF.getPageSize(this.opt.jsPDF);\n\n      // Add 'inner' field if not present.\n      if (!pageSize.hasOwnProperty(\"inner\")) {\n        pageSize.inner = {\n          width: pageSize.width - this.opt.margin[1] - this.opt.margin[3],\n          height: pageSize.height - this.opt.margin[0] - this.opt.margin[2]\n        };\n        pageSize.inner.px = {\n          width: toPx(pageSize.inner.width, pageSize.k),\n          height: toPx(pageSize.inner.height, pageSize.k)\n        };\n        pageSize.inner.ratio = pageSize.inner.height / pageSize.inner.width;\n      }\n\n      // Attach pageSize to this.\n      this.prop.pageSize = pageSize;\n    });\n  };\n\n  Worker.prototype.setProgress = function setProgress(val, state, n, stack) {\n    // Immediately update all progress values.\n    if (val != null) this.progress.val = val;\n    if (state != null) this.progress.state = state;\n    if (n != null) this.progress.n = n;\n    if (stack != null) this.progress.stack = stack;\n    this.progress.ratio = this.progress.val / this.progress.state;\n\n    // Return this for command chaining.\n    return this;\n  };\n\n  Worker.prototype.updateProgress = function updateProgress(\n    val,\n    state,\n    n,\n    stack\n  ) {\n    // Immediately update all progress values, using setProgress.\n    return this.setProgress(\n      val ? this.progress.val + val : null,\n      state ? state : null,\n      n ? this.progress.n + n : null,\n      stack ? this.progress.stack.concat(stack) : null\n    );\n  };\n\n  /* ----- PROMISE MAPPING ----- */\n\n  Worker.prototype.then = function then(onFulfilled, onRejected) {\n    // Wrap `this` for encapsulation.\n    var self = this;\n\n    return this.thenCore(onFulfilled, onRejected, function then_main(\n      onFulfilled,\n      onRejected\n    ) {\n      // Update progress while queuing, calling, and resolving `then`.\n      self.updateProgress(null, null, 1, [onFulfilled]);\n      return Promise.prototype.then\n        .call(this, function then_pre(val) {\n          self.updateProgress(null, onFulfilled);\n          return val;\n        })\n        .then(onFulfilled, onRejected)\n        .then(function then_post(val) {\n          self.updateProgress(1);\n          return val;\n        });\n    });\n  };\n\n  Worker.prototype.thenCore = function thenCore(\n    onFulfilled,\n    onRejected,\n    thenBase\n  ) {\n    // Handle optional thenBase parameter.\n    thenBase = thenBase || Promise.prototype.then;\n\n    // Wrap `this` for encapsulation and bind it to the promise handlers.\n    var self = this;\n    if (onFulfilled) {\n      onFulfilled = onFulfilled.bind(self);\n    }\n    if (onRejected) {\n      onRejected = onRejected.bind(self);\n    }\n\n    // Cast self into a Promise to avoid polyfills recursively defining `then`.\n    var isNative =\n      Promise.toString().indexOf(\"[native code]\") !== -1 &&\n      Promise.name === \"Promise\";\n    var selfPromise = isNative\n      ? self\n      : Worker.convert(Object.assign({}, self), Promise.prototype);\n\n    // Return the promise, after casting it into a Worker and preserving props.\n    var returnVal = thenBase.call(selfPromise, onFulfilled, onRejected);\n    return Worker.convert(returnVal, self.__proto__);\n  };\n\n  Worker.prototype.thenExternal = function thenExternal(\n    onFulfilled,\n    onRejected\n  ) {\n    // Call `then` and return a standard promise (exits the Worker chain).\n    return Promise.prototype.then.call(this, onFulfilled, onRejected);\n  };\n\n  Worker.prototype.thenList = function thenList(fns) {\n    // Queue a series of promise 'factories' into the promise chain.\n    var self = this;\n    fns.forEach(function thenList_forEach(fn) {\n      self = self.thenCore(fn);\n    });\n    return self;\n  };\n\n  Worker.prototype[\"catch\"] = function(onRejected) {\n    // Bind `this` to the promise handler, call `catch`, and return a Worker.\n    if (onRejected) {\n      onRejected = onRejected.bind(this);\n    }\n    var returnVal = Promise.prototype[\"catch\"].call(this, onRejected);\n    return Worker.convert(returnVal, this);\n  };\n\n  Worker.prototype.catchExternal = function catchExternal(onRejected) {\n    // Call `catch` and return a standard promise (exits the Worker chain).\n    return Promise.prototype[\"catch\"].call(this, onRejected);\n  };\n\n  Worker.prototype.error = function error(msg) {\n    // Throw the error in the Promise chain.\n    return this.then(function error_main() {\n      throw new Error(msg);\n    });\n  };\n\n  /* ----- ALIASES ----- */\n\n  Worker.prototype.using = Worker.prototype.set;\n  Worker.prototype.saveAs = Worker.prototype.save;\n  Worker.prototype.export = Worker.prototype.output;\n  Worker.prototype.run = Worker.prototype.then;\n\n  // Get dimensions of a PDF page, as determined by jsPDF.\n  jsPDF.getPageSize = function(orientation, unit, format) {\n    // Decode options object\n    if (typeof orientation === \"object\") {\n      var options = orientation;\n      orientation = options.orientation;\n      unit = options.unit || unit;\n      format = options.format || format;\n    }\n\n    // Default options\n    unit = unit || \"mm\";\n    format = format || \"a4\";\n    orientation = (\"\" + (orientation || \"P\")).toLowerCase();\n    var format_as_string = (\"\" + format).toLowerCase();\n\n    // Size in pt of various paper formats\n    var pageFormats = {\n      a0: [2383.94, 3370.39],\n      a1: [1683.78, 2383.94],\n      a2: [1190.55, 1683.78],\n      a3: [841.89, 1190.55],\n      a4: [595.28, 841.89],\n      a5: [419.53, 595.28],\n      a6: [297.64, 419.53],\n      a7: [209.76, 297.64],\n      a8: [147.4, 209.76],\n      a9: [104.88, 147.4],\n      a10: [73.7, 104.88],\n      b0: [2834.65, 4008.19],\n      b1: [2004.09, 2834.65],\n      b2: [1417.32, 2004.09],\n      b3: [1000.63, 1417.32],\n      b4: [708.66, 1000.63],\n      b5: [498.9, 708.66],\n      b6: [354.33, 498.9],\n      b7: [249.45, 354.33],\n      b8: [175.75, 249.45],\n      b9: [124.72, 175.75],\n      b10: [87.87, 124.72],\n      c0: [2599.37, 3676.54],\n      c1: [1836.85, 2599.37],\n      c2: [1298.27, 1836.85],\n      c3: [918.43, 1298.27],\n      c4: [649.13, 918.43],\n      c5: [459.21, 649.13],\n      c6: [323.15, 459.21],\n      c7: [229.61, 323.15],\n      c8: [161.57, 229.61],\n      c9: [113.39, 161.57],\n      c10: [79.37, 113.39],\n      dl: [311.81, 623.62],\n      letter: [612, 792],\n      \"government-letter\": [576, 756],\n      legal: [612, 1008],\n      \"junior-legal\": [576, 360],\n      ledger: [1224, 792],\n      tabloid: [792, 1224],\n      \"credit-card\": [153, 243]\n    };\n\n    var k;\n    // Unit conversion\n    switch (unit) {\n      case \"pt\":\n        k = 1;\n        break;\n      case \"mm\":\n        k = 72 / 25.4;\n        break;\n      case \"cm\":\n        k = 72 / 2.54;\n        break;\n      case \"in\":\n        k = 72;\n        break;\n      case \"px\":\n        k = 72 / 96;\n        break;\n      case \"pc\":\n        k = 12;\n        break;\n      case \"em\":\n        k = 12;\n        break;\n      case \"ex\":\n        k = 6;\n        break;\n      default:\n        throw \"Invalid unit: \" + unit;\n    }\n    var pageHeight = 0;\n    var pageWidth = 0;\n\n    // Dimensions are stored as user units and converted to points on output\n    if (pageFormats.hasOwnProperty(format_as_string)) {\n      pageHeight = pageFormats[format_as_string][1] / k;\n      pageWidth = pageFormats[format_as_string][0] / k;\n    } else {\n      try {\n        pageHeight = format[1];\n        pageWidth = format[0];\n      } catch (err) {\n        throw new Error(\"Invalid format: \" + format);\n      }\n    }\n\n    var tmp;\n    // Handle page orientation\n    if (orientation === \"p\" || orientation === \"portrait\") {\n      orientation = \"p\";\n      if (pageWidth > pageHeight) {\n        tmp = pageWidth;\n        pageWidth = pageHeight;\n        pageHeight = tmp;\n      }\n    } else if (orientation === \"l\" || orientation === \"landscape\") {\n      orientation = \"l\";\n      if (pageHeight > pageWidth) {\n        tmp = pageWidth;\n        pageWidth = pageHeight;\n        pageHeight = tmp;\n      }\n    } else {\n      throw \"Invalid orientation: \" + orientation;\n    }\n\n    // Return information (k is the unit conversion ratio from pts)\n    var info = {\n      width: pageWidth,\n      height: pageHeight,\n      unit: unit,\n      k: k,\n      orientation: orientation\n    };\n    return info;\n  };\n\n  /**\n   * @typedef FontFace\n   *\n   * The font-face type implements an interface similar to that of the font-face CSS rule,\n   * and is used by jsPDF to match fonts when the font property of CanvasRenderingContext2D\n   * is updated.\n   *\n   * All properties expect values similar to those in the font-face CSS rule. A difference\n   * is the font-family, which do not need to be enclosed in double-quotes when containing\n   * spaces like in CSS.\n   *\n   * @property {string} family The name of the font-family.\n   * @property {string|undefined} style The style that this font-face defines, e.g. 'italic'.\n   * @property {string|number|undefined} weight The weight of the font, either as a string or a number (400, 500, 600, e.g.)\n   * @property {string|undefined} stretch The stretch of the font, e.g. condensed, normal, expanded.\n   * @property {Object[]} src A list of URLs from where fonts of various formats can be fetched.\n   * @property {string} [src] url A URL to a font of a specific format.\n   * @property {string} [src] format Format of the font referenced by the URL.\n   */\n\n  /**\n   * Generate a PDF from an HTML element or string using.\n   *\n   * @name html\n   * @function\n   * @param {HTMLElement|string} source The source HTMLElement or a string containing HTML.\n   * @param {Object} [options] Collection of settings\n   * @param {function} [options.callback] The mandatory callback-function gets as first parameter the current jsPDF instance\n   * @param {(number|number[])=} [options.margin] Page margins [top, right, bottom, left]. Default is 0.\n   * @param {(boolean|'slice'|'text')=} [options.autoPaging] The auto paging mode.\n   * <ul>\n   * <li>\n   *   <code>false</code>: Auto paging is disabled.\n   * </li>\n   * <li>\n   *   <code>true</code> or <code>'slice'</code>: Will cut shapes or text chunks across page breaks. Will possibly\n   *   slice text in half, making it difficult to read.\n   * </li>\n   * <li>\n   *   <code>'text'</code>: Trys not to cut text in half across page breaks. Works best for documents consisting\n   *   mostly of a single column of text.\n   * </li>\n   * </ul>\n   * Default is <code>true</code>.\n   * @param {string} [options.filename] name of the file\n   * @param {HTMLOptionImage} [options.image] image settings when converting HTML to image\n   * @param {Html2CanvasOptions} [options.html2canvas] html2canvas options\n   * @param {FontFace[]} [options.fontFaces] A list of font-faces to match when resolving fonts. Fonts will be added to the PDF based on the specified URL. If omitted, the font match algorithm falls back to old algorithm.\n   * @param {jsPDF} [options.jsPDF] jsPDF instance\n   * @param {number=} [options.x] x position on the PDF document in jsPDF units.\n   * @param {number=} [options.y] y position on the PDF document in jsPDF units.\n   * @param {number=} [options.width] The target width in the PDF document in jsPDF units. The rendered element will be\n   * scaled such that it fits into the specified width. Has no effect if either the <code>html2canvas.scale<code> is\n   * specified or the <code>windowWidth</code> option is NOT specified.\n   * @param {number=} [options.windowWidth] The window width in CSS pixels. In contrast to the\n   * <code>html2canvas.windowWidth</code> option, this option affects the actual container size while rendering and\n   * does NOT affect CSS media queries. This option only has an effect, if the <code>width<code> option is also specified.\n   *\n   * @example\n   * var doc = new jsPDF();\n   *\n   * doc.html(document.body, {\n   *    callback: function (doc) {\n   *      doc.save();\n   *    },\n   *    x: 10,\n   *    y: 10\n   * });\n   */\n  jsPDFAPI.html = function(src, options) {\n    \"use strict\";\n\n    options = options || {};\n    options.callback = options.callback || function() {};\n    options.html2canvas = options.html2canvas || {};\n    options.html2canvas.canvas = options.html2canvas.canvas || this.canvas;\n    options.jsPDF = options.jsPDF || this;\n    options.fontFaces = options.fontFaces\n      ? options.fontFaces.map(normalizeFontFace)\n      : null;\n\n    // Create a new worker with the given options.\n    var worker = new Worker(options);\n\n    if (!options.worker) {\n      // If worker is not set to true, perform the traditional 'simple' operation.\n      return worker.from(src).doCallback();\n    } else {\n      // Otherwise, return the worker for new Promise-based operation.\n      return worker;\n    }\n  };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF JavaScript plugin\n *\n * @name javascript\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n  var jsNamesObj, jsJsObj, text;\n  /**\n   * @name addJS\n   * @function\n   * @param {string} javascript The javascript to be embedded into the PDF-file.\n   * @returns {jsPDF}\n   */\n  jsPDFAPI.addJS = function(javascript) {\n    text = javascript;\n    this.internal.events.subscribe(\"postPutResources\", function() {\n      jsNamesObj = this.internal.newObject();\n      this.internal.out(\"<<\");\n      this.internal.out(\"/Names [(EmbeddedJS) \" + (jsNamesObj + 1) + \" 0 R]\");\n      this.internal.out(\">>\");\n      this.internal.out(\"endobj\");\n\n      jsJsObj = this.internal.newObject();\n      this.internal.out(\"<<\");\n      this.internal.out(\"/S /JavaScript\");\n      this.internal.out(\"/JS (\" + text + \")\");\n      this.internal.out(\">>\");\n      this.internal.out(\"endobj\");\n    });\n    this.internal.events.subscribe(\"putCatalog\", function() {\n      if (jsNamesObj !== undefined && jsJsObj !== undefined) {\n        this.internal.out(\"/Names <</JavaScript \" + jsNamesObj + \" 0 R>>\");\n      }\n    });\n    return this;\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC)  steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Outline PlugIn\n *\n * Generates a PDF Outline\n * @name outline\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var namesOid;\n  //var destsGoto = [];\n\n  jsPDFAPI.events.push([\n    \"postPutResources\",\n    function() {\n      var pdf = this;\n      var rx = /^(\\d+) 0 obj$/;\n\n      // Write action goto objects for each page\n      // this.outline.destsGoto = [];\n      // for (var i = 0; i < totalPages; i++) {\n      // var id = pdf.internal.newObject();\n      // this.outline.destsGoto.push(id);\n      // pdf.internal.write(\"<</D[\" + (i * 2 + 3) + \" 0 R /XYZ null\n      // null null]/S/GoTo>> endobj\");\n      // }\n      //\n      // for (var i = 0; i < dests.length; i++) {\n      // pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0\n      // R\");\n      // }\n      //\n      if (this.outline.root.children.length > 0) {\n        var lines = pdf.outline.render().split(/\\r\\n/);\n        for (var i = 0; i < lines.length; i++) {\n          var line = lines[i];\n          var m = rx.exec(line);\n          if (m != null) {\n            var oid = m[1];\n            pdf.internal.newObjectDeferredBegin(oid, false);\n          }\n          pdf.internal.write(line);\n        }\n      }\n\n      // This code will write named destination for each page reference\n      // (page_1, etc)\n      if (this.outline.createNamedDestinations) {\n        var totalPages = this.internal.pages.length;\n        // WARNING: this assumes jsPDF starts on page 3 and pageIDs\n        // follow 5, 7, 9, etc\n        // Write destination objects for each page\n        var dests = [];\n        for (var i = 0; i < totalPages; i++) {\n          var id = pdf.internal.newObject();\n          dests.push(id);\n          var info = pdf.internal.getPageInfo(i + 1);\n          pdf.internal.write(\n            \"<< /D[\" + info.objId + \" 0 R /XYZ null null null]>> endobj\"\n          );\n        }\n\n        // assign a name for each destination\n        var names2Oid = pdf.internal.newObject();\n        pdf.internal.write(\"<< /Names [ \");\n        for (var i = 0; i < dests.length; i++) {\n          pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0 R\");\n        }\n        pdf.internal.write(\" ] >>\", \"endobj\");\n\n        // var kids = pdf.internal.newObject();\n        // pdf.internal.write('<< /Kids [ ' + names2Oid + ' 0 R');\n        // pdf.internal.write(' ] >>', 'endobj');\n\n        namesOid = pdf.internal.newObject();\n        pdf.internal.write(\"<< /Dests \" + names2Oid + \" 0 R\");\n        pdf.internal.write(\">>\", \"endobj\");\n      }\n    }\n  ]);\n\n  jsPDFAPI.events.push([\n    \"putCatalog\",\n    function() {\n      var pdf = this;\n      if (pdf.outline.root.children.length > 0) {\n        pdf.internal.write(\n          \"/Outlines\",\n          this.outline.makeRef(this.outline.root)\n        );\n        if (this.outline.createNamedDestinations) {\n          pdf.internal.write(\"/Names \" + namesOid + \" 0 R\");\n        }\n        // Open with Bookmarks showing\n        // pdf.internal.write(\"/PageMode /UseOutlines\");\n      }\n    }\n  ]);\n\n  jsPDFAPI.events.push([\n    \"initialized\",\n    function() {\n      var pdf = this;\n\n      pdf.outline = {\n        createNamedDestinations: false,\n        root: {\n          children: []\n        }\n      };\n\n      /**\n       * Options: pageNumber\n       */\n      pdf.outline.add = function(parent, title, options) {\n        var item = {\n          title: title,\n          options: options,\n          children: []\n        };\n        if (parent == null) {\n          parent = this.root;\n        }\n        parent.children.push(item);\n        return item;\n      };\n\n      pdf.outline.render = function() {\n        this.ctx = {};\n        this.ctx.val = \"\";\n        this.ctx.pdf = pdf;\n\n        this.genIds_r(this.root);\n        this.renderRoot(this.root);\n        this.renderItems(this.root);\n\n        return this.ctx.val;\n      };\n\n      pdf.outline.genIds_r = function(node) {\n        node.id = pdf.internal.newObjectDeferred();\n        for (var i = 0; i < node.children.length; i++) {\n          this.genIds_r(node.children[i]);\n        }\n      };\n\n      pdf.outline.renderRoot = function(node) {\n        this.objStart(node);\n        this.line(\"/Type /Outlines\");\n        if (node.children.length > 0) {\n          this.line(\"/First \" + this.makeRef(node.children[0]));\n          this.line(\n            \"/Last \" + this.makeRef(node.children[node.children.length - 1])\n          );\n        }\n        this.line(\n          \"/Count \" +\n            this.count_r(\n              {\n                count: 0\n              },\n              node\n            )\n        );\n        this.objEnd();\n      };\n\n      pdf.outline.renderItems = function(node) {\n        var getVerticalCoordinateString = this.ctx.pdf.internal\n          .getVerticalCoordinateString;\n        for (var i = 0; i < node.children.length; i++) {\n          var item = node.children[i];\n          this.objStart(item);\n\n          this.line(\"/Title \" + this.makeString(item.title));\n\n          this.line(\"/Parent \" + this.makeRef(node));\n          if (i > 0) {\n            this.line(\"/Prev \" + this.makeRef(node.children[i - 1]));\n          }\n          if (i < node.children.length - 1) {\n            this.line(\"/Next \" + this.makeRef(node.children[i + 1]));\n          }\n          if (item.children.length > 0) {\n            this.line(\"/First \" + this.makeRef(item.children[0]));\n            this.line(\n              \"/Last \" + this.makeRef(item.children[item.children.length - 1])\n            );\n          }\n\n          var count = (this.count = this.count_r(\n            {\n              count: 0\n            },\n            item\n          ));\n          if (count > 0) {\n            this.line(\"/Count \" + count);\n          }\n\n          if (item.options) {\n            if (item.options.pageNumber) {\n              // Explicit Destination\n              //WARNING this assumes page ids are 3,5,7, etc.\n              var info = pdf.internal.getPageInfo(item.options.pageNumber);\n              this.line(\n                \"/Dest \" +\n                  \"[\" +\n                  info.objId +\n                  \" 0 R /XYZ 0 \" +\n                  getVerticalCoordinateString(0) +\n                  \" 0]\"\n              );\n              // this line does not work on all clients (pageNumber instead of page ref)\n              //this.line('/Dest ' + '[' + (item.options.pageNumber - 1) + ' /XYZ 0 ' + this.ctx.pdf.internal.pageSize.getHeight() + ' 0]');\n\n              // Named Destination\n              // this.line('/Dest (page_' + (item.options.pageNumber) + ')');\n\n              // Action Destination\n              // var id = pdf.internal.newObject();\n              // pdf.internal.write('<</D[' + (item.options.pageNumber - 1) + ' /XYZ null null null]/S/GoTo>> endobj');\n              // this.line('/A ' + id + ' 0 R' );\n            }\n          }\n          this.objEnd();\n        }\n        for (var z = 0; z < node.children.length; z++) {\n          this.renderItems(node.children[z]);\n        }\n      };\n\n      pdf.outline.line = function(text) {\n        this.ctx.val += text + \"\\r\\n\";\n      };\n\n      pdf.outline.makeRef = function(node) {\n        return node.id + \" 0 R\";\n      };\n\n      pdf.outline.makeString = function(val) {\n        return \"(\" + pdf.internal.pdfEscape(val) + \")\";\n      };\n\n      pdf.outline.objStart = function(node) {\n        this.ctx.val += \"\\r\\n\" + node.id + \" 0 obj\" + \"\\r\\n<<\\r\\n\";\n      };\n\n      pdf.outline.objEnd = function() {\n        this.ctx.val += \">> \\r\\n\" + \"endobj\" + \"\\r\\n\";\n      };\n\n      pdf.outline.count_r = function(ctx, node) {\n        for (var i = 0; i < node.children.length; i++) {\n          ctx.count++;\n          this.count_r(ctx, node.children[i]);\n        }\n        return ctx.count;\n      };\n    }\n  ]);\n\n  return this;\n})(jsPDF.API);\n","/**\n * @license\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF jpeg Support PlugIn\n *\n * @name jpeg_support\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * 0xc0 (SOF) Huffman  - Baseline DCT\n   * 0xc1 (SOF) Huffman  - Extended sequential DCT\n   * 0xc2 Progressive DCT (SOF2)\n   * 0xc3 Spatial (sequential) lossless (SOF3)\n   * 0xc4 Differential sequential DCT (SOF5)\n   * 0xc5 Differential progressive DCT (SOF6)\n   * 0xc6 Differential spatial (SOF7)\n   * 0xc7\n   */\n  var markers = [0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7];\n\n  //takes a string imgData containing the raw bytes of\n  //a jpeg image and returns [width, height]\n  //Algorithm from: http://www.64lines.com/jpeg-width-height\n  var getJpegInfo = function(imgData) {\n    var width, height, numcomponents;\n    var blockLength = imgData.charCodeAt(4) * 256 + imgData.charCodeAt(5);\n    var len = imgData.length;\n    var result = { width: 0, height: 0, numcomponents: 1 };\n    for (var i = 4; i < len; i += 2) {\n      i += blockLength;\n      if (markers.indexOf(imgData.charCodeAt(i + 1)) !== -1) {\n        height = imgData.charCodeAt(i + 5) * 256 + imgData.charCodeAt(i + 6);\n        width = imgData.charCodeAt(i + 7) * 256 + imgData.charCodeAt(i + 8);\n        numcomponents = imgData.charCodeAt(i + 9);\n        result = { width: width, height: height, numcomponents: numcomponents };\n        break;\n      } else {\n        blockLength =\n          imgData.charCodeAt(i + 2) * 256 + imgData.charCodeAt(i + 3);\n      }\n    }\n    return result;\n  };\n\n  /**\n   * @ignore\n   */\n  jsPDFAPI.processJPEG = function(\n    data,\n    index,\n    alias,\n    compression,\n    dataAsBinaryString,\n    colorSpace\n  ) {\n    var filter = this.decode.DCT_DECODE,\n      bpc = 8,\n      dims,\n      result = null;\n\n    if (\n      typeof data === \"string\" ||\n      this.__addimage__.isArrayBuffer(data) ||\n      this.__addimage__.isArrayBufferView(data)\n    ) {\n      // if we already have a stored binary string rep use that\n      data = dataAsBinaryString || data;\n      data = this.__addimage__.isArrayBuffer(data)\n        ? new Uint8Array(data)\n        : data;\n      data = this.__addimage__.isArrayBufferView(data)\n        ? this.__addimage__.arrayBufferToBinaryString(data)\n        : data;\n\n      dims = getJpegInfo(data);\n      switch (dims.numcomponents) {\n        case 1:\n          colorSpace = this.color_spaces.DEVICE_GRAY;\n          break;\n        case 4:\n          colorSpace = this.color_spaces.DEVICE_CMYK;\n          break;\n        case 3:\n          colorSpace = this.color_spaces.DEVICE_RGB;\n          break;\n      }\n\n      result = {\n        data: data,\n        width: dims.width,\n        height: dims.height,\n        colorSpace: colorSpace,\n        bitsPerComponent: bpc,\n        filter: filter,\n        index: index,\n        alias: alias\n      };\n    }\n    return result;\n  };\n})(jsPDF.API);\n","// Generated by CoffeeScript 1.4.0\n\n/**\n * @license\n * PNG.js\n * Copyright (c) 2011 Devon Govett\n * MIT LICENSE\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { unzlibSync } from \"./fflate.js\";\nimport { globalObject } from \"./globalObject.js\";\n\nvar PNG = (function() {\n  var APNG_BLEND_OP_OVER,\n    APNG_BLEND_OP_SOURCE,\n    APNG_DISPOSE_OP_BACKGROUND,\n    APNG_DISPOSE_OP_NONE,\n    APNG_DISPOSE_OP_PREVIOUS,\n    makeImage,\n    scratchCanvas,\n    scratchCtx;\n\n  APNG_DISPOSE_OP_NONE = 0;\n\n  APNG_DISPOSE_OP_BACKGROUND = 1;\n\n  APNG_DISPOSE_OP_PREVIOUS = 2;\n\n  APNG_BLEND_OP_SOURCE = 0;\n\n  APNG_BLEND_OP_OVER = 1;\n\n  function PNG(data) {\n    var chunkSize,\n      colors,\n      palLen,\n      delayDen,\n      delayNum,\n      frame,\n      i,\n      index,\n      key,\n      section,\n      palShort,\n      text,\n      _i,\n      _j,\n      _ref;\n    this.data = data;\n    this.pos = 8;\n    this.palette = [];\n    this.imgData = [];\n    this.transparency = {};\n    this.animation = null;\n    this.text = {};\n    frame = null;\n    while (true) {\n      chunkSize = this.readUInt32();\n      section = function() {\n        var _i, _results;\n        _results = [];\n        for (i = _i = 0; _i < 4; i = ++_i) {\n          _results.push(String.fromCharCode(this.data[this.pos++]));\n        }\n        return _results;\n      }\n        .call(this)\n        .join(\"\");\n      switch (section) {\n        case \"IHDR\":\n          this.width = this.readUInt32();\n          this.height = this.readUInt32();\n          this.bits = this.data[this.pos++];\n          this.colorType = this.data[this.pos++];\n          this.compressionMethod = this.data[this.pos++];\n          this.filterMethod = this.data[this.pos++];\n          this.interlaceMethod = this.data[this.pos++];\n          break;\n        case \"acTL\":\n          this.animation = {\n            numFrames: this.readUInt32(),\n            numPlays: this.readUInt32() || Infinity,\n            frames: []\n          };\n          break;\n        case \"PLTE\":\n          this.palette = this.read(chunkSize);\n          break;\n        case \"fcTL\":\n          if (frame) {\n            this.animation.frames.push(frame);\n          }\n          this.pos += 4;\n          frame = {\n            width: this.readUInt32(),\n            height: this.readUInt32(),\n            xOffset: this.readUInt32(),\n            yOffset: this.readUInt32()\n          };\n          delayNum = this.readUInt16();\n          delayDen = this.readUInt16() || 100;\n          frame.delay = (1000 * delayNum) / delayDen;\n          frame.disposeOp = this.data[this.pos++];\n          frame.blendOp = this.data[this.pos++];\n          frame.data = [];\n          break;\n        case \"IDAT\":\n        case \"fdAT\":\n          if (section === \"fdAT\") {\n            this.pos += 4;\n            chunkSize -= 4;\n          }\n          data = (frame != null ? frame.data : void 0) || this.imgData;\n          for (\n            i = _i = 0;\n            0 <= chunkSize ? _i < chunkSize : _i > chunkSize;\n            i = 0 <= chunkSize ? ++_i : --_i\n          ) {\n            data.push(this.data[this.pos++]);\n          }\n          break;\n        case \"tRNS\":\n          this.transparency = {};\n          switch (this.colorType) {\n            case 3:\n              palLen = this.palette.length / 3;\n              this.transparency.indexed = this.read(chunkSize);\n              if (this.transparency.indexed.length > palLen)\n                throw new Error(\"More transparent colors than palette size\");\n              /*\n               * According to the PNG spec trns should be increased to the same size as palette if shorter\n               */\n              //palShort = 255 - this.transparency.indexed.length;\n              palShort = palLen - this.transparency.indexed.length;\n              if (palShort > 0) {\n                for (\n                  i = _j = 0;\n                  0 <= palShort ? _j < palShort : _j > palShort;\n                  i = 0 <= palShort ? ++_j : --_j\n                ) {\n                  this.transparency.indexed.push(255);\n                }\n              }\n              break;\n            case 0:\n              this.transparency.grayscale = this.read(chunkSize)[0];\n              break;\n            case 2:\n              this.transparency.rgb = this.read(chunkSize);\n          }\n          break;\n        case \"tEXt\":\n          text = this.read(chunkSize);\n          index = text.indexOf(0);\n          key = String.fromCharCode.apply(String, text.slice(0, index));\n          this.text[key] = String.fromCharCode.apply(\n            String,\n            text.slice(index + 1)\n          );\n          break;\n        case \"IEND\":\n          if (frame) {\n            this.animation.frames.push(frame);\n          }\n          this.colors = function() {\n            switch (this.colorType) {\n              case 0:\n              case 3:\n              case 4:\n                return 1;\n              case 2:\n              case 6:\n                return 3;\n            }\n          }.call(this);\n          this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6;\n          colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n          this.pixelBitlength = this.bits * colors;\n          this.colorSpace = function() {\n            switch (this.colors) {\n              case 1:\n                return \"DeviceGray\";\n              case 3:\n                return \"DeviceRGB\";\n            }\n          }.call(this);\n          this.imgData = new Uint8Array(this.imgData);\n          return;\n        default:\n          this.pos += chunkSize;\n      }\n      this.pos += 4;\n      if (this.pos > this.data.length) {\n        throw new Error(\"Incomplete or corrupt PNG file\");\n      }\n    }\n  }\n\n  PNG.prototype.read = function(bytes) {\n    var i, _i, _results;\n    _results = [];\n    for (\n      i = _i = 0;\n      0 <= bytes ? _i < bytes : _i > bytes;\n      i = 0 <= bytes ? ++_i : --_i\n    ) {\n      _results.push(this.data[this.pos++]);\n    }\n    return _results;\n  };\n\n  PNG.prototype.readUInt32 = function() {\n    var b1, b2, b3, b4;\n    b1 = this.data[this.pos++] << 24;\n    b2 = this.data[this.pos++] << 16;\n    b3 = this.data[this.pos++] << 8;\n    b4 = this.data[this.pos++];\n    return b1 | b2 | b3 | b4;\n  };\n\n  PNG.prototype.readUInt16 = function() {\n    var b1, b2;\n    b1 = this.data[this.pos++] << 8;\n    b2 = this.data[this.pos++];\n    return b1 | b2;\n  };\n\n  PNG.prototype.decodePixels = function(data) {\n    var pixelBytes = this.pixelBitlength / 8;\n    var fullPixels = new Uint8Array(this.width * this.height * pixelBytes);\n    var pos = 0;\n    var _this = this;\n\n    if (data == null) {\n      data = this.imgData;\n    }\n    if (data.length === 0) {\n      return new Uint8Array(0);\n    }\n\n    data = unzlibSync(data);\n    function pass(x0, y0, dx, dy) {\n      var abyte,\n        c,\n        col,\n        i,\n        left,\n        length,\n        p,\n        pa,\n        paeth,\n        pb,\n        pc,\n        pixels,\n        row,\n        scanlineLength,\n        upper,\n        upperLeft,\n        _i,\n        _j,\n        _k,\n        _l,\n        _m;\n      var w = Math.ceil((_this.width - x0) / dx),\n        h = Math.ceil((_this.height - y0) / dy);\n      var isFull = _this.width == w && _this.height == h;\n      scanlineLength = pixelBytes * w;\n      pixels = isFull ? fullPixels : new Uint8Array(scanlineLength * h);\n      length = data.length;\n      row = 0;\n      c = 0;\n      while (row < h && pos < length) {\n        switch (data[pos++]) {\n          case 0:\n            for (i = _i = 0; _i < scanlineLength; i = _i += 1) {\n              pixels[c++] = data[pos++];\n            }\n            break;\n          case 1:\n            for (i = _j = 0; _j < scanlineLength; i = _j += 1) {\n              abyte = data[pos++];\n              left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n              pixels[c++] = (abyte + left) % 256;\n            }\n            break;\n          case 2:\n            for (i = _k = 0; _k < scanlineLength; i = _k += 1) {\n              abyte = data[pos++];\n              col = (i - (i % pixelBytes)) / pixelBytes;\n              upper =\n                row &&\n                pixels[\n                  (row - 1) * scanlineLength +\n                    col * pixelBytes +\n                    (i % pixelBytes)\n                ];\n              pixels[c++] = (upper + abyte) % 256;\n            }\n            break;\n          case 3:\n            for (i = _l = 0; _l < scanlineLength; i = _l += 1) {\n              abyte = data[pos++];\n              col = (i - (i % pixelBytes)) / pixelBytes;\n              left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n              upper =\n                row &&\n                pixels[\n                  (row - 1) * scanlineLength +\n                    col * pixelBytes +\n                    (i % pixelBytes)\n                ];\n              pixels[c++] = (abyte + Math.floor((left + upper) / 2)) % 256;\n            }\n            break;\n          case 4:\n            for (i = _m = 0; _m < scanlineLength; i = _m += 1) {\n              abyte = data[pos++];\n              col = (i - (i % pixelBytes)) / pixelBytes;\n              left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n              if (row === 0) {\n                upper = upperLeft = 0;\n              } else {\n                upper =\n                  pixels[\n                    (row - 1) * scanlineLength +\n                      col * pixelBytes +\n                      (i % pixelBytes)\n                  ];\n                upperLeft =\n                  col &&\n                  pixels[\n                    (row - 1) * scanlineLength +\n                      (col - 1) * pixelBytes +\n                      (i % pixelBytes)\n                  ];\n              }\n              p = left + upper - upperLeft;\n              pa = Math.abs(p - left);\n              pb = Math.abs(p - upper);\n              pc = Math.abs(p - upperLeft);\n              if (pa <= pb && pa <= pc) {\n                paeth = left;\n              } else if (pb <= pc) {\n                paeth = upper;\n              } else {\n                paeth = upperLeft;\n              }\n              pixels[c++] = (abyte + paeth) % 256;\n            }\n            break;\n          default:\n            throw new Error(\"Invalid filter algorithm: \" + data[pos - 1]);\n        }\n        if (!isFull) {\n          var fullPos = ((y0 + row * dy) * _this.width + x0) * pixelBytes;\n          var partPos = row * scanlineLength;\n          for (i = 0; i < w; i += 1) {\n            for (var j = 0; j < pixelBytes; j += 1)\n              fullPixels[fullPos++] = pixels[partPos++];\n            fullPos += (dx - 1) * pixelBytes;\n          }\n        }\n        row++;\n      }\n    }\n    if (_this.interlaceMethod == 1) {\n      /*\n          1 6 4 6 2 6 4 6\n          7 7 7 7 7 7 7 7\n          5 6 5 6 5 6 5 6\n          7 7 7 7 7 7 7 7\n          3 6 4 6 3 6 4 6\n          7 7 7 7 7 7 7 7\n          5 6 5 6 5 6 5 6\n          7 7 7 7 7 7 7 7\n        */\n      pass(0, 0, 8, 8); // 1\n      /* NOTE these seem to follow the pattern:\n       * pass(x, 0, 2*x, 2*x);\n       * pass(0, x,   x, 2*x);\n       * with x being 4, 2, 1.\n       */\n      pass(4, 0, 8, 8); // 2\n      pass(0, 4, 4, 8); // 3\n\n      pass(2, 0, 4, 4); // 4\n      pass(0, 2, 2, 4); // 5\n\n      pass(1, 0, 2, 2); // 6\n      pass(0, 1, 1, 2); // 7\n    } else {\n      pass(0, 0, 1, 1);\n    }\n    return fullPixels;\n  };\n\n  PNG.prototype.decodePalette = function() {\n    var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1;\n    palette = this.palette;\n    transparency = this.transparency.indexed || [];\n    ret = new Uint8Array((transparency.length || 0) + palette.length);\n    pos = 0;\n    length = palette.length;\n    c = 0;\n    for (i = _i = 0, _ref = length; _i < _ref; i = _i += 3) {\n      ret[pos++] = palette[i];\n      ret[pos++] = palette[i + 1];\n      ret[pos++] = palette[i + 2];\n      ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255;\n    }\n    return ret;\n  };\n\n  PNG.prototype.copyToImageData = function(imageData, pixels) {\n    var alpha, colors, data, i, input, j, k, length, palette, v, _ref;\n    colors = this.colors;\n    palette = null;\n    alpha = this.hasAlphaChannel;\n    if (this.palette.length) {\n      palette =\n        (_ref = this._decodedPalette) != null\n          ? _ref\n          : (this._decodedPalette = this.decodePalette());\n      colors = 4;\n      alpha = true;\n    }\n    data = imageData.data || imageData;\n    length = data.length;\n    input = palette || pixels;\n    i = j = 0;\n    if (colors === 1) {\n      while (i < length) {\n        k = palette ? pixels[i / 4] * 4 : j;\n        v = input[k++];\n        data[i++] = v;\n        data[i++] = v;\n        data[i++] = v;\n        data[i++] = alpha ? input[k++] : 255;\n        j = k;\n      }\n    } else {\n      while (i < length) {\n        k = palette ? pixels[i / 4] * 4 : j;\n        data[i++] = input[k++];\n        data[i++] = input[k++];\n        data[i++] = input[k++];\n        data[i++] = alpha ? input[k++] : 255;\n        j = k;\n      }\n    }\n  };\n\n  PNG.prototype.decode = function() {\n    var ret;\n    ret = new Uint8Array(this.width * this.height * 4);\n    this.copyToImageData(ret, this.decodePixels());\n    return ret;\n  };\n\n  var hasBrowserCanvas = function() {\n    if (Object.prototype.toString.call(globalObject) === \"[object Window]\") {\n      try {\n        scratchCanvas = globalObject.document.createElement(\"canvas\");\n        scratchCtx = scratchCanvas.getContext(\"2d\");\n      } catch (e) {\n        return false;\n      }\n      return true;\n    }\n    return false;\n  };\n\n  hasBrowserCanvas();\n\n  makeImage = function(imageData) {\n    if (hasBrowserCanvas() === true) {\n      var img;\n      scratchCtx.width = imageData.width;\n      scratchCtx.height = imageData.height;\n      scratchCtx.clearRect(0, 0, imageData.width, imageData.height);\n      scratchCtx.putImageData(imageData, 0, 0);\n      img = new Image();\n      img.src = scratchCanvas.toDataURL();\n      return img;\n    }\n    throw new Error(\"This method requires a Browser with Canvas-capability.\");\n  };\n\n  PNG.prototype.decodeFrames = function(ctx) {\n    var frame, i, imageData, pixels, _i, _len, _ref, _results;\n    if (!this.animation) {\n      return;\n    }\n    _ref = this.animation.frames;\n    _results = [];\n    for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n      frame = _ref[i];\n      imageData = ctx.createImageData(frame.width, frame.height);\n      pixels = this.decodePixels(new Uint8Array(frame.data));\n      this.copyToImageData(imageData, pixels);\n      frame.imageData = imageData;\n      _results.push((frame.image = makeImage(imageData)));\n    }\n    return _results;\n  };\n\n  PNG.prototype.renderFrame = function(ctx, number) {\n    var frame, frames, prev;\n    frames = this.animation.frames;\n    frame = frames[number];\n    prev = frames[number - 1];\n    if (number === 0) {\n      ctx.clearRect(0, 0, this.width, this.height);\n    }\n    if (\n      (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_BACKGROUND\n    ) {\n      ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height);\n    } else if (\n      (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_PREVIOUS\n    ) {\n      ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset);\n    }\n    if (frame.blendOp === APNG_BLEND_OP_SOURCE) {\n      ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height);\n    }\n    return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset);\n  };\n\n  PNG.prototype.animate = function(ctx) {\n    var doFrame,\n      frameNumber,\n      frames,\n      numFrames,\n      numPlays,\n      _ref,\n      _this = this;\n    frameNumber = 0;\n    (_ref = this.animation),\n      (numFrames = _ref.numFrames),\n      (frames = _ref.frames),\n      (numPlays = _ref.numPlays);\n    return (doFrame = function() {\n      var f, frame;\n      f = frameNumber++ % numFrames;\n      frame = frames[f];\n      _this.renderFrame(ctx, f);\n      if (numFrames > 1 && frameNumber / numFrames < numPlays) {\n        return (_this.animation._timeout = setTimeout(doFrame, frame.delay));\n      }\n    })();\n  };\n\n  PNG.prototype.stopAnimation = function() {\n    var _ref;\n    return clearTimeout(\n      (_ref = this.animation) != null ? _ref._timeout : void 0\n    );\n  };\n\n  PNG.prototype.render = function(canvas) {\n    var ctx, data;\n    if (canvas._png) {\n      canvas._png.stopAnimation();\n    }\n    canvas._png = this;\n    canvas.width = this.width;\n    canvas.height = this.height;\n    ctx = canvas.getContext(\"2d\");\n    if (this.animation) {\n      this.decodeFrames(ctx);\n      return this.animate(ctx);\n    } else {\n      data = ctx.createImageData(this.width, this.height);\n      this.copyToImageData(data, this.decodePixels());\n      return ctx.putImageData(data, 0, 0);\n    }\n  };\n\n  return PNG;\n})();\n\nexport { PNG };\n","/** @license\n * MIT license.\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n *               2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF split_text_to_size plugin\n *\n * @name split_text_to_size\n * @module\n */\n(function(API) {\n  \"use strict\";\n  /**\n   * Returns an array of length matching length of the 'word' string, with each\n   * cell occupied by the width of the char in that position.\n   *\n   * @name getCharWidthsArray\n   * @function\n   * @param {string} text\n   * @param {Object} options\n   * @returns {Array}\n   */\n  var getCharWidthsArray = (API.getCharWidthsArray = function(text, options) {\n    options = options || {};\n\n    var activeFont = options.font || this.internal.getFont();\n    var fontSize = options.fontSize || this.internal.getFontSize();\n    var charSpace = options.charSpace || this.internal.getCharSpace();\n\n    var widths = options.widths\n      ? options.widths\n      : activeFont.metadata.Unicode.widths;\n    var widthsFractionOf = widths.fof ? widths.fof : 1;\n    var kerning = options.kerning\n      ? options.kerning\n      : activeFont.metadata.Unicode.kerning;\n    var kerningFractionOf = kerning.fof ? kerning.fof : 1;\n    var doKerning = options.doKerning === false ? false : true;\n    var kerningValue = 0;\n\n    var i;\n    var length = text.length;\n    var char_code;\n    var prior_char_code = 0; //for kerning\n    var default_char_width = widths[0] || widthsFractionOf;\n    var output = [];\n\n    for (i = 0; i < length; i++) {\n      char_code = text.charCodeAt(i);\n\n      if (typeof activeFont.metadata.widthOfString === \"function\") {\n        output.push(\n          (activeFont.metadata.widthOfGlyph(\n            activeFont.metadata.characterToGlyph(char_code)\n          ) +\n            charSpace * (1000 / fontSize) || 0) / 1000\n        );\n      } else {\n        if (\n          doKerning &&\n          typeof kerning[char_code] === \"object\" &&\n          !isNaN(parseInt(kerning[char_code][prior_char_code], 10))\n        ) {\n          kerningValue =\n            kerning[char_code][prior_char_code] / kerningFractionOf;\n        } else {\n          kerningValue = 0;\n        }\n        output.push(\n          (widths[char_code] || default_char_width) / widthsFractionOf +\n            kerningValue\n        );\n      }\n      prior_char_code = char_code;\n    }\n\n    return output;\n  });\n\n  /**\n   * Returns a widths of string in a given font, if the font size is set as 1 point.\n   *\n   * In other words, this is \"proportional\" value. For 1 unit of font size, the length\n   * of the string will be that much.\n   *\n   * Multiply by font size to get actual width in *points*\n   * Then divide by 72 to get inches or divide by (72/25.6) to get 'mm' etc.\n   *\n   * @name getStringUnitWidth\n   * @public\n   * @function\n   * @param {string} text\n   * @param {string} options\n   * @returns {number} result\n   */\n  var getStringUnitWidth = (API.getStringUnitWidth = function(text, options) {\n    options = options || {};\n\n    var fontSize = options.fontSize || this.internal.getFontSize();\n    var font = options.font || this.internal.getFont();\n    var charSpace = options.charSpace || this.internal.getCharSpace();\n    var result = 0;\n\n    if (API.processArabic) {\n      text = API.processArabic(text);\n    }\n\n    if (typeof font.metadata.widthOfString === \"function\") {\n      result =\n        font.metadata.widthOfString(text, fontSize, charSpace) / fontSize;\n    } else {\n      result = getCharWidthsArray\n        .apply(this, arguments)\n        .reduce(function(pv, cv) {\n          return pv + cv;\n        }, 0);\n    }\n    return result;\n  });\n\n  /**\n  returns array of lines\n  */\n  var splitLongWord = function(word, widths_array, firstLineMaxLen, maxLen) {\n    var answer = [];\n\n    // 1st, chop off the piece that can fit on the hanging line.\n    var i = 0,\n      l = word.length,\n      workingLen = 0;\n    while (i !== l && workingLen + widths_array[i] < firstLineMaxLen) {\n      workingLen += widths_array[i];\n      i++;\n    }\n    // this is first line.\n    answer.push(word.slice(0, i));\n\n    // 2nd. Split the rest into maxLen pieces.\n    var startOfLine = i;\n    workingLen = 0;\n    while (i !== l) {\n      if (workingLen + widths_array[i] > maxLen) {\n        answer.push(word.slice(startOfLine, i));\n        workingLen = 0;\n        startOfLine = i;\n      }\n      workingLen += widths_array[i];\n      i++;\n    }\n    if (startOfLine !== i) {\n      answer.push(word.slice(startOfLine, i));\n    }\n\n    return answer;\n  };\n\n  // Note, all sizing inputs for this function must be in \"font measurement units\"\n  // By default, for PDF, it's \"point\".\n  var splitParagraphIntoLines = function(text, maxlen, options) {\n    // at this time works only on Western scripts, ones with space char\n    // separating the words. Feel free to expand.\n\n    if (!options) {\n      options = {};\n    }\n\n    var line = [],\n      lines = [line],\n      line_length = options.textIndent || 0,\n      separator_length = 0,\n      current_word_length = 0,\n      word,\n      widths_array,\n      words = text.split(\" \"),\n      spaceCharWidth = getCharWidthsArray.apply(this, [\" \", options])[0],\n      i,\n      l,\n      tmp,\n      lineIndent;\n\n    if (options.lineIndent === -1) {\n      lineIndent = words[0].length + 2;\n    } else {\n      lineIndent = options.lineIndent || 0;\n    }\n    if (lineIndent) {\n      var pad = Array(lineIndent).join(\" \"),\n        wrds = [];\n      words.map(function(wrd) {\n        wrd = wrd.split(/\\s*\\n/);\n        if (wrd.length > 1) {\n          wrds = wrds.concat(\n            wrd.map(function(wrd, idx) {\n              return (idx && wrd.length ? \"\\n\" : \"\") + wrd;\n            })\n          );\n        } else {\n          wrds.push(wrd[0]);\n        }\n      });\n      words = wrds;\n      lineIndent = getStringUnitWidth.apply(this, [pad, options]);\n    }\n\n    for (i = 0, l = words.length; i < l; i++) {\n      var force = 0;\n\n      word = words[i];\n      if (lineIndent && word[0] == \"\\n\") {\n        word = word.substr(1);\n        force = 1;\n      }\n      widths_array = getCharWidthsArray.apply(this, [word, options]);\n      current_word_length = widths_array.reduce(function(pv, cv) {\n        return pv + cv;\n      }, 0);\n\n      if (\n        line_length + separator_length + current_word_length > maxlen ||\n        force\n      ) {\n        if (current_word_length > maxlen) {\n          // this happens when you have space-less long URLs for example.\n          // we just chop these to size. We do NOT insert hiphens\n          tmp = splitLongWord.apply(this, [\n            word,\n            widths_array,\n            maxlen - (line_length + separator_length),\n            maxlen\n          ]);\n          // first line we add to existing line object\n          line.push(tmp.shift()); // it's ok to have extra space indicator there\n          // last line we make into new line object\n          line = [tmp.pop()];\n          // lines in the middle we apped to lines object as whole lines\n          while (tmp.length) {\n            lines.push([tmp.shift()]); // single fragment occupies whole line\n          }\n          current_word_length = widths_array\n            .slice(word.length - (line[0] ? line[0].length : 0))\n            .reduce(function(pv, cv) {\n              return pv + cv;\n            }, 0);\n        } else {\n          // just put it on a new line\n          line = [word];\n        }\n\n        // now we attach new line to lines\n        lines.push(line);\n        line_length = current_word_length + lineIndent;\n        separator_length = spaceCharWidth;\n      } else {\n        line.push(word);\n\n        line_length += separator_length + current_word_length;\n        separator_length = spaceCharWidth;\n      }\n    }\n\n    var postProcess;\n    if (lineIndent) {\n      postProcess = function(ln, idx) {\n        return (idx ? pad : \"\") + ln.join(\" \");\n      };\n    } else {\n      postProcess = function(ln) {\n        return ln.join(\" \");\n      };\n    }\n\n    return lines.map(postProcess);\n  };\n\n  /**\n   * Splits a given string into an array of strings. Uses 'size' value\n   * (in measurement units declared as default for the jsPDF instance)\n   * and the font's \"widths\" and \"Kerning\" tables, where available, to\n   * determine display length of a given string for a given font.\n   *\n   * We use character's 100% of unit size (height) as width when Width\n   * table or other default width is not available.\n   *\n   * @name splitTextToSize\n   * @public\n   * @function\n   * @param {string} text Unencoded, regular JavaScript (Unicode, UTF-16 / UCS-2) string.\n   * @param {number} size Nominal number, measured in units default to this instance of jsPDF.\n   * @param {Object} options Optional flags needed for chopper to do the right thing.\n   * @returns {Array} array Array with strings chopped to size.\n   */\n  API.splitTextToSize = function(text, maxlen, options) {\n    \"use strict\";\n\n    options = options || {};\n\n    var fsize = options.fontSize || this.internal.getFontSize(),\n      newOptions = function(options) {\n        var widths = {\n            0: 1\n          },\n          kerning = {};\n\n        if (!options.widths || !options.kerning) {\n          var f = this.internal.getFont(options.fontName, options.fontStyle),\n            encoding = \"Unicode\";\n          // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE\n          // Actual JavaScript-native String's 16bit char codes used.\n          // no multi-byte logic here\n\n          if (f.metadata[encoding]) {\n            return {\n              widths: f.metadata[encoding].widths || widths,\n              kerning: f.metadata[encoding].kerning || kerning\n            };\n          } else {\n            return {\n              font: f.metadata,\n              fontSize: this.internal.getFontSize(),\n              charSpace: this.internal.getCharSpace()\n            };\n          }\n        } else {\n          return {\n            widths: options.widths,\n            kerning: options.kerning\n          };\n        }\n      }.call(this, options);\n\n    // first we split on end-of-line chars\n    var paragraphs;\n    if (Array.isArray(text)) {\n      paragraphs = text;\n    } else {\n      paragraphs = String(text).split(/\\r?\\n/);\n    }\n\n    // now we convert size (max length of line) into \"font size units\"\n    // at present time, the \"font size unit\" is always 'point'\n    // 'proportional' means, \"in proportion to font size\"\n    var fontUnit_maxLen = (1.0 * this.internal.scaleFactor * maxlen) / fsize;\n    // at this time, fsize is always in \"points\" regardless of the default measurement unit of the doc.\n    // this may change in the future?\n    // until then, proportional_maxlen is likely to be in 'points'\n\n    // If first line is to be indented (shorter or longer) than maxLen\n    // we indicate that by using CSS-style \"text-indent\" option.\n    // here it's in font units too (which is likely 'points')\n    // it can be negative (which makes the first line longer than maxLen)\n    newOptions.textIndent = options.textIndent\n      ? (options.textIndent * 1.0 * this.internal.scaleFactor) / fsize\n      : 0;\n    newOptions.lineIndent = options.lineIndent;\n\n    var i,\n      l,\n      output = [];\n    for (i = 0, l = paragraphs.length; i < l; i++) {\n      output = output.concat(\n        splitParagraphIntoLines.apply(this, [\n          paragraphs[i],\n          fontUnit_maxLen,\n          newOptions\n        ])\n      );\n    }\n\n    return output;\n  };\n})(jsPDF.API);\n","/**\n * @license\n * (c) Dean McNamee <dean@gmail.com>, 2013.\n *\n * https://github.com/deanm/omggif\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\n * including animation and compression.  It does not rely on any specific\n * underlying system, so should run in the browser, Node, or Plask.\n */\n\n\"use strict\";\n\nimport { console } from \"./console.js\";\n\nfunction GifWriter(buf, width, height, gopts) {\n  var p = 0;\n\n  var gopts = gopts === undefined ? {} : gopts;\n  var loop_count = gopts.loop === undefined ? null : gopts.loop;\n  var global_palette = gopts.palette === undefined ? null : gopts.palette;\n\n  if (width <= 0 || height <= 0 || width > 65535 || height > 65535)\n    throw new Error(\"Width/Height invalid.\");\n\n  function check_palette_and_num_colors(palette) {\n    var num_colors = palette.length;\n    if (num_colors < 2 || num_colors > 256 || num_colors & (num_colors - 1)) {\n      throw new Error(\n        \"Invalid code/color length, must be power of 2 and 2 .. 256.\"\n      );\n    }\n    return num_colors;\n  }\n\n  // - Header.\n  buf[p++] = 0x47;\n  buf[p++] = 0x49;\n  buf[p++] = 0x46; // GIF\n  buf[p++] = 0x38;\n  buf[p++] = 0x39;\n  buf[p++] = 0x61; // 89a\n\n  // Handling of Global Color Table (palette) and background index.\n  var gp_num_colors_pow2 = 0;\n  var background = 0;\n  if (global_palette !== null) {\n    var gp_num_colors = check_palette_and_num_colors(global_palette);\n    while ((gp_num_colors >>= 1)) ++gp_num_colors_pow2;\n    gp_num_colors = 1 << gp_num_colors_pow2;\n    --gp_num_colors_pow2;\n    if (gopts.background !== undefined) {\n      background = gopts.background;\n      if (background >= gp_num_colors)\n        throw new Error(\"Background index out of range.\");\n      // The GIF spec states that a background index of 0 should be ignored, so\n      // this is probably a mistake and you really want to set it to another\n      // slot in the palette.  But actually in the end most browsers, etc end\n      // up ignoring this almost completely (including for dispose background).\n      if (background === 0)\n        throw new Error(\"Background index explicitly passed as 0.\");\n    }\n  }\n\n  // - Logical Screen Descriptor.\n  // NOTE(deanm): w/h apparently ignored by implementations, but set anyway.\n  buf[p++] = width & 0xff;\n  buf[p++] = (width >> 8) & 0xff;\n  buf[p++] = height & 0xff;\n  buf[p++] = (height >> 8) & 0xff;\n  // NOTE: Indicates 0-bpp original color resolution (unused?).\n  buf[p++] = (global_palette !== null ? 0x80 : 0) | gp_num_colors_pow2; // Global Color Table Flag. // NOTE: No sort flag (unused?).\n  buf[p++] = background; // Background Color Index.\n  buf[p++] = 0; // Pixel aspect ratio (unused?).\n\n  // - Global Color Table\n  if (global_palette !== null) {\n    for (var i = 0, il = global_palette.length; i < il; ++i) {\n      var rgb = global_palette[i];\n      buf[p++] = (rgb >> 16) & 0xff;\n      buf[p++] = (rgb >> 8) & 0xff;\n      buf[p++] = rgb & 0xff;\n    }\n  }\n\n  if (loop_count !== null) {\n    // Netscape block for looping.\n    if (loop_count < 0 || loop_count > 65535)\n      throw new Error(\"Loop count invalid.\");\n    // Extension code, label, and length.\n    buf[p++] = 0x21;\n    buf[p++] = 0xff;\n    buf[p++] = 0x0b;\n    // NETSCAPE2.0\n    buf[p++] = 0x4e;\n    buf[p++] = 0x45;\n    buf[p++] = 0x54;\n    buf[p++] = 0x53;\n    buf[p++] = 0x43;\n    buf[p++] = 0x41;\n    buf[p++] = 0x50;\n    buf[p++] = 0x45;\n    buf[p++] = 0x32;\n    buf[p++] = 0x2e;\n    buf[p++] = 0x30;\n    // Sub-block\n    buf[p++] = 0x03;\n    buf[p++] = 0x01;\n    buf[p++] = loop_count & 0xff;\n    buf[p++] = (loop_count >> 8) & 0xff;\n    buf[p++] = 0x00; // Terminator.\n  }\n\n  var ended = false;\n\n  this.addFrame = function(x, y, w, h, indexed_pixels, opts) {\n    if (ended === true) {\n      --p;\n      ended = false;\n    } // Un-end.\n\n    opts = opts === undefined ? {} : opts;\n\n    // TODO(deanm): Bounds check x, y.  Do they need to be within the virtual\n    // canvas width/height, I imagine?\n    if (x < 0 || y < 0 || x > 65535 || y > 65535)\n      throw new Error(\"x/y invalid.\");\n\n    if (w <= 0 || h <= 0 || w > 65535 || h > 65535)\n      throw new Error(\"Width/Height invalid.\");\n\n    if (indexed_pixels.length < w * h)\n      throw new Error(\"Not enough pixels for the frame size.\");\n\n    var using_local_palette = true;\n    var palette = opts.palette;\n    if (palette === undefined || palette === null) {\n      using_local_palette = false;\n      palette = global_palette;\n    }\n\n    if (palette === undefined || palette === null)\n      throw new Error(\"Must supply either a local or global palette.\");\n\n    var num_colors = check_palette_and_num_colors(palette);\n\n    // Compute the min_code_size (power of 2), destroying num_colors.\n    var min_code_size = 0;\n    while ((num_colors >>= 1)) ++min_code_size;\n    num_colors = 1 << min_code_size; // Now we can easily get it back.\n\n    var delay = opts.delay === undefined ? 0 : opts.delay;\n\n    // From the spec:\n    //     0 -   No disposal specified. The decoder is\n    //           not required to take any action.\n    //     1 -   Do not dispose. The graphic is to be left\n    //           in place.\n    //     2 -   Restore to background color. The area used by the\n    //           graphic must be restored to the background color.\n    //     3 -   Restore to previous. The decoder is required to\n    //           restore the area overwritten by the graphic with\n    //           what was there prior to rendering the graphic.\n    //  4-7 -    To be defined.\n    // NOTE(deanm): Dispose background doesn't really work, apparently most\n    // browsers ignore the background palette index and clear to transparency.\n    var disposal = opts.disposal === undefined ? 0 : opts.disposal;\n    if (disposal < 0 || disposal > 3)\n      // 4-7 is reserved.\n      throw new Error(\"Disposal out of range.\");\n\n    var use_transparency = false;\n    var transparent_index = 0;\n    if (opts.transparent !== undefined && opts.transparent !== null) {\n      use_transparency = true;\n      transparent_index = opts.transparent;\n      if (transparent_index < 0 || transparent_index >= num_colors)\n        throw new Error(\"Transparent color index.\");\n    }\n\n    if (disposal !== 0 || use_transparency || delay !== 0) {\n      // - Graphics Control Extension\n      buf[p++] = 0x21;\n      buf[p++] = 0xf9; // Extension / Label.\n      buf[p++] = 4; // Byte size.\n\n      buf[p++] = (disposal << 2) | (use_transparency === true ? 1 : 0);\n      buf[p++] = delay & 0xff;\n      buf[p++] = (delay >> 8) & 0xff;\n      buf[p++] = transparent_index; // Transparent color index.\n      buf[p++] = 0; // Block Terminator.\n    }\n\n    // - Image Descriptor\n    buf[p++] = 0x2c; // Image Seperator.\n    buf[p++] = x & 0xff;\n    buf[p++] = (x >> 8) & 0xff; // Left.\n    buf[p++] = y & 0xff;\n    buf[p++] = (y >> 8) & 0xff; // Top.\n    buf[p++] = w & 0xff;\n    buf[p++] = (w >> 8) & 0xff;\n    buf[p++] = h & 0xff;\n    buf[p++] = (h >> 8) & 0xff;\n    // NOTE: No sort flag (unused?).\n    // TODO(deanm): Support interlace.\n    buf[p++] = using_local_palette === true ? 0x80 | (min_code_size - 1) : 0;\n\n    // - Local Color Table\n    if (using_local_palette === true) {\n      for (var i = 0, il = palette.length; i < il; ++i) {\n        var rgb = palette[i];\n        buf[p++] = (rgb >> 16) & 0xff;\n        buf[p++] = (rgb >> 8) & 0xff;\n        buf[p++] = rgb & 0xff;\n      }\n    }\n\n    p = GifWriterOutputLZWCodeStream(\n      buf,\n      p,\n      min_code_size < 2 ? 2 : min_code_size,\n      indexed_pixels\n    );\n\n    return p;\n  };\n\n  this.end = function() {\n    if (ended === false) {\n      buf[p++] = 0x3b; // Trailer.\n      ended = true;\n    }\n    return p;\n  };\n\n  this.getOutputBuffer = function() {\n    return buf;\n  };\n  this.setOutputBuffer = function(v) {\n    buf = v;\n  };\n  this.getOutputBufferPosition = function() {\n    return p;\n  };\n  this.setOutputBufferPosition = function(v) {\n    p = v;\n  };\n}\n\n// Main compression routine, palette indexes -> LZW code stream.\n// |index_stream| must have at least one entry.\nfunction GifWriterOutputLZWCodeStream(buf, p, min_code_size, index_stream) {\n  buf[p++] = min_code_size;\n  var cur_subblock = p++; // Pointing at the length field.\n\n  var clear_code = 1 << min_code_size;\n  var code_mask = clear_code - 1;\n  var eoi_code = clear_code + 1;\n  var next_code = eoi_code + 1;\n\n  var cur_code_size = min_code_size + 1; // Number of bits per code.\n  var cur_shift = 0;\n  // We have at most 12-bit codes, so we should have to hold a max of 19\n  // bits here (and then we would write out).\n  var cur = 0;\n\n  function emit_bytes_to_buffer(bit_block_size) {\n    while (cur_shift >= bit_block_size) {\n      buf[p++] = cur & 0xff;\n      cur >>= 8;\n      cur_shift -= 8;\n      if (p === cur_subblock + 256) {\n        // Finished a subblock.\n        buf[cur_subblock] = 255;\n        cur_subblock = p++;\n      }\n    }\n  }\n\n  function emit_code(c) {\n    cur |= c << cur_shift;\n    cur_shift += cur_code_size;\n    emit_bytes_to_buffer(8);\n  }\n\n  // I am not an expert on the topic, and I don't want to write a thesis.\n  // However, it is good to outline here the basic algorithm and the few data\n  // structures and optimizations here that make this implementation fast.\n  // The basic idea behind LZW is to build a table of previously seen runs\n  // addressed by a short id (herein called output code).  All data is\n  // referenced by a code, which represents one or more values from the\n  // original input stream.  All input bytes can be referenced as the same\n  // value as an output code.  So if you didn't want any compression, you\n  // could more or less just output the original bytes as codes (there are\n  // some details to this, but it is the idea).  In order to achieve\n  // compression, values greater then the input range (codes can be up to\n  // 12-bit while input only 8-bit) represent a sequence of previously seen\n  // inputs.  The decompressor is able to build the same mapping while\n  // decoding, so there is always a shared common knowledge between the\n  // encoding and decoder, which is also important for \"timing\" aspects like\n  // how to handle variable bit width code encoding.\n  //\n  // One obvious but very important consequence of the table system is there\n  // is always a unique id (at most 12-bits) to map the runs.  'A' might be\n  // 4, then 'AA' might be 10, 'AAA' 11, 'AAAA' 12, etc.  This relationship\n  // can be used for an effecient lookup strategy for the code mapping.  We\n  // need to know if a run has been seen before, and be able to map that run\n  // to the output code.  Since we start with known unique ids (input bytes),\n  // and then from those build more unique ids (table entries), we can\n  // continue this chain (almost like a linked list) to always have small\n  // integer values that represent the current byte chains in the encoder.\n  // This means instead of tracking the input bytes (AAAABCD) to know our\n  // current state, we can track the table entry for AAAABC (it is guaranteed\n  // to exist by the nature of the algorithm) and the next character D.\n  // Therefor the tuple of (table_entry, byte) is guaranteed to also be\n  // unique.  This allows us to create a simple lookup key for mapping input\n  // sequences to codes (table indices) without having to store or search\n  // any of the code sequences.  So if 'AAAA' has a table entry of 12, the\n  // tuple of ('AAAA', K) for any input byte K will be unique, and can be our\n  // key.  This leads to a integer value at most 20-bits, which can always\n  // fit in an SMI value and be used as a fast sparse array / object key.\n\n  // Output code for the current contents of the index buffer.\n  var ib_code = index_stream[0] & code_mask; // Load first input index.\n  var code_table = {}; // Key'd on our 20-bit \"tuple\".\n\n  emit_code(clear_code); // Spec says first code should be a clear code.\n\n  // First index already loaded, process the rest of the stream.\n  for (var i = 1, il = index_stream.length; i < il; ++i) {\n    var k = index_stream[i] & code_mask;\n    var cur_key = (ib_code << 8) | k; // (prev, k) unique tuple.\n    var cur_code = code_table[cur_key]; // buffer + k.\n\n    // Check if we have to create a new code table entry.\n    if (cur_code === undefined) {\n      // We don't have buffer + k.\n      // Emit index buffer (without k).\n      // This is an inline version of emit_code, because this is the core\n      // writing routine of the compressor (and V8 cannot inline emit_code\n      // because it is a closure here in a different context).  Additionally\n      // we can call emit_byte_to_buffer less often, because we can have\n      // 30-bits (from our 31-bit signed SMI), and we know our codes will only\n      // be 12-bits, so can safely have 18-bits there without overflow.\n      // emit_code(ib_code);\n      cur |= ib_code << cur_shift;\n      cur_shift += cur_code_size;\n      while (cur_shift >= 8) {\n        buf[p++] = cur & 0xff;\n        cur >>= 8;\n        cur_shift -= 8;\n        if (p === cur_subblock + 256) {\n          // Finished a subblock.\n          buf[cur_subblock] = 255;\n          cur_subblock = p++;\n        }\n      }\n\n      if (next_code === 4096) {\n        // Table full, need a clear.\n        emit_code(clear_code);\n        next_code = eoi_code + 1;\n        cur_code_size = min_code_size + 1;\n        code_table = {};\n      } else {\n        // Table not full, insert a new entry.\n        // Increase our variable bit code sizes if necessary.  This is a bit\n        // tricky as it is based on \"timing\" between the encoding and\n        // decoder.  From the encoders perspective this should happen after\n        // we've already emitted the index buffer and are about to create the\n        // first table entry that would overflow our current code bit size.\n        if (next_code >= 1 << cur_code_size) ++cur_code_size;\n        code_table[cur_key] = next_code++; // Insert into code table.\n      }\n\n      ib_code = k; // Index buffer to single input k.\n    } else {\n      ib_code = cur_code; // Index buffer to sequence in code table.\n    }\n  }\n\n  emit_code(ib_code); // There will still be something in the index buffer.\n  emit_code(eoi_code); // End Of Information.\n\n  // Flush / finalize the sub-blocks stream to the buffer.\n  emit_bytes_to_buffer(1);\n\n  // Finish the sub-blocks, writing out any unfinished lengths and\n  // terminating with a sub-block of length 0.  If we have already started\n  // but not yet used a sub-block it can just become the terminator.\n  if (cur_subblock + 1 === p) {\n    // Started but unused.\n    buf[cur_subblock] = 0;\n  } else {\n    // Started and used, write length and additional terminator block.\n    buf[cur_subblock] = p - cur_subblock - 1;\n    buf[p++] = 0;\n  }\n  return p;\n}\n\nfunction GifReader(buf) {\n  var p = 0;\n\n  // - Header (GIF87a or GIF89a).\n  if (\n    buf[p++] !== 0x47 ||\n    buf[p++] !== 0x49 ||\n    buf[p++] !== 0x46 ||\n    buf[p++] !== 0x38 ||\n    ((buf[p++] + 1) & 0xfd) !== 0x38 ||\n    buf[p++] !== 0x61\n  ) {\n    throw new Error(\"Invalid GIF 87a/89a header.\");\n  }\n\n  // - Logical Screen Descriptor.\n  var width = buf[p++] | (buf[p++] << 8);\n  var height = buf[p++] | (buf[p++] << 8);\n  var pf0 = buf[p++]; // <Packed Fields>.\n  var global_palette_flag = pf0 >> 7;\n  var num_global_colors_pow2 = pf0 & 0x7;\n  var num_global_colors = 1 << (num_global_colors_pow2 + 1);\n  var background = buf[p++];\n  buf[p++]; // Pixel aspect ratio (unused?).\n\n  var global_palette_offset = null;\n  var global_palette_size = null;\n\n  if (global_palette_flag) {\n    global_palette_offset = p;\n    global_palette_size = num_global_colors;\n    p += num_global_colors * 3; // Seek past palette.\n  }\n\n  var no_eof = true;\n\n  var frames = [];\n\n  var delay = 0;\n  var transparent_index = null;\n  var disposal = 0; // 0 - No disposal specified.\n  var loop_count = null;\n\n  this.width = width;\n  this.height = height;\n\n  while (no_eof && p < buf.length) {\n    switch (buf[p++]) {\n      case 0x21: // Graphics Control Extension Block\n        switch (buf[p++]) {\n          case 0xff: // Application specific block\n            // Try if it's a Netscape block (with animation loop counter).\n            if (\n              buf[p] !== 0x0b || // 21 FF already read, check block size.\n              // NETSCAPE2.0\n              (buf[p + 1] == 0x4e &&\n                buf[p + 2] == 0x45 &&\n                buf[p + 3] == 0x54 &&\n                buf[p + 4] == 0x53 &&\n                buf[p + 5] == 0x43 &&\n                buf[p + 6] == 0x41 &&\n                buf[p + 7] == 0x50 &&\n                buf[p + 8] == 0x45 &&\n                buf[p + 9] == 0x32 &&\n                buf[p + 10] == 0x2e &&\n                buf[p + 11] == 0x30 &&\n                // Sub-block\n                buf[p + 12] == 0x03 &&\n                buf[p + 13] == 0x01 &&\n                buf[p + 16] == 0)\n            ) {\n              p += 14;\n              loop_count = buf[p++] | (buf[p++] << 8);\n              p++; // Skip terminator.\n            } else {\n              // We don't know what it is, just try to get past it.\n              p += 12;\n              while (true) {\n                // Seek through subblocks.\n                var block_size = buf[p++];\n                // Bad block size (ex: undefined from an out of bounds read).\n                if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n                if (block_size === 0) break; // 0 size is terminator\n                p += block_size;\n              }\n            }\n            break;\n\n          case 0xf9: // Graphics Control Extension\n            if (buf[p++] !== 0x4 || buf[p + 4] !== 0)\n              throw new Error(\"Invalid graphics extension block.\");\n            var pf1 = buf[p++];\n            delay = buf[p++] | (buf[p++] << 8);\n            transparent_index = buf[p++];\n            if ((pf1 & 1) === 0) transparent_index = null;\n            disposal = (pf1 >> 2) & 0x7;\n            p++; // Skip terminator.\n            break;\n\n          case 0xfe: // Comment Extension.\n            while (true) {\n              // Seek through subblocks.\n              var block_size = buf[p++];\n              // Bad block size (ex: undefined from an out of bounds read).\n              if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n              if (block_size === 0) break; // 0 size is terminator\n              // console.log(buf.slice(p, p+block_size).toString('ascii'));\n              p += block_size;\n            }\n            break;\n\n          default:\n            throw new Error(\n              \"Unknown graphic control label: 0x\" + buf[p - 1].toString(16)\n            );\n        }\n        break;\n\n      case 0x2c: // Image Descriptor.\n        var x = buf[p++] | (buf[p++] << 8);\n        var y = buf[p++] | (buf[p++] << 8);\n        var w = buf[p++] | (buf[p++] << 8);\n        var h = buf[p++] | (buf[p++] << 8);\n        var pf2 = buf[p++];\n        var local_palette_flag = pf2 >> 7;\n        var interlace_flag = (pf2 >> 6) & 1;\n        var num_local_colors_pow2 = pf2 & 0x7;\n        var num_local_colors = 1 << (num_local_colors_pow2 + 1);\n        var palette_offset = global_palette_offset;\n        var palette_size = global_palette_size;\n        var has_local_palette = false;\n        if (local_palette_flag) {\n          var has_local_palette = true;\n          palette_offset = p; // Override with local palette.\n          palette_size = num_local_colors;\n          p += num_local_colors * 3; // Seek past palette.\n        }\n\n        var data_offset = p;\n\n        p++; // codesize\n        while (true) {\n          var block_size = buf[p++];\n          // Bad block size (ex: undefined from an out of bounds read).\n          if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n          if (block_size === 0) break; // 0 size is terminator\n          p += block_size;\n        }\n\n        frames.push({\n          x: x,\n          y: y,\n          width: w,\n          height: h,\n          has_local_palette: has_local_palette,\n          palette_offset: palette_offset,\n          palette_size: palette_size,\n          data_offset: data_offset,\n          data_length: p - data_offset,\n          transparent_index: transparent_index,\n          interlaced: !!interlace_flag,\n          delay: delay,\n          disposal: disposal\n        });\n        break;\n\n      case 0x3b: // Trailer Marker (end of file).\n        no_eof = false;\n        break;\n\n      default:\n        throw new Error(\"Unknown gif block: 0x\" + buf[p - 1].toString(16));\n        break;\n    }\n  }\n\n  this.numFrames = function() {\n    return frames.length;\n  };\n\n  this.loopCount = function() {\n    return loop_count;\n  };\n\n  this.frameInfo = function(frame_num) {\n    if (frame_num < 0 || frame_num >= frames.length)\n      throw new Error(\"Frame index out of range.\");\n    return frames[frame_num];\n  };\n\n  this.decodeAndBlitFrameBGRA = function(frame_num, pixels) {\n    var frame = this.frameInfo(frame_num);\n    var num_pixels = frame.width * frame.height;\n    var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n    GifReaderLZWOutputIndexStream(\n      buf,\n      frame.data_offset,\n      index_stream,\n      num_pixels\n    );\n    var palette_offset = frame.palette_offset;\n\n    // NOTE(deanm): It seems to be much faster to compare index to 256 than\n    // to === null.  Not sure why, but CompareStub_EQ_STRICT shows up high in\n    // the profile, not sure if it's related to using a Uint8Array.\n    var trans = frame.transparent_index;\n    if (trans === null) trans = 256;\n\n    // We are possibly just blitting to a portion of the entire frame.\n    // That is a subrect within the framerect, so the additional pixels\n    // must be skipped over after we finished a scanline.\n    var framewidth = frame.width;\n    var framestride = width - framewidth;\n    var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n    // Output indices of the top left and bottom right corners of the subrect.\n    var opbeg = (frame.y * width + frame.x) * 4;\n    var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n    var op = opbeg;\n\n    var scanstride = framestride * 4;\n\n    // Use scanstride to skip past the rows when interlacing.  This is skipping\n    // 7 rows for the first two passes, then 3 then 1.\n    if (frame.interlaced === true) {\n      scanstride += width * 4 * 7; // Pass 1.\n    }\n\n    var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n    for (var i = 0, il = index_stream.length; i < il; ++i) {\n      var index = index_stream[i];\n\n      if (xleft === 0) {\n        // Beginning of new scan line\n        op += scanstride;\n        xleft = framewidth;\n        if (op >= opend) {\n          // Catch the wrap to switch passes when interlacing.\n          scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n          // interlaceskip / 2 * 4 is interlaceskip << 1.\n          op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n          interlaceskip >>= 1;\n        }\n      }\n\n      if (index === trans) {\n        op += 4;\n      } else {\n        var r = buf[palette_offset + index * 3];\n        var g = buf[palette_offset + index * 3 + 1];\n        var b = buf[palette_offset + index * 3 + 2];\n        pixels[op++] = b;\n        pixels[op++] = g;\n        pixels[op++] = r;\n        pixels[op++] = 255;\n      }\n      --xleft;\n    }\n  };\n\n  // I will go to copy and paste hell one day...\n  this.decodeAndBlitFrameRGBA = function(frame_num, pixels) {\n    var frame = this.frameInfo(frame_num);\n    var num_pixels = frame.width * frame.height;\n    var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n    GifReaderLZWOutputIndexStream(\n      buf,\n      frame.data_offset,\n      index_stream,\n      num_pixels\n    );\n    var palette_offset = frame.palette_offset;\n\n    // NOTE(deanm): It seems to be much faster to compare index to 256 than\n    // to === null.  Not sure why, but CompareStub_EQ_STRICT shows up high in\n    // the profile, not sure if it's related to using a Uint8Array.\n    var trans = frame.transparent_index;\n    if (trans === null) trans = 256;\n\n    // We are possibly just blitting to a portion of the entire frame.\n    // That is a subrect within the framerect, so the additional pixels\n    // must be skipped over after we finished a scanline.\n    var framewidth = frame.width;\n    var framestride = width - framewidth;\n    var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n    // Output indices of the top left and bottom right corners of the subrect.\n    var opbeg = (frame.y * width + frame.x) * 4;\n    var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n    var op = opbeg;\n\n    var scanstride = framestride * 4;\n\n    // Use scanstride to skip past the rows when interlacing.  This is skipping\n    // 7 rows for the first two passes, then 3 then 1.\n    if (frame.interlaced === true) {\n      scanstride += width * 4 * 7; // Pass 1.\n    }\n\n    var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n    for (var i = 0, il = index_stream.length; i < il; ++i) {\n      var index = index_stream[i];\n\n      if (xleft === 0) {\n        // Beginning of new scan line\n        op += scanstride;\n        xleft = framewidth;\n        if (op >= opend) {\n          // Catch the wrap to switch passes when interlacing.\n          scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n          // interlaceskip / 2 * 4 is interlaceskip << 1.\n          op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n          interlaceskip >>= 1;\n        }\n      }\n\n      if (index === trans) {\n        op += 4;\n      } else {\n        var r = buf[palette_offset + index * 3];\n        var g = buf[palette_offset + index * 3 + 1];\n        var b = buf[palette_offset + index * 3 + 2];\n        pixels[op++] = r;\n        pixels[op++] = g;\n        pixels[op++] = b;\n        pixels[op++] = 255;\n      }\n      --xleft;\n    }\n  };\n}\n\nfunction GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) {\n  var min_code_size = code_stream[p++];\n\n  var clear_code = 1 << min_code_size;\n  var eoi_code = clear_code + 1;\n  var next_code = eoi_code + 1;\n\n  var cur_code_size = min_code_size + 1; // Number of bits per code.\n  // NOTE: This shares the same name as the encoder, but has a different\n  // meaning here.  Here this masks each code coming from the code stream.\n  var code_mask = (1 << cur_code_size) - 1;\n  var cur_shift = 0;\n  var cur = 0;\n\n  var op = 0; // Output pointer.\n\n  var subblock_size = code_stream[p++];\n\n  // TODO(deanm): Would using a TypedArray be any faster?  At least it would\n  // solve the fast mode / backing store uncertainty.\n  // var code_table = Array(4096);\n  var code_table = new Int32Array(4096); // Can be signed, we only use 20 bits.\n\n  var prev_code = null; // Track code-1.\n\n  while (true) {\n    // Read up to two bytes, making sure we always 12-bits for max sized code.\n    while (cur_shift < 16) {\n      if (subblock_size === 0) break; // No more data to be read.\n\n      cur |= code_stream[p++] << cur_shift;\n      cur_shift += 8;\n\n      if (subblock_size === 1) {\n        // Never let it get to 0 to hold logic above.\n        subblock_size = code_stream[p++]; // Next subblock.\n      } else {\n        --subblock_size;\n      }\n    }\n\n    // TODO(deanm): We should never really get here, we should have received\n    // and EOI.\n    if (cur_shift < cur_code_size) break;\n\n    var code = cur & code_mask;\n    cur >>= cur_code_size;\n    cur_shift -= cur_code_size;\n\n    // TODO(deanm): Maybe should check that the first code was a clear code,\n    // at least this is what you're supposed to do.  But actually our encoder\n    // now doesn't emit a clear code first anyway.\n    if (code === clear_code) {\n      // We don't actually have to clear the table.  This could be a good idea\n      // for greater error checking, but we don't really do any anyway.  We\n      // will just track it with next_code and overwrite old entries.\n\n      next_code = eoi_code + 1;\n      cur_code_size = min_code_size + 1;\n      code_mask = (1 << cur_code_size) - 1;\n\n      // Don't update prev_code ?\n      prev_code = null;\n      continue;\n    } else if (code === eoi_code) {\n      break;\n    }\n\n    // We have a similar situation as the decoder, where we want to store\n    // variable length entries (code table entries), but we want to do in a\n    // faster manner than an array of arrays.  The code below stores sort of a\n    // linked list within the code table, and then \"chases\" through it to\n    // construct the dictionary entries.  When a new entry is created, just the\n    // last byte is stored, and the rest (prefix) of the entry is only\n    // referenced by its table entry.  Then the code chases through the\n    // prefixes until it reaches a single byte code.  We have to chase twice,\n    // first to compute the length, and then to actually copy the data to the\n    // output (backwards, since we know the length).  The alternative would be\n    // storing something in an intermediate stack, but that doesn't make any\n    // more sense.  I implemented an approach where it also stored the length\n    // in the code table, although it's a bit tricky because you run out of\n    // bits (12 + 12 + 8), but I didn't measure much improvements (the table\n    // entries are generally not the long).  Even when I created benchmarks for\n    // very long table entries the complexity did not seem worth it.\n    // The code table stores the prefix entry in 12 bits and then the suffix\n    // byte in 8 bits, so each entry is 20 bits.\n\n    var chase_code = code < next_code ? code : prev_code;\n\n    // Chase what we will output, either {CODE} or {CODE-1}.\n    var chase_length = 0;\n    var chase = chase_code;\n    while (chase > clear_code) {\n      chase = code_table[chase] >> 8;\n      ++chase_length;\n    }\n\n    var k = chase;\n\n    var op_end = op + chase_length + (chase_code !== code ? 1 : 0);\n    if (op_end > output_length) {\n      console.log(\"Warning, gif stream longer than expected.\");\n      return;\n    }\n\n    // Already have the first byte from the chase, might as well write it fast.\n    output[op++] = k;\n\n    op += chase_length;\n    var b = op; // Track pointer, writing backwards.\n\n    if (chase_code !== code)\n      // The case of emitting {CODE-1} + k.\n      output[op++] = k;\n\n    chase = chase_code;\n    while (chase_length--) {\n      chase = code_table[chase];\n      output[--b] = chase & 0xff; // Write backwards.\n      chase >>= 8; // Pull down to the prefix code.\n    }\n\n    if (prev_code !== null && next_code < 4096) {\n      code_table[next_code++] = (prev_code << 8) | k;\n      // TODO(deanm): Figure out this clearing vs code growth logic better.  I\n      // have an feeling that it should just happen somewhere else, for now it\n      // is awkward between when we grow past the max and then hit a clear code.\n      // For now just check if we hit the max 12-bits (then a clear code should\n      // follow, also of course encoded in 12-bits).\n      if (next_code >= code_mask + 1 && cur_code_size < 12) {\n        ++cur_code_size;\n        code_mask = (code_mask << 1) | 1;\n      }\n    }\n\n    prev_code = code;\n  }\n\n  if (op !== output_length) {\n    console.log(\"Warning, gif stream shorter than expected.\");\n  }\n\n  return output;\n}\n\nexport { GifReader, GifWriter };\n","/**\n * @license\n  Copyright (c) 2008, Adobe Systems Incorporated\n  All rights reserved.\n\n  Redistribution and use in source and binary forms, with or without \n  modification, are permitted provided that the following conditions are\n  met:\n\n  * Redistributions of source code must retain the above copyright notice, \n    this list of conditions and the following disclaimer.\n  \n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the \n    documentation and/or other materials provided with the distribution.\n  \n  * Neither the name of Adobe Systems Incorporated nor the names of its \n    contributors may be used to endorse or promote products derived from \n    this software without specific prior written permission.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n  IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\nJPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n\nBasic GUI blocking jpeg encoder\n*/\n\nfunction JPEGEncoder(quality) {\n  var ffloor = Math.floor;\n  var YTable = new Array(64);\n  var UVTable = new Array(64);\n  var fdtbl_Y = new Array(64);\n  var fdtbl_UV = new Array(64);\n  var YDC_HT;\n  var UVDC_HT;\n  var YAC_HT;\n  var UVAC_HT;\n\n  var bitcode = new Array(65535);\n  var category = new Array(65535);\n  var outputfDCTQuant = new Array(64);\n  var DU = new Array(64);\n  var byteout = [];\n  var bytenew = 0;\n  var bytepos = 7;\n\n  var YDU = new Array(64);\n  var UDU = new Array(64);\n  var VDU = new Array(64);\n  var clt = new Array(256);\n  var RGB_YUV_TABLE = new Array(2048);\n  var currentQuality;\n\n  var ZigZag = [\n    0,\n    1,\n    5,\n    6,\n    14,\n    15,\n    27,\n    28,\n    2,\n    4,\n    7,\n    13,\n    16,\n    26,\n    29,\n    42,\n    3,\n    8,\n    12,\n    17,\n    25,\n    30,\n    41,\n    43,\n    9,\n    11,\n    18,\n    24,\n    31,\n    40,\n    44,\n    53,\n    10,\n    19,\n    23,\n    32,\n    39,\n    45,\n    52,\n    54,\n    20,\n    22,\n    33,\n    38,\n    46,\n    51,\n    55,\n    60,\n    21,\n    34,\n    37,\n    47,\n    50,\n    56,\n    59,\n    61,\n    35,\n    36,\n    48,\n    49,\n    57,\n    58,\n    62,\n    63\n  ];\n\n  var std_dc_luminance_nrcodes = [\n    0,\n    0,\n    1,\n    5,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  ];\n  var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n  var std_ac_luminance_nrcodes = [\n    0,\n    0,\n    2,\n    1,\n    3,\n    3,\n    2,\n    4,\n    3,\n    5,\n    5,\n    4,\n    4,\n    0,\n    0,\n    1,\n    0x7d\n  ];\n  var std_ac_luminance_values = [\n    0x01,\n    0x02,\n    0x03,\n    0x00,\n    0x04,\n    0x11,\n    0x05,\n    0x12,\n    0x21,\n    0x31,\n    0x41,\n    0x06,\n    0x13,\n    0x51,\n    0x61,\n    0x07,\n    0x22,\n    0x71,\n    0x14,\n    0x32,\n    0x81,\n    0x91,\n    0xa1,\n    0x08,\n    0x23,\n    0x42,\n    0xb1,\n    0xc1,\n    0x15,\n    0x52,\n    0xd1,\n    0xf0,\n    0x24,\n    0x33,\n    0x62,\n    0x72,\n    0x82,\n    0x09,\n    0x0a,\n    0x16,\n    0x17,\n    0x18,\n    0x19,\n    0x1a,\n    0x25,\n    0x26,\n    0x27,\n    0x28,\n    0x29,\n    0x2a,\n    0x34,\n    0x35,\n    0x36,\n    0x37,\n    0x38,\n    0x39,\n    0x3a,\n    0x43,\n    0x44,\n    0x45,\n    0x46,\n    0x47,\n    0x48,\n    0x49,\n    0x4a,\n    0x53,\n    0x54,\n    0x55,\n    0x56,\n    0x57,\n    0x58,\n    0x59,\n    0x5a,\n    0x63,\n    0x64,\n    0x65,\n    0x66,\n    0x67,\n    0x68,\n    0x69,\n    0x6a,\n    0x73,\n    0x74,\n    0x75,\n    0x76,\n    0x77,\n    0x78,\n    0x79,\n    0x7a,\n    0x83,\n    0x84,\n    0x85,\n    0x86,\n    0x87,\n    0x88,\n    0x89,\n    0x8a,\n    0x92,\n    0x93,\n    0x94,\n    0x95,\n    0x96,\n    0x97,\n    0x98,\n    0x99,\n    0x9a,\n    0xa2,\n    0xa3,\n    0xa4,\n    0xa5,\n    0xa6,\n    0xa7,\n    0xa8,\n    0xa9,\n    0xaa,\n    0xb2,\n    0xb3,\n    0xb4,\n    0xb5,\n    0xb6,\n    0xb7,\n    0xb8,\n    0xb9,\n    0xba,\n    0xc2,\n    0xc3,\n    0xc4,\n    0xc5,\n    0xc6,\n    0xc7,\n    0xc8,\n    0xc9,\n    0xca,\n    0xd2,\n    0xd3,\n    0xd4,\n    0xd5,\n    0xd6,\n    0xd7,\n    0xd8,\n    0xd9,\n    0xda,\n    0xe1,\n    0xe2,\n    0xe3,\n    0xe4,\n    0xe5,\n    0xe6,\n    0xe7,\n    0xe8,\n    0xe9,\n    0xea,\n    0xf1,\n    0xf2,\n    0xf3,\n    0xf4,\n    0xf5,\n    0xf6,\n    0xf7,\n    0xf8,\n    0xf9,\n    0xfa\n  ];\n\n  var std_dc_chrominance_nrcodes = [\n    0,\n    0,\n    3,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    1,\n    0,\n    0,\n    0,\n    0,\n    0\n  ];\n  var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n  var std_ac_chrominance_nrcodes = [\n    0,\n    0,\n    2,\n    1,\n    2,\n    4,\n    4,\n    3,\n    4,\n    7,\n    5,\n    4,\n    4,\n    0,\n    1,\n    2,\n    0x77\n  ];\n  var std_ac_chrominance_values = [\n    0x00,\n    0x01,\n    0x02,\n    0x03,\n    0x11,\n    0x04,\n    0x05,\n    0x21,\n    0x31,\n    0x06,\n    0x12,\n    0x41,\n    0x51,\n    0x07,\n    0x61,\n    0x71,\n    0x13,\n    0x22,\n    0x32,\n    0x81,\n    0x08,\n    0x14,\n    0x42,\n    0x91,\n    0xa1,\n    0xb1,\n    0xc1,\n    0x09,\n    0x23,\n    0x33,\n    0x52,\n    0xf0,\n    0x15,\n    0x62,\n    0x72,\n    0xd1,\n    0x0a,\n    0x16,\n    0x24,\n    0x34,\n    0xe1,\n    0x25,\n    0xf1,\n    0x17,\n    0x18,\n    0x19,\n    0x1a,\n    0x26,\n    0x27,\n    0x28,\n    0x29,\n    0x2a,\n    0x35,\n    0x36,\n    0x37,\n    0x38,\n    0x39,\n    0x3a,\n    0x43,\n    0x44,\n    0x45,\n    0x46,\n    0x47,\n    0x48,\n    0x49,\n    0x4a,\n    0x53,\n    0x54,\n    0x55,\n    0x56,\n    0x57,\n    0x58,\n    0x59,\n    0x5a,\n    0x63,\n    0x64,\n    0x65,\n    0x66,\n    0x67,\n    0x68,\n    0x69,\n    0x6a,\n    0x73,\n    0x74,\n    0x75,\n    0x76,\n    0x77,\n    0x78,\n    0x79,\n    0x7a,\n    0x82,\n    0x83,\n    0x84,\n    0x85,\n    0x86,\n    0x87,\n    0x88,\n    0x89,\n    0x8a,\n    0x92,\n    0x93,\n    0x94,\n    0x95,\n    0x96,\n    0x97,\n    0x98,\n    0x99,\n    0x9a,\n    0xa2,\n    0xa3,\n    0xa4,\n    0xa5,\n    0xa6,\n    0xa7,\n    0xa8,\n    0xa9,\n    0xaa,\n    0xb2,\n    0xb3,\n    0xb4,\n    0xb5,\n    0xb6,\n    0xb7,\n    0xb8,\n    0xb9,\n    0xba,\n    0xc2,\n    0xc3,\n    0xc4,\n    0xc5,\n    0xc6,\n    0xc7,\n    0xc8,\n    0xc9,\n    0xca,\n    0xd2,\n    0xd3,\n    0xd4,\n    0xd5,\n    0xd6,\n    0xd7,\n    0xd8,\n    0xd9,\n    0xda,\n    0xe2,\n    0xe3,\n    0xe4,\n    0xe5,\n    0xe6,\n    0xe7,\n    0xe8,\n    0xe9,\n    0xea,\n    0xf2,\n    0xf3,\n    0xf4,\n    0xf5,\n    0xf6,\n    0xf7,\n    0xf8,\n    0xf9,\n    0xfa\n  ];\n\n  function initQuantTables(sf) {\n    var YQT = [\n      16,\n      11,\n      10,\n      16,\n      24,\n      40,\n      51,\n      61,\n      12,\n      12,\n      14,\n      19,\n      26,\n      58,\n      60,\n      55,\n      14,\n      13,\n      16,\n      24,\n      40,\n      57,\n      69,\n      56,\n      14,\n      17,\n      22,\n      29,\n      51,\n      87,\n      80,\n      62,\n      18,\n      22,\n      37,\n      56,\n      68,\n      109,\n      103,\n      77,\n      24,\n      35,\n      55,\n      64,\n      81,\n      104,\n      113,\n      92,\n      49,\n      64,\n      78,\n      87,\n      103,\n      121,\n      120,\n      101,\n      72,\n      92,\n      95,\n      98,\n      112,\n      100,\n      103,\n      99\n    ];\n\n    for (var i = 0; i < 64; i++) {\n      var t = ffloor((YQT[i] * sf + 50) / 100);\n      t = Math.min(Math.max(t, 1), 255);\n      YTable[ZigZag[i]] = t;\n    }\n    var UVQT = [\n      17,\n      18,\n      24,\n      47,\n      99,\n      99,\n      99,\n      99,\n      18,\n      21,\n      26,\n      66,\n      99,\n      99,\n      99,\n      99,\n      24,\n      26,\n      56,\n      99,\n      99,\n      99,\n      99,\n      99,\n      47,\n      66,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99,\n      99\n    ];\n    for (var j = 0; j < 64; j++) {\n      var u = ffloor((UVQT[j] * sf + 50) / 100);\n      u = Math.min(Math.max(u, 1), 255);\n      UVTable[ZigZag[j]] = u;\n    }\n    var aasf = [\n      1.0,\n      1.387039845,\n      1.306562965,\n      1.175875602,\n      1.0,\n      0.785694958,\n      0.5411961,\n      0.275899379\n    ];\n    var k = 0;\n    for (var row = 0; row < 8; row++) {\n      for (var col = 0; col < 8; col++) {\n        fdtbl_Y[k] = 1.0 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n        fdtbl_UV[k] = 1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n        k++;\n      }\n    }\n  }\n\n  function computeHuffmanTbl(nrcodes, std_table) {\n    var codevalue = 0;\n    var pos_in_table = 0;\n    var HT = new Array();\n    for (var k = 1; k <= 16; k++) {\n      for (var j = 1; j <= nrcodes[k]; j++) {\n        HT[std_table[pos_in_table]] = [];\n        HT[std_table[pos_in_table]][0] = codevalue;\n        HT[std_table[pos_in_table]][1] = k;\n        pos_in_table++;\n        codevalue++;\n      }\n      codevalue *= 2;\n    }\n    return HT;\n  }\n\n  function initHuffmanTbl() {\n    YDC_HT = computeHuffmanTbl(\n      std_dc_luminance_nrcodes,\n      std_dc_luminance_values\n    );\n    UVDC_HT = computeHuffmanTbl(\n      std_dc_chrominance_nrcodes,\n      std_dc_chrominance_values\n    );\n    YAC_HT = computeHuffmanTbl(\n      std_ac_luminance_nrcodes,\n      std_ac_luminance_values\n    );\n    UVAC_HT = computeHuffmanTbl(\n      std_ac_chrominance_nrcodes,\n      std_ac_chrominance_values\n    );\n  }\n\n  function initCategoryNumber() {\n    var nrlower = 1;\n    var nrupper = 2;\n    for (var cat = 1; cat <= 15; cat++) {\n      //Positive numbers\n      for (var nr = nrlower; nr < nrupper; nr++) {\n        category[32767 + nr] = cat;\n        bitcode[32767 + nr] = [];\n        bitcode[32767 + nr][1] = cat;\n        bitcode[32767 + nr][0] = nr;\n      }\n      //Negative numbers\n      for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {\n        category[32767 + nrneg] = cat;\n        bitcode[32767 + nrneg] = [];\n        bitcode[32767 + nrneg][1] = cat;\n        bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg;\n      }\n      nrlower <<= 1;\n      nrupper <<= 1;\n    }\n  }\n\n  function initRGBYUVTable() {\n    for (var i = 0; i < 256; i++) {\n      RGB_YUV_TABLE[i] = 19595 * i;\n      RGB_YUV_TABLE[(i + 256) >> 0] = 38470 * i;\n      RGB_YUV_TABLE[(i + 512) >> 0] = 7471 * i + 0x8000;\n      RGB_YUV_TABLE[(i + 768) >> 0] = -11059 * i;\n      RGB_YUV_TABLE[(i + 1024) >> 0] = -21709 * i;\n      RGB_YUV_TABLE[(i + 1280) >> 0] = 32768 * i + 0x807fff;\n      RGB_YUV_TABLE[(i + 1536) >> 0] = -27439 * i;\n      RGB_YUV_TABLE[(i + 1792) >> 0] = -5329 * i;\n    }\n  }\n\n  // IO functions\n  function writeBits(bs) {\n    var value = bs[0];\n    var posval = bs[1] - 1;\n    while (posval >= 0) {\n      if (value & (1 << posval)) {\n        bytenew |= 1 << bytepos;\n      }\n      posval--;\n      bytepos--;\n      if (bytepos < 0) {\n        if (bytenew == 0xff) {\n          writeByte(0xff);\n          writeByte(0);\n        } else {\n          writeByte(bytenew);\n        }\n        bytepos = 7;\n        bytenew = 0;\n      }\n    }\n  }\n\n  function writeByte(value) {\n    //byteout.push(clt[value]); // write char directly instead of converting later\n    byteout.push(value);\n  }\n\n  function writeWord(value) {\n    writeByte((value >> 8) & 0xff);\n    writeByte(value & 0xff);\n  }\n\n  // DCT & quantization core\n  function fDCTQuant(data, fdtbl) {\n    var d0, d1, d2, d3, d4, d5, d6, d7;\n    /* Pass 1: process rows. */\n    var dataOff = 0;\n    var i;\n    var I8 = 8;\n    var I64 = 64;\n    for (i = 0; i < I8; ++i) {\n      d0 = data[dataOff];\n      d1 = data[dataOff + 1];\n      d2 = data[dataOff + 2];\n      d3 = data[dataOff + 3];\n      d4 = data[dataOff + 4];\n      d5 = data[dataOff + 5];\n      d6 = data[dataOff + 6];\n      d7 = data[dataOff + 7];\n\n      var tmp0 = d0 + d7;\n      var tmp7 = d0 - d7;\n      var tmp1 = d1 + d6;\n      var tmp6 = d1 - d6;\n      var tmp2 = d2 + d5;\n      var tmp5 = d2 - d5;\n      var tmp3 = d3 + d4;\n      var tmp4 = d3 - d4;\n\n      /* Even part */\n      var tmp10 = tmp0 + tmp3; /* phase 2 */\n      var tmp13 = tmp0 - tmp3;\n      var tmp11 = tmp1 + tmp2;\n      var tmp12 = tmp1 - tmp2;\n\n      data[dataOff] = tmp10 + tmp11; /* phase 3 */\n      data[dataOff + 4] = tmp10 - tmp11;\n\n      var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n      data[dataOff + 2] = tmp13 + z1; /* phase 5 */\n      data[dataOff + 6] = tmp13 - z1;\n\n      /* Odd part */\n      tmp10 = tmp4 + tmp5; /* phase 2 */\n      tmp11 = tmp5 + tmp6;\n      tmp12 = tmp6 + tmp7;\n\n      /* The rotator is modified from fig 4-8 to avoid extra negations. */\n      var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n      var z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */\n      var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n      var z3 = tmp11 * 0.707106781; /* c4 */\n\n      var z11 = tmp7 + z3; /* phase 5 */\n      var z13 = tmp7 - z3;\n\n      data[dataOff + 5] = z13 + z2; /* phase 6 */\n      data[dataOff + 3] = z13 - z2;\n      data[dataOff + 1] = z11 + z4;\n      data[dataOff + 7] = z11 - z4;\n\n      dataOff += 8; /* advance pointer to next row */\n    }\n\n    /* Pass 2: process columns. */\n    dataOff = 0;\n    for (i = 0; i < I8; ++i) {\n      d0 = data[dataOff];\n      d1 = data[dataOff + 8];\n      d2 = data[dataOff + 16];\n      d3 = data[dataOff + 24];\n      d4 = data[dataOff + 32];\n      d5 = data[dataOff + 40];\n      d6 = data[dataOff + 48];\n      d7 = data[dataOff + 56];\n\n      var tmp0p2 = d0 + d7;\n      var tmp7p2 = d0 - d7;\n      var tmp1p2 = d1 + d6;\n      var tmp6p2 = d1 - d6;\n      var tmp2p2 = d2 + d5;\n      var tmp5p2 = d2 - d5;\n      var tmp3p2 = d3 + d4;\n      var tmp4p2 = d3 - d4;\n\n      /* Even part */\n      var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */\n      var tmp13p2 = tmp0p2 - tmp3p2;\n      var tmp11p2 = tmp1p2 + tmp2p2;\n      var tmp12p2 = tmp1p2 - tmp2p2;\n\n      data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n      data[dataOff + 32] = tmp10p2 - tmp11p2;\n\n      var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n      data[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */\n      data[dataOff + 48] = tmp13p2 - z1p2;\n\n      /* Odd part */\n      tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n      tmp11p2 = tmp5p2 + tmp6p2;\n      tmp12p2 = tmp6p2 + tmp7p2;\n\n      /* The rotator is modified from fig 4-8 to avoid extra negations. */\n      var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n      var z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */\n      var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n      var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\n      var z11p2 = tmp7p2 + z3p2; /* phase 5 */\n      var z13p2 = tmp7p2 - z3p2;\n\n      data[dataOff + 40] = z13p2 + z2p2; /* phase 6 */\n      data[dataOff + 24] = z13p2 - z2p2;\n      data[dataOff + 8] = z11p2 + z4p2;\n      data[dataOff + 56] = z11p2 - z4p2;\n\n      dataOff++; /* advance pointer to next column */\n    }\n\n    // Quantize/descale the coefficients\n    var fDCTQuant;\n    for (i = 0; i < I64; ++i) {\n      // Apply the quantization and scaling factor & Round to nearest integer\n      fDCTQuant = data[i] * fdtbl[i];\n      outputfDCTQuant[i] =\n        fDCTQuant > 0.0 ? (fDCTQuant + 0.5) | 0 : (fDCTQuant - 0.5) | 0;\n      //outputfDCTQuant[i] = fround(fDCTQuant);\n    }\n    return outputfDCTQuant;\n  }\n\n  function writeAPP0() {\n    writeWord(0xffe0); // marker\n    writeWord(16); // length\n    writeByte(0x4a); // J\n    writeByte(0x46); // F\n    writeByte(0x49); // I\n    writeByte(0x46); // F\n    writeByte(0); // = \"JFIF\",'\\0'\n    writeByte(1); // versionhi\n    writeByte(1); // versionlo\n    writeByte(0); // xyunits\n    writeWord(1); // xdensity\n    writeWord(1); // ydensity\n    writeByte(0); // thumbnwidth\n    writeByte(0); // thumbnheight\n  }\n\n  function writeSOF0(width, height) {\n    writeWord(0xffc0); // marker\n    writeWord(17); // length, truecolor YUV JPG\n    writeByte(8); // precision\n    writeWord(height);\n    writeWord(width);\n    writeByte(3); // nrofcomponents\n    writeByte(1); // IdY\n    writeByte(0x11); // HVY\n    writeByte(0); // QTY\n    writeByte(2); // IdU\n    writeByte(0x11); // HVU\n    writeByte(1); // QTU\n    writeByte(3); // IdV\n    writeByte(0x11); // HVV\n    writeByte(1); // QTV\n  }\n\n  function writeDQT() {\n    writeWord(0xffdb); // marker\n    writeWord(132); // length\n    writeByte(0);\n    for (var i = 0; i < 64; i++) {\n      writeByte(YTable[i]);\n    }\n    writeByte(1);\n    for (var j = 0; j < 64; j++) {\n      writeByte(UVTable[j]);\n    }\n  }\n\n  function writeDHT() {\n    writeWord(0xffc4); // marker\n    writeWord(0x01a2); // length\n\n    writeByte(0); // HTYDCinfo\n    for (var i = 0; i < 16; i++) {\n      writeByte(std_dc_luminance_nrcodes[i + 1]);\n    }\n    for (var j = 0; j <= 11; j++) {\n      writeByte(std_dc_luminance_values[j]);\n    }\n\n    writeByte(0x10); // HTYACinfo\n    for (var k = 0; k < 16; k++) {\n      writeByte(std_ac_luminance_nrcodes[k + 1]);\n    }\n    for (var l = 0; l <= 161; l++) {\n      writeByte(std_ac_luminance_values[l]);\n    }\n\n    writeByte(1); // HTUDCinfo\n    for (var m = 0; m < 16; m++) {\n      writeByte(std_dc_chrominance_nrcodes[m + 1]);\n    }\n    for (var n = 0; n <= 11; n++) {\n      writeByte(std_dc_chrominance_values[n]);\n    }\n\n    writeByte(0x11); // HTUACinfo\n    for (var o = 0; o < 16; o++) {\n      writeByte(std_ac_chrominance_nrcodes[o + 1]);\n    }\n    for (var p = 0; p <= 161; p++) {\n      writeByte(std_ac_chrominance_values[p]);\n    }\n  }\n\n  function writeSOS() {\n    writeWord(0xffda); // marker\n    writeWord(12); // length\n    writeByte(3); // nrofcomponents\n    writeByte(1); // IdY\n    writeByte(0); // HTY\n    writeByte(2); // IdU\n    writeByte(0x11); // HTU\n    writeByte(3); // IdV\n    writeByte(0x11); // HTV\n    writeByte(0); // Ss\n    writeByte(0x3f); // Se\n    writeByte(0); // Bf\n  }\n\n  function processDU(CDU, fdtbl, DC, HTDC, HTAC) {\n    var EOB = HTAC[0x00];\n    var M16zeroes = HTAC[0xf0];\n    var pos;\n    var I16 = 16;\n    var I63 = 63;\n    var I64 = 64;\n    var DU_DCT = fDCTQuant(CDU, fdtbl);\n    //ZigZag reorder\n    for (var j = 0; j < I64; ++j) {\n      DU[ZigZag[j]] = DU_DCT[j];\n    }\n    var Diff = DU[0] - DC;\n    DC = DU[0];\n    //Encode DC\n    if (Diff == 0) {\n      writeBits(HTDC[0]); // Diff might be 0\n    } else {\n      pos = 32767 + Diff;\n      writeBits(HTDC[category[pos]]);\n      writeBits(bitcode[pos]);\n    }\n    //Encode ACs\n    var end0pos = 63; // was const... which is crazy\n    while (end0pos > 0 && DU[end0pos] == 0) {\n      end0pos--;\n    }\n    //end0pos = first element in reverse order !=0\n    if (end0pos == 0) {\n      writeBits(EOB);\n      return DC;\n    }\n    var i = 1;\n    var lng;\n    while (i <= end0pos) {\n      var startpos = i;\n      while (DU[i] == 0 && i <= end0pos) {\n        ++i;\n      }\n      var nrzeroes = i - startpos;\n      if (nrzeroes >= I16) {\n        lng = nrzeroes >> 4;\n        for (var nrmarker = 1; nrmarker <= lng; ++nrmarker)\n          writeBits(M16zeroes);\n        nrzeroes = nrzeroes & 0xf;\n      }\n      pos = 32767 + DU[i];\n      writeBits(HTAC[(nrzeroes << 4) + category[pos]]);\n      writeBits(bitcode[pos]);\n      i++;\n    }\n    if (end0pos != I63) {\n      writeBits(EOB);\n    }\n    return DC;\n  }\n\n  function initCharLookupTable() {\n    var sfcc = String.fromCharCode;\n    for (var i = 0; i < 256; i++) {\n      ///// ACHTUNG // 255\n      clt[i] = sfcc(i);\n    }\n  }\n\n  this.encode = function(\n    image,\n    quality // image data object\n  ) {\n    if (quality) setQuality(quality);\n\n    // Initialize bit writer\n    byteout = new Array();\n    bytenew = 0;\n    bytepos = 7;\n\n    // Add JPEG headers\n    writeWord(0xffd8); // SOI\n    writeAPP0();\n    writeDQT();\n    writeSOF0(image.width, image.height);\n    writeDHT();\n    writeSOS();\n\n    // Encode 8x8 macroblocks\n    var DCY = 0;\n    var DCU = 0;\n    var DCV = 0;\n\n    bytenew = 0;\n    bytepos = 7;\n\n    this.encode.displayName = \"_encode_\";\n\n    var imageData = image.data;\n    var width = image.width;\n    var height = image.height;\n\n    var quadWidth = width * 4;\n\n    var x,\n      y = 0;\n    var r, g, b;\n    var start, p, col, row, pos;\n    while (y < height) {\n      x = 0;\n      while (x < quadWidth) {\n        start = quadWidth * y + x;\n        col = -1;\n        row = 0;\n\n        for (pos = 0; pos < 64; pos++) {\n          row = pos >> 3; // /8\n          col = (pos & 7) * 4; // %8\n          p = start + row * quadWidth + col;\n\n          if (y + row >= height) {\n            // padding bottom\n            p -= quadWidth * (y + 1 + row - height);\n          }\n\n          if (x + col >= quadWidth) {\n            // padding right\n            p -= x + col - quadWidth + 4;\n          }\n\n          r = imageData[p++];\n          g = imageData[p++];\n          b = imageData[p++];\n\n          /* // calculate YUV values dynamically\n\t\t\t\t\tYDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n\t\t\t\t\tUDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n\t\t\t\t\tVDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n\t\t\t\t\t*/\n\n          // use lookup table (slightly faster)\n          YDU[pos] =\n            ((RGB_YUV_TABLE[r] +\n              RGB_YUV_TABLE[(g + 256) >> 0] +\n              RGB_YUV_TABLE[(b + 512) >> 0]) >>\n              16) -\n            128;\n          UDU[pos] =\n            ((RGB_YUV_TABLE[(r + 768) >> 0] +\n              RGB_YUV_TABLE[(g + 1024) >> 0] +\n              RGB_YUV_TABLE[(b + 1280) >> 0]) >>\n              16) -\n            128;\n          VDU[pos] =\n            ((RGB_YUV_TABLE[(r + 1280) >> 0] +\n              RGB_YUV_TABLE[(g + 1536) >> 0] +\n              RGB_YUV_TABLE[(b + 1792) >> 0]) >>\n              16) -\n            128;\n        }\n\n        DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n        DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n        DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n        x += 32;\n      }\n      y += 8;\n    }\n\n    ////////////////////////////////////////////////////////////////\n\n    // Do the bit alignment of the EOI marker\n    if (bytepos >= 0) {\n      var fillbits = [];\n      fillbits[1] = bytepos + 1;\n      fillbits[0] = (1 << (bytepos + 1)) - 1;\n      writeBits(fillbits);\n    }\n\n    writeWord(0xffd9); //EOI\n\n    return new Uint8Array(byteout);\n  };\n\n  function setQuality(quality) {\n    quality = Math.min(Math.max(quality, 1), 100);\n\n    if (currentQuality == quality) return; // don't recalc if unchanged\n\n    var sf =\n      quality < 50 ? Math.floor(5000 / quality) : Math.floor(200 - quality * 2);\n\n    initQuantTables(sf);\n    currentQuality = quality;\n    //console.log('Quality set to: '+quality +'%');\n  }\n\n  function init() {\n    quality = quality || 50;\n    // Create tables\n    initCharLookupTable();\n    initHuffmanTbl();\n    initCategoryNumber();\n    initRGBYUVTable();\n\n    setQuality(quality);\n  }\n  init();\n}\n\nexport { JPEGEncoder };\n","/**\n * @author shaozilee\n *\n * Bmp format decoder,support 1bit 4bit 8bit 24bit bmp\n *\n */\n\nimport { console } from \"./console.js\";\n\nfunction BmpDecoder(buffer, is_with_alpha) {\n  this.pos = 0;\n  this.buffer = buffer;\n  this.datav = new DataView(buffer.buffer);\n  this.is_with_alpha = !!is_with_alpha;\n  this.bottom_up = true;\n  this.flag =\n    String.fromCharCode(this.buffer[0]) + String.fromCharCode(this.buffer[1]);\n  this.pos += 2;\n  if ([\"BM\", \"BA\", \"CI\", \"CP\", \"IC\", \"PT\"].indexOf(this.flag) === -1)\n    throw new Error(\"Invalid BMP File\");\n  this.parseHeader();\n  this.parseBGR();\n}\n\nBmpDecoder.prototype.parseHeader = function() {\n  this.fileSize = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.reserved = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.offset = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.headerSize = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.width = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.height = this.datav.getInt32(this.pos, true);\n  this.pos += 4;\n  this.planes = this.datav.getUint16(this.pos, true);\n  this.pos += 2;\n  this.bitPP = this.datav.getUint16(this.pos, true);\n  this.pos += 2;\n  this.compress = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.rawSize = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.hr = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.vr = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.colors = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n  this.importantColors = this.datav.getUint32(this.pos, true);\n  this.pos += 4;\n\n  if (this.bitPP === 16 && this.is_with_alpha) {\n    this.bitPP = 15;\n  }\n  if (this.bitPP < 15) {\n    var len = this.colors === 0 ? 1 << this.bitPP : this.colors;\n    this.palette = new Array(len);\n    for (var i = 0; i < len; i++) {\n      var blue = this.datav.getUint8(this.pos++, true);\n      var green = this.datav.getUint8(this.pos++, true);\n      var red = this.datav.getUint8(this.pos++, true);\n      var quad = this.datav.getUint8(this.pos++, true);\n      this.palette[i] = {\n        red: red,\n        green: green,\n        blue: blue,\n        quad: quad\n      };\n    }\n  }\n  if (this.height < 0) {\n    this.height *= -1;\n    this.bottom_up = false;\n  }\n};\n\nBmpDecoder.prototype.parseBGR = function() {\n  this.pos = this.offset;\n  try {\n    var bitn = \"bit\" + this.bitPP;\n    var len = this.width * this.height * 4;\n    this.data = new Uint8Array(len);\n\n    this[bitn]();\n  } catch (e) {\n    console.log(\"bit decode error:\" + e);\n  }\n};\n\nBmpDecoder.prototype.bit1 = function() {\n  var xlen = Math.ceil(this.width / 8);\n  var mode = xlen % 4;\n  var y;\n  for (y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < xlen; x++) {\n      var b = this.datav.getUint8(this.pos++, true);\n      var location = line * this.width * 4 + x * 8 * 4;\n      for (var i = 0; i < 8; i++) {\n        if (x * 8 + i < this.width) {\n          var rgb = this.palette[(b >> (7 - i)) & 0x1];\n          this.data[location + i * 4] = rgb.blue;\n          this.data[location + i * 4 + 1] = rgb.green;\n          this.data[location + i * 4 + 2] = rgb.red;\n          this.data[location + i * 4 + 3] = 0xff;\n        } else {\n          break;\n        }\n      }\n    }\n\n    if (mode !== 0) {\n      this.pos += 4 - mode;\n    }\n  }\n};\n\nBmpDecoder.prototype.bit4 = function() {\n  var xlen = Math.ceil(this.width / 2);\n  var mode = xlen % 4;\n  for (var y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < xlen; x++) {\n      var b = this.datav.getUint8(this.pos++, true);\n      var location = line * this.width * 4 + x * 2 * 4;\n\n      var before = b >> 4;\n      var after = b & 0x0f;\n\n      var rgb = this.palette[before];\n      this.data[location] = rgb.blue;\n      this.data[location + 1] = rgb.green;\n      this.data[location + 2] = rgb.red;\n      this.data[location + 3] = 0xff;\n\n      if (x * 2 + 1 >= this.width) break;\n\n      rgb = this.palette[after];\n      this.data[location + 4] = rgb.blue;\n      this.data[location + 4 + 1] = rgb.green;\n      this.data[location + 4 + 2] = rgb.red;\n      this.data[location + 4 + 3] = 0xff;\n    }\n\n    if (mode !== 0) {\n      this.pos += 4 - mode;\n    }\n  }\n};\n\nBmpDecoder.prototype.bit8 = function() {\n  var mode = this.width % 4;\n  for (var y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < this.width; x++) {\n      var b = this.datav.getUint8(this.pos++, true);\n      var location = line * this.width * 4 + x * 4;\n      if (b < this.palette.length) {\n        var rgb = this.palette[b];\n        this.data[location] = rgb.red;\n        this.data[location + 1] = rgb.green;\n        this.data[location + 2] = rgb.blue;\n        this.data[location + 3] = 0xff;\n      } else {\n        this.data[location] = 0xff;\n        this.data[location + 1] = 0xff;\n        this.data[location + 2] = 0xff;\n        this.data[location + 3] = 0xff;\n      }\n    }\n    if (mode !== 0) {\n      this.pos += 4 - mode;\n    }\n  }\n};\n\nBmpDecoder.prototype.bit15 = function() {\n  var dif_w = this.width % 3;\n  var _11111 = parseInt(\"11111\", 2),\n    _1_5 = _11111;\n  for (var y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < this.width; x++) {\n      var B = this.datav.getUint16(this.pos, true);\n      this.pos += 2;\n      var blue = (((B & _1_5) / _1_5) * 255) | 0;\n      var green = ((((B >> 5) & _1_5) / _1_5) * 255) | 0;\n      var red = ((((B >> 10) & _1_5) / _1_5) * 255) | 0;\n      var alpha = B >> 15 ? 0xff : 0x00;\n\n      var location = line * this.width * 4 + x * 4;\n      this.data[location] = red;\n      this.data[location + 1] = green;\n      this.data[location + 2] = blue;\n      this.data[location + 3] = alpha;\n    }\n    //skip extra bytes\n    this.pos += dif_w;\n  }\n};\n\nBmpDecoder.prototype.bit16 = function() {\n  var dif_w = this.width % 3;\n  var _11111 = parseInt(\"11111\", 2),\n    _1_5 = _11111;\n  var _111111 = parseInt(\"111111\", 2),\n    _1_6 = _111111;\n  for (var y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < this.width; x++) {\n      var B = this.datav.getUint16(this.pos, true);\n      this.pos += 2;\n      var alpha = 0xff;\n      var blue = (((B & _1_5) / _1_5) * 255) | 0;\n      var green = ((((B >> 5) & _1_6) / _1_6) * 255) | 0;\n      var red = (((B >> 11) / _1_5) * 255) | 0;\n\n      var location = line * this.width * 4 + x * 4;\n      this.data[location] = red;\n      this.data[location + 1] = green;\n      this.data[location + 2] = blue;\n      this.data[location + 3] = alpha;\n    }\n    //skip extra bytes\n    this.pos += dif_w;\n  }\n};\n\nBmpDecoder.prototype.bit24 = function() {\n  //when height > 0\n  for (var y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < this.width; x++) {\n      var blue = this.datav.getUint8(this.pos++, true);\n      var green = this.datav.getUint8(this.pos++, true);\n      var red = this.datav.getUint8(this.pos++, true);\n      var location = line * this.width * 4 + x * 4;\n      this.data[location] = red;\n      this.data[location + 1] = green;\n      this.data[location + 2] = blue;\n      this.data[location + 3] = 0xff;\n    }\n    //skip extra bytes\n    this.pos += this.width % 4;\n  }\n};\n\n/**\n * add 32bit decode func\n * @author soubok\n */\nBmpDecoder.prototype.bit32 = function() {\n  //when height > 0\n  for (var y = this.height - 1; y >= 0; y--) {\n    var line = this.bottom_up ? y : this.height - 1 - y;\n    for (var x = 0; x < this.width; x++) {\n      var blue = this.datav.getUint8(this.pos++, true);\n      var green = this.datav.getUint8(this.pos++, true);\n      var red = this.datav.getUint8(this.pos++, true);\n      var alpha = this.datav.getUint8(this.pos++, true);\n      var location = line * this.width * 4 + x * 4;\n      this.data[location] = red;\n      this.data[location + 1] = green;\n      this.data[location + 2] = blue;\n      this.data[location + 3] = alpha;\n    }\n    //skip extra bytes\n    //this.pos += (this.width % 4);\n  }\n};\n\nBmpDecoder.prototype.getData = function() {\n  return this.data;\n};\n\nexport { BmpDecoder };\n","function WebPDecoder(imageData) {\n  /** @license\n   * Copyright 2011 Google Inc.\n   *\n   * This code is licensed under the same terms as WebM:\n   *  Software License Agreement:  http://www.webmproject.org/license/software/\n   *  Additional IP Rights Grant:  http://www.webmproject.org/license/additional/\n   * -----------------------------------------------------------------------------\n   *\n   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n   * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n   * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n   * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n   *\n   * -----------------------------------------------------------------------------\n   *\n   * Copyright 2011-2017 Dominik Homberger\n   * Libwebp Javascript / libwebpjs - the libwebp implementation in javascript (v0.6.0)\n   *\n   * Author: Dominik Homberger (dominik.homberger@gmail.com)\n   */\n\n  var self = this;\n  var UpsampleRgbLinePair,\n    UpsampleBgrLinePair,\n    UpsampleRgbaLinePair,\n    UpsampleBgraLinePair,\n    UpsampleArgbLinePair,\n    UpsampleArgbLinePair,\n    UpsampleRgba4444LinePair,\n    UpsampleRgb565LinePair;\n\n  function x(F) {\n    if (!F) throw Error(\"assert :P\");\n  }\n  function fa(F, L, J) {\n    for (var H = 0; 4 > H; H++) if (F[L + H] != J.charCodeAt(H)) return !0;\n    return !1;\n  }\n  function I(F, L, J, H, Z) {\n    for (var O = 0; O < Z; O++) F[L + O] = J[H + O];\n  }\n  function M(F, L, J, H) {\n    for (var Z = 0; Z < H; Z++) F[L + Z] = J;\n  }\n  function V(F) {\n    return new Int32Array(F);\n  }\n  function wa(F, L) {\n    for (var J = [], H = 0; H < F; H++) J.push(new L());\n    return J;\n  }\n  function wb() {\n    function F(J, H, Z) {\n      for (var O = Z[H], L = 0; L < O; L++) {\n        J.push(Z.length > H + 1 ? [] : 0);\n        if (Z.length < H + 1) break;\n        F(J[L], H + 1, Z);\n      }\n    }\n    var L = [];\n    F(L, 0, [3, 11]);\n    return L;\n  }\n  function Ed(F, L) {\n    function J(H, O, F) {\n      for (var Z = F[O], ma = 0; ma < Z; ma++) {\n        H.push(F.length > O + 1 ? [] : new L());\n        if (F.length < O + 1) break;\n        J(H[ma], O + 1, F);\n      }\n    }\n    var H = [];\n    J(H, 0, F);\n    return H;\n  }\n  var _WebPDecoder = function() {\n    var self = this;\n    function F() {\n      V(55);\n    }\n    function L(a, b) {\n      for (var c = (1 << (b - 1)) >>> 0; a & c; ) c >>>= 1;\n      return c ? (a & (c - 1)) + c : a;\n    }\n    function J(a, b, c, d, e) {\n      x(!(d % c));\n      do (d -= c), (a[b + d] = e);\n      while (0 < d);\n    }\n    function H(a, b, c, d, e, f) {\n      var g = b,\n        h = 1 << c,\n        k,\n        l,\n        m = V(16),\n        n = V(16);\n      x(0 != e);\n      x(null != d);\n      x(null != a);\n      x(0 < c);\n      for (l = 0; l < e; ++l) {\n        if (15 < d[l]) return 0;\n        ++m[d[l]];\n      }\n      if (m[0] == e) return 0;\n      n[1] = 0;\n      for (k = 1; 15 > k; ++k) {\n        if (m[k] > 1 << k) return 0;\n        n[k + 1] = n[k] + m[k];\n      }\n      for (l = 0; l < e; ++l) (k = d[l]), 0 < d[l] && (f[n[k]++] = l);\n      if (1 == n[15])\n        return (d = new O()), (d.g = 0), (d.value = f[0]), J(a, g, 1, h, d), h;\n      var r = -1,\n        q = h - 1,\n        t = 0,\n        v = 1,\n        p = 1,\n        u,\n        w = 1 << c;\n      l = 0;\n      k = 1;\n      for (e = 2; k <= c; ++k, e <<= 1) {\n        p <<= 1;\n        v += p;\n        p -= m[k];\n        if (0 > p) return 0;\n        for (; 0 < m[k]; --m[k])\n          (d = new O()),\n            (d.g = k),\n            (d.value = f[l++]),\n            J(a, g + t, e, w, d),\n            (t = L(t, k));\n      }\n      k = c + 1;\n      for (e = 2; 15 >= k; ++k, e <<= 1) {\n        p <<= 1;\n        v += p;\n        p -= m[k];\n        if (0 > p) return 0;\n        for (; 0 < m[k]; --m[k]) {\n          d = new O();\n          if ((t & q) != r) {\n            g += w;\n            r = k;\n            for (u = 1 << (r - c); 15 > r; ) {\n              u -= m[r];\n              if (0 >= u) break;\n              ++r;\n              u <<= 1;\n            }\n            u = r - c;\n            w = 1 << u;\n            h += w;\n            r = t & q;\n            a[b + r].g = u + c;\n            a[b + r].value = g - b - r;\n          }\n          d.g = k - c;\n          d.value = f[l++];\n          J(a, g + (t >> c), e, w, d);\n          t = L(t, k);\n        }\n      }\n      return v != 2 * n[15] - 1 ? 0 : h;\n    }\n    function Z(a, b, c, d, e) {\n      x(2328 >= e);\n      if (512 >= e) var f = V(512);\n      else if (((f = V(e)), null == f)) return 0;\n      return H(a, b, c, d, e, f);\n    }\n    function O() {\n      this.value = this.g = 0;\n    }\n    function Fd() {\n      this.value = this.g = 0;\n    }\n    function Ub() {\n      this.G = wa(5, O);\n      this.H = V(5);\n      this.jc = this.Qb = this.qb = this.nd = 0;\n      this.pd = wa(xb, Fd);\n    }\n    function ma(a, b, c, d) {\n      x(null != a);\n      x(null != b);\n      x(2147483648 > d);\n      a.Ca = 254;\n      a.I = 0;\n      a.b = -8;\n      a.Ka = 0;\n      a.oa = b;\n      a.pa = c;\n      a.Jd = b;\n      a.Yc = c + d;\n      a.Zc = 4 <= d ? c + d - 4 + 1 : c;\n      Qa(a);\n    }\n    function na(a, b) {\n      for (var c = 0; 0 < b--; ) c |= K(a, 128) << b;\n      return c;\n    }\n    function ca(a, b) {\n      var c = na(a, b);\n      return G(a) ? -c : c;\n    }\n    function cb(a, b, c, d) {\n      var e,\n        f = 0;\n      x(null != a);\n      x(null != b);\n      x(4294967288 > d);\n      a.Sb = d;\n      a.Ra = 0;\n      a.u = 0;\n      a.h = 0;\n      4 < d && (d = 4);\n      for (e = 0; e < d; ++e) f += b[c + e] << (8 * e);\n      a.Ra = f;\n      a.bb = d;\n      a.oa = b;\n      a.pa = c;\n    }\n    function Vb(a) {\n      for (; 8 <= a.u && a.bb < a.Sb; )\n        (a.Ra >>>= 8),\n          (a.Ra += (a.oa[a.pa + a.bb] << (ob - 8)) >>> 0),\n          ++a.bb,\n          (a.u -= 8);\n      db(a) && ((a.h = 1), (a.u = 0));\n    }\n    function D(a, b) {\n      x(0 <= b);\n      if (!a.h && b <= Gd) {\n        var c = pb(a) & Hd[b];\n        a.u += b;\n        Vb(a);\n        return c;\n      }\n      a.h = 1;\n      return (a.u = 0);\n    }\n    function Wb() {\n      this.b = this.Ca = this.I = 0;\n      this.oa = [];\n      this.pa = 0;\n      this.Jd = [];\n      this.Yc = 0;\n      this.Zc = [];\n      this.Ka = 0;\n    }\n    function Ra() {\n      this.Ra = 0;\n      this.oa = [];\n      this.h = this.u = this.bb = this.Sb = this.pa = 0;\n    }\n    function pb(a) {\n      return (a.Ra >>> (a.u & (ob - 1))) >>> 0;\n    }\n    function db(a) {\n      x(a.bb <= a.Sb);\n      return a.h || (a.bb == a.Sb && a.u > ob);\n    }\n    function qb(a, b) {\n      a.u = b;\n      a.h = db(a);\n    }\n    function Sa(a) {\n      a.u >= Xb && (x(a.u >= Xb), Vb(a));\n    }\n    function Qa(a) {\n      x(null != a && null != a.oa);\n      a.pa < a.Zc\n        ? ((a.I = (a.oa[a.pa++] | (a.I << 8)) >>> 0), (a.b += 8))\n        : (x(null != a && null != a.oa),\n          a.pa < a.Yc\n            ? ((a.b += 8), (a.I = a.oa[a.pa++] | (a.I << 8)))\n            : a.Ka\n            ? (a.b = 0)\n            : ((a.I <<= 8), (a.b += 8), (a.Ka = 1)));\n    }\n    function G(a) {\n      return na(a, 1);\n    }\n    function K(a, b) {\n      var c = a.Ca;\n      0 > a.b && Qa(a);\n      var d = a.b,\n        e = (c * b) >>> 8,\n        f = (a.I >>> d > e) + 0;\n      f ? ((c -= e), (a.I -= ((e + 1) << d) >>> 0)) : (c = e + 1);\n      d = c;\n      for (e = 0; 256 <= d; ) (e += 8), (d >>= 8);\n      d = 7 ^ (e + Id[d]);\n      a.b -= d;\n      a.Ca = (c << d) - 1;\n      return f;\n    }\n    function ra(a, b, c) {\n      a[b + 0] = (c >> 24) & 255;\n      a[b + 1] = (c >> 16) & 255;\n      a[b + 2] = (c >> 8) & 255;\n      a[b + 3] = (c >> 0) & 255;\n    }\n    function Ta(a, b) {\n      return (a[b + 0] << 0) | (a[b + 1] << 8);\n    }\n    function Yb(a, b) {\n      return Ta(a, b) | (a[b + 2] << 16);\n    }\n    function Ha(a, b) {\n      return Ta(a, b) | (Ta(a, b + 2) << 16);\n    }\n    function Zb(a, b) {\n      var c = 1 << b;\n      x(null != a);\n      x(0 < b);\n      a.X = V(c);\n      if (null == a.X) return 0;\n      a.Mb = 32 - b;\n      a.Xa = b;\n      return 1;\n    }\n    function $b(a, b) {\n      x(null != a);\n      x(null != b);\n      x(a.Xa == b.Xa);\n      I(b.X, 0, a.X, 0, 1 << b.Xa);\n    }\n    function ac() {\n      this.X = [];\n      this.Xa = this.Mb = 0;\n    }\n    function bc(a, b, c, d) {\n      x(null != c);\n      x(null != d);\n      var e = c[0],\n        f = d[0];\n      0 == e && (e = (a * f + b / 2) / b);\n      0 == f && (f = (b * e + a / 2) / a);\n      if (0 >= e || 0 >= f) return 0;\n      c[0] = e;\n      d[0] = f;\n      return 1;\n    }\n    function xa(a, b) {\n      return (a + (1 << b) - 1) >>> b;\n    }\n    function yb(a, b) {\n      return (\n        (((((a & 4278255360) + (b & 4278255360)) >>> 0) & 4278255360) +\n          ((((a & 16711935) + (b & 16711935)) >>> 0) & 16711935)) >>>\n        0\n      );\n    }\n    function X(a, b) {\n      self[b] = function(b, d, e, f, g, h, k) {\n        var c;\n        for (c = 0; c < g; ++c) {\n          var m = self[a](h[k + c - 1], e, f + c);\n          h[k + c] = yb(b[d + c], m);\n        }\n      };\n    }\n    function Jd() {\n      this.ud = this.hd = this.jd = 0;\n    }\n    function aa(a, b) {\n      return ((((a ^ b) & 4278124286) >>> 1) + (a & b)) >>> 0;\n    }\n    function sa(a) {\n      if (0 <= a && 256 > a) return a;\n      if (0 > a) return 0;\n      if (255 < a) return 255;\n    }\n    function eb(a, b) {\n      return sa(a + ((a - b + 0.5) >> 1));\n    }\n    function Ia(a, b, c) {\n      return Math.abs(b - c) - Math.abs(a - c);\n    }\n    function cc(a, b, c, d, e, f, g) {\n      d = f[g - 1];\n      for (c = 0; c < e; ++c) f[g + c] = d = yb(a[b + c], d);\n    }\n    function Kd(a, b, c, d, e) {\n      var f;\n      for (f = 0; f < c; ++f) {\n        var g = a[b + f],\n          h = (g >> 8) & 255,\n          k = g & 16711935,\n          k = k + ((h << 16) + h),\n          k = k & 16711935;\n        d[e + f] = ((g & 4278255360) + k) >>> 0;\n      }\n    }\n    function dc(a, b) {\n      b.jd = (a >> 0) & 255;\n      b.hd = (a >> 8) & 255;\n      b.ud = (a >> 16) & 255;\n    }\n    function Ld(a, b, c, d, e, f) {\n      var g;\n      for (g = 0; g < d; ++g) {\n        var h = b[c + g],\n          k = h >>> 8,\n          l = h >>> 16,\n          m = h,\n          l = l + ((((a.jd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n          l = l & 255,\n          m = m + ((((a.hd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n          m = m + ((((a.ud << 24) >> 24) * ((l << 24) >> 24)) >>> 5),\n          m = m & 255;\n        e[f + g] = (h & 4278255360) + (l << 16) + m;\n      }\n    }\n    function ec(a, b, c, d, e) {\n      self[b] = function(a, b, c, k, l, m, n, r, q) {\n        for (k = n; k < r; ++k)\n          for (n = 0; n < q; ++n) l[m++] = e(c[d(a[b++])]);\n      };\n      self[a] = function(a, b, h, k, l, m, n) {\n        var f = 8 >> a.b,\n          g = a.Ea,\n          t = a.K[0],\n          v = a.w;\n        if (8 > f)\n          for (a = (1 << a.b) - 1, v = (1 << f) - 1; b < h; ++b) {\n            var p = 0,\n              u;\n            for (u = 0; u < g; ++u)\n              u & a || (p = d(k[l++])), (m[n++] = e(t[p & v])), (p >>= f);\n          }\n        else self[\"VP8LMapColor\" + c](k, l, t, v, m, n, b, h, g);\n      };\n    }\n    function Md(a, b, c, d, e) {\n      for (c = b + c; b < c; ) {\n        var f = a[b++];\n        d[e++] = (f >> 16) & 255;\n        d[e++] = (f >> 8) & 255;\n        d[e++] = (f >> 0) & 255;\n      }\n    }\n    function Nd(a, b, c, d, e) {\n      for (c = b + c; b < c; ) {\n        var f = a[b++];\n        d[e++] = (f >> 16) & 255;\n        d[e++] = (f >> 8) & 255;\n        d[e++] = (f >> 0) & 255;\n        d[e++] = (f >> 24) & 255;\n      }\n    }\n    function Od(a, b, c, d, e) {\n      for (c = b + c; b < c; ) {\n        var f = a[b++],\n          g = ((f >> 16) & 240) | ((f >> 12) & 15),\n          f = ((f >> 0) & 240) | ((f >> 28) & 15);\n        d[e++] = g;\n        d[e++] = f;\n      }\n    }\n    function Pd(a, b, c, d, e) {\n      for (c = b + c; b < c; ) {\n        var f = a[b++],\n          g = ((f >> 16) & 248) | ((f >> 13) & 7),\n          f = ((f >> 5) & 224) | ((f >> 3) & 31);\n        d[e++] = g;\n        d[e++] = f;\n      }\n    }\n    function Qd(a, b, c, d, e) {\n      for (c = b + c; b < c; ) {\n        var f = a[b++];\n        d[e++] = (f >> 0) & 255;\n        d[e++] = (f >> 8) & 255;\n        d[e++] = (f >> 16) & 255;\n      }\n    }\n    function fb(a, b, c, d, e, f) {\n      if (0 == f)\n        for (c = b + c; b < c; )\n          (f = a[b++]),\n            ra(\n              d,\n              ((f[0] >> 24) |\n                ((f[1] >> 8) & 65280) |\n                ((f[2] << 8) & 16711680) |\n                (f[3] << 24)) >>>\n                0\n            ),\n            (e += 32);\n      else I(d, e, a, b, c);\n    }\n    function gb(a, b) {\n      self[b][0] = self[a + \"0\"];\n      self[b][1] = self[a + \"1\"];\n      self[b][2] = self[a + \"2\"];\n      self[b][3] = self[a + \"3\"];\n      self[b][4] = self[a + \"4\"];\n      self[b][5] = self[a + \"5\"];\n      self[b][6] = self[a + \"6\"];\n      self[b][7] = self[a + \"7\"];\n      self[b][8] = self[a + \"8\"];\n      self[b][9] = self[a + \"9\"];\n      self[b][10] = self[a + \"10\"];\n      self[b][11] = self[a + \"11\"];\n      self[b][12] = self[a + \"12\"];\n      self[b][13] = self[a + \"13\"];\n      self[b][14] = self[a + \"0\"];\n      self[b][15] = self[a + \"0\"];\n    }\n    function hb(a) {\n      return a == zb || a == Ab || a == Ja || a == Bb;\n    }\n    function Rd() {\n      this.eb = [];\n      this.size = this.A = this.fb = 0;\n    }\n    function Sd() {\n      this.y = [];\n      this.f = [];\n      this.ea = [];\n      this.F = [];\n      this.Tc = this.Ed = this.Cd = this.Fd = this.lb = this.Db = this.Ab = this.fa = this.J = this.W = this.N = this.O = 0;\n    }\n    function Cb() {\n      this.Rd = this.height = this.width = this.S = 0;\n      this.f = {};\n      this.f.RGBA = new Rd();\n      this.f.kb = new Sd();\n      this.sd = null;\n    }\n    function Td() {\n      this.width = [0];\n      this.height = [0];\n      this.Pd = [0];\n      this.Qd = [0];\n      this.format = [0];\n    }\n    function Ud() {\n      this.Id = this.fd = this.Md = this.hb = this.ib = this.da = this.bd = this.cd = this.j = this.v = this.Da = this.Sd = this.ob = 0;\n    }\n    function Vd(a) {\n      alert(\"todo:WebPSamplerProcessPlane\");\n      return a.T;\n    }\n    function Wd(a, b) {\n      var c = a.T,\n        d = b.ba.f.RGBA,\n        e = d.eb,\n        f = d.fb + a.ka * d.A,\n        g = P[b.ba.S],\n        h = a.y,\n        k = a.O,\n        l = a.f,\n        m = a.N,\n        n = a.ea,\n        r = a.W,\n        q = b.cc,\n        t = b.dc,\n        v = b.Mc,\n        p = b.Nc,\n        u = a.ka,\n        w = a.ka + a.T,\n        y = a.U,\n        A = (y + 1) >> 1;\n      0 == u\n        ? g(h, k, null, null, l, m, n, r, l, m, n, r, e, f, null, null, y)\n        : (g(b.ec, b.fc, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y),\n          ++c);\n      for (; u + 2 < w; u += 2)\n        (q = l),\n          (t = m),\n          (v = n),\n          (p = r),\n          (m += a.Rc),\n          (r += a.Rc),\n          (f += 2 * d.A),\n          (k += 2 * a.fa),\n          g(h, k - a.fa, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y);\n      k += a.fa;\n      a.j + w < a.o\n        ? (I(b.ec, b.fc, h, k, y),\n          I(b.cc, b.dc, l, m, A),\n          I(b.Mc, b.Nc, n, r, A),\n          c--)\n        : w & 1 ||\n          g(\n            h,\n            k,\n            null,\n            null,\n            l,\n            m,\n            n,\n            r,\n            l,\n            m,\n            n,\n            r,\n            e,\n            f + d.A,\n            null,\n            null,\n            y\n          );\n      return c;\n    }\n    function Xd(a, b, c) {\n      var d = a.F,\n        e = [a.J];\n      if (null != d) {\n        var f = a.U,\n          g = b.ba.S,\n          h = g == ya || g == Ja;\n        b = b.ba.f.RGBA;\n        var k = [0],\n          l = a.ka;\n        k[0] = a.T;\n        a.Kb &&\n          (0 == l ? --k[0] : (--l, (e[0] -= a.width)),\n          a.j + a.ka + a.T == a.o && (k[0] = a.o - a.j - l));\n        var m = b.eb,\n          l = b.fb + l * b.A;\n        a = fc(d, e[0], a.width, f, k, m, l + (h ? 0 : 3), b.A);\n        x(c == k);\n        a && hb(g) && za(m, l, h, f, k, b.A);\n      }\n      return 0;\n    }\n    function gc(a) {\n      var b = a.ma,\n        c = b.ba.S,\n        d = 11 > c,\n        e = c == Ua || c == Va || c == ya || c == Db || 12 == c || hb(c);\n      b.memory = null;\n      b.Ib = null;\n      b.Jb = null;\n      b.Nd = null;\n      if (!hc(b.Oa, a, e ? 11 : 12)) return 0;\n      e && hb(c) && ic();\n      if (a.da) alert(\"todo:use_scaling\");\n      else {\n        if (d) {\n          if (((b.Ib = Vd), a.Kb)) {\n            c = (a.U + 1) >> 1;\n            b.memory = V(a.U + 2 * c);\n            if (null == b.memory) return 0;\n            b.ec = b.memory;\n            b.fc = 0;\n            b.cc = b.ec;\n            b.dc = b.fc + a.U;\n            b.Mc = b.cc;\n            b.Nc = b.dc + c;\n            b.Ib = Wd;\n            ic();\n          }\n        } else alert(\"todo:EmitYUV\");\n        e && ((b.Jb = Xd), d && Aa());\n      }\n      if (d && !jc) {\n        for (a = 0; 256 > a; ++a)\n          (Yd[a] = (89858 * (a - 128) + Ba) >> Wa),\n            (Zd[a] = -22014 * (a - 128) + Ba),\n            ($d[a] = -45773 * (a - 128)),\n            (ae[a] = (113618 * (a - 128) + Ba) >> Wa);\n        for (a = ta; a < Eb; ++a)\n          (b = (76283 * (a - 16) + Ba) >> Wa),\n            (be[a - ta] = ga(b, 255)),\n            (ce[a - ta] = ga((b + 8) >> 4, 15));\n        jc = 1;\n      }\n      return 1;\n    }\n    function kc(a) {\n      var b = a.ma,\n        c = a.U,\n        d = a.T;\n      x(!(a.ka & 1));\n      if (0 >= c || 0 >= d) return 0;\n      c = b.Ib(a, b);\n      null != b.Jb && b.Jb(a, b, c);\n      b.Dc += c;\n      return 1;\n    }\n    function lc(a) {\n      a.ma.memory = null;\n    }\n    function mc(a, b, c, d) {\n      if (47 != D(a, 8)) return 0;\n      b[0] = D(a, 14) + 1;\n      c[0] = D(a, 14) + 1;\n      d[0] = D(a, 1);\n      return 0 != D(a, 3) ? 0 : !a.h;\n    }\n    function ib(a, b) {\n      if (4 > a) return a + 1;\n      var c = (a - 2) >> 1;\n      return ((2 + (a & 1)) << c) + D(b, c) + 1;\n    }\n    function nc(a, b) {\n      if (120 < b) return b - 120;\n      var c = de[b - 1],\n        c = (c >> 4) * a + (8 - (c & 15));\n      return 1 <= c ? c : 1;\n    }\n    function ua(a, b, c) {\n      var d = pb(c);\n      b += d & 255;\n      var e = a[b].g - 8;\n      0 < e &&\n        (qb(c, c.u + 8),\n        (d = pb(c)),\n        (b += a[b].value),\n        (b += d & ((1 << e) - 1)));\n      qb(c, c.u + a[b].g);\n      return a[b].value;\n    }\n    function ub(a, b, c) {\n      c.g += a.g;\n      c.value += (a.value << b) >>> 0;\n      x(8 >= c.g);\n      return a.g;\n    }\n    function ha(a, b, c) {\n      var d = a.xc;\n      b = 0 == d ? 0 : a.vc[a.md * (c >> d) + (b >> d)];\n      x(b < a.Wb);\n      return a.Ya[b];\n    }\n    function oc(a, b, c, d) {\n      var e = a.ab,\n        f = a.c * b,\n        g = a.C;\n      b = g + b;\n      var h = c,\n        k = d;\n      d = a.Ta;\n      for (c = a.Ua; 0 < e--; ) {\n        var l = a.gc[e],\n          m = g,\n          n = b,\n          r = h,\n          q = k,\n          k = d,\n          h = c,\n          t = l.Ea;\n        x(m < n);\n        x(n <= l.nc);\n        switch (l.hc) {\n          case 2:\n            pc(r, q, (n - m) * t, k, h);\n            break;\n          case 0:\n            var v = l,\n              p = m,\n              u = n,\n              w = k,\n              y = h,\n              A = v.Ea;\n            0 == p &&\n              (ee(r, q, null, null, 1, w, y),\n              cc(r, q + 1, 0, 0, A - 1, w, y + 1),\n              (q += A),\n              (y += A),\n              ++p);\n            for (\n              var E = 1 << v.b,\n                B = E - 1,\n                C = xa(A, v.b),\n                N = v.K,\n                v = v.w + (p >> v.b) * C;\n              p < u;\n\n            ) {\n              var z = N,\n                Q = v,\n                S = 1;\n              for (fe(r, q, w, y - A, 1, w, y); S < A; ) {\n                var K = qc[(z[Q++] >> 8) & 15],\n                  D = (S & ~B) + E;\n                D > A && (D = A);\n                K(r, q + +S, w, y + S - A, D - S, w, y + S);\n                S = D;\n              }\n              q += A;\n              y += A;\n              ++p;\n              p & B || (v += C);\n            }\n            n != l.nc && I(k, h - t, k, h + (n - m - 1) * t, t);\n            break;\n          case 1:\n            t = r;\n            u = q;\n            r = l.Ea;\n            q = 1 << l.b;\n            w = q - 1;\n            y = r & ~w;\n            A = r - y;\n            p = xa(r, l.b);\n            E = l.K;\n            for (l = l.w + (m >> l.b) * p; m < n; ) {\n              B = E;\n              C = l;\n              N = new Jd();\n              v = u + y;\n              for (z = u + r; u < v; )\n                dc(B[C++], N), Fb(N, t, u, q, k, h), (u += q), (h += q);\n              u < z &&\n                (dc(B[C++], N), Fb(N, t, u, A, k, h), (u += A), (h += A));\n              ++m;\n              m & w || (l += p);\n            }\n            break;\n          case 3:\n            if (r == k && q == h && 0 < l.b) {\n              y = (n - m) * xa(l.Ea, l.b);\n              t = h + (n - m) * t - y;\n              u = k;\n              r = t;\n              q = k;\n              w = h;\n              A = y;\n              p = [];\n              for (y = A - 1; 0 <= y; --y) p[y] = q[w + y];\n              for (y = A - 1; 0 <= y; --y) u[r + y] = p[y];\n              rc(l, m, n, k, t, k, h);\n            } else rc(l, m, n, r, q, k, h);\n        }\n        h = d;\n        k = c;\n      }\n      k != c && I(d, c, h, k, f);\n    }\n    function ge(a, b) {\n      var c = a.V,\n        d = a.Ba + a.c * a.C,\n        e = b - a.C;\n      x(b <= a.l.o);\n      x(16 >= e);\n      if (0 < e) {\n        var f = a.l,\n          g = a.Ta,\n          h = a.Ua,\n          k = f.width;\n        oc(a, e, c, d);\n        h = [h];\n        c = a.C;\n        d = b;\n        e = h;\n        x(c < d);\n        x(f.v < f.va);\n        d > f.o && (d = f.o);\n        if (c < f.j) {\n          var l = f.j - c,\n            c = f.j;\n          e[0] += l * k;\n        }\n        c >= d\n          ? (c = 0)\n          : ((e[0] += 4 * f.v),\n            (f.ka = c - f.j),\n            (f.U = f.va - f.v),\n            (f.T = d - c),\n            (c = 1));\n        if (c) {\n          h = h[0];\n          c = a.ca;\n          if (11 > c.S) {\n            for (\n              var m = c.f.RGBA,\n                d = c.S,\n                e = f.U,\n                f = f.T,\n                l = m.eb,\n                n = m.A,\n                r = f,\n                m = m.fb + a.Ma * m.A;\n              0 < r--;\n\n            ) {\n              var q = g,\n                t = h,\n                v = e,\n                p = l,\n                u = m;\n              switch (d) {\n                case Ca:\n                  sc(q, t, v, p, u);\n                  break;\n                case Ua:\n                  Gb(q, t, v, p, u);\n                  break;\n                case zb:\n                  Gb(q, t, v, p, u);\n                  za(p, u, 0, v, 1, 0);\n                  break;\n                case tc:\n                  uc(q, t, v, p, u);\n                  break;\n                case Va:\n                  fb(q, t, v, p, u, 1);\n                  break;\n                case Ab:\n                  fb(q, t, v, p, u, 1);\n                  za(p, u, 0, v, 1, 0);\n                  break;\n                case ya:\n                  fb(q, t, v, p, u, 0);\n                  break;\n                case Ja:\n                  fb(q, t, v, p, u, 0);\n                  za(p, u, 1, v, 1, 0);\n                  break;\n                case Db:\n                  Hb(q, t, v, p, u);\n                  break;\n                case Bb:\n                  Hb(q, t, v, p, u);\n                  vc(p, u, v, 1, 0);\n                  break;\n                case wc:\n                  xc(q, t, v, p, u);\n                  break;\n                default:\n                  x(0);\n              }\n              h += k;\n              m += n;\n            }\n            a.Ma += f;\n          } else alert(\"todo:EmitRescaledRowsYUVA\");\n          x(a.Ma <= c.height);\n        }\n      }\n      a.C = b;\n      x(a.C <= a.i);\n    }\n    function yc(a) {\n      var b;\n      if (0 < a.ua) return 0;\n      for (b = 0; b < a.Wb; ++b) {\n        var c = a.Ya[b].G,\n          d = a.Ya[b].H;\n        if (\n          0 < c[1][d[1] + 0].g ||\n          0 < c[2][d[2] + 0].g ||\n          0 < c[3][d[3] + 0].g\n        )\n          return 0;\n      }\n      return 1;\n    }\n    function zc(a, b, c, d, e, f) {\n      if (0 != a.Z) {\n        var g = a.qd,\n          h = a.rd;\n        for (x(null != ia[a.Z]); b < c; ++b)\n          ia[a.Z](g, h, d, e, d, e, f), (g = d), (h = e), (e += f);\n        a.qd = g;\n        a.rd = h;\n      }\n    }\n    function Ib(a, b) {\n      var c = a.l.ma,\n        d = 0 == c.Z || 1 == c.Z ? a.l.j : a.C,\n        d = a.C < d ? d : a.C;\n      x(b <= a.l.o);\n      if (b > d) {\n        var e = a.l.width,\n          f = c.ca,\n          g = c.tb + e * d,\n          h = a.V,\n          k = a.Ba + a.c * d,\n          l = a.gc;\n        x(1 == a.ab);\n        x(3 == l[0].hc);\n        he(l[0], d, b, h, k, f, g);\n        zc(c, d, b, f, g, e);\n      }\n      a.C = a.Ma = b;\n    }\n    function Jb(a, b, c, d, e, f, g) {\n      var h = a.$ / d,\n        k = a.$ % d,\n        l = a.m,\n        m = a.s,\n        n = c + a.$,\n        r = n;\n      e = c + d * e;\n      var q = c + d * f,\n        t = 280 + m.ua,\n        v = a.Pb ? h : 16777216,\n        p = 0 < m.ua ? m.Wa : null,\n        u = m.wc,\n        w = n < q ? ha(m, k, h) : null;\n      x(a.C < f);\n      x(q <= e);\n      var y = !1;\n      a: for (;;) {\n        for (; y || n < q; ) {\n          var A = 0;\n          if (h >= v) {\n            var v = a,\n              E = n - c;\n            x(v.Pb);\n            v.wd = v.m;\n            v.xd = E;\n            0 < v.s.ua && $b(v.s.Wa, v.s.vb);\n            v = h + ie;\n          }\n          k & u || (w = ha(m, k, h));\n          x(null != w);\n          w.Qb && ((b[n] = w.qb), (y = !0));\n          if (!y)\n            if ((Sa(l), w.jc)) {\n              var A = l,\n                E = b,\n                B = n,\n                C = w.pd[pb(A) & (xb - 1)];\n              x(w.jc);\n              256 > C.g\n                ? (qb(A, A.u + C.g), (E[B] = C.value), (A = 0))\n                : (qb(A, A.u + C.g - 256), x(256 <= C.value), (A = C.value));\n              0 == A && (y = !0);\n            } else A = ua(w.G[0], w.H[0], l);\n          if (l.h) break;\n          if (y || 256 > A) {\n            if (!y)\n              if (w.nd) b[n] = (w.qb | (A << 8)) >>> 0;\n              else {\n                Sa(l);\n                y = ua(w.G[1], w.H[1], l);\n                Sa(l);\n                E = ua(w.G[2], w.H[2], l);\n                B = ua(w.G[3], w.H[3], l);\n                if (l.h) break;\n                b[n] = ((B << 24) | (y << 16) | (A << 8) | E) >>> 0;\n              }\n            y = !1;\n            ++n;\n            ++k;\n            if (\n              k >= d &&\n              ((k = 0),\n              ++h,\n              null != g && h <= f && !(h % 16) && g(a, h),\n              null != p)\n            )\n              for (; r < n; )\n                (A = b[r++]),\n                  (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n          } else if (280 > A) {\n            A = ib(A - 256, l);\n            E = ua(w.G[4], w.H[4], l);\n            Sa(l);\n            E = ib(E, l);\n            E = nc(d, E);\n            if (l.h) break;\n            if (n - c < E || e - n < A) break a;\n            else for (B = 0; B < A; ++B) b[n + B] = b[n + B - E];\n            n += A;\n            for (k += A; k >= d; )\n              (k -= d), ++h, null != g && h <= f && !(h % 16) && g(a, h);\n            x(n <= e);\n            k & u && (w = ha(m, k, h));\n            if (null != p)\n              for (; r < n; )\n                (A = b[r++]),\n                  (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n          } else if (A < t) {\n            y = A - 280;\n            for (x(null != p); r < n; )\n              (A = b[r++]), (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n            A = n;\n            E = p;\n            x(!(y >>> E.Xa));\n            b[A] = E.X[y];\n            y = !0;\n          } else break a;\n          y || x(l.h == db(l));\n        }\n        if (a.Pb && l.h && n < e)\n          x(a.m.h),\n            (a.a = 5),\n            (a.m = a.wd),\n            (a.$ = a.xd),\n            0 < a.s.ua && $b(a.s.vb, a.s.Wa);\n        else if (l.h) break a;\n        else null != g && g(a, h > f ? f : h), (a.a = 0), (a.$ = n - c);\n        return 1;\n      }\n      a.a = 3;\n      return 0;\n    }\n    function Ac(a) {\n      x(null != a);\n      a.vc = null;\n      a.yc = null;\n      a.Ya = null;\n      var b = a.Wa;\n      null != b && (b.X = null);\n      a.vb = null;\n      x(null != a);\n    }\n    function Bc() {\n      var a = new je();\n      if (null == a) return null;\n      a.a = 0;\n      a.xb = Cc;\n      gb(\"Predictor\", \"VP8LPredictors\");\n      gb(\"Predictor\", \"VP8LPredictors_C\");\n      gb(\"PredictorAdd\", \"VP8LPredictorsAdd\");\n      gb(\"PredictorAdd\", \"VP8LPredictorsAdd_C\");\n      pc = Kd;\n      Fb = Ld;\n      sc = Md;\n      Gb = Nd;\n      Hb = Od;\n      xc = Pd;\n      uc = Qd;\n      self.VP8LMapColor32b = ke;\n      self.VP8LMapColor8b = le;\n      return a;\n    }\n    function rb(a, b, c, d, e) {\n      var f = 1,\n        g = [a],\n        h = [b],\n        k = d.m,\n        l = d.s,\n        m = null,\n        n = 0;\n      a: for (;;) {\n        if (c)\n          for (; f && D(k, 1); ) {\n            var r = g,\n              q = h,\n              t = d,\n              v = 1,\n              p = t.m,\n              u = t.gc[t.ab],\n              w = D(p, 2);\n            if (t.Oc & (1 << w)) f = 0;\n            else {\n              t.Oc |= 1 << w;\n              u.hc = w;\n              u.Ea = r[0];\n              u.nc = q[0];\n              u.K = [null];\n              ++t.ab;\n              x(4 >= t.ab);\n              switch (w) {\n                case 0:\n                case 1:\n                  u.b = D(p, 3) + 2;\n                  v = rb(xa(u.Ea, u.b), xa(u.nc, u.b), 0, t, u.K);\n                  u.K = u.K[0];\n                  break;\n                case 3:\n                  var y = D(p, 8) + 1,\n                    A = 16 < y ? 0 : 4 < y ? 1 : 2 < y ? 2 : 3;\n                  r[0] = xa(u.Ea, A);\n                  u.b = A;\n                  var v = rb(y, 1, 0, t, u.K),\n                    E;\n                  if ((E = v)) {\n                    var B,\n                      C = y,\n                      N = u,\n                      z = 1 << (8 >> N.b),\n                      Q = V(z);\n                    if (null == Q) E = 0;\n                    else {\n                      var S = N.K[0],\n                        K = N.w;\n                      Q[0] = N.K[0][0];\n                      for (B = 1; B < 1 * C; ++B) Q[B] = yb(S[K + B], Q[B - 1]);\n                      for (; B < 4 * z; ++B) Q[B] = 0;\n                      N.K[0] = null;\n                      N.K[0] = Q;\n                      E = 1;\n                    }\n                  }\n                  v = E;\n                  break;\n                case 2:\n                  break;\n                default:\n                  x(0);\n              }\n              f = v;\n            }\n          }\n        g = g[0];\n        h = h[0];\n        if (f && D(k, 1) && ((n = D(k, 4)), (f = 1 <= n && 11 >= n), !f)) {\n          d.a = 3;\n          break a;\n        }\n        var H;\n        if ((H = f))\n          b: {\n            var F = d,\n              G = g,\n              L = h,\n              J = n,\n              T = c,\n              Da,\n              ba,\n              X = F.m,\n              R = F.s,\n              P = [null],\n              U,\n              W = 1,\n              aa = 0,\n              na = me[J];\n            c: for (;;) {\n              if (T && D(X, 1)) {\n                var ca = D(X, 3) + 2,\n                  ga = xa(G, ca),\n                  ka = xa(L, ca),\n                  qa = ga * ka;\n                if (!rb(ga, ka, 0, F, P)) break c;\n                P = P[0];\n                R.xc = ca;\n                for (Da = 0; Da < qa; ++Da) {\n                  var ia = (P[Da] >> 8) & 65535;\n                  P[Da] = ia;\n                  ia >= W && (W = ia + 1);\n                }\n              }\n              if (X.h) break c;\n              for (ba = 0; 5 > ba; ++ba) {\n                var Y = Dc[ba];\n                !ba && 0 < J && (Y += 1 << J);\n                aa < Y && (aa = Y);\n              }\n              var ma = wa(W * na, O);\n              var ua = W,\n                va = wa(ua, Ub);\n              if (null == va) var la = null;\n              else x(65536 >= ua), (la = va);\n              var ha = V(aa);\n              if (null == la || null == ha || null == ma) {\n                F.a = 1;\n                break c;\n              }\n              var pa = ma;\n              for (Da = U = 0; Da < W; ++Da) {\n                var ja = la[Da],\n                  da = ja.G,\n                  ea = ja.H,\n                  Fa = 0,\n                  ra = 1,\n                  Ha = 0;\n                for (ba = 0; 5 > ba; ++ba) {\n                  Y = Dc[ba];\n                  da[ba] = pa;\n                  ea[ba] = U;\n                  !ba && 0 < J && (Y += 1 << J);\n                  d: {\n                    var sa,\n                      za = Y,\n                      ta = F,\n                      oa = ha,\n                      db = pa,\n                      eb = U,\n                      Ia = 0,\n                      Ka = ta.m,\n                      fb = D(Ka, 1);\n                    M(oa, 0, 0, za);\n                    if (fb) {\n                      var gb = D(Ka, 1) + 1,\n                        hb = D(Ka, 1),\n                        Ja = D(Ka, 0 == hb ? 1 : 8);\n                      oa[Ja] = 1;\n                      2 == gb && ((Ja = D(Ka, 8)), (oa[Ja] = 1));\n                      var ya = 1;\n                    } else {\n                      var Ua = V(19),\n                        Va = D(Ka, 4) + 4;\n                      if (19 < Va) {\n                        ta.a = 3;\n                        var Aa = 0;\n                        break d;\n                      }\n                      for (sa = 0; sa < Va; ++sa) Ua[ne[sa]] = D(Ka, 3);\n                      var Ba = void 0,\n                        sb = void 0,\n                        Wa = ta,\n                        ib = Ua,\n                        Ca = za,\n                        Xa = oa,\n                        Oa = 0,\n                        La = Wa.m,\n                        Ya = 8,\n                        Za = wa(128, O);\n                      e: for (;;) {\n                        if (!Z(Za, 0, 7, ib, 19)) break e;\n                        if (D(La, 1)) {\n                          var kb = 2 + 2 * D(La, 3),\n                            Ba = 2 + D(La, kb);\n                          if (Ba > Ca) break e;\n                        } else Ba = Ca;\n                        for (sb = 0; sb < Ca && Ba--; ) {\n                          Sa(La);\n                          var $a = Za[0 + (pb(La) & 127)];\n                          qb(La, La.u + $a.g);\n                          var jb = $a.value;\n                          if (16 > jb) (Xa[sb++] = jb), 0 != jb && (Ya = jb);\n                          else {\n                            var lb = 16 == jb,\n                              ab = jb - 16,\n                              mb = oe[ab],\n                              bb = D(La, pe[ab]) + mb;\n                            if (sb + bb > Ca) break e;\n                            else\n                              for (var nb = lb ? Ya : 0; 0 < bb--; )\n                                Xa[sb++] = nb;\n                          }\n                        }\n                        Oa = 1;\n                        break e;\n                      }\n                      Oa || (Wa.a = 3);\n                      ya = Oa;\n                    }\n                    (ya = ya && !Ka.h) && (Ia = Z(db, eb, 8, oa, za));\n                    ya && 0 != Ia ? (Aa = Ia) : ((ta.a = 3), (Aa = 0));\n                  }\n                  if (0 == Aa) break c;\n                  ra && 1 == qe[ba] && (ra = 0 == pa[U].g);\n                  Fa += pa[U].g;\n                  U += Aa;\n                  if (3 >= ba) {\n                    var Pa = ha[0],\n                      tb;\n                    for (tb = 1; tb < Y; ++tb) ha[tb] > Pa && (Pa = ha[tb]);\n                    Ha += Pa;\n                  }\n                }\n                ja.nd = ra;\n                ja.Qb = 0;\n                ra &&\n                  ((ja.qb =\n                    ((da[3][ea[3] + 0].value << 24) |\n                      (da[1][ea[1] + 0].value << 16) |\n                      da[2][ea[2] + 0].value) >>>\n                    0),\n                  0 == Fa &&\n                    256 > da[0][ea[0] + 0].value &&\n                    ((ja.Qb = 1), (ja.qb += da[0][ea[0] + 0].value << 8)));\n                ja.jc = !ja.Qb && 6 > Ha;\n                if (ja.jc) {\n                  var Ga,\n                    Ea = ja;\n                  for (Ga = 0; Ga < xb; ++Ga) {\n                    var Ma = Ga,\n                      Na = Ea.pd[Ma],\n                      vb = Ea.G[0][Ea.H[0] + Ma];\n                    256 <= vb.value\n                      ? ((Na.g = vb.g + 256), (Na.value = vb.value))\n                      : ((Na.g = 0),\n                        (Na.value = 0),\n                        (Ma >>= ub(vb, 8, Na)),\n                        (Ma >>= ub(Ea.G[1][Ea.H[1] + Ma], 16, Na)),\n                        (Ma >>= ub(Ea.G[2][Ea.H[2] + Ma], 0, Na)),\n                        ub(Ea.G[3][Ea.H[3] + Ma], 24, Na));\n                  }\n                }\n              }\n              R.vc = P;\n              R.Wb = W;\n              R.Ya = la;\n              R.yc = ma;\n              H = 1;\n              break b;\n            }\n            H = 0;\n          }\n        f = H;\n        if (!f) {\n          d.a = 3;\n          break a;\n        }\n        if (0 < n) {\n          if (((l.ua = 1 << n), !Zb(l.Wa, n))) {\n            d.a = 1;\n            f = 0;\n            break a;\n          }\n        } else l.ua = 0;\n        var Qa = d,\n          cb = g,\n          ob = h,\n          Ra = Qa.s,\n          Ta = Ra.xc;\n        Qa.c = cb;\n        Qa.i = ob;\n        Ra.md = xa(cb, Ta);\n        Ra.wc = 0 == Ta ? -1 : (1 << Ta) - 1;\n        if (c) {\n          d.xb = re;\n          break a;\n        }\n        m = V(g * h);\n        if (null == m) {\n          d.a = 1;\n          f = 0;\n          break a;\n        }\n        f = (f = Jb(d, m, 0, g, h, h, null)) && !k.h;\n        break a;\n      }\n      f\n        ? (null != e ? (e[0] = m) : (x(null == m), x(c)), (d.$ = 0), c || Ac(l))\n        : Ac(l);\n      return f;\n    }\n    function Ec(a, b) {\n      var c = a.c * a.i,\n        d = c + b + 16 * b;\n      x(a.c <= b);\n      a.V = V(d);\n      if (null == a.V) return (a.Ta = null), (a.Ua = 0), (a.a = 1), 0;\n      a.Ta = a.V;\n      a.Ua = a.Ba + c + b;\n      return 1;\n    }\n    function se(a, b) {\n      var c = a.C,\n        d = b - c,\n        e = a.V,\n        f = a.Ba + a.c * c;\n      for (x(b <= a.l.o); 0 < d; ) {\n        var g = 16 < d ? 16 : d,\n          h = a.l.ma,\n          k = a.l.width,\n          l = k * g,\n          m = h.ca,\n          n = h.tb + k * c,\n          r = a.Ta,\n          q = a.Ua;\n        oc(a, g, e, f);\n        Fc(r, q, m, n, l);\n        zc(h, c, c + g, m, n, k);\n        d -= g;\n        e += g * a.c;\n        c += g;\n      }\n      x(c == b);\n      a.C = a.Ma = b;\n    }\n    function te(a, b) {\n      var c = [0],\n        d = [0],\n        e = [0];\n      a: for (;;) {\n        if (null == a) return 0;\n        if (null == b) return (a.a = 2), 0;\n        a.l = b;\n        a.a = 0;\n        cb(a.m, b.data, b.w, b.ha);\n        if (!mc(a.m, c, d, e)) {\n          a.a = 3;\n          break a;\n        }\n        a.xb = Cc;\n        b.width = c[0];\n        b.height = d[0];\n        if (!rb(c[0], d[0], 1, a, null)) break a;\n        return 1;\n      }\n      x(0 != a.a);\n      return 0;\n    }\n    function ue() {\n      this.ub = this.yd = this.td = this.Rb = 0;\n    }\n    function ve() {\n      this.Kd = this.Ld = this.Ud = this.Td = this.i = this.c = 0;\n    }\n    function we() {\n      this.Fb = this.Bb = this.Cb = 0;\n      this.Zb = V(4);\n      this.Lb = V(4);\n    }\n    function Gc() {\n      this.Yb = wb();\n    }\n    function xe() {\n      this.jb = V(3);\n      this.Wc = Ed([4, 8], Gc);\n      this.Xc = Ed([4, 17], Gc);\n    }\n    function ye() {\n      this.Pc = this.wb = this.Tb = this.zd = 0;\n      this.vd = new V(4);\n      this.od = new V(4);\n    }\n    function Xa() {\n      this.ld = this.La = this.dd = this.tc = 0;\n    }\n    function Hc() {\n      this.Na = this.la = 0;\n    }\n    function ze() {\n      this.Sc = [0, 0];\n      this.Eb = [0, 0];\n      this.Qc = [0, 0];\n      this.ia = this.lc = 0;\n    }\n    function Kb() {\n      this.ad = V(384);\n      this.Za = 0;\n      this.Ob = V(16);\n      this.$b = this.Ad = this.ia = this.Gc = this.Hc = this.Dd = 0;\n    }\n    function Ae() {\n      this.uc = this.M = this.Nb = 0;\n      this.wa = Array(new Xa());\n      this.Y = 0;\n      this.ya = Array(new Kb());\n      this.aa = 0;\n      this.l = new Oa();\n    }\n    function Ic() {\n      this.y = V(16);\n      this.f = V(8);\n      this.ea = V(8);\n    }\n    function Be() {\n      this.cb = this.a = 0;\n      this.sc = \"\";\n      this.m = new Wb();\n      this.Od = new ue();\n      this.Kc = new ve();\n      this.ed = new ye();\n      this.Qa = new we();\n      this.Ic = this.$c = this.Aa = 0;\n      this.D = new Ae();\n      this.Xb = this.Va = this.Hb = this.zb = this.yb = this.Ub = this.za = 0;\n      this.Jc = wa(8, Wb);\n      this.ia = 0;\n      new F();\n      this.pb = wa(4, ze);\n      this.Pa = new xe();\n      this.Bd = this.kc = 0;\n      this.Ac = [];\n      this.Bc = 0;\n      this.zc = [0, 0, 0, 0];\n      this.Gd = Array(new Ic());\n      this.Hd = 0;\n      this.rb = Array(new Hc());\n      this.sb = 0;\n      this.wa = Array(new Xa());\n      this.Y = 0;\n      this.oc = [];\n      this.pc = 0;\n      this.sa = [];\n      this.ta = 0;\n      this.qa = [];\n      this.ra = 0;\n      this.Ha = [];\n      this.B = this.R = this.Ia = 0;\n      this.Ec = [];\n      this.M = this.ja = this.Vb = this.Fc = 0;\n      this.ya = Array(new Kb());\n      this.L = this.aa = 0;\n      this.gd = Ed([4, 2], Xa);\n      this.ga = null;\n      this.Fa = [];\n      this.Cc = this.qc = this.P = 0;\n      this.Gb = [];\n      this.Uc = 0;\n      this.mb = [];\n      this.nb = 0;\n      this.rc = [];\n      this.Ga = this.Vc = 0;\n    }\n    function ga(a, b) {\n      return 0 > a ? 0 : a > b ? b : a;\n    }\n    function Oa() {\n      this.T = this.U = this.ka = this.height = this.width = 0;\n      this.y = [];\n      this.f = [];\n      this.ea = [];\n      this.Rc = this.fa = this.W = this.N = this.O = 0;\n      this.ma = \"void\";\n      this.put = \"VP8IoPutHook\";\n      this.ac = \"VP8IoSetupHook\";\n      this.bc = \"VP8IoTeardownHook\";\n      this.ha = this.Kb = 0;\n      this.data = [];\n      this.hb = this.ib = this.da = this.o = this.j = this.va = this.v = this.Da = this.ob = this.w = 0;\n      this.F = [];\n      this.J = 0;\n    }\n    function Ce() {\n      var a = new Be();\n      null != a &&\n        ((a.a = 0), (a.sc = \"OK\"), (a.cb = 0), (a.Xb = 0), oa || (oa = De));\n      return a;\n    }\n    function T(a, b, c) {\n      0 == a.a && ((a.a = b), (a.sc = c), (a.cb = 0));\n      return 0;\n    }\n    function Jc(a, b, c) {\n      return 3 <= c && 157 == a[b + 0] && 1 == a[b + 1] && 42 == a[b + 2];\n    }\n    function Kc(a, b) {\n      if (null == a) return 0;\n      a.a = 0;\n      a.sc = \"OK\";\n      if (null == b) return T(a, 2, \"null VP8Io passed to VP8GetHeaders()\");\n      var c = b.data;\n      var d = b.w;\n      var e = b.ha;\n      if (4 > e) return T(a, 7, \"Truncated header.\");\n      var f = c[d + 0] | (c[d + 1] << 8) | (c[d + 2] << 16);\n      var g = a.Od;\n      g.Rb = !(f & 1);\n      g.td = (f >> 1) & 7;\n      g.yd = (f >> 4) & 1;\n      g.ub = f >> 5;\n      if (3 < g.td) return T(a, 3, \"Incorrect keyframe parameters.\");\n      if (!g.yd) return T(a, 4, \"Frame not displayable.\");\n      d += 3;\n      e -= 3;\n      var h = a.Kc;\n      if (g.Rb) {\n        if (7 > e) return T(a, 7, \"cannot parse picture header\");\n        if (!Jc(c, d, e)) return T(a, 3, \"Bad code word\");\n        h.c = ((c[d + 4] << 8) | c[d + 3]) & 16383;\n        h.Td = c[d + 4] >> 6;\n        h.i = ((c[d + 6] << 8) | c[d + 5]) & 16383;\n        h.Ud = c[d + 6] >> 6;\n        d += 7;\n        e -= 7;\n        a.za = (h.c + 15) >> 4;\n        a.Ub = (h.i + 15) >> 4;\n        b.width = h.c;\n        b.height = h.i;\n        b.Da = 0;\n        b.j = 0;\n        b.v = 0;\n        b.va = b.width;\n        b.o = b.height;\n        b.da = 0;\n        b.ib = b.width;\n        b.hb = b.height;\n        b.U = b.width;\n        b.T = b.height;\n        f = a.Pa;\n        M(f.jb, 0, 255, f.jb.length);\n        f = a.Qa;\n        x(null != f);\n        f.Cb = 0;\n        f.Bb = 0;\n        f.Fb = 1;\n        M(f.Zb, 0, 0, f.Zb.length);\n        M(f.Lb, 0, 0, f.Lb);\n      }\n      if (g.ub > e) return T(a, 7, \"bad partition length\");\n      f = a.m;\n      ma(f, c, d, g.ub);\n      d += g.ub;\n      e -= g.ub;\n      g.Rb && ((h.Ld = G(f)), (h.Kd = G(f)));\n      h = a.Qa;\n      var k = a.Pa,\n        l;\n      x(null != f);\n      x(null != h);\n      h.Cb = G(f);\n      if (h.Cb) {\n        h.Bb = G(f);\n        if (G(f)) {\n          h.Fb = G(f);\n          for (l = 0; 4 > l; ++l) h.Zb[l] = G(f) ? ca(f, 7) : 0;\n          for (l = 0; 4 > l; ++l) h.Lb[l] = G(f) ? ca(f, 6) : 0;\n        }\n        if (h.Bb) for (l = 0; 3 > l; ++l) k.jb[l] = G(f) ? na(f, 8) : 255;\n      } else h.Bb = 0;\n      if (f.Ka) return T(a, 3, \"cannot parse segment header\");\n      h = a.ed;\n      h.zd = G(f);\n      h.Tb = na(f, 6);\n      h.wb = na(f, 3);\n      h.Pc = G(f);\n      if (h.Pc && G(f)) {\n        for (k = 0; 4 > k; ++k) G(f) && (h.vd[k] = ca(f, 6));\n        for (k = 0; 4 > k; ++k) G(f) && (h.od[k] = ca(f, 6));\n      }\n      a.L = 0 == h.Tb ? 0 : h.zd ? 1 : 2;\n      if (f.Ka) return T(a, 3, \"cannot parse filter header\");\n      l = d;\n      var m = e;\n      e = l;\n      d = l + m;\n      h = m;\n      a.Xb = (1 << na(a.m, 2)) - 1;\n      k = a.Xb;\n      if (m < 3 * k) c = 7;\n      else {\n        l += 3 * k;\n        h -= 3 * k;\n        for (m = 0; m < k; ++m) {\n          var n = c[e + 0] | (c[e + 1] << 8) | (c[e + 2] << 16);\n          n > h && (n = h);\n          ma(a.Jc[+m], c, l, n);\n          l += n;\n          h -= n;\n          e += 3;\n        }\n        ma(a.Jc[+k], c, l, h);\n        c = l < d ? 0 : 5;\n      }\n      if (0 != c) return T(a, c, \"cannot parse partitions\");\n      l = a.m;\n      c = na(l, 7);\n      e = G(l) ? ca(l, 4) : 0;\n      d = G(l) ? ca(l, 4) : 0;\n      h = G(l) ? ca(l, 4) : 0;\n      k = G(l) ? ca(l, 4) : 0;\n      l = G(l) ? ca(l, 4) : 0;\n      m = a.Qa;\n      for (n = 0; 4 > n; ++n) {\n        if (m.Cb) {\n          var r = m.Zb[n];\n          m.Fb || (r += c);\n        } else if (0 < n) {\n          a.pb[n] = a.pb[0];\n          continue;\n        } else r = c;\n        var q = a.pb[n];\n        q.Sc[0] = Lb[ga(r + e, 127)];\n        q.Sc[1] = Mb[ga(r + 0, 127)];\n        q.Eb[0] = 2 * Lb[ga(r + d, 127)];\n        q.Eb[1] = (101581 * Mb[ga(r + h, 127)]) >> 16;\n        8 > q.Eb[1] && (q.Eb[1] = 8);\n        q.Qc[0] = Lb[ga(r + k, 117)];\n        q.Qc[1] = Mb[ga(r + l, 127)];\n        q.lc = r + l;\n      }\n      if (!g.Rb) return T(a, 4, \"Not a key frame.\");\n      G(f);\n      g = a.Pa;\n      for (c = 0; 4 > c; ++c) {\n        for (e = 0; 8 > e; ++e)\n          for (d = 0; 3 > d; ++d)\n            for (h = 0; 11 > h; ++h)\n              (k = K(f, Ee[c][e][d][h]) ? na(f, 8) : Fe[c][e][d][h]),\n                (g.Wc[c][e].Yb[d][h] = k);\n        for (e = 0; 17 > e; ++e) g.Xc[c][e] = g.Wc[c][Ge[e]];\n      }\n      a.kc = G(f);\n      a.kc && (a.Bd = na(f, 8));\n      return (a.cb = 1);\n    }\n    function De(a, b, c, d, e, f, g) {\n      var h = b[e].Yb[c];\n      for (c = 0; 16 > e; ++e) {\n        if (!K(a, h[c + 0])) return e;\n        for (; !K(a, h[c + 1]); )\n          if (((h = b[++e].Yb[0]), (c = 0), 16 == e)) return 16;\n        var k = b[e + 1].Yb;\n        if (K(a, h[c + 2])) {\n          var l = a,\n            m = h,\n            n = c;\n          var r = 0;\n          if (K(l, m[n + 3]))\n            if (K(l, m[n + 6])) {\n              h = 0;\n              r = K(l, m[n + 8]);\n              m = K(l, m[n + 9 + r]);\n              n = 2 * r + m;\n              r = 0;\n              for (m = He[n]; m[h]; ++h) r += r + K(l, m[h]);\n              r += 3 + (8 << n);\n            } else\n              K(l, m[n + 7])\n                ? ((r = 7 + 2 * K(l, 165)), (r += K(l, 145)))\n                : (r = 5 + K(l, 159));\n          else K(l, m[n + 4]) ? (r = 3 + K(l, m[n + 5])) : (r = 2);\n          h = k[2];\n        } else (r = 1), (h = k[1]);\n        k = g + Ie[e];\n        l = a;\n        0 > l.b && Qa(l);\n        var m = l.b,\n          n = l.Ca >> 1,\n          q = (n - (l.I >> m)) >> 31;\n        --l.b;\n        l.Ca += q;\n        l.Ca |= 1;\n        l.I -= ((n + 1) & q) << m;\n        f[k] = ((r ^ q) - q) * d[(0 < e) + 0];\n      }\n      return 16;\n    }\n    function Lc(a) {\n      var b = a.rb[a.sb - 1];\n      b.la = 0;\n      b.Na = 0;\n      M(a.zc, 0, 0, a.zc.length);\n      a.ja = 0;\n    }\n    function Je(a, b) {\n      for (a.M = 0; a.M < a.Va; ++a.M) {\n        var c = a.Jc[a.M & a.Xb],\n          d = a.m,\n          e = a,\n          f;\n        for (f = 0; f < e.za; ++f) {\n          var g = d;\n          var h = e;\n          var k = h.Ac,\n            l = h.Bc + 4 * f,\n            m = h.zc,\n            n = h.ya[h.aa + f];\n          h.Qa.Bb\n            ? (n.$b = K(g, h.Pa.jb[0])\n                ? 2 + K(g, h.Pa.jb[2])\n                : K(g, h.Pa.jb[1]))\n            : (n.$b = 0);\n          h.kc && (n.Ad = K(g, h.Bd));\n          n.Za = !K(g, 145) + 0;\n          if (n.Za) {\n            var r = n.Ob,\n              q = 0;\n            for (h = 0; 4 > h; ++h) {\n              var t = m[0 + h];\n              var v;\n              for (v = 0; 4 > v; ++v) {\n                t = Ke[k[l + v]][t];\n                for (var p = Mc[K(g, t[0])]; 0 < p; )\n                  p = Mc[2 * p + K(g, t[p])];\n                t = -p;\n                k[l + v] = t;\n              }\n              I(r, q, k, l, 4);\n              q += 4;\n              m[0 + h] = t;\n            }\n          } else\n            (t = K(g, 156) ? (K(g, 128) ? 1 : 3) : K(g, 163) ? 2 : 0),\n              (n.Ob[0] = t),\n              M(k, l, t, 4),\n              M(m, 0, t, 4);\n          n.Dd = K(g, 142) ? (K(g, 114) ? (K(g, 183) ? 1 : 3) : 2) : 0;\n        }\n        if (e.m.Ka) return T(a, 7, \"Premature end-of-partition0 encountered.\");\n        for (; a.ja < a.za; ++a.ja) {\n          d = a;\n          e = c;\n          g = d.rb[d.sb - 1];\n          k = d.rb[d.sb + d.ja];\n          f = d.ya[d.aa + d.ja];\n          if ((l = d.kc ? f.Ad : 0))\n            (g.la = k.la = 0),\n              f.Za || (g.Na = k.Na = 0),\n              (f.Hc = 0),\n              (f.Gc = 0),\n              (f.ia = 0);\n          else {\n            var u,\n              w,\n              g = k,\n              k = e,\n              l = d.Pa.Xc,\n              m = d.ya[d.aa + d.ja],\n              n = d.pb[m.$b];\n            h = m.ad;\n            r = 0;\n            q = d.rb[d.sb - 1];\n            t = v = 0;\n            M(h, r, 0, 384);\n            if (m.Za) {\n              var y = 0;\n              var A = l[3];\n            } else {\n              p = V(16);\n              var E = g.Na + q.Na;\n              E = oa(k, l[1], E, n.Eb, 0, p, 0);\n              g.Na = q.Na = (0 < E) + 0;\n              if (1 < E) Nc(p, 0, h, r);\n              else {\n                var B = (p[0] + 3) >> 3;\n                for (p = 0; 256 > p; p += 16) h[r + p] = B;\n              }\n              y = 1;\n              A = l[0];\n            }\n            var C = g.la & 15;\n            var N = q.la & 15;\n            for (p = 0; 4 > p; ++p) {\n              var z = N & 1;\n              for (B = w = 0; 4 > B; ++B)\n                (E = z + (C & 1)),\n                  (E = oa(k, A, E, n.Sc, y, h, r)),\n                  (z = E > y),\n                  (C = (C >> 1) | (z << 7)),\n                  (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n                  (r += 16);\n              C >>= 4;\n              N = (N >> 1) | (z << 7);\n              v = ((v << 8) | w) >>> 0;\n            }\n            A = C;\n            y = N >> 4;\n            for (u = 0; 4 > u; u += 2) {\n              w = 0;\n              C = g.la >> (4 + u);\n              N = q.la >> (4 + u);\n              for (p = 0; 2 > p; ++p) {\n                z = N & 1;\n                for (B = 0; 2 > B; ++B)\n                  (E = z + (C & 1)),\n                    (E = oa(k, l[2], E, n.Qc, 0, h, r)),\n                    (z = 0 < E),\n                    (C = (C >> 1) | (z << 3)),\n                    (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n                    (r += 16);\n                C >>= 2;\n                N = (N >> 1) | (z << 5);\n              }\n              t |= w << (4 * u);\n              A |= (C << 4) << u;\n              y |= (N & 240) << u;\n            }\n            g.la = A;\n            q.la = y;\n            m.Hc = v;\n            m.Gc = t;\n            m.ia = t & 43690 ? 0 : n.ia;\n            l = !(v | t);\n          }\n          0 < d.L &&\n            ((d.wa[d.Y + d.ja] = d.gd[f.$b][f.Za]),\n            (d.wa[d.Y + d.ja].La |= !l));\n          if (e.Ka) return T(a, 7, \"Premature end-of-file encountered.\");\n        }\n        Lc(a);\n        c = a;\n        d = b;\n        e = 1;\n        f = c.D;\n        g = 0 < c.L && c.M >= c.zb && c.M <= c.Va;\n        if (0 == c.Aa)\n          a: {\n            (f.M = c.M), (f.uc = g), Oc(c, f), (e = 1);\n            w = c.D;\n            f = w.Nb;\n            t = Ya[c.L];\n            g = t * c.R;\n            k = (t / 2) * c.B;\n            p = 16 * f * c.R;\n            B = 8 * f * c.B;\n            l = c.sa;\n            m = c.ta - g + p;\n            n = c.qa;\n            h = c.ra - k + B;\n            r = c.Ha;\n            q = c.Ia - k + B;\n            C = w.M;\n            N = 0 == C;\n            v = C >= c.Va - 1;\n            2 == c.Aa && Oc(c, w);\n            if (w.uc)\n              for (E = c, z = E.D.M, x(E.D.uc), w = E.yb; w < E.Hb; ++w) {\n                var Q = E;\n                y = w;\n                A = z;\n                var S = Q.D,\n                  D = S.Nb;\n                u = Q.R;\n                var S = S.wa[S.Y + y],\n                  F = Q.sa,\n                  H = Q.ta + 16 * D * u + 16 * y,\n                  J = S.dd,\n                  G = S.tc;\n                if (0 != G)\n                  if ((x(3 <= G), 1 == Q.L))\n                    0 < y && Pc(F, H, u, G + 4),\n                      S.La && Qc(F, H, u, G),\n                      0 < A && Rc(F, H, u, G + 4),\n                      S.La && Sc(F, H, u, G);\n                  else {\n                    var L = Q.B,\n                      O = Q.qa,\n                      P = Q.ra + 8 * D * L + 8 * y,\n                      R = Q.Ha,\n                      Q = Q.Ia + 8 * D * L + 8 * y,\n                      D = S.ld;\n                    0 < y &&\n                      (Tc(F, H, u, G + 4, J, D),\n                      Uc(O, P, R, Q, L, G + 4, J, D));\n                    S.La && (Vc(F, H, u, G, J, D), Wc(O, P, R, Q, L, G, J, D));\n                    0 < A &&\n                      (Xc(F, H, u, G + 4, J, D),\n                      Yc(O, P, R, Q, L, G + 4, J, D));\n                    S.La && (Zc(F, H, u, G, J, D), $c(O, P, R, Q, L, G, J, D));\n                  }\n              }\n            c.ia && alert(\"todo:DitherRow\");\n            if (null != d.put) {\n              w = 16 * C;\n              C = 16 * (C + 1);\n              N\n                ? ((d.y = c.sa),\n                  (d.O = c.ta + p),\n                  (d.f = c.qa),\n                  (d.N = c.ra + B),\n                  (d.ea = c.Ha),\n                  (d.W = c.Ia + B))\n                : ((w -= t),\n                  (d.y = l),\n                  (d.O = m),\n                  (d.f = n),\n                  (d.N = h),\n                  (d.ea = r),\n                  (d.W = q));\n              v || (C -= t);\n              C > d.o && (C = d.o);\n              d.F = null;\n              d.J = null;\n              if (\n                null != c.Fa &&\n                0 < c.Fa.length &&\n                w < C &&\n                ((d.J = Le(c, d, w, C - w)),\n                (d.F = c.mb),\n                null == d.F && 0 == d.F.length)\n              ) {\n                e = T(c, 3, \"Could not decode alpha data.\");\n                break a;\n              }\n              w < d.j &&\n                ((t = d.j - w),\n                (w = d.j),\n                x(!(t & 1)),\n                (d.O += c.R * t),\n                (d.N += c.B * (t >> 1)),\n                (d.W += c.B * (t >> 1)),\n                null != d.F && (d.J += d.width * t));\n              w < C &&\n                ((d.O += d.v),\n                (d.N += d.v >> 1),\n                (d.W += d.v >> 1),\n                null != d.F && (d.J += d.v),\n                (d.ka = w - d.j),\n                (d.U = d.va - d.v),\n                (d.T = C - w),\n                (e = d.put(d)));\n            }\n            f + 1 != c.Ic ||\n              v ||\n              (I(c.sa, c.ta - g, l, m + 16 * c.R, g),\n              I(c.qa, c.ra - k, n, h + 8 * c.B, k),\n              I(c.Ha, c.Ia - k, r, q + 8 * c.B, k));\n          }\n        if (!e) return T(a, 6, \"Output aborted.\");\n      }\n      return 1;\n    }\n    function Me(a, b) {\n      if (null == a) return 0;\n      if (null == b) return T(a, 2, \"NULL VP8Io parameter in VP8Decode().\");\n      if (!a.cb && !Kc(a, b)) return 0;\n      x(a.cb);\n      if (null == b.ac || b.ac(b)) {\n        b.ob && (a.L = 0);\n        var c = Ya[a.L];\n        2 == a.L\n          ? ((a.yb = 0), (a.zb = 0))\n          : ((a.yb = (b.v - c) >> 4),\n            (a.zb = (b.j - c) >> 4),\n            0 > a.yb && (a.yb = 0),\n            0 > a.zb && (a.zb = 0));\n        a.Va = (b.o + 15 + c) >> 4;\n        a.Hb = (b.va + 15 + c) >> 4;\n        a.Hb > a.za && (a.Hb = a.za);\n        a.Va > a.Ub && (a.Va = a.Ub);\n        if (0 < a.L) {\n          var d = a.ed;\n          for (c = 0; 4 > c; ++c) {\n            var e;\n            if (a.Qa.Cb) {\n              var f = a.Qa.Lb[c];\n              a.Qa.Fb || (f += d.Tb);\n            } else f = d.Tb;\n            for (e = 0; 1 >= e; ++e) {\n              var g = a.gd[c][e],\n                h = f;\n              d.Pc && ((h += d.vd[0]), e && (h += d.od[0]));\n              h = 0 > h ? 0 : 63 < h ? 63 : h;\n              if (0 < h) {\n                var k = h;\n                0 < d.wb &&\n                  ((k = 4 < d.wb ? k >> 2 : k >> 1),\n                  k > 9 - d.wb && (k = 9 - d.wb));\n                1 > k && (k = 1);\n                g.dd = k;\n                g.tc = 2 * h + k;\n                g.ld = 40 <= h ? 2 : 15 <= h ? 1 : 0;\n              } else g.tc = 0;\n              g.La = e;\n            }\n          }\n        }\n        c = 0;\n      } else T(a, 6, \"Frame setup failed\"), (c = a.a);\n      if ((c = 0 == c)) {\n        if (c) {\n          a.$c = 0;\n          0 < a.Aa || (a.Ic = Ne);\n          b: {\n            c = a.Ic;\n            var k = a.za,\n              d = 4 * k,\n              l = 32 * k,\n              m = k + 1,\n              n = 0 < a.L ? k * (0 < a.Aa ? 2 : 1) : 0,\n              r = (2 == a.Aa ? 2 : 1) * k;\n            e = ((3 * (16 * c + Ya[a.L])) / 2) * l;\n            f = null != a.Fa && 0 < a.Fa.length ? a.Kc.c * a.Kc.i : 0;\n            g = d + 832 + e + f;\n            if (g != g) c = 0;\n            else {\n              if (g > a.Vb) {\n                a.Vb = 0;\n                a.Ec = V(g);\n                a.Fc = 0;\n                if (null == a.Ec) {\n                  c = T(a, 1, \"no memory during frame initialization.\");\n                  break b;\n                }\n                a.Vb = g;\n              }\n              g = a.Ec;\n              h = a.Fc;\n              a.Ac = g;\n              a.Bc = h;\n              h += d;\n              a.Gd = wa(l, Ic);\n              a.Hd = 0;\n              a.rb = wa(m + 1, Hc);\n              a.sb = 1;\n              a.wa = n ? wa(n, Xa) : null;\n              a.Y = 0;\n              a.D.Nb = 0;\n              a.D.wa = a.wa;\n              a.D.Y = a.Y;\n              0 < a.Aa && (a.D.Y += k);\n              x(!0);\n              a.oc = g;\n              a.pc = h;\n              h += 832;\n              a.ya = wa(r, Kb);\n              a.aa = 0;\n              a.D.ya = a.ya;\n              a.D.aa = a.aa;\n              2 == a.Aa && (a.D.aa += k);\n              a.R = 16 * k;\n              a.B = 8 * k;\n              l = Ya[a.L];\n              k = l * a.R;\n              l = (l / 2) * a.B;\n              a.sa = g;\n              a.ta = h + k;\n              a.qa = a.sa;\n              a.ra = a.ta + 16 * c * a.R + l;\n              a.Ha = a.qa;\n              a.Ia = a.ra + 8 * c * a.B + l;\n              a.$c = 0;\n              h += e;\n              a.mb = f ? g : null;\n              a.nb = f ? h : null;\n              x(h + f <= a.Fc + a.Vb);\n              Lc(a);\n              M(a.Ac, a.Bc, 0, d);\n              c = 1;\n            }\n          }\n          if (c) {\n            b.ka = 0;\n            b.y = a.sa;\n            b.O = a.ta;\n            b.f = a.qa;\n            b.N = a.ra;\n            b.ea = a.Ha;\n            b.Vd = a.Ia;\n            b.fa = a.R;\n            b.Rc = a.B;\n            b.F = null;\n            b.J = 0;\n            if (!ad) {\n              for (c = -255; 255 >= c; ++c) bd[255 + c] = 0 > c ? -c : c;\n              for (c = -1020; 1020 >= c; ++c)\n                cd[1020 + c] = -128 > c ? -128 : 127 < c ? 127 : c;\n              for (c = -112; 112 >= c; ++c)\n                dd[112 + c] = -16 > c ? -16 : 15 < c ? 15 : c;\n              for (c = -255; 510 >= c; ++c)\n                ed[255 + c] = 0 > c ? 0 : 255 < c ? 255 : c;\n              ad = 1;\n            }\n            Nc = Oe;\n            Za = Pe;\n            Nb = Qe;\n            pa = Re;\n            Ob = Se;\n            fd = Te;\n            Xc = Ue;\n            Tc = Ve;\n            Yc = We;\n            Uc = Xe;\n            Zc = Ye;\n            Vc = Ze;\n            $c = $e;\n            Wc = af;\n            Rc = gd;\n            Pc = hd;\n            Sc = bf;\n            Qc = cf;\n            W[0] = df;\n            W[1] = ef;\n            W[2] = ff;\n            W[3] = gf;\n            W[4] = hf;\n            W[5] = jf;\n            W[6] = kf;\n            W[7] = lf;\n            W[8] = mf;\n            W[9] = nf;\n            Y[0] = of;\n            Y[1] = pf;\n            Y[2] = qf;\n            Y[3] = rf;\n            Y[4] = sf;\n            Y[5] = tf;\n            Y[6] = uf;\n            ka[0] = vf;\n            ka[1] = wf;\n            ka[2] = xf;\n            ka[3] = yf;\n            ka[4] = zf;\n            ka[5] = Af;\n            ka[6] = Bf;\n            c = 1;\n          } else c = 0;\n        }\n        c && (c = Je(a, b));\n        null != b.bc && b.bc(b);\n        c &= 1;\n      }\n      if (!c) return 0;\n      a.cb = 0;\n      return c;\n    }\n    function qa(a, b, c, d, e) {\n      e = a[b + c + 32 * d] + (e >> 3);\n      a[b + c + 32 * d] = e & -256 ? (0 > e ? 0 : 255) : e;\n    }\n    function kb(a, b, c, d, e, f) {\n      qa(a, b, 0, c, d + e);\n      qa(a, b, 1, c, d + f);\n      qa(a, b, 2, c, d - f);\n      qa(a, b, 3, c, d - e);\n    }\n    function da(a) {\n      return ((20091 * a) >> 16) + a;\n    }\n    function id(a, b, c, d) {\n      var e = 0,\n        f;\n      var g = V(16);\n      for (f = 0; 4 > f; ++f) {\n        var h = a[b + 0] + a[b + 8];\n        var k = a[b + 0] - a[b + 8];\n        var l = ((35468 * a[b + 4]) >> 16) - da(a[b + 12]);\n        var m = da(a[b + 4]) + ((35468 * a[b + 12]) >> 16);\n        g[e + 0] = h + m;\n        g[e + 1] = k + l;\n        g[e + 2] = k - l;\n        g[e + 3] = h - m;\n        e += 4;\n        b++;\n      }\n      for (f = e = 0; 4 > f; ++f)\n        (a = g[e + 0] + 4),\n          (h = a + g[e + 8]),\n          (k = a - g[e + 8]),\n          (l = ((35468 * g[e + 4]) >> 16) - da(g[e + 12])),\n          (m = da(g[e + 4]) + ((35468 * g[e + 12]) >> 16)),\n          qa(c, d, 0, 0, h + m),\n          qa(c, d, 1, 0, k + l),\n          qa(c, d, 2, 0, k - l),\n          qa(c, d, 3, 0, h - m),\n          e++,\n          (d += 32);\n    }\n    function Te(a, b, c, d) {\n      var e = a[b + 0] + 4,\n        f = (35468 * a[b + 4]) >> 16,\n        g = da(a[b + 4]),\n        h = (35468 * a[b + 1]) >> 16;\n      a = da(a[b + 1]);\n      kb(c, d, 0, e + g, a, h);\n      kb(c, d, 1, e + f, a, h);\n      kb(c, d, 2, e - f, a, h);\n      kb(c, d, 3, e - g, a, h);\n    }\n    function Pe(a, b, c, d, e) {\n      id(a, b, c, d);\n      e && id(a, b + 16, c, d + 4);\n    }\n    function Qe(a, b, c, d) {\n      Za(a, b + 0, c, d, 1);\n      Za(a, b + 32, c, d + 128, 1);\n    }\n    function Re(a, b, c, d) {\n      a = a[b + 0] + 4;\n      var e;\n      for (e = 0; 4 > e; ++e) for (b = 0; 4 > b; ++b) qa(c, d, b, e, a);\n    }\n    function Se(a, b, c, d) {\n      a[b + 0] && pa(a, b + 0, c, d);\n      a[b + 16] && pa(a, b + 16, c, d + 4);\n      a[b + 32] && pa(a, b + 32, c, d + 128);\n      a[b + 48] && pa(a, b + 48, c, d + 128 + 4);\n    }\n    function Oe(a, b, c, d) {\n      var e = V(16),\n        f;\n      for (f = 0; 4 > f; ++f) {\n        var g = a[b + 0 + f] + a[b + 12 + f];\n        var h = a[b + 4 + f] + a[b + 8 + f];\n        var k = a[b + 4 + f] - a[b + 8 + f];\n        var l = a[b + 0 + f] - a[b + 12 + f];\n        e[0 + f] = g + h;\n        e[8 + f] = g - h;\n        e[4 + f] = l + k;\n        e[12 + f] = l - k;\n      }\n      for (f = 0; 4 > f; ++f)\n        (a = e[0 + 4 * f] + 3),\n          (g = a + e[3 + 4 * f]),\n          (h = e[1 + 4 * f] + e[2 + 4 * f]),\n          (k = e[1 + 4 * f] - e[2 + 4 * f]),\n          (l = a - e[3 + 4 * f]),\n          (c[d + 0] = (g + h) >> 3),\n          (c[d + 16] = (l + k) >> 3),\n          (c[d + 32] = (g - h) >> 3),\n          (c[d + 48] = (l - k) >> 3),\n          (d += 64);\n    }\n    function Pb(a, b, c) {\n      var d = b - 32,\n        e = R,\n        f = 255 - a[d - 1],\n        g;\n      for (g = 0; g < c; ++g) {\n        var h = e,\n          k = f + a[b - 1],\n          l;\n        for (l = 0; l < c; ++l) a[b + l] = h[k + a[d + l]];\n        b += 32;\n      }\n    }\n    function ef(a, b) {\n      Pb(a, b, 4);\n    }\n    function wf(a, b) {\n      Pb(a, b, 8);\n    }\n    function pf(a, b) {\n      Pb(a, b, 16);\n    }\n    function qf(a, b) {\n      var c;\n      for (c = 0; 16 > c; ++c) I(a, b + 32 * c, a, b - 32, 16);\n    }\n    function rf(a, b) {\n      var c;\n      for (c = 16; 0 < c; --c) M(a, b, a[b - 1], 16), (b += 32);\n    }\n    function $a(a, b, c) {\n      var d;\n      for (d = 0; 16 > d; ++d) M(b, c + 32 * d, a, 16);\n    }\n    function of(a, b) {\n      var c = 16,\n        d;\n      for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d] + a[b + d - 32];\n      $a(c >> 5, a, b);\n    }\n    function sf(a, b) {\n      var c = 8,\n        d;\n      for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d];\n      $a(c >> 4, a, b);\n    }\n    function tf(a, b) {\n      var c = 8,\n        d;\n      for (d = 0; 16 > d; ++d) c += a[b + d - 32];\n      $a(c >> 4, a, b);\n    }\n    function uf(a, b) {\n      $a(128, a, b);\n    }\n    function z(a, b, c) {\n      return (a + 2 * b + c + 2) >> 2;\n    }\n    function ff(a, b) {\n      var c = b - 32,\n        c = new Uint8Array([\n          z(a[c - 1], a[c + 0], a[c + 1]),\n          z(a[c + 0], a[c + 1], a[c + 2]),\n          z(a[c + 1], a[c + 2], a[c + 3]),\n          z(a[c + 2], a[c + 3], a[c + 4])\n        ]),\n        d;\n      for (d = 0; 4 > d; ++d) I(a, b + 32 * d, c, 0, c.length);\n    }\n    function gf(a, b) {\n      var c = a[b - 1],\n        d = a[b - 1 + 32],\n        e = a[b - 1 + 64],\n        f = a[b - 1 + 96];\n      ra(a, b + 0, 16843009 * z(a[b - 1 - 32], c, d));\n      ra(a, b + 32, 16843009 * z(c, d, e));\n      ra(a, b + 64, 16843009 * z(d, e, f));\n      ra(a, b + 96, 16843009 * z(e, f, f));\n    }\n    function df(a, b) {\n      var c = 4,\n        d;\n      for (d = 0; 4 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n      c >>= 3;\n      for (d = 0; 4 > d; ++d) M(a, b + 32 * d, c, 4);\n    }\n    function hf(a, b) {\n      var c = a[b - 1 + 0],\n        d = a[b - 1 + 32],\n        e = a[b - 1 + 64],\n        f = a[b - 1 - 32],\n        g = a[b + 0 - 32],\n        h = a[b + 1 - 32],\n        k = a[b + 2 - 32],\n        l = a[b + 3 - 32];\n      a[b + 0 + 96] = z(d, e, a[b - 1 + 96]);\n      a[b + 1 + 96] = a[b + 0 + 64] = z(c, d, e);\n      a[b + 2 + 96] = a[b + 1 + 64] = a[b + 0 + 32] = z(f, c, d);\n      a[b + 3 + 96] = a[b + 2 + 64] = a[b + 1 + 32] = a[b + 0 + 0] = z(g, f, c);\n      a[b + 3 + 64] = a[b + 2 + 32] = a[b + 1 + 0] = z(h, g, f);\n      a[b + 3 + 32] = a[b + 2 + 0] = z(k, h, g);\n      a[b + 3 + 0] = z(l, k, h);\n    }\n    function kf(a, b) {\n      var c = a[b + 1 - 32],\n        d = a[b + 2 - 32],\n        e = a[b + 3 - 32],\n        f = a[b + 4 - 32],\n        g = a[b + 5 - 32],\n        h = a[b + 6 - 32],\n        k = a[b + 7 - 32];\n      a[b + 0 + 0] = z(a[b + 0 - 32], c, d);\n      a[b + 1 + 0] = a[b + 0 + 32] = z(c, d, e);\n      a[b + 2 + 0] = a[b + 1 + 32] = a[b + 0 + 64] = z(d, e, f);\n      a[b + 3 + 0] = a[b + 2 + 32] = a[b + 1 + 64] = a[b + 0 + 96] = z(e, f, g);\n      a[b + 3 + 32] = a[b + 2 + 64] = a[b + 1 + 96] = z(f, g, h);\n      a[b + 3 + 64] = a[b + 2 + 96] = z(g, h, k);\n      a[b + 3 + 96] = z(h, k, k);\n    }\n    function jf(a, b) {\n      var c = a[b - 1 + 0],\n        d = a[b - 1 + 32],\n        e = a[b - 1 + 64],\n        f = a[b - 1 - 32],\n        g = a[b + 0 - 32],\n        h = a[b + 1 - 32],\n        k = a[b + 2 - 32],\n        l = a[b + 3 - 32];\n      a[b + 0 + 0] = a[b + 1 + 64] = (f + g + 1) >> 1;\n      a[b + 1 + 0] = a[b + 2 + 64] = (g + h + 1) >> 1;\n      a[b + 2 + 0] = a[b + 3 + 64] = (h + k + 1) >> 1;\n      a[b + 3 + 0] = (k + l + 1) >> 1;\n      a[b + 0 + 96] = z(e, d, c);\n      a[b + 0 + 64] = z(d, c, f);\n      a[b + 0 + 32] = a[b + 1 + 96] = z(c, f, g);\n      a[b + 1 + 32] = a[b + 2 + 96] = z(f, g, h);\n      a[b + 2 + 32] = a[b + 3 + 96] = z(g, h, k);\n      a[b + 3 + 32] = z(h, k, l);\n    }\n    function lf(a, b) {\n      var c = a[b + 0 - 32],\n        d = a[b + 1 - 32],\n        e = a[b + 2 - 32],\n        f = a[b + 3 - 32],\n        g = a[b + 4 - 32],\n        h = a[b + 5 - 32],\n        k = a[b + 6 - 32],\n        l = a[b + 7 - 32];\n      a[b + 0 + 0] = (c + d + 1) >> 1;\n      a[b + 1 + 0] = a[b + 0 + 64] = (d + e + 1) >> 1;\n      a[b + 2 + 0] = a[b + 1 + 64] = (e + f + 1) >> 1;\n      a[b + 3 + 0] = a[b + 2 + 64] = (f + g + 1) >> 1;\n      a[b + 0 + 32] = z(c, d, e);\n      a[b + 1 + 32] = a[b + 0 + 96] = z(d, e, f);\n      a[b + 2 + 32] = a[b + 1 + 96] = z(e, f, g);\n      a[b + 3 + 32] = a[b + 2 + 96] = z(f, g, h);\n      a[b + 3 + 64] = z(g, h, k);\n      a[b + 3 + 96] = z(h, k, l);\n    }\n    function nf(a, b) {\n      var c = a[b - 1 + 0],\n        d = a[b - 1 + 32],\n        e = a[b - 1 + 64],\n        f = a[b - 1 + 96];\n      a[b + 0 + 0] = (c + d + 1) >> 1;\n      a[b + 2 + 0] = a[b + 0 + 32] = (d + e + 1) >> 1;\n      a[b + 2 + 32] = a[b + 0 + 64] = (e + f + 1) >> 1;\n      a[b + 1 + 0] = z(c, d, e);\n      a[b + 3 + 0] = a[b + 1 + 32] = z(d, e, f);\n      a[b + 3 + 32] = a[b + 1 + 64] = z(e, f, f);\n      a[b + 3 + 64] = a[b + 2 + 64] = a[b + 0 + 96] = a[b + 1 + 96] = a[\n        b + 2 + 96\n      ] = a[b + 3 + 96] = f;\n    }\n    function mf(a, b) {\n      var c = a[b - 1 + 0],\n        d = a[b - 1 + 32],\n        e = a[b - 1 + 64],\n        f = a[b - 1 + 96],\n        g = a[b - 1 - 32],\n        h = a[b + 0 - 32],\n        k = a[b + 1 - 32],\n        l = a[b + 2 - 32];\n      a[b + 0 + 0] = a[b + 2 + 32] = (c + g + 1) >> 1;\n      a[b + 0 + 32] = a[b + 2 + 64] = (d + c + 1) >> 1;\n      a[b + 0 + 64] = a[b + 2 + 96] = (e + d + 1) >> 1;\n      a[b + 0 + 96] = (f + e + 1) >> 1;\n      a[b + 3 + 0] = z(h, k, l);\n      a[b + 2 + 0] = z(g, h, k);\n      a[b + 1 + 0] = a[b + 3 + 32] = z(c, g, h);\n      a[b + 1 + 32] = a[b + 3 + 64] = z(d, c, g);\n      a[b + 1 + 64] = a[b + 3 + 96] = z(e, d, c);\n      a[b + 1 + 96] = z(f, e, d);\n    }\n    function xf(a, b) {\n      var c;\n      for (c = 0; 8 > c; ++c) I(a, b + 32 * c, a, b - 32, 8);\n    }\n    function yf(a, b) {\n      var c;\n      for (c = 0; 8 > c; ++c) M(a, b, a[b - 1], 8), (b += 32);\n    }\n    function lb(a, b, c) {\n      var d;\n      for (d = 0; 8 > d; ++d) M(b, c + 32 * d, a, 8);\n    }\n    function vf(a, b) {\n      var c = 8,\n        d;\n      for (d = 0; 8 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n      lb(c >> 4, a, b);\n    }\n    function Af(a, b) {\n      var c = 4,\n        d;\n      for (d = 0; 8 > d; ++d) c += a[b + d - 32];\n      lb(c >> 3, a, b);\n    }\n    function zf(a, b) {\n      var c = 4,\n        d;\n      for (d = 0; 8 > d; ++d) c += a[b - 1 + 32 * d];\n      lb(c >> 3, a, b);\n    }\n    function Bf(a, b) {\n      lb(128, a, b);\n    }\n    function ab(a, b, c) {\n      var d = a[b - c],\n        e = a[b + 0],\n        f = 3 * (e - d) + Qb[1020 + a[b - 2 * c] - a[b + c]],\n        g = mb[112 + ((f + 4) >> 3)];\n      a[b - c] = R[255 + d + mb[112 + ((f + 3) >> 3)]];\n      a[b + 0] = R[255 + e - g];\n    }\n    function jd(a, b, c, d) {\n      var e = a[b + 0],\n        f = a[b + c];\n      return U[255 + a[b - 2 * c] - a[b - c]] > d || U[255 + f - e] > d;\n    }\n    function kd(a, b, c, d) {\n      return (\n        4 * U[255 + a[b - c] - a[b + 0]] + U[255 + a[b - 2 * c] - a[b + c]] <= d\n      );\n    }\n    function ld(a, b, c, d, e) {\n      var f = a[b - 3 * c],\n        g = a[b - 2 * c],\n        h = a[b - c],\n        k = a[b + 0],\n        l = a[b + c],\n        m = a[b + 2 * c],\n        n = a[b + 3 * c];\n      return 4 * U[255 + h - k] + U[255 + g - l] > d\n        ? 0\n        : U[255 + a[b - 4 * c] - f] <= e &&\n            U[255 + f - g] <= e &&\n            U[255 + g - h] <= e &&\n            U[255 + n - m] <= e &&\n            U[255 + m - l] <= e &&\n            U[255 + l - k] <= e;\n    }\n    function gd(a, b, c, d) {\n      var e = 2 * d + 1;\n      for (d = 0; 16 > d; ++d) kd(a, b + d, c, e) && ab(a, b + d, c);\n    }\n    function hd(a, b, c, d) {\n      var e = 2 * d + 1;\n      for (d = 0; 16 > d; ++d) kd(a, b + d * c, 1, e) && ab(a, b + d * c, 1);\n    }\n    function bf(a, b, c, d) {\n      var e;\n      for (e = 3; 0 < e; --e) (b += 4 * c), gd(a, b, c, d);\n    }\n    function cf(a, b, c, d) {\n      var e;\n      for (e = 3; 0 < e; --e) (b += 4), hd(a, b, c, d);\n    }\n    function ea(a, b, c, d, e, f, g, h) {\n      for (f = 2 * f + 1; 0 < e--; ) {\n        if (ld(a, b, c, f, g))\n          if (jd(a, b, c, h)) ab(a, b, c);\n          else {\n            var k = a,\n              l = b,\n              m = c,\n              n = k[l - 2 * m],\n              r = k[l - m],\n              q = k[l + 0],\n              t = k[l + m],\n              v = k[l + 2 * m],\n              p = Qb[1020 + 3 * (q - r) + Qb[1020 + n - t]],\n              u = (27 * p + 63) >> 7,\n              w = (18 * p + 63) >> 7,\n              p = (9 * p + 63) >> 7;\n            k[l - 3 * m] = R[255 + k[l - 3 * m] + p];\n            k[l - 2 * m] = R[255 + n + w];\n            k[l - m] = R[255 + r + u];\n            k[l + 0] = R[255 + q - u];\n            k[l + m] = R[255 + t - w];\n            k[l + 2 * m] = R[255 + v - p];\n          }\n        b += d;\n      }\n    }\n    function Fa(a, b, c, d, e, f, g, h) {\n      for (f = 2 * f + 1; 0 < e--; ) {\n        if (ld(a, b, c, f, g))\n          if (jd(a, b, c, h)) ab(a, b, c);\n          else {\n            var k = a,\n              l = b,\n              m = c,\n              n = k[l - m],\n              r = k[l + 0],\n              q = k[l + m],\n              t = 3 * (r - n),\n              v = mb[112 + ((t + 4) >> 3)],\n              t = mb[112 + ((t + 3) >> 3)],\n              p = (v + 1) >> 1;\n            k[l - 2 * m] = R[255 + k[l - 2 * m] + p];\n            k[l - m] = R[255 + n + t];\n            k[l + 0] = R[255 + r - v];\n            k[l + m] = R[255 + q - p];\n          }\n        b += d;\n      }\n    }\n    function Ue(a, b, c, d, e, f) {\n      ea(a, b, c, 1, 16, d, e, f);\n    }\n    function Ve(a, b, c, d, e, f) {\n      ea(a, b, 1, c, 16, d, e, f);\n    }\n    function Ye(a, b, c, d, e, f) {\n      var g;\n      for (g = 3; 0 < g; --g) (b += 4 * c), Fa(a, b, c, 1, 16, d, e, f);\n    }\n    function Ze(a, b, c, d, e, f) {\n      var g;\n      for (g = 3; 0 < g; --g) (b += 4), Fa(a, b, 1, c, 16, d, e, f);\n    }\n    function We(a, b, c, d, e, f, g, h) {\n      ea(a, b, e, 1, 8, f, g, h);\n      ea(c, d, e, 1, 8, f, g, h);\n    }\n    function Xe(a, b, c, d, e, f, g, h) {\n      ea(a, b, 1, e, 8, f, g, h);\n      ea(c, d, 1, e, 8, f, g, h);\n    }\n    function $e(a, b, c, d, e, f, g, h) {\n      Fa(a, b + 4 * e, e, 1, 8, f, g, h);\n      Fa(c, d + 4 * e, e, 1, 8, f, g, h);\n    }\n    function af(a, b, c, d, e, f, g, h) {\n      Fa(a, b + 4, 1, e, 8, f, g, h);\n      Fa(c, d + 4, 1, e, 8, f, g, h);\n    }\n    function Cf() {\n      this.ba = new Cb();\n      this.ec = [];\n      this.cc = [];\n      this.Mc = [];\n      this.Dc = this.Nc = this.dc = this.fc = 0;\n      this.Oa = new Ud();\n      this.memory = 0;\n      this.Ib = \"OutputFunc\";\n      this.Jb = \"OutputAlphaFunc\";\n      this.Nd = \"OutputRowFunc\";\n    }\n    function md() {\n      this.data = [];\n      this.offset = this.kd = this.ha = this.w = 0;\n      this.na = [];\n      this.xa = this.gb = this.Ja = this.Sa = this.P = 0;\n    }\n    function Df() {\n      this.nc = this.Ea = this.b = this.hc = 0;\n      this.K = [];\n      this.w = 0;\n    }\n    function Ef() {\n      this.ua = 0;\n      this.Wa = new ac();\n      this.vb = new ac();\n      this.md = this.xc = this.wc = 0;\n      this.vc = [];\n      this.Wb = 0;\n      this.Ya = new Ub();\n      this.yc = new O();\n    }\n    function je() {\n      this.xb = this.a = 0;\n      this.l = new Oa();\n      this.ca = new Cb();\n      this.V = [];\n      this.Ba = 0;\n      this.Ta = [];\n      this.Ua = 0;\n      this.m = new Ra();\n      this.Pb = 0;\n      this.wd = new Ra();\n      this.Ma = this.$ = this.C = this.i = this.c = this.xd = 0;\n      this.s = new Ef();\n      this.ab = 0;\n      this.gc = wa(4, Df);\n      this.Oc = 0;\n    }\n    function Ff() {\n      this.Lc = this.Z = this.$a = this.i = this.c = 0;\n      this.l = new Oa();\n      this.ic = 0;\n      this.ca = [];\n      this.tb = 0;\n      this.qd = null;\n      this.rd = 0;\n    }\n    function Rb(a, b, c, d, e, f, g) {\n      a = null == a ? 0 : a[b + 0];\n      for (b = 0; b < g; ++b) (e[f + b] = (a + c[d + b]) & 255), (a = e[f + b]);\n    }\n    function Gf(a, b, c, d, e, f, g) {\n      if (null == a) Rb(null, null, c, d, e, f, g);\n      else {\n        var h;\n        for (h = 0; h < g; ++h) e[f + h] = (a[b + h] + c[d + h]) & 255;\n      }\n    }\n    function Hf(a, b, c, d, e, f, g) {\n      if (null == a) Rb(null, null, c, d, e, f, g);\n      else {\n        var h = a[b + 0],\n          k = h,\n          l = h,\n          m;\n        for (m = 0; m < g; ++m)\n          (h = a[b + m]),\n            (k = l + h - k),\n            (l = (c[d + m] + (k & -256 ? (0 > k ? 0 : 255) : k)) & 255),\n            (k = h),\n            (e[f + m] = l);\n      }\n    }\n    function Le(a, b, c, d) {\n      var e = b.width,\n        f = b.o;\n      x(null != a && null != b);\n      if (0 > c || 0 >= d || c + d > f) return null;\n      if (!a.Cc) {\n        if (null == a.ga) {\n          a.ga = new Ff();\n          var g;\n          (g = null == a.ga) ||\n            ((g = b.width * b.o),\n            x(0 == a.Gb.length),\n            (a.Gb = V(g)),\n            (a.Uc = 0),\n            null == a.Gb\n              ? (g = 0)\n              : ((a.mb = a.Gb), (a.nb = a.Uc), (a.rc = null), (g = 1)),\n            (g = !g));\n          if (!g) {\n            g = a.ga;\n            var h = a.Fa,\n              k = a.P,\n              l = a.qc,\n              m = a.mb,\n              n = a.nb,\n              r = k + 1,\n              q = l - 1,\n              t = g.l;\n            x(null != h && null != m && null != b);\n            ia[0] = null;\n            ia[1] = Rb;\n            ia[2] = Gf;\n            ia[3] = Hf;\n            g.ca = m;\n            g.tb = n;\n            g.c = b.width;\n            g.i = b.height;\n            x(0 < g.c && 0 < g.i);\n            if (1 >= l) b = 0;\n            else if (\n              ((g.$a = (h[k + 0] >> 0) & 3),\n              (g.Z = (h[k + 0] >> 2) & 3),\n              (g.Lc = (h[k + 0] >> 4) & 3),\n              (k = (h[k + 0] >> 6) & 3),\n              0 > g.$a || 1 < g.$a || 4 <= g.Z || 1 < g.Lc || k)\n            )\n              b = 0;\n            else if (\n              ((t.put = kc),\n              (t.ac = gc),\n              (t.bc = lc),\n              (t.ma = g),\n              (t.width = b.width),\n              (t.height = b.height),\n              (t.Da = b.Da),\n              (t.v = b.v),\n              (t.va = b.va),\n              (t.j = b.j),\n              (t.o = b.o),\n              g.$a)\n            )\n              b: {\n                x(1 == g.$a), (b = Bc());\n                c: for (;;) {\n                  if (null == b) {\n                    b = 0;\n                    break b;\n                  }\n                  x(null != g);\n                  g.mc = b;\n                  b.c = g.c;\n                  b.i = g.i;\n                  b.l = g.l;\n                  b.l.ma = g;\n                  b.l.width = g.c;\n                  b.l.height = g.i;\n                  b.a = 0;\n                  cb(b.m, h, r, q);\n                  if (!rb(g.c, g.i, 1, b, null)) break c;\n                  1 == b.ab && 3 == b.gc[0].hc && yc(b.s)\n                    ? ((g.ic = 1),\n                      (h = b.c * b.i),\n                      (b.Ta = null),\n                      (b.Ua = 0),\n                      (b.V = V(h)),\n                      (b.Ba = 0),\n                      null == b.V ? ((b.a = 1), (b = 0)) : (b = 1))\n                    : ((g.ic = 0), (b = Ec(b, g.c)));\n                  if (!b) break c;\n                  b = 1;\n                  break b;\n                }\n                g.mc = null;\n                b = 0;\n              }\n            else b = q >= g.c * g.i;\n            g = !b;\n          }\n          if (g) return null;\n          1 != a.ga.Lc ? (a.Ga = 0) : (d = f - c);\n        }\n        x(null != a.ga);\n        x(c + d <= f);\n        a: {\n          h = a.ga;\n          b = h.c;\n          f = h.l.o;\n          if (0 == h.$a) {\n            r = a.rc;\n            q = a.Vc;\n            t = a.Fa;\n            k = a.P + 1 + c * b;\n            l = a.mb;\n            m = a.nb + c * b;\n            x(k <= a.P + a.qc);\n            if (0 != h.Z)\n              for (x(null != ia[h.Z]), g = 0; g < d; ++g)\n                ia[h.Z](r, q, t, k, l, m, b),\n                  (r = l),\n                  (q = m),\n                  (m += b),\n                  (k += b);\n            else\n              for (g = 0; g < d; ++g)\n                I(l, m, t, k, b), (r = l), (q = m), (m += b), (k += b);\n            a.rc = r;\n            a.Vc = q;\n          } else {\n            x(null != h.mc);\n            b = c + d;\n            g = h.mc;\n            x(null != g);\n            x(b <= g.i);\n            if (g.C >= b) b = 1;\n            else if ((h.ic || Aa(), h.ic)) {\n              var h = g.V,\n                r = g.Ba,\n                q = g.c,\n                v = g.i,\n                t = 1,\n                k = g.$ / q,\n                l = g.$ % q,\n                m = g.m,\n                n = g.s,\n                p = g.$,\n                u = q * v,\n                w = q * b,\n                y = n.wc,\n                A = p < w ? ha(n, l, k) : null;\n              x(p <= u);\n              x(b <= v);\n              x(yc(n));\n              c: for (;;) {\n                for (; !m.h && p < w; ) {\n                  l & y || (A = ha(n, l, k));\n                  x(null != A);\n                  Sa(m);\n                  v = ua(A.G[0], A.H[0], m);\n                  if (256 > v)\n                    (h[r + p] = v),\n                      ++p,\n                      ++l,\n                      l >= q && ((l = 0), ++k, k <= b && !(k % 16) && Ib(g, k));\n                  else if (280 > v) {\n                    var v = ib(v - 256, m);\n                    var E = ua(A.G[4], A.H[4], m);\n                    Sa(m);\n                    E = ib(E, m);\n                    E = nc(q, E);\n                    if (p >= E && u - p >= v) {\n                      var B;\n                      for (B = 0; B < v; ++B) h[r + p + B] = h[r + p + B - E];\n                    } else {\n                      t = 0;\n                      break c;\n                    }\n                    p += v;\n                    for (l += v; l >= q; )\n                      (l -= q), ++k, k <= b && !(k % 16) && Ib(g, k);\n                    p < w && l & y && (A = ha(n, l, k));\n                  } else {\n                    t = 0;\n                    break c;\n                  }\n                  x(m.h == db(m));\n                }\n                Ib(g, k > b ? b : k);\n                break c;\n              }\n              !t || (m.h && p < u) ? ((t = 0), (g.a = m.h ? 5 : 3)) : (g.$ = p);\n              b = t;\n            } else b = Jb(g, g.V, g.Ba, g.c, g.i, b, se);\n            if (!b) {\n              d = 0;\n              break a;\n            }\n          }\n          c + d >= f && (a.Cc = 1);\n          d = 1;\n        }\n        if (!d) return null;\n        if (\n          a.Cc &&\n          ((d = a.ga), null != d && (d.mc = null), (a.ga = null), 0 < a.Ga)\n        )\n          return alert(\"todo:WebPDequantizeLevels\"), null;\n      }\n      return a.nb + c * e;\n    }\n    function If(a, b, c, d, e, f) {\n      for (; 0 < e--; ) {\n        var g = a,\n          h = b + (c ? 1 : 0),\n          k = a,\n          l = b + (c ? 0 : 3),\n          m;\n        for (m = 0; m < d; ++m) {\n          var n = k[l + 4 * m];\n          255 != n &&\n            ((n *= 32897),\n            (g[h + 4 * m + 0] = (g[h + 4 * m + 0] * n) >> 23),\n            (g[h + 4 * m + 1] = (g[h + 4 * m + 1] * n) >> 23),\n            (g[h + 4 * m + 2] = (g[h + 4 * m + 2] * n) >> 23));\n        }\n        b += f;\n      }\n    }\n    function Jf(a, b, c, d, e) {\n      for (; 0 < d--; ) {\n        var f;\n        for (f = 0; f < c; ++f) {\n          var g = a[b + 2 * f + 0],\n            h = a[b + 2 * f + 1],\n            k = h & 15,\n            l = 4369 * k,\n            h = (((h & 240) | (h >> 4)) * l) >> 16;\n          a[b + 2 * f + 0] =\n            (((((g & 240) | (g >> 4)) * l) >> 16) & 240) |\n            ((((((g & 15) | (g << 4)) * l) >> 16) >> 4) & 15);\n          a[b + 2 * f + 1] = (h & 240) | k;\n        }\n        b += e;\n      }\n    }\n    function Kf(a, b, c, d, e, f, g, h) {\n      var k = 255,\n        l,\n        m;\n      for (m = 0; m < e; ++m) {\n        for (l = 0; l < d; ++l) {\n          var n = a[b + l];\n          f[g + 4 * l] = n;\n          k &= n;\n        }\n        b += c;\n        g += h;\n      }\n      return 255 != k;\n    }\n    function Lf(a, b, c, d, e) {\n      var f;\n      for (f = 0; f < e; ++f) c[d + f] = a[b + f] >> 8;\n    }\n    function Aa() {\n      za = If;\n      vc = Jf;\n      fc = Kf;\n      Fc = Lf;\n    }\n    function va(a, b, c) {\n      self[a] = function(a, e, f, g, h, k, l, m, n, r, q, t, v, p, u, w, y) {\n        var d,\n          E = (y - 1) >> 1;\n        var B = h[k + 0] | (l[m + 0] << 16);\n        var C = n[r + 0] | (q[t + 0] << 16);\n        x(null != a);\n        var z = (3 * B + C + 131074) >> 2;\n        b(a[e + 0], z & 255, z >> 16, v, p);\n        null != f &&\n          ((z = (3 * C + B + 131074) >> 2),\n          b(f[g + 0], z & 255, z >> 16, u, w));\n        for (d = 1; d <= E; ++d) {\n          var D = h[k + d] | (l[m + d] << 16);\n          var G = n[r + d] | (q[t + d] << 16);\n          var F = B + D + C + G + 524296;\n          var H = (F + 2 * (D + C)) >> 3;\n          F = (F + 2 * (B + G)) >> 3;\n          z = (H + B) >> 1;\n          B = (F + D) >> 1;\n          b(a[e + 2 * d - 1], z & 255, z >> 16, v, p + (2 * d - 1) * c);\n          b(a[e + 2 * d - 0], B & 255, B >> 16, v, p + (2 * d - 0) * c);\n          null != f &&\n            ((z = (F + C) >> 1),\n            (B = (H + G) >> 1),\n            b(f[g + 2 * d - 1], z & 255, z >> 16, u, w + (2 * d - 1) * c),\n            b(f[g + 2 * d + 0], B & 255, B >> 16, u, w + (2 * d + 0) * c));\n          B = D;\n          C = G;\n        }\n        y & 1 ||\n          ((z = (3 * B + C + 131074) >> 2),\n          b(a[e + y - 1], z & 255, z >> 16, v, p + (y - 1) * c),\n          null != f &&\n            ((z = (3 * C + B + 131074) >> 2),\n            b(f[g + y - 1], z & 255, z >> 16, u, w + (y - 1) * c)));\n      };\n    }\n    function ic() {\n      P[Ca] = Mf;\n      P[Ua] = nd;\n      P[tc] = Nf;\n      P[Va] = od;\n      P[ya] = pd;\n      P[Db] = qd;\n      P[wc] = Of;\n      P[zb] = nd;\n      P[Ab] = od;\n      P[Ja] = pd;\n      P[Bb] = qd;\n    }\n    function Sb(a) {\n      return a & ~Pf ? (0 > a ? 0 : 255) : a >> rd;\n    }\n    function bb(a, b) {\n      return Sb(((19077 * a) >> 8) + ((26149 * b) >> 8) - 14234);\n    }\n    function nb(a, b, c) {\n      return Sb(\n        ((19077 * a) >> 8) - ((6419 * b) >> 8) - ((13320 * c) >> 8) + 8708\n      );\n    }\n    function Pa(a, b) {\n      return Sb(((19077 * a) >> 8) + ((33050 * b) >> 8) - 17685);\n    }\n    function Ga(a, b, c, d, e) {\n      d[e + 0] = bb(a, c);\n      d[e + 1] = nb(a, b, c);\n      d[e + 2] = Pa(a, b);\n    }\n    function Tb(a, b, c, d, e) {\n      d[e + 0] = Pa(a, b);\n      d[e + 1] = nb(a, b, c);\n      d[e + 2] = bb(a, c);\n    }\n    function sd(a, b, c, d, e) {\n      var f = nb(a, b, c);\n      b = ((f << 3) & 224) | (Pa(a, b) >> 3);\n      d[e + 0] = (bb(a, c) & 248) | (f >> 5);\n      d[e + 1] = b;\n    }\n    function td(a, b, c, d, e) {\n      var f = (Pa(a, b) & 240) | 15;\n      d[e + 0] = (bb(a, c) & 240) | (nb(a, b, c) >> 4);\n      d[e + 1] = f;\n    }\n    function ud(a, b, c, d, e) {\n      d[e + 0] = 255;\n      Ga(a, b, c, d, e + 1);\n    }\n    function vd(a, b, c, d, e) {\n      Tb(a, b, c, d, e);\n      d[e + 3] = 255;\n    }\n    function wd(a, b, c, d, e) {\n      Ga(a, b, c, d, e);\n      d[e + 3] = 255;\n    }\n    function ga(a, b) {\n      return 0 > a ? 0 : a > b ? b : a;\n    }\n    function la(a, b, c) {\n      self[a] = function(a, e, f, g, h, k, l, m, n) {\n        for (var d = m + (n & -2) * c; m != d; )\n          b(a[e + 0], f[g + 0], h[k + 0], l, m),\n            b(a[e + 1], f[g + 0], h[k + 0], l, m + c),\n            (e += 2),\n            ++g,\n            ++k,\n            (m += 2 * c);\n        n & 1 && b(a[e + 0], f[g + 0], h[k + 0], l, m);\n      };\n    }\n    function xd(a, b, c) {\n      return 0 == c ? (0 == a ? (0 == b ? 6 : 5) : 0 == b ? 4 : 0) : c;\n    }\n    function yd(a, b, c, d, e) {\n      switch (a >>> 30) {\n        case 3:\n          Za(b, c, d, e, 0);\n          break;\n        case 2:\n          fd(b, c, d, e);\n          break;\n        case 1:\n          pa(b, c, d, e);\n      }\n    }\n    function Oc(a, b) {\n      var c,\n        d,\n        e = b.M,\n        f = b.Nb,\n        g = a.oc,\n        h = a.pc + 40,\n        k = a.oc,\n        l = a.pc + 584,\n        m = a.oc,\n        n = a.pc + 600;\n      for (c = 0; 16 > c; ++c) g[h + 32 * c - 1] = 129;\n      for (c = 0; 8 > c; ++c)\n        (k[l + 32 * c - 1] = 129), (m[n + 32 * c - 1] = 129);\n      0 < e\n        ? (g[h - 1 - 32] = k[l - 1 - 32] = m[n - 1 - 32] = 129)\n        : (M(g, h - 32 - 1, 127, 21),\n          M(k, l - 32 - 1, 127, 9),\n          M(m, n - 32 - 1, 127, 9));\n      for (d = 0; d < a.za; ++d) {\n        var r = b.ya[b.aa + d];\n        if (0 < d) {\n          for (c = -1; 16 > c; ++c) I(g, h + 32 * c - 4, g, h + 32 * c + 12, 4);\n          for (c = -1; 8 > c; ++c)\n            I(k, l + 32 * c - 4, k, l + 32 * c + 4, 4),\n              I(m, n + 32 * c - 4, m, n + 32 * c + 4, 4);\n        }\n        var q = a.Gd,\n          t = a.Hd + d,\n          v = r.ad,\n          p = r.Hc;\n        0 < e &&\n          (I(g, h - 32, q[t].y, 0, 16),\n          I(k, l - 32, q[t].f, 0, 8),\n          I(m, n - 32, q[t].ea, 0, 8));\n        if (r.Za) {\n          var u = g;\n          var w = h - 32 + 16;\n          0 < e &&\n            (d >= a.za - 1\n              ? M(u, w, q[t].y[15], 4)\n              : I(u, w, q[t + 1].y, 0, 4));\n          for (c = 0; 4 > c; c++)\n            u[w + 128 + c] = u[w + 256 + c] = u[w + 384 + c] = u[w + 0 + c];\n          for (c = 0; 16 > c; ++c, p <<= 2)\n            (u = g), (w = h + zd[c]), W[r.Ob[c]](u, w), yd(p, v, 16 * +c, u, w);\n        } else if (((u = xd(d, e, r.Ob[0])), Y[u](g, h), 0 != p))\n          for (c = 0; 16 > c; ++c, p <<= 2) yd(p, v, 16 * +c, g, h + zd[c]);\n        c = r.Gc;\n        u = xd(d, e, r.Dd);\n        ka[u](k, l);\n        ka[u](m, n);\n        r = c >> 0;\n        p = v;\n        u = k;\n        w = l;\n        r & 255 && (r & 170 ? Nb(p, 256, u, w) : Ob(p, 256, u, w));\n        c >>= 8;\n        r = m;\n        p = n;\n        c & 255 && (c & 170 ? Nb(v, 320, r, p) : Ob(v, 320, r, p));\n        e < a.Ub - 1 &&\n          (I(q[t].y, 0, g, h + 480, 16),\n          I(q[t].f, 0, k, l + 224, 8),\n          I(q[t].ea, 0, m, n + 224, 8));\n        c = 8 * f * a.B;\n        q = a.sa;\n        t = a.ta + 16 * d + 16 * f * a.R;\n        v = a.qa;\n        r = a.ra + 8 * d + c;\n        p = a.Ha;\n        u = a.Ia + 8 * d + c;\n        for (c = 0; 16 > c; ++c) I(q, t + c * a.R, g, h + 32 * c, 16);\n        for (c = 0; 8 > c; ++c)\n          I(v, r + c * a.B, k, l + 32 * c, 8),\n            I(p, u + c * a.B, m, n + 32 * c, 8);\n      }\n    }\n    function Ad(a, b, c, d, e, f, g, h, k) {\n      var l = [0],\n        m = [0],\n        n = 0,\n        r = null != k ? k.kd : 0,\n        q = null != k ? k : new md();\n      if (null == a || 12 > c) return 7;\n      q.data = a;\n      q.w = b;\n      q.ha = c;\n      b = [b];\n      c = [c];\n      q.gb = [q.gb];\n      a: {\n        var t = b;\n        var v = c;\n        var p = q.gb;\n        x(null != a);\n        x(null != v);\n        x(null != p);\n        p[0] = 0;\n        if (12 <= v[0] && !fa(a, t[0], \"RIFF\")) {\n          if (fa(a, t[0] + 8, \"WEBP\")) {\n            p = 3;\n            break a;\n          }\n          var u = Ha(a, t[0] + 4);\n          if (12 > u || 4294967286 < u) {\n            p = 3;\n            break a;\n          }\n          if (r && u > v[0] - 8) {\n            p = 7;\n            break a;\n          }\n          p[0] = u;\n          t[0] += 12;\n          v[0] -= 12;\n        }\n        p = 0;\n      }\n      if (0 != p) return p;\n      u = 0 < q.gb[0];\n      for (c = c[0]; ; ) {\n        t = [0];\n        n = [n];\n        a: {\n          var w = a;\n          v = b;\n          p = c;\n          var y = n,\n            A = l,\n            z = m,\n            B = t;\n          y[0] = 0;\n          if (8 > p[0]) p = 7;\n          else {\n            if (!fa(w, v[0], \"VP8X\")) {\n              if (10 != Ha(w, v[0] + 4)) {\n                p = 3;\n                break a;\n              }\n              if (18 > p[0]) {\n                p = 7;\n                break a;\n              }\n              var C = Ha(w, v[0] + 8);\n              var D = 1 + Yb(w, v[0] + 12);\n              w = 1 + Yb(w, v[0] + 15);\n              if (2147483648 <= D * w) {\n                p = 3;\n                break a;\n              }\n              null != B && (B[0] = C);\n              null != A && (A[0] = D);\n              null != z && (z[0] = w);\n              v[0] += 18;\n              p[0] -= 18;\n              y[0] = 1;\n            }\n            p = 0;\n          }\n        }\n        n = n[0];\n        t = t[0];\n        if (0 != p) return p;\n        v = !!(t & 2);\n        if (!u && n) return 3;\n        null != f && (f[0] = !!(t & 16));\n        null != g && (g[0] = v);\n        null != h && (h[0] = 0);\n        g = l[0];\n        t = m[0];\n        if (n && v && null == k) {\n          p = 0;\n          break;\n        }\n        if (4 > c) {\n          p = 7;\n          break;\n        }\n        if ((u && n) || (!u && !n && !fa(a, b[0], \"ALPH\"))) {\n          c = [c];\n          q.na = [q.na];\n          q.P = [q.P];\n          q.Sa = [q.Sa];\n          a: {\n            C = a;\n            p = b;\n            u = c;\n            var y = q.gb,\n              A = q.na,\n              z = q.P,\n              B = q.Sa;\n            D = 22;\n            x(null != C);\n            x(null != u);\n            w = p[0];\n            var F = u[0];\n            x(null != A);\n            x(null != B);\n            A[0] = null;\n            z[0] = null;\n            for (B[0] = 0; ; ) {\n              p[0] = w;\n              u[0] = F;\n              if (8 > F) {\n                p = 7;\n                break a;\n              }\n              var G = Ha(C, w + 4);\n              if (4294967286 < G) {\n                p = 3;\n                break a;\n              }\n              var H = (8 + G + 1) & -2;\n              D += H;\n              if (0 < y && D > y) {\n                p = 3;\n                break a;\n              }\n              if (!fa(C, w, \"VP8 \") || !fa(C, w, \"VP8L\")) {\n                p = 0;\n                break a;\n              }\n              if (F[0] < H) {\n                p = 7;\n                break a;\n              }\n              fa(C, w, \"ALPH\") || ((A[0] = C), (z[0] = w + 8), (B[0] = G));\n              w += H;\n              F -= H;\n            }\n          }\n          c = c[0];\n          q.na = q.na[0];\n          q.P = q.P[0];\n          q.Sa = q.Sa[0];\n          if (0 != p) break;\n        }\n        c = [c];\n        q.Ja = [q.Ja];\n        q.xa = [q.xa];\n        a: if (\n          ((y = a),\n          (p = b),\n          (u = c),\n          (A = q.gb[0]),\n          (z = q.Ja),\n          (B = q.xa),\n          (C = p[0]),\n          (w = !fa(y, C, \"VP8 \")),\n          (D = !fa(y, C, \"VP8L\")),\n          x(null != y),\n          x(null != u),\n          x(null != z),\n          x(null != B),\n          8 > u[0])\n        )\n          p = 7;\n        else {\n          if (w || D) {\n            y = Ha(y, C + 4);\n            if (12 <= A && y > A - 12) {\n              p = 3;\n              break a;\n            }\n            if (r && y > u[0] - 8) {\n              p = 7;\n              break a;\n            }\n            z[0] = y;\n            p[0] += 8;\n            u[0] -= 8;\n            B[0] = D;\n          } else\n            (B[0] = 5 <= u[0] && 47 == y[C + 0] && !(y[C + 4] >> 5)),\n              (z[0] = u[0]);\n          p = 0;\n        }\n        c = c[0];\n        q.Ja = q.Ja[0];\n        q.xa = q.xa[0];\n        b = b[0];\n        if (0 != p) break;\n        if (4294967286 < q.Ja) return 3;\n        null == h || v || (h[0] = q.xa ? 2 : 1);\n        g = [g];\n        t = [t];\n        if (q.xa) {\n          if (5 > c) {\n            p = 7;\n            break;\n          }\n          h = g;\n          r = t;\n          v = f;\n          null == a || 5 > c\n            ? (a = 0)\n            : 5 <= c && 47 == a[b + 0] && !(a[b + 4] >> 5)\n            ? ((u = [0]),\n              (y = [0]),\n              (A = [0]),\n              (z = new Ra()),\n              cb(z, a, b, c),\n              mc(z, u, y, A)\n                ? (null != h && (h[0] = u[0]),\n                  null != r && (r[0] = y[0]),\n                  null != v && (v[0] = A[0]),\n                  (a = 1))\n                : (a = 0))\n            : (a = 0);\n        } else {\n          if (10 > c) {\n            p = 7;\n            break;\n          }\n          h = t;\n          null == a || 10 > c || !Jc(a, b + 3, c - 3)\n            ? (a = 0)\n            : ((r = a[b + 0] | (a[b + 1] << 8) | (a[b + 2] << 16)),\n              (v = ((a[b + 7] << 8) | a[b + 6]) & 16383),\n              (a = ((a[b + 9] << 8) | a[b + 8]) & 16383),\n              r & 1 ||\n              3 < ((r >> 1) & 7) ||\n              !((r >> 4) & 1) ||\n              r >> 5 >= q.Ja ||\n              !v ||\n              !a\n                ? (a = 0)\n                : (g && (g[0] = v), h && (h[0] = a), (a = 1)));\n        }\n        if (!a) return 3;\n        g = g[0];\n        t = t[0];\n        if (n && (l[0] != g || m[0] != t)) return 3;\n        null != k &&\n          ((k[0] = q),\n          (k.offset = b - k.w),\n          x(4294967286 > b - k.w),\n          x(k.offset == k.ha - c));\n        break;\n      }\n      return 0 == p || (7 == p && n && null == k)\n        ? (null != f && (f[0] |= null != q.na && 0 < q.na.length),\n          null != d && (d[0] = g),\n          null != e && (e[0] = t),\n          0)\n        : p;\n    }\n    function hc(a, b, c) {\n      var d = b.width,\n        e = b.height,\n        f = 0,\n        g = 0,\n        h = d,\n        k = e;\n      b.Da = null != a && 0 < a.Da;\n      if (\n        b.Da &&\n        ((h = a.cd),\n        (k = a.bd),\n        (f = a.v),\n        (g = a.j),\n        11 > c || ((f &= -2), (g &= -2)),\n        0 > f || 0 > g || 0 >= h || 0 >= k || f + h > d || g + k > e)\n      )\n        return 0;\n      b.v = f;\n      b.j = g;\n      b.va = f + h;\n      b.o = g + k;\n      b.U = h;\n      b.T = k;\n      b.da = null != a && 0 < a.da;\n      if (b.da) {\n        c = [a.ib];\n        f = [a.hb];\n        if (!bc(h, k, c, f)) return 0;\n        b.ib = c[0];\n        b.hb = f[0];\n      }\n      b.ob = null != a && a.ob;\n      b.Kb = null == a || !a.Sd;\n      b.da && ((b.ob = b.ib < (3 * d) / 4 && b.hb < (3 * e) / 4), (b.Kb = 0));\n      return 1;\n    }\n    function Bd(a) {\n      if (null == a) return 2;\n      if (11 > a.S) {\n        var b = a.f.RGBA;\n        b.fb += (a.height - 1) * b.A;\n        b.A = -b.A;\n      } else\n        (b = a.f.kb),\n          (a = a.height),\n          (b.O += (a - 1) * b.fa),\n          (b.fa = -b.fa),\n          (b.N += ((a - 1) >> 1) * b.Ab),\n          (b.Ab = -b.Ab),\n          (b.W += ((a - 1) >> 1) * b.Db),\n          (b.Db = -b.Db),\n          null != b.F && ((b.J += (a - 1) * b.lb), (b.lb = -b.lb));\n      return 0;\n    }\n    function Cd(a, b, c, d) {\n      if (null == d || 0 >= a || 0 >= b) return 2;\n      if (null != c) {\n        if (c.Da) {\n          var e = c.cd,\n            f = c.bd,\n            g = c.v & -2,\n            h = c.j & -2;\n          if (0 > g || 0 > h || 0 >= e || 0 >= f || g + e > a || h + f > b)\n            return 2;\n          a = e;\n          b = f;\n        }\n        if (c.da) {\n          e = [c.ib];\n          f = [c.hb];\n          if (!bc(a, b, e, f)) return 2;\n          a = e[0];\n          b = f[0];\n        }\n      }\n      d.width = a;\n      d.height = b;\n      a: {\n        var k = d.width;\n        var l = d.height;\n        a = d.S;\n        if (0 >= k || 0 >= l || !(a >= Ca && 13 > a)) a = 2;\n        else {\n          if (0 >= d.Rd && null == d.sd) {\n            var g = (f = e = b = 0),\n              h = k * Dd[a],\n              m = h * l;\n            11 > a ||\n              ((b = (k + 1) / 2),\n              (f = ((l + 1) / 2) * b),\n              12 == a && ((e = k), (g = e * l)));\n            l = V(m + 2 * f + g);\n            if (null == l) {\n              a = 1;\n              break a;\n            }\n            d.sd = l;\n            11 > a\n              ? ((k = d.f.RGBA),\n                (k.eb = l),\n                (k.fb = 0),\n                (k.A = h),\n                (k.size = m))\n              : ((k = d.f.kb),\n                (k.y = l),\n                (k.O = 0),\n                (k.fa = h),\n                (k.Fd = m),\n                (k.f = l),\n                (k.N = 0 + m),\n                (k.Ab = b),\n                (k.Cd = f),\n                (k.ea = l),\n                (k.W = 0 + m + f),\n                (k.Db = b),\n                (k.Ed = f),\n                12 == a && ((k.F = l), (k.J = 0 + m + 2 * f)),\n                (k.Tc = g),\n                (k.lb = e));\n          }\n          b = 1;\n          e = d.S;\n          f = d.width;\n          g = d.height;\n          if (e >= Ca && 13 > e)\n            if (11 > e)\n              (a = d.f.RGBA),\n                (h = Math.abs(a.A)),\n                (b &= h * (g - 1) + f <= a.size),\n                (b &= h >= f * Dd[e]),\n                (b &= null != a.eb);\n            else {\n              a = d.f.kb;\n              h = (f + 1) / 2;\n              m = (g + 1) / 2;\n              k = Math.abs(a.fa);\n              var l = Math.abs(a.Ab),\n                n = Math.abs(a.Db),\n                r = Math.abs(a.lb),\n                q = r * (g - 1) + f;\n              b &= k * (g - 1) + f <= a.Fd;\n              b &= l * (m - 1) + h <= a.Cd;\n              b &= n * (m - 1) + h <= a.Ed;\n              b = b & (k >= f) & (l >= h) & (n >= h);\n              b &= null != a.y;\n              b &= null != a.f;\n              b &= null != a.ea;\n              12 == e && ((b &= r >= f), (b &= q <= a.Tc), (b &= null != a.F));\n            }\n          else b = 0;\n          a = b ? 0 : 2;\n        }\n      }\n      if (0 != a) return a;\n      null != c && c.fd && (a = Bd(d));\n      return a;\n    }\n    var xb = 64,\n      Hd = [\n        0,\n        1,\n        3,\n        7,\n        15,\n        31,\n        63,\n        127,\n        255,\n        511,\n        1023,\n        2047,\n        4095,\n        8191,\n        16383,\n        32767,\n        65535,\n        131071,\n        262143,\n        524287,\n        1048575,\n        2097151,\n        4194303,\n        8388607,\n        16777215\n      ],\n      Gd = 24,\n      ob = 32,\n      Xb = 8,\n      Id = [\n        0,\n        0,\n        1,\n        1,\n        2,\n        2,\n        2,\n        2,\n        3,\n        3,\n        3,\n        3,\n        3,\n        3,\n        3,\n        3,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        4,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        5,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        6,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7,\n        7\n      ];\n    X(\"Predictor0\", \"PredictorAdd0\");\n    self.Predictor0 = function() {\n      return 4278190080;\n    };\n    self.Predictor1 = function(a) {\n      return a;\n    };\n    self.Predictor2 = function(a, b, c) {\n      return b[c + 0];\n    };\n    self.Predictor3 = function(a, b, c) {\n      return b[c + 1];\n    };\n    self.Predictor4 = function(a, b, c) {\n      return b[c - 1];\n    };\n    self.Predictor5 = function(a, b, c) {\n      return aa(aa(a, b[c + 1]), b[c + 0]);\n    };\n    self.Predictor6 = function(a, b, c) {\n      return aa(a, b[c - 1]);\n    };\n    self.Predictor7 = function(a, b, c) {\n      return aa(a, b[c + 0]);\n    };\n    self.Predictor8 = function(a, b, c) {\n      return aa(b[c - 1], b[c + 0]);\n    };\n    self.Predictor9 = function(a, b, c) {\n      return aa(b[c + 0], b[c + 1]);\n    };\n    self.Predictor10 = function(a, b, c) {\n      return aa(aa(a, b[c - 1]), aa(b[c + 0], b[c + 1]));\n    };\n    self.Predictor11 = function(a, b, c) {\n      var d = b[c + 0];\n      b = b[c - 1];\n      return 0 >=\n        Ia((d >> 24) & 255, (a >> 24) & 255, (b >> 24) & 255) +\n          Ia((d >> 16) & 255, (a >> 16) & 255, (b >> 16) & 255) +\n          Ia((d >> 8) & 255, (a >> 8) & 255, (b >> 8) & 255) +\n          Ia(d & 255, a & 255, b & 255)\n        ? d\n        : a;\n    };\n    self.Predictor12 = function(a, b, c) {\n      var d = b[c + 0];\n      b = b[c - 1];\n      return (\n        ((sa(((a >> 24) & 255) + ((d >> 24) & 255) - ((b >> 24) & 255)) << 24) |\n          (sa(((a >> 16) & 255) + ((d >> 16) & 255) - ((b >> 16) & 255)) <<\n            16) |\n          (sa(((a >> 8) & 255) + ((d >> 8) & 255) - ((b >> 8) & 255)) << 8) |\n          sa((a & 255) + (d & 255) - (b & 255))) >>>\n        0\n      );\n    };\n    self.Predictor13 = function(a, b, c) {\n      var d = b[c - 1];\n      a = aa(a, b[c + 0]);\n      return (\n        ((eb((a >> 24) & 255, (d >> 24) & 255) << 24) |\n          (eb((a >> 16) & 255, (d >> 16) & 255) << 16) |\n          (eb((a >> 8) & 255, (d >> 8) & 255) << 8) |\n          eb((a >> 0) & 255, (d >> 0) & 255)) >>>\n        0\n      );\n    };\n    var ee = self.PredictorAdd0;\n    self.PredictorAdd1 = cc;\n    X(\"Predictor2\", \"PredictorAdd2\");\n    X(\"Predictor3\", \"PredictorAdd3\");\n    X(\"Predictor4\", \"PredictorAdd4\");\n    X(\"Predictor5\", \"PredictorAdd5\");\n    X(\"Predictor6\", \"PredictorAdd6\");\n    X(\"Predictor7\", \"PredictorAdd7\");\n    X(\"Predictor8\", \"PredictorAdd8\");\n    X(\"Predictor9\", \"PredictorAdd9\");\n    X(\"Predictor10\", \"PredictorAdd10\");\n    X(\"Predictor11\", \"PredictorAdd11\");\n    X(\"Predictor12\", \"PredictorAdd12\");\n    X(\"Predictor13\", \"PredictorAdd13\");\n    var fe = self.PredictorAdd2;\n    ec(\n      \"ColorIndexInverseTransform\",\n      \"MapARGB\",\n      \"32b\",\n      function(a) {\n        return (a >> 8) & 255;\n      },\n      function(a) {\n        return a;\n      }\n    );\n    ec(\n      \"VP8LColorIndexInverseTransformAlpha\",\n      \"MapAlpha\",\n      \"8b\",\n      function(a) {\n        return a;\n      },\n      function(a) {\n        return (a >> 8) & 255;\n      }\n    );\n    var rc = self.ColorIndexInverseTransform,\n      ke = self.MapARGB,\n      he = self.VP8LColorIndexInverseTransformAlpha,\n      le = self.MapAlpha,\n      pc,\n      qc = (self.VP8LPredictorsAdd = []);\n    qc.length = 16;\n    (self.VP8LPredictors = []).length = 16;\n    (self.VP8LPredictorsAdd_C = []).length = 16;\n    (self.VP8LPredictors_C = []).length = 16;\n    var Fb,\n      sc,\n      Gb,\n      Hb,\n      xc,\n      uc,\n      bd = V(511),\n      cd = V(2041),\n      dd = V(225),\n      ed = V(767),\n      ad = 0,\n      Qb = cd,\n      mb = dd,\n      R = ed,\n      U = bd,\n      Ca = 0,\n      Ua = 1,\n      tc = 2,\n      Va = 3,\n      ya = 4,\n      Db = 5,\n      wc = 6,\n      zb = 7,\n      Ab = 8,\n      Ja = 9,\n      Bb = 10,\n      pe = [2, 3, 7],\n      oe = [3, 3, 11],\n      Dc = [280, 256, 256, 256, 40],\n      qe = [0, 1, 1, 1, 0],\n      ne = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n      de = [\n        24,\n        7,\n        23,\n        25,\n        40,\n        6,\n        39,\n        41,\n        22,\n        26,\n        38,\n        42,\n        56,\n        5,\n        55,\n        57,\n        21,\n        27,\n        54,\n        58,\n        37,\n        43,\n        72,\n        4,\n        71,\n        73,\n        20,\n        28,\n        53,\n        59,\n        70,\n        74,\n        36,\n        44,\n        88,\n        69,\n        75,\n        52,\n        60,\n        3,\n        87,\n        89,\n        19,\n        29,\n        86,\n        90,\n        35,\n        45,\n        68,\n        76,\n        85,\n        91,\n        51,\n        61,\n        104,\n        2,\n        103,\n        105,\n        18,\n        30,\n        102,\n        106,\n        34,\n        46,\n        84,\n        92,\n        67,\n        77,\n        101,\n        107,\n        50,\n        62,\n        120,\n        1,\n        119,\n        121,\n        83,\n        93,\n        17,\n        31,\n        100,\n        108,\n        66,\n        78,\n        118,\n        122,\n        33,\n        47,\n        117,\n        123,\n        49,\n        63,\n        99,\n        109,\n        82,\n        94,\n        0,\n        116,\n        124,\n        65,\n        79,\n        16,\n        32,\n        98,\n        110,\n        48,\n        115,\n        125,\n        81,\n        95,\n        64,\n        114,\n        126,\n        97,\n        111,\n        80,\n        113,\n        127,\n        96,\n        112\n      ],\n      me = [\n        2954,\n        2956,\n        2958,\n        2962,\n        2970,\n        2986,\n        3018,\n        3082,\n        3212,\n        3468,\n        3980,\n        5004\n      ],\n      ie = 8,\n      Lb = [\n        4,\n        5,\n        6,\n        7,\n        8,\n        9,\n        10,\n        10,\n        11,\n        12,\n        13,\n        14,\n        15,\n        16,\n        17,\n        17,\n        18,\n        19,\n        20,\n        20,\n        21,\n        21,\n        22,\n        22,\n        23,\n        23,\n        24,\n        25,\n        25,\n        26,\n        27,\n        28,\n        29,\n        30,\n        31,\n        32,\n        33,\n        34,\n        35,\n        36,\n        37,\n        37,\n        38,\n        39,\n        40,\n        41,\n        42,\n        43,\n        44,\n        45,\n        46,\n        46,\n        47,\n        48,\n        49,\n        50,\n        51,\n        52,\n        53,\n        54,\n        55,\n        56,\n        57,\n        58,\n        59,\n        60,\n        61,\n        62,\n        63,\n        64,\n        65,\n        66,\n        67,\n        68,\n        69,\n        70,\n        71,\n        72,\n        73,\n        74,\n        75,\n        76,\n        76,\n        77,\n        78,\n        79,\n        80,\n        81,\n        82,\n        83,\n        84,\n        85,\n        86,\n        87,\n        88,\n        89,\n        91,\n        93,\n        95,\n        96,\n        98,\n        100,\n        101,\n        102,\n        104,\n        106,\n        108,\n        110,\n        112,\n        114,\n        116,\n        118,\n        122,\n        124,\n        126,\n        128,\n        130,\n        132,\n        134,\n        136,\n        138,\n        140,\n        143,\n        145,\n        148,\n        151,\n        154,\n        157\n      ],\n      Mb = [\n        4,\n        5,\n        6,\n        7,\n        8,\n        9,\n        10,\n        11,\n        12,\n        13,\n        14,\n        15,\n        16,\n        17,\n        18,\n        19,\n        20,\n        21,\n        22,\n        23,\n        24,\n        25,\n        26,\n        27,\n        28,\n        29,\n        30,\n        31,\n        32,\n        33,\n        34,\n        35,\n        36,\n        37,\n        38,\n        39,\n        40,\n        41,\n        42,\n        43,\n        44,\n        45,\n        46,\n        47,\n        48,\n        49,\n        50,\n        51,\n        52,\n        53,\n        54,\n        55,\n        56,\n        57,\n        58,\n        60,\n        62,\n        64,\n        66,\n        68,\n        70,\n        72,\n        74,\n        76,\n        78,\n        80,\n        82,\n        84,\n        86,\n        88,\n        90,\n        92,\n        94,\n        96,\n        98,\n        100,\n        102,\n        104,\n        106,\n        108,\n        110,\n        112,\n        114,\n        116,\n        119,\n        122,\n        125,\n        128,\n        131,\n        134,\n        137,\n        140,\n        143,\n        146,\n        149,\n        152,\n        155,\n        158,\n        161,\n        164,\n        167,\n        170,\n        173,\n        177,\n        181,\n        185,\n        189,\n        193,\n        197,\n        201,\n        205,\n        209,\n        213,\n        217,\n        221,\n        225,\n        229,\n        234,\n        239,\n        245,\n        249,\n        254,\n        259,\n        264,\n        269,\n        274,\n        279,\n        284\n      ],\n      oa = null,\n      He = [\n        [173, 148, 140, 0],\n        [176, 155, 140, 135, 0],\n        [180, 157, 141, 134, 130, 0],\n        [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0]\n      ],\n      Ie = [0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15],\n      Mc = [-0, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9],\n      Fe = [\n        [\n          [\n            [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n            [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n            [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n          ],\n          [\n            [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128],\n            [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128],\n            [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128]\n          ],\n          [\n            [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128],\n            [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128],\n            [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128]\n          ],\n          [\n            [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128],\n            [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128],\n            [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128]\n          ],\n          [\n            [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128],\n            [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128],\n            [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128]\n          ],\n          [\n            [1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128],\n            [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128],\n            [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128]\n          ],\n          [\n            [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128],\n            [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128],\n            [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128]\n          ],\n          [\n            [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n            [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n            [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n          ]\n        ],\n        [\n          [\n            [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62],\n            [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1],\n            [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128]\n          ],\n          [\n            [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128],\n            [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128],\n            [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128]\n          ],\n          [\n            [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128],\n            [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128],\n            [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128]\n          ],\n          [\n            [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128],\n            [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128],\n            [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128]\n          ],\n          [\n            [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128],\n            [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128],\n            [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128]\n          ],\n          [\n            [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128],\n            [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128],\n            [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128]\n          ],\n          [\n            [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128],\n            [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128],\n            [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128]\n          ],\n          [\n            [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128],\n            [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n            [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128]\n          ]\n        ],\n        [\n          [\n            [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128],\n            [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128],\n            [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128]\n          ],\n          [\n            [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128],\n            [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128],\n            [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128]\n          ],\n          [\n            [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128],\n            [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128],\n            [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128]\n          ],\n          [\n            [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128],\n            [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128],\n            [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128]\n          ],\n          [\n            [1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n            [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128],\n            [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n          ],\n          [\n            [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n            [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n            [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n          ],\n          [\n            [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128],\n            [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128],\n            [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n          ],\n          [\n            [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n            [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n            [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n          ]\n        ],\n        [\n          [\n            [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255],\n            [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128],\n            [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128]\n          ],\n          [\n            [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128],\n            [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128],\n            [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128]\n          ],\n          [\n            [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128],\n            [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128],\n            [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128]\n          ],\n          [\n            [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128],\n            [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128],\n            [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128]\n          ],\n          [\n            [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128],\n            [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128],\n            [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128]\n          ],\n          [\n            [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128],\n            [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128],\n            [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128]\n          ],\n          [\n            [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128],\n            [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128],\n            [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128]\n          ],\n          [\n            [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n            [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n            [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n          ]\n        ]\n      ],\n      Ke = [\n        [\n          [231, 120, 48, 89, 115, 113, 120, 152, 112],\n          [152, 179, 64, 126, 170, 118, 46, 70, 95],\n          [175, 69, 143, 80, 85, 82, 72, 155, 103],\n          [56, 58, 10, 171, 218, 189, 17, 13, 152],\n          [114, 26, 17, 163, 44, 195, 21, 10, 173],\n          [121, 24, 80, 195, 26, 62, 44, 64, 85],\n          [144, 71, 10, 38, 171, 213, 144, 34, 26],\n          [170, 46, 55, 19, 136, 160, 33, 206, 71],\n          [63, 20, 8, 114, 114, 208, 12, 9, 226],\n          [81, 40, 11, 96, 182, 84, 29, 16, 36]\n        ],\n        [\n          [134, 183, 89, 137, 98, 101, 106, 165, 148],\n          [72, 187, 100, 130, 157, 111, 32, 75, 80],\n          [66, 102, 167, 99, 74, 62, 40, 234, 128],\n          [41, 53, 9, 178, 241, 141, 26, 8, 107],\n          [74, 43, 26, 146, 73, 166, 49, 23, 157],\n          [65, 38, 105, 160, 51, 52, 31, 115, 128],\n          [104, 79, 12, 27, 217, 255, 87, 17, 7],\n          [87, 68, 71, 44, 114, 51, 15, 186, 23],\n          [47, 41, 14, 110, 182, 183, 21, 17, 194],\n          [66, 45, 25, 102, 197, 189, 23, 18, 22]\n        ],\n        [\n          [88, 88, 147, 150, 42, 46, 45, 196, 205],\n          [43, 97, 183, 117, 85, 38, 35, 179, 61],\n          [39, 53, 200, 87, 26, 21, 43, 232, 171],\n          [56, 34, 51, 104, 114, 102, 29, 93, 77],\n          [39, 28, 85, 171, 58, 165, 90, 98, 64],\n          [34, 22, 116, 206, 23, 34, 43, 166, 73],\n          [107, 54, 32, 26, 51, 1, 81, 43, 31],\n          [68, 25, 106, 22, 64, 171, 36, 225, 114],\n          [34, 19, 21, 102, 132, 188, 16, 76, 124],\n          [62, 18, 78, 95, 85, 57, 50, 48, 51]\n        ],\n        [\n          [193, 101, 35, 159, 215, 111, 89, 46, 111],\n          [60, 148, 31, 172, 219, 228, 21, 18, 111],\n          [112, 113, 77, 85, 179, 255, 38, 120, 114],\n          [40, 42, 1, 196, 245, 209, 10, 25, 109],\n          [88, 43, 29, 140, 166, 213, 37, 43, 154],\n          [61, 63, 30, 155, 67, 45, 68, 1, 209],\n          [100, 80, 8, 43, 154, 1, 51, 26, 71],\n          [142, 78, 78, 16, 255, 128, 34, 197, 171],\n          [41, 40, 5, 102, 211, 183, 4, 1, 221],\n          [51, 50, 17, 168, 209, 192, 23, 25, 82]\n        ],\n        [\n          [138, 31, 36, 171, 27, 166, 38, 44, 229],\n          [67, 87, 58, 169, 82, 115, 26, 59, 179],\n          [63, 59, 90, 180, 59, 166, 93, 73, 154],\n          [40, 40, 21, 116, 143, 209, 34, 39, 175],\n          [47, 15, 16, 183, 34, 223, 49, 45, 183],\n          [46, 17, 33, 183, 6, 98, 15, 32, 183],\n          [57, 46, 22, 24, 128, 1, 54, 17, 37],\n          [65, 32, 73, 115, 28, 128, 23, 128, 205],\n          [40, 3, 9, 115, 51, 192, 18, 6, 223],\n          [87, 37, 9, 115, 59, 77, 64, 21, 47]\n        ],\n        [\n          [104, 55, 44, 218, 9, 54, 53, 130, 226],\n          [64, 90, 70, 205, 40, 41, 23, 26, 57],\n          [54, 57, 112, 184, 5, 41, 38, 166, 213],\n          [30, 34, 26, 133, 152, 116, 10, 32, 134],\n          [39, 19, 53, 221, 26, 114, 32, 73, 255],\n          [31, 9, 65, 234, 2, 15, 1, 118, 73],\n          [75, 32, 12, 51, 192, 255, 160, 43, 51],\n          [88, 31, 35, 67, 102, 85, 55, 186, 85],\n          [56, 21, 23, 111, 59, 205, 45, 37, 192],\n          [55, 38, 70, 124, 73, 102, 1, 34, 98]\n        ],\n        [\n          [125, 98, 42, 88, 104, 85, 117, 175, 82],\n          [95, 84, 53, 89, 128, 100, 113, 101, 45],\n          [75, 79, 123, 47, 51, 128, 81, 171, 1],\n          [57, 17, 5, 71, 102, 57, 53, 41, 49],\n          [38, 33, 13, 121, 57, 73, 26, 1, 85],\n          [41, 10, 67, 138, 77, 110, 90, 47, 114],\n          [115, 21, 2, 10, 102, 255, 166, 23, 6],\n          [101, 29, 16, 10, 85, 128, 101, 196, 26],\n          [57, 18, 10, 102, 102, 213, 34, 20, 43],\n          [117, 20, 15, 36, 163, 128, 68, 1, 26]\n        ],\n        [\n          [102, 61, 71, 37, 34, 53, 31, 243, 192],\n          [69, 60, 71, 38, 73, 119, 28, 222, 37],\n          [68, 45, 128, 34, 1, 47, 11, 245, 171],\n          [62, 17, 19, 70, 146, 85, 55, 62, 70],\n          [37, 43, 37, 154, 100, 163, 85, 160, 1],\n          [63, 9, 92, 136, 28, 64, 32, 201, 85],\n          [75, 15, 9, 9, 64, 255, 184, 119, 16],\n          [86, 6, 28, 5, 64, 255, 25, 248, 1],\n          [56, 8, 17, 132, 137, 255, 55, 116, 128],\n          [58, 15, 20, 82, 135, 57, 26, 121, 40]\n        ],\n        [\n          [164, 50, 31, 137, 154, 133, 25, 35, 218],\n          [51, 103, 44, 131, 131, 123, 31, 6, 158],\n          [86, 40, 64, 135, 148, 224, 45, 183, 128],\n          [22, 26, 17, 131, 240, 154, 14, 1, 209],\n          [45, 16, 21, 91, 64, 222, 7, 1, 197],\n          [56, 21, 39, 155, 60, 138, 23, 102, 213],\n          [83, 12, 13, 54, 192, 255, 68, 47, 28],\n          [85, 26, 85, 85, 128, 128, 32, 146, 171],\n          [18, 11, 7, 63, 144, 171, 4, 4, 246],\n          [35, 27, 10, 146, 174, 171, 12, 26, 128]\n        ],\n        [\n          [190, 80, 35, 99, 180, 80, 126, 54, 45],\n          [85, 126, 47, 87, 176, 51, 41, 20, 32],\n          [101, 75, 128, 139, 118, 146, 116, 128, 85],\n          [56, 41, 15, 176, 236, 85, 37, 9, 62],\n          [71, 30, 17, 119, 118, 255, 17, 18, 138],\n          [101, 38, 60, 138, 55, 70, 43, 26, 142],\n          [146, 36, 19, 30, 171, 255, 97, 27, 20],\n          [138, 45, 61, 62, 219, 1, 81, 188, 64],\n          [32, 41, 20, 117, 151, 142, 20, 21, 163],\n          [112, 19, 12, 61, 195, 128, 48, 4, 24]\n        ]\n      ],\n      Ee = [\n        [\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n            [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n            [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255],\n            [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255],\n            [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ]\n        ],\n        [\n          [\n            [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255],\n            [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255]\n          ],\n          [\n            [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n            [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ]\n        ],\n        [\n          [\n            [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255],\n            [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255],\n            [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255]\n          ],\n          [\n            [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ]\n        ],\n        [\n          [\n            [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255],\n            [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n            [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n            [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n            [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n            [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n            [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n            [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ],\n          [\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n            [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n          ]\n        ]\n      ],\n      Ge = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0],\n      Nc,\n      Y = [],\n      W = [],\n      ka = [],\n      Za,\n      fd,\n      Nb,\n      pa,\n      Ob,\n      Xc,\n      Tc,\n      Yc,\n      Uc,\n      Zc,\n      Vc,\n      $c,\n      Wc,\n      Rc,\n      Pc,\n      Sc,\n      Qc,\n      re = 1,\n      Cc = 2,\n      ia = [],\n      za,\n      vc,\n      fc,\n      Fc,\n      P = [];\n    va(\"UpsampleRgbLinePair\", Ga, 3);\n    va(\"UpsampleBgrLinePair\", Tb, 3);\n    va(\"UpsampleRgbaLinePair\", wd, 4);\n    va(\"UpsampleBgraLinePair\", vd, 4);\n    va(\"UpsampleArgbLinePair\", ud, 4);\n    va(\"UpsampleRgba4444LinePair\", td, 2);\n    va(\"UpsampleRgb565LinePair\", sd, 2);\n    var Mf = self.UpsampleRgbLinePair,\n      Nf = self.UpsampleBgrLinePair,\n      nd = self.UpsampleRgbaLinePair,\n      od = self.UpsampleBgraLinePair,\n      pd = self.UpsampleArgbLinePair,\n      qd = self.UpsampleRgba4444LinePair,\n      Of = self.UpsampleRgb565LinePair,\n      Wa = 16,\n      Ba = 1 << (Wa - 1),\n      ta = -227,\n      Eb = 482,\n      rd = 6,\n      Pf = (256 << rd) - 1,\n      jc = 0,\n      Yd = V(256),\n      ae = V(256),\n      $d = V(256),\n      Zd = V(256),\n      be = V(Eb - ta),\n      ce = V(Eb - ta);\n    la(\"YuvToRgbRow\", Ga, 3);\n    la(\"YuvToBgrRow\", Tb, 3);\n    la(\"YuvToRgbaRow\", wd, 4);\n    la(\"YuvToBgraRow\", vd, 4);\n    la(\"YuvToArgbRow\", ud, 4);\n    la(\"YuvToRgba4444Row\", td, 2);\n    la(\"YuvToRgb565Row\", sd, 2);\n    var zd = [\n        0,\n        4,\n        8,\n        12,\n        128,\n        132,\n        136,\n        140,\n        256,\n        260,\n        264,\n        268,\n        384,\n        388,\n        392,\n        396\n      ],\n      Ya = [0, 2, 8],\n      Qf = [8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1],\n      Ne = 1;\n    this.WebPDecodeRGBA = function(a, b, c, d, e) {\n      var f = Ua;\n      var g = new Cf(),\n        h = new Cb();\n      g.ba = h;\n      h.S = f;\n      h.width = [h.width];\n      h.height = [h.height];\n      var k = h.width;\n      var l = h.height,\n        m = new Td();\n      if (null == m || null == a) var n = 2;\n      else\n        x(null != m),\n          (n = Ad(a, b, c, m.width, m.height, m.Pd, m.Qd, m.format, null));\n      0 != n\n        ? (k = 0)\n        : (null != k && (k[0] = m.width[0]),\n          null != l && (l[0] = m.height[0]),\n          (k = 1));\n      if (k) {\n        h.width = h.width[0];\n        h.height = h.height[0];\n        null != d && (d[0] = h.width);\n        null != e && (e[0] = h.height);\n        b: {\n          d = new Oa();\n          e = new md();\n          e.data = a;\n          e.w = b;\n          e.ha = c;\n          e.kd = 1;\n          b = [0];\n          x(null != e);\n          a = Ad(e.data, e.w, e.ha, null, null, null, b, null, e);\n          (0 == a || 7 == a) && b[0] && (a = 4);\n          b = a;\n          if (0 == b) {\n            x(null != g);\n            d.data = e.data;\n            d.w = e.w + e.offset;\n            d.ha = e.ha - e.offset;\n            d.put = kc;\n            d.ac = gc;\n            d.bc = lc;\n            d.ma = g;\n            if (e.xa) {\n              a = Bc();\n              if (null == a) {\n                g = 1;\n                break b;\n              }\n              if (te(a, d)) {\n                b = Cd(d.width, d.height, g.Oa, g.ba);\n                if ((d = 0 == b)) {\n                  c: {\n                    d = a;\n                    d: for (;;) {\n                      if (null == d) {\n                        d = 0;\n                        break c;\n                      }\n                      x(null != d.s.yc);\n                      x(null != d.s.Ya);\n                      x(0 < d.s.Wb);\n                      c = d.l;\n                      x(null != c);\n                      e = c.ma;\n                      x(null != e);\n                      if (0 != d.xb) {\n                        d.ca = e.ba;\n                        d.tb = e.tb;\n                        x(null != d.ca);\n                        if (!hc(e.Oa, c, Va)) {\n                          d.a = 2;\n                          break d;\n                        }\n                        if (!Ec(d, c.width)) break d;\n                        if (c.da) break d;\n                        (c.da || hb(d.ca.S)) && Aa();\n                        11 > d.ca.S ||\n                          (alert(\"todo:WebPInitConvertARGBToYUV\"),\n                          null != d.ca.f.kb.F && Aa());\n                        if (\n                          d.Pb &&\n                          0 < d.s.ua &&\n                          null == d.s.vb.X &&\n                          !Zb(d.s.vb, d.s.Wa.Xa)\n                        ) {\n                          d.a = 1;\n                          break d;\n                        }\n                        d.xb = 0;\n                      }\n                      if (!Jb(d, d.V, d.Ba, d.c, d.i, c.o, ge)) break d;\n                      e.Dc = d.Ma;\n                      d = 1;\n                      break c;\n                    }\n                    x(0 != d.a);\n                    d = 0;\n                  }\n                  d = !d;\n                }\n                d && (b = a.a);\n              } else b = a.a;\n            } else {\n              a = new Ce();\n              if (null == a) {\n                g = 1;\n                break b;\n              }\n              a.Fa = e.na;\n              a.P = e.P;\n              a.qc = e.Sa;\n              if (Kc(a, d)) {\n                if (((b = Cd(d.width, d.height, g.Oa, g.ba)), 0 == b)) {\n                  a.Aa = 0;\n                  c = g.Oa;\n                  e = a;\n                  x(null != e);\n                  if (null != c) {\n                    k = c.Md;\n                    k = 0 > k ? 0 : 100 < k ? 255 : (255 * k) / 100;\n                    if (0 < k) {\n                      for (l = m = 0; 4 > l; ++l)\n                        (n = e.pb[l]),\n                          12 > n.lc &&\n                            (n.ia = (k * Qf[0 > n.lc ? 0 : n.lc]) >> 3),\n                          (m |= n.ia);\n                      m && (alert(\"todo:VP8InitRandom\"), (e.ia = 1));\n                    }\n                    e.Ga = c.Id;\n                    100 < e.Ga ? (e.Ga = 100) : 0 > e.Ga && (e.Ga = 0);\n                  }\n                  Me(a, d) || (b = a.a);\n                }\n              } else b = a.a;\n            }\n            0 == b && null != g.Oa && g.Oa.fd && (b = Bd(g.ba));\n          }\n          g = b;\n        }\n        f = 0 != g ? null : 11 > f ? h.f.RGBA.eb : h.f.kb.y;\n      } else f = null;\n      return f;\n    };\n    var Dd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4, 2, 1, 1];\n  };\n  new _WebPDecoder();\n\n  /** @license\n   * Copyright (c) 2017 Dominik Homberger\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nhttps://webpjs.appspot.com\nWebPRiffParser dominikhlbg@gmail.com\n*/\n\n  function memcmp(data, data_off, str, size) {\n    for (var i = 0; i < size; i++)\n      if (data[data_off + i] != str.charCodeAt(i)) return true;\n    return false;\n  }\n\n  function GetTag(data, data_off) {\n    var str = \"\";\n    for (var i = 0; i < 4; i++) str += String.fromCharCode(data[data_off++]);\n    return str;\n  }\n\n  function GetLE16(data, data_off) {\n    return (data[data_off + 0] << 0) | (data[data_off + 1] << 8);\n  }\n\n  function GetLE24(data, data_off) {\n    return (\n      ((data[data_off + 0] << 0) |\n        (data[data_off + 1] << 8) |\n        (data[data_off + 2] << 16)) >>>\n      0\n    );\n  }\n\n  function GetLE32(data, data_off) {\n    return (\n      ((data[data_off + 0] << 0) |\n        (data[data_off + 1] << 8) |\n        (data[data_off + 2] << 16) |\n        (data[data_off + 3] << 24)) >>>\n      0\n    );\n  }\n\n  function WebPRiffParser(src, src_off) {\n    var imagearray = {};\n    var i = 0;\n    var alpha_chunk = false;\n    var alpha_size = 0;\n    var alpha_offset = 0;\n    imagearray[\"frames\"] = [];\n    if (memcmp(src, src_off, \"RIFF\", 4)) return;\n    src_off += 4;\n    var riff_size = GetLE32(src, src_off) + 8;\n    src_off += 8;\n\n    while (src_off < src.length) {\n      var fourcc = GetTag(src, src_off);\n      src_off += 4;\n\n      var payload_size = GetLE32(src, src_off);\n      src_off += 4;\n      var payload_size_padded = payload_size + (payload_size & 1);\n\n      switch (fourcc) {\n        case \"VP8 \":\n        case \"VP8L\":\n          if (typeof imagearray[\"frames\"][i] === \"undefined\")\n            imagearray[\"frames\"][i] = {};\n          var obj = imagearray[\"frames\"][i];\n          var height = [0];\n          var width = [0];\n          obj[\"src_off\"] = alpha_chunk ? alpha_offset : src_off - 8;\n          obj[\"src_size\"] = alpha_size + payload_size + 8;\n          //var rgba = webpdecoder.WebPDecodeRGBA(src,(alpha_chunk?alpha_offset:src_off-8),alpha_size+payload_size+8,width,height);\n          //imagearray[i]={'rgba':rgba,'width':width[0],'height':height[0]};\n          i++;\n          if (alpha_chunk) {\n            alpha_chunk = false;\n            alpha_size = 0;\n            alpha_offset = 0;\n          }\n          break;\n        case \"VP8X\":\n          var obj = (imagearray[\"header\"] = {});\n          var feature_flags = (obj[\"feature_flags\"] = src[src_off]);\n          var src_off_ = src_off + 4;\n          var canvas_width = (obj[\"canvas_width\"] = 1 + GetLE24(src, src_off_));\n          src_off_ += 3;\n          var canvas_height = (obj[\"canvas_height\"] =\n            1 + GetLE24(src, src_off_));\n          src_off_ += 3;\n          break;\n        case \"ALPH\":\n          alpha_chunk = true;\n          alpha_size = payload_size_padded + 8;\n          alpha_offset = src_off - 8;\n          break;\n\n        case \"ANIM\":\n          var obj = imagearray[\"header\"];\n          var bgcolor = (obj[\"bgcolor\"] = GetLE32(src, src_off));\n          src_off_ = src_off + 4;\n\n          var loop_count = (obj[\"loop_count\"] = GetLE16(src, src_off_));\n          src_off_ += 2;\n          break;\n        case \"ANMF\":\n          var offset_x = 0,\n            offset_y = 0,\n            width = 0,\n            height = 0,\n            duration = 0,\n            blend = 0,\n            dispose = 0,\n            temp = 0;\n          var obj = (imagearray[\"frames\"][i] = {});\n          obj[\"offset_x\"] = offset_x = 2 * GetLE24(src, src_off);\n          src_off += 3;\n          obj[\"offset_y\"] = offset_y = 2 * GetLE24(src, src_off);\n          src_off += 3;\n          obj[\"width\"] = width = 1 + GetLE24(src, src_off);\n          src_off += 3;\n          obj[\"height\"] = height = 1 + GetLE24(src, src_off);\n          src_off += 3;\n          obj[\"duration\"] = duration = GetLE24(src, src_off);\n          src_off += 3;\n          temp = src[src_off++];\n          obj[\"dispose\"] = dispose = temp & 1;\n          obj[\"blend\"] = blend = (temp >> 1) & 1;\n          break;\n        default:\n      }\n      if (fourcc != \"ANMF\") src_off += payload_size_padded;\n    }\n    return imagearray;\n  }\n\n  var height = [0];\n  var width = [0];\n  var pixels = [];\n  var webpdecoder = new _WebPDecoder();\n\n  var response = imageData;\n  var imagearray = WebPRiffParser(response, 0);\n  imagearray[\"response\"] = response;\n  imagearray[\"rgbaoutput\"] = true;\n  imagearray[\"dataurl\"] = false;\n\n  var header = imagearray[\"header\"] ? imagearray[\"header\"] : null;\n  var frames = imagearray[\"frames\"] ? imagearray[\"frames\"] : null;\n\n  if (header) {\n    header[\"loop_counter\"] = header[\"loop_count\"];\n    height = [header[\"canvas_height\"]];\n    width = [header[\"canvas_width\"]];\n\n    var blend = false;\n    for (var f = 0; f < frames.length; f++)\n      if (frames[f][\"blend\"] == 0) {\n        blend = true;\n        break;\n      }\n  }\n\n  var frame = frames[0];\n  var rgba = webpdecoder.WebPDecodeRGBA(\n    response,\n    frame[\"src_off\"],\n    frame[\"src_size\"],\n    width,\n    height\n  );\n  frame[\"rgba\"] = rgba;\n  frame[\"imgwidth\"] = width[0];\n  frame[\"imgheight\"] = height[0];\n\n  for (var i = 0; i < width[0] * height[0] * 4; i++) {\n    pixels[i] = rgba[i];\n  }\n\n  this.width = width;\n  this.height = height;\n  this.data = pixels;\n  return this;\n}\n\nWebPDecoder.prototype.getData = function() {\n  return this.data;\n};\n\nexport { WebPDecoder };\n","/**\n * @license\n *\n * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\nimport { PNG } from \"../libs/png.js\";\n\n/**\n * jsPDF PNG PlugIn\n * @name png_support\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /*\n   * @see http://www.w3.org/TR/PNG-Chunks.html\n   *\n   Color    Allowed      Interpretation\n   Type     Bit Depths\n\n     0       1,2,4,8,16  Each pixel is a grayscale sample.\n\n     2       8,16        Each pixel is an R,G,B triple.\n\n     3       1,2,4,8     Each pixel is a palette index;\n                         a PLTE chunk must appear.\n\n     4       8,16        Each pixel is a grayscale sample,\n                         followed by an alpha sample.\n\n     6       8,16        Each pixel is an R,G,B triple,\n                         followed by an alpha sample.\n  */\n\n  /*\n   * PNG filter method types\n   *\n   * @see http://www.w3.org/TR/PNG-Filters.html\n   * @see http://www.libpng.org/pub/png/book/chapter09.html\n   *\n   * This is what the value 'Predictor' in decode params relates to\n   *\n   * 15 is \"optimal prediction\", which means the prediction algorithm can change from line to line.\n   * In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte.\n   *\n     0       None\n     1       Sub\n     2       Up\n     3       Average\n     4       Paeth\n   */\n\n  var canCompress = function(value) {\n    return value !== jsPDFAPI.image_compression.NONE && hasCompressionJS();\n  };\n\n  var hasCompressionJS = function() {\n    return typeof zlibSync === \"function\";\n  };\n  var compressBytes = function(bytes, lineLength, colorsPerPixel, compression) {\n    var level = 4;\n    var filter_method = filterUp;\n\n    switch (compression) {\n      case jsPDFAPI.image_compression.FAST:\n        level = 1;\n        filter_method = filterSub;\n        break;\n\n      case jsPDFAPI.image_compression.MEDIUM:\n        level = 6;\n        filter_method = filterAverage;\n        break;\n\n      case jsPDFAPI.image_compression.SLOW:\n        level = 9;\n        filter_method = filterPaeth;\n        break;\n    }\n\n    bytes = applyPngFilterMethod(\n      bytes,\n      lineLength,\n      colorsPerPixel,\n      filter_method\n    );\n    var dat = zlibSync(bytes, { level: level });\n    return jsPDFAPI.__addimage__.arrayBufferToBinaryString(dat);\n  };\n\n  var applyPngFilterMethod = function(\n    bytes,\n    lineLength,\n    colorsPerPixel,\n    filter_method\n  ) {\n    var lines = bytes.length / lineLength,\n      result = new Uint8Array(bytes.length + lines),\n      filter_methods = getFilterMethods(),\n      line,\n      prevLine,\n      offset;\n\n    for (var i = 0; i < lines; i += 1) {\n      offset = i * lineLength;\n      line = bytes.subarray(offset, offset + lineLength);\n\n      if (filter_method) {\n        result.set(filter_method(line, colorsPerPixel, prevLine), offset + i);\n      } else {\n        var len = filter_methods.length,\n          results = [];\n\n        for (var j; j < len; j += 1) {\n          results[j] = filter_methods[j](line, colorsPerPixel, prevLine);\n        }\n\n        var ind = getIndexOfSmallestSum(results.concat());\n\n        result.set(results[ind], offset + i);\n      }\n\n      prevLine = line;\n    }\n\n    return result;\n  };\n\n  var filterNone = function(line) {\n    /*var result = new Uint8Array(line.length + 1);\n    result[0] = 0;\n    result.set(line, 1);*/\n\n    var result = Array.apply([], line);\n    result.unshift(0);\n\n    return result;\n  };\n\n  var filterSub = function(line, colorsPerPixel) {\n    var result = [],\n      len = line.length,\n      left;\n\n    result[0] = 1;\n\n    for (var i = 0; i < len; i += 1) {\n      left = line[i - colorsPerPixel] || 0;\n      result[i + 1] = (line[i] - left + 0x0100) & 0xff;\n    }\n\n    return result;\n  };\n\n  var filterUp = function(line, colorsPerPixel, prevLine) {\n    var result = [],\n      len = line.length,\n      up;\n\n    result[0] = 2;\n\n    for (var i = 0; i < len; i += 1) {\n      up = (prevLine && prevLine[i]) || 0;\n      result[i + 1] = (line[i] - up + 0x0100) & 0xff;\n    }\n\n    return result;\n  };\n\n  var filterAverage = function(line, colorsPerPixel, prevLine) {\n    var result = [],\n      len = line.length,\n      left,\n      up;\n\n    result[0] = 3;\n\n    for (var i = 0; i < len; i += 1) {\n      left = line[i - colorsPerPixel] || 0;\n      up = (prevLine && prevLine[i]) || 0;\n      result[i + 1] = (line[i] + 0x0100 - ((left + up) >>> 1)) & 0xff;\n    }\n\n    return result;\n  };\n\n  var filterPaeth = function(line, colorsPerPixel, prevLine) {\n    var result = [],\n      len = line.length,\n      left,\n      up,\n      upLeft,\n      paeth;\n\n    result[0] = 4;\n\n    for (var i = 0; i < len; i += 1) {\n      left = line[i - colorsPerPixel] || 0;\n      up = (prevLine && prevLine[i]) || 0;\n      upLeft = (prevLine && prevLine[i - colorsPerPixel]) || 0;\n      paeth = paethPredictor(left, up, upLeft);\n      result[i + 1] = (line[i] - paeth + 0x0100) & 0xff;\n    }\n\n    return result;\n  };\n\n  var paethPredictor = function(left, up, upLeft) {\n    if (left === up && up === upLeft) {\n      return left;\n    }\n    var pLeft = Math.abs(up - upLeft),\n      pUp = Math.abs(left - upLeft),\n      pUpLeft = Math.abs(left + up - upLeft - upLeft);\n    return pLeft <= pUp && pLeft <= pUpLeft\n      ? left\n      : pUp <= pUpLeft\n      ? up\n      : upLeft;\n  };\n\n  var getFilterMethods = function() {\n    return [filterNone, filterSub, filterUp, filterAverage, filterPaeth];\n  };\n\n  var getIndexOfSmallestSum = function(arrays) {\n    var sum = arrays.map(function(value) {\n      return value.reduce(function(pv, cv) {\n        return pv + Math.abs(cv);\n      }, 0);\n    });\n    return sum.indexOf(Math.min.apply(null, sum));\n  };\n\n  var getPredictorFromCompression = function(compression) {\n    var predictor;\n    switch (compression) {\n      case jsPDFAPI.image_compression.FAST:\n        predictor = 11;\n        break;\n\n      case jsPDFAPI.image_compression.MEDIUM:\n        predictor = 13;\n        break;\n\n      case jsPDFAPI.image_compression.SLOW:\n        predictor = 14;\n        break;\n\n      default:\n        predictor = 12;\n        break;\n    }\n    return predictor;\n  };\n\n  /**\n   * @name processPNG\n   * @function\n   * @ignore\n   */\n  jsPDFAPI.processPNG = function(imageData, index, alias, compression) {\n    \"use strict\";\n\n    var colorSpace,\n      filter = this.decode.FLATE_DECODE,\n      bitsPerComponent,\n      image,\n      decodeParameters = \"\",\n      trns,\n      colors,\n      pal,\n      smask,\n      pixels,\n      len,\n      alphaData,\n      imgData,\n      hasColors,\n      pixel,\n      i,\n      n;\n\n    if (this.__addimage__.isArrayBuffer(imageData))\n      imageData = new Uint8Array(imageData);\n\n    if (this.__addimage__.isArrayBufferView(imageData)) {\n      image = new PNG(imageData);\n      imageData = image.imgData;\n      bitsPerComponent = image.bits;\n      colorSpace = image.colorSpace;\n      colors = image.colors;\n\n      /*\n       * colorType 6 - Each pixel is an R,G,B triple, followed by an alpha sample.\n       *\n       * colorType 4 - Each pixel is a grayscale sample, followed by an alpha sample.\n       *\n       * Extract alpha to create two separate images, using the alpha as a sMask\n       */\n      if ([4, 6].indexOf(image.colorType) !== -1) {\n        /*\n         * processes 8 bit RGBA and grayscale + alpha images\n         */\n        if (image.bits === 8) {\n          pixels =\n            image.pixelBitlength == 32\n              ? new Uint32Array(image.decodePixels().buffer)\n              : image.pixelBitlength == 16\n              ? new Uint16Array(image.decodePixels().buffer)\n              : new Uint8Array(image.decodePixels().buffer);\n          len = pixels.length;\n          imgData = new Uint8Array(len * image.colors);\n          alphaData = new Uint8Array(len);\n          var pDiff = image.pixelBitlength - image.bits;\n          i = 0;\n          n = 0;\n          var pbl;\n\n          for (; i < len; i++) {\n            pixel = pixels[i];\n            pbl = 0;\n\n            while (pbl < pDiff) {\n              imgData[n++] = (pixel >>> pbl) & 0xff;\n              pbl = pbl + image.bits;\n            }\n\n            alphaData[i] = (pixel >>> pbl) & 0xff;\n          }\n        }\n\n        /*\n         * processes 16 bit RGBA and grayscale + alpha images\n         */\n        if (image.bits === 16) {\n          pixels = new Uint32Array(image.decodePixels().buffer);\n          len = pixels.length;\n          imgData = new Uint8Array(\n            len * (32 / image.pixelBitlength) * image.colors\n          );\n          alphaData = new Uint8Array(len * (32 / image.pixelBitlength));\n          hasColors = image.colors > 1;\n          i = 0;\n          n = 0;\n          var a = 0;\n\n          while (i < len) {\n            pixel = pixels[i++];\n\n            imgData[n++] = (pixel >>> 0) & 0xff;\n\n            if (hasColors) {\n              imgData[n++] = (pixel >>> 16) & 0xff;\n\n              pixel = pixels[i++];\n              imgData[n++] = (pixel >>> 0) & 0xff;\n            }\n\n            alphaData[a++] = (pixel >>> 16) & 0xff;\n          }\n          bitsPerComponent = 8;\n        }\n\n        if (canCompress(compression)) {\n          imageData = compressBytes(\n            imgData,\n            image.width * image.colors,\n            image.colors,\n            compression\n          );\n          smask = compressBytes(alphaData, image.width, 1, compression);\n        } else {\n          imageData = imgData;\n          smask = alphaData;\n          filter = undefined;\n        }\n      }\n\n      /*\n       * Indexed png. Each pixel is a palette index.\n       */\n      if (image.colorType === 3) {\n        colorSpace = this.color_spaces.INDEXED;\n        pal = image.palette;\n\n        if (image.transparency.indexed) {\n          var trans = image.transparency.indexed;\n          var total = 0;\n          i = 0;\n          len = trans.length;\n\n          for (; i < len; ++i) {\n            total += trans[i];\n          }\n\n          total = total / 255;\n\n          /*\n           * a single color is specified as 100% transparent (0),\n           * so we set trns to use a /Mask with that index\n           */\n          if (total === len - 1 && trans.indexOf(0) !== -1) {\n            trns = [trans.indexOf(0)];\n\n            /*\n             * there's more than one colour within the palette that specifies\n             * a transparency value less than 255, so we unroll the pixels to create an image sMask\n             */\n          } else if (total !== len) {\n            pixels = image.decodePixels();\n            alphaData = new Uint8Array(pixels.length);\n            i = 0;\n            len = pixels.length;\n\n            for (; i < len; i++) {\n              alphaData[i] = trans[pixels[i]];\n            }\n\n            smask = compressBytes(alphaData, image.width, 1);\n          }\n        }\n      }\n\n      var predictor = getPredictorFromCompression(compression);\n\n      if (filter === this.decode.FLATE_DECODE) {\n        decodeParameters = \"/Predictor \" + predictor + \" \";\n      }\n      decodeParameters +=\n        \"/Colors \" +\n        colors +\n        \" /BitsPerComponent \" +\n        bitsPerComponent +\n        \" /Columns \" +\n        image.width;\n\n      if (\n        this.__addimage__.isArrayBuffer(imageData) ||\n        this.__addimage__.isArrayBufferView(imageData)\n      ) {\n        imageData = this.__addimage__.arrayBufferToBinaryString(imageData);\n      }\n\n      if (\n        (smask && this.__addimage__.isArrayBuffer(smask)) ||\n        this.__addimage__.isArrayBufferView(smask)\n      ) {\n        smask = this.__addimage__.arrayBufferToBinaryString(smask);\n      }\n\n      return {\n        alias: alias,\n        data: imageData,\n        index: index,\n        filter: filter,\n        decodeParameters: decodeParameters,\n        transparency: trns,\n        palette: pal,\n        sMask: smask,\n        predictor: predictor,\n        width: image.width,\n        height: image.height,\n        bitsPerComponent: bitsPerComponent,\n        colorSpace: colorSpace\n      };\n    }\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { GifReader } from \"../libs/omggif.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\n\n/**\n * jsPDF Gif Support PlugIn\n *\n * @name gif_support\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  jsPDFAPI.processGIF89A = function(imageData, index, alias, compression) {\n    var reader = new GifReader(imageData);\n    var width = reader.width,\n      height = reader.height;\n    var qu = 100;\n    var pixels = [];\n\n    reader.decodeAndBlitFrameRGBA(0, pixels);\n    var rawImageData = {\n      data: pixels,\n      width: width,\n      height: height\n    };\n\n    var encoder = new JPEGEncoder(qu);\n    var data = encoder.encode(rawImageData, qu);\n    return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n  };\n\n  jsPDFAPI.processGIF87A = jsPDFAPI.processGIF89A;\n})(jsPDF.API);\n","import { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { BmpDecoder } from \"../libs/BMPDecoder.js\";\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @license\n * Copyright (c) 2018 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF bmp Support PlugIn\n * @name bmp_support\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  jsPDFAPI.processBMP = function(imageData, index, alias, compression) {\n    var reader = new BmpDecoder(imageData, false);\n    var width = reader.width,\n      height = reader.height;\n    var qu = 100;\n    var pixels = reader.getData();\n\n    var rawImageData = {\n      data: pixels,\n      width: width,\n      height: height\n    };\n\n    var encoder = new JPEGEncoder(qu);\n    var data = encoder.encode(rawImageData, qu);\n    return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2019 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { WebPDecoder } from \"../libs/WebPDecoder.js\";\n\n/**\n * jsPDF webp Support PlugIn\n *\n * @name webp_support\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  jsPDFAPI.processWEBP = function(imageData, index, alias, compression) {\n    var reader = new WebPDecoder(imageData, false);\n    var width = reader.width,\n      height = reader.height;\n    var qu = 100;\n    var pixels = reader.getData();\n\n    var rawImageData = {\n      data: pixels,\n      width: width,\n      height: height\n    };\n\n    var encoder = new JPEGEncoder(qu);\n    var data = encoder.encode(rawImageData, qu);\n    return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n  };\n})(jsPDF.API);\n","/**\n * @license\n *\n * Copyright (c) 2021 Antti Palola, https://github.com/Pantura\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF RGBA array PlugIn\n * @name rgba_support\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * @name processRGBA\n   * @function\n   *\n   * Process RGBA Array. This is a one-dimension array with pixel data [red, green, blue, alpha, red, green, ...].\n   * RGBA array data can be obtained from DOM canvas getImageData.\n   * @ignore\n   */\n  jsPDFAPI.processRGBA = function(imageData, index, alias) {\n    \"use strict\";\n\n    var imagePixels = imageData.data;\n    var length = imagePixels.length;\n    // jsPDF takes alpha data separately so extract that.\n    var rgbOut = new Uint8Array((length / 4) * 3);\n    var alphaOut = new Uint8Array(length / 4);\n    var outIndex = 0;\n    var alphaIndex = 0;\n\n    for (var i = 0; i < length; i += 4) {\n      var r = imagePixels[i];\n      var g = imagePixels[i + 1];\n      var b = imagePixels[i + 2];\n      var alpha = imagePixels[i + 3];\n      rgbOut[outIndex++] = r;\n      rgbOut[outIndex++] = g;\n      rgbOut[outIndex++] = b;\n      alphaOut[alphaIndex++] = alpha;\n    }\n\n    var rgbData = this.__addimage__.arrayBufferToBinaryString(rgbOut);\n    var alphaData = this.__addimage__.arrayBufferToBinaryString(alphaOut);\n\n    return {\n      alpha: alphaData,\n      data: rgbData,\n      index: index,\n      alias: alias,\n      colorSpace: \"DeviceRGB\",\n      bitsPerComponent: 8,\n      width: imageData.width,\n      height: imageData.height\n    };\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF setLanguage Plugin\n *\n * @name setLanguage\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  /**\n   * Add Language Tag to the generated PDF\n   *\n   * @name setLanguage\n   * @function\n   * @param {string} langCode The Language code as ISO-639-1 (e.g. 'en') or as country language code (e.g. 'en-GB').\n   * @returns {jsPDF}\n   * @example\n   * var doc = new jsPDF()\n   * doc.text(10, 10, 'This is a test')\n   * doc.setLanguage(\"en-US\")\n   * doc.save('english.pdf')\n   */\n  jsPDFAPI.setLanguage = function(langCode) {\n    \"use strict\";\n\n    var langCodes = {\n      af: \"Afrikaans\",\n      sq: \"Albanian\",\n      ar: \"Arabic (Standard)\",\n      \"ar-DZ\": \"Arabic (Algeria)\",\n      \"ar-BH\": \"Arabic (Bahrain)\",\n      \"ar-EG\": \"Arabic (Egypt)\",\n      \"ar-IQ\": \"Arabic (Iraq)\",\n      \"ar-JO\": \"Arabic (Jordan)\",\n      \"ar-KW\": \"Arabic (Kuwait)\",\n      \"ar-LB\": \"Arabic (Lebanon)\",\n      \"ar-LY\": \"Arabic (Libya)\",\n      \"ar-MA\": \"Arabic (Morocco)\",\n      \"ar-OM\": \"Arabic (Oman)\",\n      \"ar-QA\": \"Arabic (Qatar)\",\n      \"ar-SA\": \"Arabic (Saudi Arabia)\",\n      \"ar-SY\": \"Arabic (Syria)\",\n      \"ar-TN\": \"Arabic (Tunisia)\",\n      \"ar-AE\": \"Arabic (U.A.E.)\",\n      \"ar-YE\": \"Arabic (Yemen)\",\n      an: \"Aragonese\",\n      hy: \"Armenian\",\n      as: \"Assamese\",\n      ast: \"Asturian\",\n      az: \"Azerbaijani\",\n      eu: \"Basque\",\n      be: \"Belarusian\",\n      bn: \"Bengali\",\n      bs: \"Bosnian\",\n      br: \"Breton\",\n      bg: \"Bulgarian\",\n      my: \"Burmese\",\n      ca: \"Catalan\",\n      ch: \"Chamorro\",\n      ce: \"Chechen\",\n      zh: \"Chinese\",\n      \"zh-HK\": \"Chinese (Hong Kong)\",\n      \"zh-CN\": \"Chinese (PRC)\",\n      \"zh-SG\": \"Chinese (Singapore)\",\n      \"zh-TW\": \"Chinese (Taiwan)\",\n      cv: \"Chuvash\",\n      co: \"Corsican\",\n      cr: \"Cree\",\n      hr: \"Croatian\",\n      cs: \"Czech\",\n      da: \"Danish\",\n      nl: \"Dutch (Standard)\",\n      \"nl-BE\": \"Dutch (Belgian)\",\n      en: \"English\",\n      \"en-AU\": \"English (Australia)\",\n      \"en-BZ\": \"English (Belize)\",\n      \"en-CA\": \"English (Canada)\",\n      \"en-IE\": \"English (Ireland)\",\n      \"en-JM\": \"English (Jamaica)\",\n      \"en-NZ\": \"English (New Zealand)\",\n      \"en-PH\": \"English (Philippines)\",\n      \"en-ZA\": \"English (South Africa)\",\n      \"en-TT\": \"English (Trinidad & Tobago)\",\n      \"en-GB\": \"English (United Kingdom)\",\n      \"en-US\": \"English (United States)\",\n      \"en-ZW\": \"English (Zimbabwe)\",\n      eo: \"Esperanto\",\n      et: \"Estonian\",\n      fo: \"Faeroese\",\n      fj: \"Fijian\",\n      fi: \"Finnish\",\n      fr: \"French (Standard)\",\n      \"fr-BE\": \"French (Belgium)\",\n      \"fr-CA\": \"French (Canada)\",\n      \"fr-FR\": \"French (France)\",\n      \"fr-LU\": \"French (Luxembourg)\",\n      \"fr-MC\": \"French (Monaco)\",\n      \"fr-CH\": \"French (Switzerland)\",\n      fy: \"Frisian\",\n      fur: \"Friulian\",\n      gd: \"Gaelic (Scots)\",\n      \"gd-IE\": \"Gaelic (Irish)\",\n      gl: \"Galacian\",\n      ka: \"Georgian\",\n      de: \"German (Standard)\",\n      \"de-AT\": \"German (Austria)\",\n      \"de-DE\": \"German (Germany)\",\n      \"de-LI\": \"German (Liechtenstein)\",\n      \"de-LU\": \"German (Luxembourg)\",\n      \"de-CH\": \"German (Switzerland)\",\n      el: \"Greek\",\n      gu: \"Gujurati\",\n      ht: \"Haitian\",\n      he: \"Hebrew\",\n      hi: \"Hindi\",\n      hu: \"Hungarian\",\n      is: \"Icelandic\",\n      id: \"Indonesian\",\n      iu: \"Inuktitut\",\n      ga: \"Irish\",\n      it: \"Italian (Standard)\",\n      \"it-CH\": \"Italian (Switzerland)\",\n      ja: \"Japanese\",\n      kn: \"Kannada\",\n      ks: \"Kashmiri\",\n      kk: \"Kazakh\",\n      km: \"Khmer\",\n      ky: \"Kirghiz\",\n      tlh: \"Klingon\",\n      ko: \"Korean\",\n      \"ko-KP\": \"Korean (North Korea)\",\n      \"ko-KR\": \"Korean (South Korea)\",\n      la: \"Latin\",\n      lv: \"Latvian\",\n      lt: \"Lithuanian\",\n      lb: \"Luxembourgish\",\n      mk: \"North Macedonia\",\n      ms: \"Malay\",\n      ml: \"Malayalam\",\n      mt: \"Maltese\",\n      mi: \"Maori\",\n      mr: \"Marathi\",\n      mo: \"Moldavian\",\n      nv: \"Navajo\",\n      ng: \"Ndonga\",\n      ne: \"Nepali\",\n      no: \"Norwegian\",\n      nb: \"Norwegian (Bokmal)\",\n      nn: \"Norwegian (Nynorsk)\",\n      oc: \"Occitan\",\n      or: \"Oriya\",\n      om: \"Oromo\",\n      fa: \"Persian\",\n      \"fa-IR\": \"Persian/Iran\",\n      pl: \"Polish\",\n      pt: \"Portuguese\",\n      \"pt-BR\": \"Portuguese (Brazil)\",\n      pa: \"Punjabi\",\n      \"pa-IN\": \"Punjabi (India)\",\n      \"pa-PK\": \"Punjabi (Pakistan)\",\n      qu: \"Quechua\",\n      rm: \"Rhaeto-Romanic\",\n      ro: \"Romanian\",\n      \"ro-MO\": \"Romanian (Moldavia)\",\n      ru: \"Russian\",\n      \"ru-MO\": \"Russian (Moldavia)\",\n      sz: \"Sami (Lappish)\",\n      sg: \"Sango\",\n      sa: \"Sanskrit\",\n      sc: \"Sardinian\",\n      sd: \"Sindhi\",\n      si: \"Singhalese\",\n      sr: \"Serbian\",\n      sk: \"Slovak\",\n      sl: \"Slovenian\",\n      so: \"Somani\",\n      sb: \"Sorbian\",\n      es: \"Spanish\",\n      \"es-AR\": \"Spanish (Argentina)\",\n      \"es-BO\": \"Spanish (Bolivia)\",\n      \"es-CL\": \"Spanish (Chile)\",\n      \"es-CO\": \"Spanish (Colombia)\",\n      \"es-CR\": \"Spanish (Costa Rica)\",\n      \"es-DO\": \"Spanish (Dominican Republic)\",\n      \"es-EC\": \"Spanish (Ecuador)\",\n      \"es-SV\": \"Spanish (El Salvador)\",\n      \"es-GT\": \"Spanish (Guatemala)\",\n      \"es-HN\": \"Spanish (Honduras)\",\n      \"es-MX\": \"Spanish (Mexico)\",\n      \"es-NI\": \"Spanish (Nicaragua)\",\n      \"es-PA\": \"Spanish (Panama)\",\n      \"es-PY\": \"Spanish (Paraguay)\",\n      \"es-PE\": \"Spanish (Peru)\",\n      \"es-PR\": \"Spanish (Puerto Rico)\",\n      \"es-ES\": \"Spanish (Spain)\",\n      \"es-UY\": \"Spanish (Uruguay)\",\n      \"es-VE\": \"Spanish (Venezuela)\",\n      sx: \"Sutu\",\n      sw: \"Swahili\",\n      sv: \"Swedish\",\n      \"sv-FI\": \"Swedish (Finland)\",\n      \"sv-SV\": \"Swedish (Sweden)\",\n      ta: \"Tamil\",\n      tt: \"Tatar\",\n      te: \"Teluga\",\n      th: \"Thai\",\n      tig: \"Tigre\",\n      ts: \"Tsonga\",\n      tn: \"Tswana\",\n      tr: \"Turkish\",\n      tk: \"Turkmen\",\n      uk: \"Ukrainian\",\n      hsb: \"Upper Sorbian\",\n      ur: \"Urdu\",\n      ve: \"Venda\",\n      vi: \"Vietnamese\",\n      vo: \"Volapuk\",\n      wa: \"Walloon\",\n      cy: \"Welsh\",\n      xh: \"Xhosa\",\n      ji: \"Yiddish\",\n      zu: \"Zulu\"\n    };\n\n    if (this.internal.languageSettings === undefined) {\n      this.internal.languageSettings = {};\n      this.internal.languageSettings.isSubscribed = false;\n    }\n\n    if (langCodes[langCode] !== undefined) {\n      this.internal.languageSettings.languageCode = langCode;\n      if (this.internal.languageSettings.isSubscribed === false) {\n        this.internal.events.subscribe(\"putCatalog\", function() {\n          this.internal.write(\n            \"/Lang (\" + this.internal.languageSettings.languageCode + \")\"\n          );\n        });\n        this.internal.languageSettings.isSubscribed = true;\n      }\n    }\n    return this;\n  };\n})(jsPDF.API);\n","/** @license\n jsPDF standard_fonts_metrics plugin\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * MIT license.\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n * \n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * This file adds the standard font metrics to jsPDF.\n *\n * Font metrics data is reprocessed derivative of contents of\n * \"Font Metrics for PDF Core 14 Fonts\" package, which exhibits the following copyright and license:\n *\n * Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\n *\n * This file and the 14 PostScript(R) AFM files it accompanies may be used,\n * copied, and distributed for any purpose and without charge, with or without\n * modification, provided that all copyright notices are retained; that the AFM\n * files are not distributed without this file; that all modifications to this\n * file or any of the AFM files are prominently noted in the modified file(s);\n * and that this paragraph is not modified. Adobe Systems has no responsibility\n * or obligation to support the use of the AFM files.\n *\n * @name standard_fonts_metrics\n * @module\n */\n\n(function(API) {\n  \"use strict\";\n  API.__fontmetrics__ = API.__fontmetrics__ || {};\n\n  var decoded = \"0123456789abcdef\",\n    encoded = \"klmnopqrstuvwxyz\",\n    mappingUncompress = {},\n    mappingCompress = {};\n\n  for (var i = 0; i < encoded.length; i++) {\n    mappingUncompress[encoded[i]] = decoded[i];\n    mappingCompress[decoded[i]] = encoded[i];\n  }\n\n  var hex = function(value) {\n    return \"0x\" + parseInt(value, 10).toString(16);\n  };\n\n  var compress = (API.__fontmetrics__.compress = function(data) {\n    var vals = [\"{\"];\n    var value, keystring, valuestring, numberprefix;\n\n    for (var key in data) {\n      value = data[key];\n\n      if (!isNaN(parseInt(key, 10))) {\n        key = parseInt(key, 10);\n        keystring = hex(key).slice(2);\n        keystring =\n          keystring.slice(0, -1) + mappingCompress[keystring.slice(-1)];\n      } else {\n        keystring = \"'\" + key + \"'\";\n      }\n\n      if (typeof value == \"number\") {\n        if (value < 0) {\n          valuestring = hex(value).slice(3);\n          numberprefix = \"-\";\n        } else {\n          valuestring = hex(value).slice(2);\n          numberprefix = \"\";\n        }\n        valuestring =\n          numberprefix +\n          valuestring.slice(0, -1) +\n          mappingCompress[valuestring.slice(-1)];\n      } else {\n        if (typeof value === \"object\") {\n          valuestring = compress(value);\n        } else {\n          throw new Error(\n            \"Don't know what to do with value type \" + typeof value + \".\"\n          );\n        }\n      }\n      vals.push(keystring + valuestring);\n    }\n    vals.push(\"}\");\n    return vals.join(\"\");\n  });\n\n  /**\n   * Uncompresses data compressed into custom, base16-like format.\n   *\n   * @public\n   * @function\n   * @param\n   * @returns {Type}\n   */\n  var uncompress = (API.__fontmetrics__.uncompress = function(data) {\n    if (typeof data !== \"string\") {\n      throw new Error(\"Invalid argument passed to uncompress.\");\n    }\n\n    var output = {},\n      sign = 1,\n      stringparts, // undef. will be [] in string mode\n      activeobject = output,\n      parentchain = [],\n      parent_key_pair,\n      keyparts = \"\",\n      valueparts = \"\",\n      key, // undef. will be Truthy when Key is resolved.\n      datalen = data.length - 1, // stripping ending }\n      ch;\n\n    for (var i = 1; i < datalen; i += 1) {\n      // - { } ' are special.\n\n      ch = data[i];\n\n      if (ch == \"'\") {\n        if (stringparts) {\n          // end of string mode\n          key = stringparts.join(\"\");\n          stringparts = undefined;\n        } else {\n          // start of string mode\n          stringparts = [];\n        }\n      } else if (stringparts) {\n        stringparts.push(ch);\n      } else if (ch == \"{\") {\n        // start of object\n        parentchain.push([activeobject, key]);\n        activeobject = {};\n        key = undefined;\n      } else if (ch == \"}\") {\n        // end of object\n        parent_key_pair = parentchain.pop();\n        parent_key_pair[0][parent_key_pair[1]] = activeobject;\n        key = undefined;\n        activeobject = parent_key_pair[0];\n      } else if (ch == \"-\") {\n        sign = -1;\n      } else {\n        // must be number\n        if (key === undefined) {\n          if (mappingUncompress.hasOwnProperty(ch)) {\n            keyparts += mappingUncompress[ch];\n            key = parseInt(keyparts, 16) * sign;\n            sign = +1;\n            keyparts = \"\";\n          } else {\n            keyparts += ch;\n          }\n        } else {\n          if (mappingUncompress.hasOwnProperty(ch)) {\n            valueparts += mappingUncompress[ch];\n            activeobject[key] = parseInt(valueparts, 16) * sign;\n            sign = +1;\n            key = undefined;\n            valueparts = \"\";\n          } else {\n            valueparts += ch;\n          }\n        }\n      }\n    }\n    return output;\n  });\n\n  // encoding = 'Unicode'\n  // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE. NO clever BOM behavior\n  // Actual 16bit char codes used.\n  // no multi-byte logic here\n\n  // Unicode characters to WinAnsiEncoding:\n  // {402: 131, 8211: 150, 8212: 151, 8216: 145, 8217: 146, 8218: 130, 8220: 147, 8221: 148, 8222: 132, 8224: 134, 8225: 135, 8226: 149, 8230: 133, 8364: 128, 8240:137, 8249: 139, 8250: 155, 710: 136, 8482: 153, 338: 140, 339: 156, 732: 152, 352: 138, 353: 154, 376: 159, 381: 142, 382: 158}\n  // as you can see, all Unicode chars are outside of 0-255 range. No char code conflicts.\n  // this means that you can give Win cp1252 encoded strings to jsPDF for rendering directly\n  // as well as give strings with some (supported by these fonts) Unicode characters and\n  // these will be mapped to win cp1252\n  // for example, you can send char code (cp1252) 0x80 or (unicode) 0x20AC, getting \"Euro\" glyph displayed in both cases.\n\n  var encodingBlock = {\n    codePages: [\"WinAnsiEncoding\"],\n    WinAnsiEncoding: uncompress(\n      \"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\"\n    )\n  };\n  var encodings = {\n    Unicode: {\n      Courier: encodingBlock,\n      \"Courier-Bold\": encodingBlock,\n      \"Courier-BoldOblique\": encodingBlock,\n      \"Courier-Oblique\": encodingBlock,\n      Helvetica: encodingBlock,\n      \"Helvetica-Bold\": encodingBlock,\n      \"Helvetica-BoldOblique\": encodingBlock,\n      \"Helvetica-Oblique\": encodingBlock,\n      \"Times-Roman\": encodingBlock,\n      \"Times-Bold\": encodingBlock,\n      \"Times-BoldItalic\": encodingBlock,\n      \"Times-Italic\": encodingBlock\n      //\t, 'Symbol'\n      //\t, 'ZapfDingbats'\n    }\n  };\n\n  var fontMetrics = {\n    Unicode: {\n      // all sizing numbers are n/fontMetricsFractionOf = one font size unit\n      // this means that if fontMetricsFractionOf = 1000, and letter A's width is 476, it's\n      // width is 476/1000 or 47.6% of its height (regardless of font size)\n      // At this time this value applies to \"widths\" and \"kerning\" numbers.\n\n      // char code 0 represents \"default\" (average) width - use it for chars missing in this table.\n      // key 'fof' represents the \"fontMetricsFractionOf\" value\n\n      \"Courier-Oblique\": uncompress(\n        \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n      ),\n      \"Times-BoldItalic\": uncompress(\n        \"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"\n      ),\n      \"Helvetica-Bold\": uncompress(\n        \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n      ),\n      Courier: uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n      \"Courier-BoldOblique\": uncompress(\n        \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n      ),\n      \"Times-Bold\": uncompress(\n        \"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"\n      ),\n      Symbol: uncompress(\n        \"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"\n      ),\n      Helvetica: uncompress(\n        \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n      ),\n      \"Helvetica-BoldOblique\": uncompress(\n        \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n      ),\n      ZapfDingbats: uncompress(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\n      \"Courier-Bold\": uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n      \"Times-Italic\": uncompress(\n        \"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"\n      ),\n      \"Times-Roman\": uncompress(\n        \"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"\n      ),\n      \"Helvetica-Oblique\": uncompress(\n        \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n      )\n    }\n  };\n\n  /*\n\tThis event handler is fired when a new jsPDF object is initialized\n\tThis event handler appends metrics data to standard fonts within\n\tthat jsPDF instance. The metrics are mapped over Unicode character\n\tcodes, NOT CIDs or other codes matching the StandardEncoding table of the\n\tstandard PDF fonts.\n\tFuture:\n\tAlso included is the encoding maping table, converting Unicode (UCS-2, UTF-16)\n\tchar codes to StandardEncoding character codes. The encoding table is to be used\n\tsomewhere around \"pdfEscape\" call.\n\t*/\n  API.events.push([\n    \"addFont\",\n    function(data) {\n      var font = data.font;\n\n      var metrics = fontMetrics[\"Unicode\"][font.postScriptName];\n      if (metrics) {\n        font.metadata[\"Unicode\"] = {};\n        font.metadata[\"Unicode\"].widths = metrics.widths;\n        font.metadata[\"Unicode\"].kerning = metrics.kerning;\n      }\n\n      var encodingBlock = encodings[\"Unicode\"][font.postScriptName];\n      if (encodingBlock) {\n        font.metadata[\"Unicode\"].encoding = encodingBlock;\n        font.encoding = encodingBlock.codePages[0];\n      }\n    }\n  ]); // end of adding event handler\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob } from \"../libs/AtobBtoa.js\";\n\n/**\n * @name ttfsupport\n * @module\n */\n(function(jsPDF) {\n  \"use strict\";\n\n  var binaryStringToUint8Array = function(binary_string) {\n    var len = binary_string.length;\n    var bytes = new Uint8Array(len);\n    for (var i = 0; i < len; i++) {\n      bytes[i] = binary_string.charCodeAt(i);\n    }\n    return bytes;\n  };\n\n  var addFont = function(font, file) {\n    // eslint-disable-next-line no-control-regex\n    if (/^\\x00\\x01\\x00\\x00/.test(file)) {\n      file = binaryStringToUint8Array(file);\n    } else {\n      file = binaryStringToUint8Array(atob(file));\n    }\n    font.metadata = jsPDF.API.TTFFont.open(file);\n    font.metadata.Unicode = font.metadata.Unicode || {\n      encoding: {},\n      kerning: {},\n      widths: []\n    };\n    font.metadata.glyIdsUsed = [0];\n  };\n\n  jsPDF.API.events.push([\n    \"addFont\",\n    function(data) {\n      var file = undefined;\n      var font = data.font;\n      var instance = data.instance;\n      if (font.isStandardFont) {\n        return;\n      }\n      if (typeof instance !== \"undefined\") {\n        if (instance.existsFileInVFS(font.postScriptName) === false) {\n          file = instance.loadFile(font.postScriptName);\n        } else {\n          file = instance.getFileFromVFS(font.postScriptName);\n        }\n        if (typeof file !== \"string\") {\n          throw new Error(\n            \"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\" +\n              font.postScriptName +\n              \"').\"\n          );\n        }\n        addFont(font, file);\n      } else {\n        throw new Error(\n          \"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\" +\n            font.postScriptName +\n            \"').\"\n        );\n      }\n    }\n  ]); // end of adding event handler\n})(jsPDF);\n","/** @license\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { console } from \"../libs/console.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF SVG plugin\n *\n * @name svg\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  function loadCanvg() {\n    return (function() {\n      if (globalObject[\"canvg\"]) {\n        return Promise.resolve(globalObject[\"canvg\"]);\n      }\n\n\n      if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n        return new Promise(function(resolve, reject) {\n          try {\n            resolve(require(\"canvg\"));\n          } catch (e) {\n            reject(e);\n          }\n        });\n      }\n      if (typeof define === \"function\" && define.amd) {\n        return new Promise(function(resolve, reject) {\n          try {\n            require([\"canvg\"], resolve);\n          } catch (e) {\n            reject(e);\n          }\n        });\n      }\n      return Promise.reject(new Error(\"Could not load canvg\"));\n    })()\n      .catch(function(e) {\n        return Promise.reject(new Error(\"Could not load canvg: \" + e));\n      })\n      .then(function(canvg) {\n        return canvg.default ? canvg.default : canvg;\n      });\n  }\n\n  /**\n   * Parses SVG XML and saves it as image into the PDF.\n   *\n   * Depends on canvas-element and canvg\n   *\n   * @name addSvgAsImage\n   * @public\n   * @function\n   * @param {string} SVG-Data as Text\n   * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\n   * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n   * @param {number} width of SVG-Image (in units declared at inception of PDF document)\n   * @param {number} height of SVG-Image (in units declared at inception of PDF document)\n   * @param {string} alias of SVG-Image (if used multiple times)\n   * @param {string} compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n   * @param {number} rotation of the image in degrees (0-359)\n   *\n   * @returns jsPDF jsPDF-instance\n   */\n  jsPDFAPI.addSvgAsImage = function(\n    svg,\n    x,\n    y,\n    w,\n    h,\n    alias,\n    compression,\n    rotation\n  ) {\n    if (isNaN(x) || isNaN(y)) {\n      console.error(\"jsPDF.addSvgAsImage: Invalid coordinates\", arguments);\n      throw new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");\n    }\n\n    if (isNaN(w) || isNaN(h)) {\n      console.error(\"jsPDF.addSvgAsImage: Invalid measurements\", arguments);\n      throw new Error(\n        \"Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage\"\n      );\n    }\n\n    var canvas = document.createElement(\"canvas\");\n    canvas.width = w;\n    canvas.height = h;\n    var ctx = canvas.getContext(\"2d\");\n    ctx.fillStyle = \"#fff\"; /// set white fill style\n    ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n    var options = {\n      ignoreMouse: true,\n      ignoreAnimation: true,\n      ignoreDimensions: true\n    };\n    var doc = this;\n    return loadCanvg()\n      .then(\n        function(canvg) {\n          return canvg.fromString(ctx, svg, options);\n        },\n        function() {\n          return Promise.reject(new Error(\"Could not load canvg.\"));\n        }\n      )\n      .then(function(instance) {\n        return instance.render(options);\n      })\n      .then(function() {\n        doc.addImage(\n          canvas.toDataURL(\"image/jpeg\", 1.0),\n          x,\n          y,\n          w,\n          h,\n          compression,\n          rotation\n        );\n      });\n  };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF total_pages plugin\n * @name total_pages\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n  /**\n   * @name putTotalPages\n   * @function\n   * @param {string} pageExpression Regular Expression\n   * @returns {jsPDF} jsPDF-instance\n   */\n\n  jsPDFAPI.putTotalPages = function(pageExpression) {\n    \"use strict\";\n\n    var replaceExpression;\n    var totalNumberOfPages = 0;\n    if (parseInt(this.internal.getFont().id.substr(1), 10) < 15) {\n      replaceExpression = new RegExp(pageExpression, \"g\");\n      totalNumberOfPages = this.internal.getNumberOfPages();\n    } else {\n      replaceExpression = new RegExp(\n        this.pdfEscape16(pageExpression, this.internal.getFont()),\n        \"g\"\n      );\n      totalNumberOfPages = this.pdfEscape16(\n        this.internal.getNumberOfPages() + \"\",\n        this.internal.getFont()\n      );\n    }\n\n    for (var n = 1; n <= this.internal.getNumberOfPages(); n++) {\n      for (var i = 0; i < this.internal.pages[n].length; i++) {\n        this.internal.pages[n][i] = this.internal.pages[n][i].replace(\n          replaceExpression,\n          totalNumberOfPages\n        );\n      }\n    }\n\n    return this;\n  };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF viewerPreferences Plugin\n * @author Aras Abbasi (github.com/arasabbasi)\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Adds the ability to set ViewerPreferences and by thus\n * controlling the way the document is to be presented on the\n * screen or in print.\n * @name viewerpreferences\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n  /**\n   * Set the ViewerPreferences of the generated PDF\n   *\n   * @name viewerPreferences\n   * @function\n   * @public\n   * @param {Object} options Array with the ViewerPreferences<br />\n   * Example: doc.viewerPreferences({\"FitWindow\":true});<br />\n   * <br />\n   * You can set following preferences:<br />\n   * <br/>\n   * <b>HideToolbar</b> <i>(boolean)</i><br />\n   * Default value: false<br />\n   * <br />\n   * <b>HideMenubar</b> <i>(boolean)</i><br />\n   * Default value: false.<br />\n   * <br />\n   * <b>HideWindowUI</b> <i>(boolean)</i><br />\n   * Default value: false.<br />\n   * <br />\n   * <b>FitWindow</b> <i>(boolean)</i><br />\n   * Default value: false.<br />\n   * <br />\n   * <b>CenterWindow</b> <i>(boolean)</i><br />\n   * Default value: false<br />\n   * <br />\n   * <b>DisplayDocTitle</b> <i>(boolean)</i><br />\n   * Default value: false.<br />\n   * <br />\n   * <b>NonFullScreenPageMode</b> <i>(string)</i><br />\n   * Possible values: UseNone, UseOutlines, UseThumbs, UseOC<br />\n   * Default value: UseNone<br/>\n   * <br />\n   * <b>Direction</b> <i>(string)</i><br />\n   * Possible values: L2R, R2L<br />\n   * Default value: L2R.<br />\n   * <br />\n   * <b>ViewArea</b> <i>(string)</i><br />\n   * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox<br />\n   * Default value: CropBox.<br />\n   * <br />\n   * <b>ViewClip</b> <i>(string)</i><br />\n   * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox<br />\n   * Default value: CropBox<br />\n   * <br />\n   * <b>PrintArea</b> <i>(string)</i><br />\n   * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox<br />\n   * Default value: CropBox<br />\n   * <br />\n   * <b>PrintClip</b> <i>(string)</i><br />\n   * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox<br />\n   * Default value: CropBox.<br />\n   * <br />\n   * <b>PrintScaling</b> <i>(string)</i><br />\n   * Possible values: AppDefault, None<br />\n   * Default value: AppDefault.<br />\n   * <br />\n   * <b>Duplex</b> <i>(string)</i><br />\n   * Possible values: Simplex, DuplexFlipLongEdge, DuplexFlipShortEdge\n   * Default value: none<br />\n   * <br />\n   * <b>PickTrayByPDFSize</b> <i>(boolean)</i><br />\n   * Default value: false<br />\n   * <br />\n   * <b>PrintPageRange</b> <i>(Array)</i><br />\n   * Example: [[1,5], [7,9]]<br />\n   * Default value: as defined by PDF viewer application<br />\n   * <br />\n   * <b>NumCopies</b> <i>(Number)</i><br />\n   * Possible values: 1, 2, 3, 4, 5<br />\n   * Default value: 1<br />\n   * <br />\n   * For more information see the PDF Reference, sixth edition on Page 577\n   * @param {boolean} doReset True to reset the settings\n   * @function\n   * @returns jsPDF jsPDF-instance\n   * @example\n   * var doc = new jsPDF()\n   * doc.text('This is a test', 10, 10)\n   * doc.viewerPreferences({'FitWindow': true}, true)\n   * doc.save(\"viewerPreferences.pdf\")\n   *\n   * // Example printing 10 copies, using cropbox, and hiding UI.\n   * doc.viewerPreferences({\n   *   'HideWindowUI': true,\n   *   'PrintArea': 'CropBox',\n   *   'NumCopies': 10\n   * })\n   */\n  jsPDFAPI.viewerPreferences = function(options, doReset) {\n    options = options || {};\n    doReset = doReset || false;\n\n    var configuration;\n    var configurationTemplate = {\n      HideToolbar: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.3\n      },\n      HideMenubar: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.3\n      },\n      HideWindowUI: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.3\n      },\n      FitWindow: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.3\n      },\n      CenterWindow: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.3\n      },\n      DisplayDocTitle: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.4\n      },\n      NonFullScreenPageMode: {\n        defaultValue: \"UseNone\",\n        value: \"UseNone\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"UseNone\", \"UseOutlines\", \"UseThumbs\", \"UseOC\"],\n        pdfVersion: 1.3\n      },\n      Direction: {\n        defaultValue: \"L2R\",\n        value: \"L2R\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"L2R\", \"R2L\"],\n        pdfVersion: 1.3\n      },\n      ViewArea: {\n        defaultValue: \"CropBox\",\n        value: \"CropBox\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n        pdfVersion: 1.4\n      },\n      ViewClip: {\n        defaultValue: \"CropBox\",\n        value: \"CropBox\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n        pdfVersion: 1.4\n      },\n      PrintArea: {\n        defaultValue: \"CropBox\",\n        value: \"CropBox\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n        pdfVersion: 1.4\n      },\n      PrintClip: {\n        defaultValue: \"CropBox\",\n        value: \"CropBox\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n        pdfVersion: 1.4\n      },\n      PrintScaling: {\n        defaultValue: \"AppDefault\",\n        value: \"AppDefault\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\"AppDefault\", \"None\"],\n        pdfVersion: 1.6\n      },\n      Duplex: {\n        defaultValue: \"\",\n        value: \"none\",\n        type: \"name\",\n        explicitSet: false,\n        valueSet: [\n          \"Simplex\",\n          \"DuplexFlipShortEdge\",\n          \"DuplexFlipLongEdge\",\n          \"none\"\n        ],\n        pdfVersion: 1.7\n      },\n      PickTrayByPDFSize: {\n        defaultValue: false,\n        value: false,\n        type: \"boolean\",\n        explicitSet: false,\n        valueSet: [true, false],\n        pdfVersion: 1.7\n      },\n      PrintPageRange: {\n        defaultValue: \"\",\n        value: \"\",\n        type: \"array\",\n        explicitSet: false,\n        valueSet: null,\n        pdfVersion: 1.7\n      },\n      NumCopies: {\n        defaultValue: 1,\n        value: 1,\n        type: \"integer\",\n        explicitSet: false,\n        valueSet: null,\n        pdfVersion: 1.7\n      }\n    };\n\n    var configurationKeys = Object.keys(configurationTemplate);\n\n    var rangeArray = [];\n    var i = 0;\n    var j = 0;\n    var k = 0;\n    var isValid;\n\n    var method;\n    var value;\n\n    function arrayContainsElement(array, element) {\n      var iterator;\n      var result = false;\n\n      for (iterator = 0; iterator < array.length; iterator += 1) {\n        if (array[iterator] === element) {\n          result = true;\n        }\n      }\n      return result;\n    }\n\n    if (this.internal.viewerpreferences === undefined) {\n      this.internal.viewerpreferences = {};\n      this.internal.viewerpreferences.configuration = JSON.parse(\n        JSON.stringify(configurationTemplate)\n      );\n      this.internal.viewerpreferences.isSubscribed = false;\n    }\n    configuration = this.internal.viewerpreferences.configuration;\n\n    if (options === \"reset\" || doReset === true) {\n      var len = configurationKeys.length;\n\n      for (k = 0; k < len; k += 1) {\n        configuration[configurationKeys[k]].value =\n          configuration[configurationKeys[k]].defaultValue;\n        configuration[configurationKeys[k]].explicitSet = false;\n      }\n    }\n\n    if (typeof options === \"object\") {\n      for (method in options) {\n        value = options[method];\n        if (\n          arrayContainsElement(configurationKeys, method) &&\n          value !== undefined\n        ) {\n          if (\n            configuration[method].type === \"boolean\" &&\n            typeof value === \"boolean\"\n          ) {\n            configuration[method].value = value;\n          } else if (\n            configuration[method].type === \"name\" &&\n            arrayContainsElement(configuration[method].valueSet, value)\n          ) {\n            configuration[method].value = value;\n          } else if (\n            configuration[method].type === \"integer\" &&\n            Number.isInteger(value)\n          ) {\n            configuration[method].value = value;\n          } else if (configuration[method].type === \"array\") {\n            for (i = 0; i < value.length; i += 1) {\n              isValid = true;\n              if (value[i].length === 1 && typeof value[i][0] === \"number\") {\n                rangeArray.push(String(value[i] - 1));\n              } else if (value[i].length > 1) {\n                for (j = 0; j < value[i].length; j += 1) {\n                  if (typeof value[i][j] !== \"number\") {\n                    isValid = false;\n                  }\n                }\n                if (isValid === true) {\n                  rangeArray.push([value[i][0] - 1, value[i][1] - 1].join(\" \"));\n                }\n              }\n            }\n            configuration[method].value = \"[\" + rangeArray.join(\" \") + \"]\";\n          } else {\n            configuration[method].value = configuration[method].defaultValue;\n          }\n\n          configuration[method].explicitSet = true;\n        }\n      }\n    }\n\n    if (this.internal.viewerpreferences.isSubscribed === false) {\n      this.internal.events.subscribe(\"putCatalog\", function() {\n        var pdfDict = [];\n        var vPref;\n        for (vPref in configuration) {\n          if (configuration[vPref].explicitSet === true) {\n            if (configuration[vPref].type === \"name\") {\n              pdfDict.push(\"/\" + vPref + \" /\" + configuration[vPref].value);\n            } else {\n              pdfDict.push(\"/\" + vPref + \" \" + configuration[vPref].value);\n            }\n          }\n        }\n        if (pdfDict.length !== 0) {\n          this.internal.write(\n            \"/ViewerPreferences\\n<<\\n\" + pdfDict.join(\"\\n\") + \"\\n>>\"\n          );\n        }\n      });\n      this.internal.viewerpreferences.isSubscribed = true;\n    }\n\n    this.internal.viewerpreferences.configuration = configuration;\n    return this;\n  };\n})(jsPDF.API);\n","/** ====================================================================\n * @license\n * jsPDF XMP metadata plugin\n * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name xmp_metadata\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var postPutResources = function() {\n    var xmpmeta_beginning = '<x:xmpmeta xmlns:x=\"adobe:ns:meta/\">';\n    var rdf_beginning =\n      '<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"><rdf:Description rdf:about=\"\" xmlns:jspdf=\"' +\n      this.internal.__metadata__.namespaceuri +\n      '\"><jspdf:metadata>';\n    var rdf_ending = \"</jspdf:metadata></rdf:Description></rdf:RDF>\";\n    var xmpmeta_ending = \"</x:xmpmeta>\";\n    var utf8_xmpmeta_beginning = unescape(\n      encodeURIComponent(xmpmeta_beginning)\n    );\n    var utf8_rdf_beginning = unescape(encodeURIComponent(rdf_beginning));\n    var utf8_metadata = unescape(\n      encodeURIComponent(this.internal.__metadata__.metadata)\n    );\n    var utf8_rdf_ending = unescape(encodeURIComponent(rdf_ending));\n    var utf8_xmpmeta_ending = unescape(encodeURIComponent(xmpmeta_ending));\n\n    var total_len =\n      utf8_rdf_beginning.length +\n      utf8_metadata.length +\n      utf8_rdf_ending.length +\n      utf8_xmpmeta_beginning.length +\n      utf8_xmpmeta_ending.length;\n\n    this.internal.__metadata__.metadata_object_number = this.internal.newObject();\n    this.internal.write(\n      \"<< /Type /Metadata /Subtype /XML /Length \" + total_len + \" >>\"\n    );\n    this.internal.write(\"stream\");\n    this.internal.write(\n      utf8_xmpmeta_beginning +\n        utf8_rdf_beginning +\n        utf8_metadata +\n        utf8_rdf_ending +\n        utf8_xmpmeta_ending\n    );\n    this.internal.write(\"endstream\");\n    this.internal.write(\"endobj\");\n  };\n\n  var putCatalog = function() {\n    if (this.internal.__metadata__.metadata_object_number) {\n      this.internal.write(\n        \"/Metadata \" +\n          this.internal.__metadata__.metadata_object_number +\n          \" 0 R\"\n      );\n    }\n  };\n\n  /**\n   * Adds XMP formatted metadata to PDF\n   *\n   * @name addMetadata\n   * @function\n   * @param {String} metadata The actual metadata to be added. The metadata shall be stored as XMP simple value. Note that if the metadata string contains XML markup characters \"<\", \">\" or \"&\", those characters should be written using XML entities.\n   * @param {String} namespaceuri Sets the namespace URI for the metadata. Last character should be slash or hash.\n   * @returns {jsPDF} jsPDF-instance\n   */\n  jsPDFAPI.addMetadata = function(metadata, namespaceuri) {\n    if (typeof this.internal.__metadata__ === \"undefined\") {\n      this.internal.__metadata__ = {\n        metadata: metadata,\n        namespaceuri: namespaceuri || \"http://jspdf.default.namespaceuri/\"\n      };\n      this.internal.events.subscribe(\"putCatalog\", putCatalog);\n\n      this.internal.events.subscribe(\"postPutResources\", postPutResources);\n    }\n    return this;\n  };\n})(jsPDF.API);\n","import { jsPDF } from \"../jspdf.js\";\nimport { toPDFName } from \"../libs/pdfname.js\";\n\n/**\n * @name utf8\n * @module\n */\n(function(jsPDF) {\n  \"use strict\";\n  var jsPDFAPI = jsPDF.API;\n\n  /***************************************************************************************************/\n  /* function : pdfEscape16                                                                          */\n  /* comment : The character id of a 2-byte string is converted to a hexadecimal number by obtaining */\n  /*   the corresponding glyph id and width, and then adding padding to the string.                  */\n  /***************************************************************************************************/\n  var pdfEscape16 = (jsPDFAPI.pdfEscape16 = function(text, font) {\n    var widths = font.metadata.Unicode.widths;\n    var padz = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n    var ar = [\"\"];\n    for (var i = 0, l = text.length, t; i < l; ++i) {\n      t = font.metadata.characterToGlyph(text.charCodeAt(i));\n      font.metadata.glyIdsUsed.push(t);\n      font.metadata.toUnicode[t] = text.charCodeAt(i);\n      if (widths.indexOf(t) == -1) {\n        widths.push(t);\n        widths.push([parseInt(font.metadata.widthOfGlyph(t), 10)]);\n      }\n      if (t == \"0\") {\n        //Spaces are not allowed in cmap.\n        return ar.join(\"\");\n      } else {\n        t = t.toString(16);\n        ar.push(padz[4 - t.length], t);\n      }\n    }\n    return ar.join(\"\");\n  });\n\n  var toUnicodeCmap = function(map) {\n    var code, codes, range, unicode, unicodeMap, _i, _len;\n    unicodeMap =\n      \"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n  /Registry (Adobe)\\n  /Ordering (UCS)\\n  /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000><ffff>\\nendcodespacerange\";\n    codes = Object.keys(map).sort(function(a, b) {\n      return a - b;\n    });\n\n    range = [];\n    for (_i = 0, _len = codes.length; _i < _len; _i++) {\n      code = codes[_i];\n      if (range.length >= 100) {\n        unicodeMap +=\n          \"\\n\" +\n          range.length +\n          \" beginbfchar\\n\" +\n          range.join(\"\\n\") +\n          \"\\nendbfchar\";\n        range = [];\n      }\n\n      if (\n        map[code] !== undefined &&\n        map[code] !== null &&\n        typeof map[code].toString === \"function\"\n      ) {\n        unicode = (\"0000\" + map[code].toString(16)).slice(-4);\n        code = (\"0000\" + (+code).toString(16)).slice(-4);\n        range.push(\"<\" + code + \"><\" + unicode + \">\");\n      }\n    }\n\n    if (range.length) {\n      unicodeMap +=\n        \"\\n\" +\n        range.length +\n        \" beginbfchar\\n\" +\n        range.join(\"\\n\") +\n        \"\\nendbfchar\\n\";\n    }\n    unicodeMap +=\n      \"endcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\";\n    return unicodeMap;\n  };\n\n  var identityHFunction = function(options) {\n    var font = options.font;\n    var out = options.out;\n    var newObject = options.newObject;\n    var putStream = options.putStream;\n\n    if (\n      font.metadata instanceof jsPDF.API.TTFFont &&\n      font.encoding === \"Identity-H\"\n    ) {\n      //Tag with Identity-H\n      var widths = font.metadata.Unicode.widths;\n      var data = font.metadata.subset.encode(font.metadata.glyIdsUsed, 1);\n      var pdfOutput = data;\n      var pdfOutput2 = \"\";\n      for (var i = 0; i < pdfOutput.length; i++) {\n        pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n      }\n      var fontTable = newObject();\n      putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n      out(\"endobj\");\n\n      var cmap = newObject();\n      var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n      putStream({ data: cmapData, addLength1: true, objectId: cmap });\n      out(\"endobj\");\n\n      var fontDescriptor = newObject();\n      out(\"<<\");\n      out(\"/Type /FontDescriptor\");\n      out(\"/FontName /\" + toPDFName(font.fontName));\n      out(\"/FontFile2 \" + fontTable + \" 0 R\");\n      out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n      out(\"/Flags \" + font.metadata.flags);\n      out(\"/StemV \" + font.metadata.stemV);\n      out(\"/ItalicAngle \" + font.metadata.italicAngle);\n      out(\"/Ascent \" + font.metadata.ascender);\n      out(\"/Descent \" + font.metadata.decender);\n      out(\"/CapHeight \" + font.metadata.capHeight);\n      out(\">>\");\n      out(\"endobj\");\n\n      var DescendantFont = newObject();\n      out(\"<<\");\n      out(\"/Type /Font\");\n      out(\"/BaseFont /\" + toPDFName(font.fontName));\n      out(\"/FontDescriptor \" + fontDescriptor + \" 0 R\");\n      out(\"/W \" + jsPDF.API.PDFObject.convert(widths));\n      out(\"/CIDToGIDMap /Identity\");\n      out(\"/DW 1000\");\n      out(\"/Subtype /CIDFontType2\");\n      out(\"/CIDSystemInfo\");\n      out(\"<<\");\n      out(\"/Supplement 0\");\n      out(\"/Registry (Adobe)\");\n      out(\"/Ordering (\" + font.encoding + \")\");\n      out(\">>\");\n      out(\">>\");\n      out(\"endobj\");\n\n      font.objectNumber = newObject();\n      out(\"<<\");\n      out(\"/Type /Font\");\n      out(\"/Subtype /Type0\");\n      out(\"/ToUnicode \" + cmap + \" 0 R\");\n      out(\"/BaseFont /\" + toPDFName(font.fontName));\n      out(\"/Encoding /\" + font.encoding);\n      out(\"/DescendantFonts [\" + DescendantFont + \" 0 R]\");\n      out(\">>\");\n      out(\"endobj\");\n\n      font.isAlreadyPutted = true;\n    }\n  };\n\n  jsPDFAPI.events.push([\n    \"putFont\",\n    function(args) {\n      identityHFunction(args);\n    }\n  ]);\n\n  var winAnsiEncodingFunction = function(options) {\n    var font = options.font;\n    var out = options.out;\n    var newObject = options.newObject;\n    var putStream = options.putStream;\n\n    if (\n      font.metadata instanceof jsPDF.API.TTFFont &&\n      font.encoding === \"WinAnsiEncoding\"\n    ) {\n      //Tag with WinAnsi encoding\n      var data = font.metadata.rawData;\n      var pdfOutput = data;\n      var pdfOutput2 = \"\";\n      for (var i = 0; i < pdfOutput.length; i++) {\n        pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n      }\n      var fontTable = newObject();\n      putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n      out(\"endobj\");\n\n      var cmap = newObject();\n      var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n      putStream({ data: cmapData, addLength1: true, objectId: cmap });\n      out(\"endobj\");\n\n      var fontDescriptor = newObject();\n      out(\"<<\");\n      out(\"/Descent \" + font.metadata.decender);\n      out(\"/CapHeight \" + font.metadata.capHeight);\n      out(\"/StemV \" + font.metadata.stemV);\n      out(\"/Type /FontDescriptor\");\n      out(\"/FontFile2 \" + fontTable + \" 0 R\");\n      out(\"/Flags 96\");\n      out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n      out(\"/FontName /\" + toPDFName(font.fontName));\n      out(\"/ItalicAngle \" + font.metadata.italicAngle);\n      out(\"/Ascent \" + font.metadata.ascender);\n      out(\">>\");\n      out(\"endobj\");\n      font.objectNumber = newObject();\n      for (var j = 0; j < font.metadata.hmtx.widths.length; j++) {\n        font.metadata.hmtx.widths[j] = parseInt(\n          font.metadata.hmtx.widths[j] * (1000 / font.metadata.head.unitsPerEm)\n        ); //Change the width of Em units to Point units.\n      }\n      out(\n        \"<</Subtype/TrueType/Type/Font/ToUnicode \" +\n          cmap +\n          \" 0 R/BaseFont/\" +\n          toPDFName(font.fontName) +\n          \"/FontDescriptor \" +\n          fontDescriptor +\n          \" 0 R\" +\n          \"/Encoding/\" +\n          font.encoding +\n          \" /FirstChar 29 /LastChar 255 /Widths \" +\n          jsPDF.API.PDFObject.convert(font.metadata.hmtx.widths) +\n          \">>\"\n      );\n      out(\"endobj\");\n      font.isAlreadyPutted = true;\n    }\n  };\n\n  jsPDFAPI.events.push([\n    \"putFont\",\n    function(args) {\n      winAnsiEncodingFunction(args);\n    }\n  ]);\n\n  var utf8TextFunction = function(args) {\n    var text = args.text || \"\";\n    var x = args.x;\n    var y = args.y;\n    var options = args.options || {};\n    var mutex = args.mutex || {};\n\n    var pdfEscape = mutex.pdfEscape;\n    var activeFontKey = mutex.activeFontKey;\n    var fonts = mutex.fonts;\n    var key = activeFontKey;\n\n    var str = \"\",\n      s = 0,\n      cmapConfirm;\n    var strText = \"\";\n    var encoding = fonts[key].encoding;\n\n    if (fonts[key].encoding !== \"Identity-H\") {\n      return {\n        text: text,\n        x: x,\n        y: y,\n        options: options,\n        mutex: mutex\n      };\n    }\n    strText = text;\n\n    key = activeFontKey;\n    if (Array.isArray(text)) {\n      strText = text[0];\n    }\n    for (s = 0; s < strText.length; s += 1) {\n      if (fonts[key].metadata.hasOwnProperty(\"cmap\")) {\n        cmapConfirm =\n          fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)];\n        /*\n             if (Object.prototype.toString.call(text) === '[object Array]') {\n                var i = 0;\n               // for (i = 0; i < text.length; i += 1) {\n                    if (Object.prototype.toString.call(text[s]) === '[object Array]') {\n                        cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s][0].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n                    } else {\n\n                    }\n                //}\n\n            } else {\n                cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n            }*/\n      }\n      if (!cmapConfirm) {\n        if (\n          strText[s].charCodeAt(0) < 256 &&\n          fonts[key].metadata.hasOwnProperty(\"Unicode\")\n        ) {\n          str += strText[s];\n        } else {\n          str += \"\";\n        }\n      } else {\n        str += strText[s];\n      }\n    }\n    var result = \"\";\n    if (parseInt(key.slice(1)) < 14 || encoding === \"WinAnsiEncoding\") {\n      //For the default 13 font\n      result = pdfEscape(str, key)\n        .split(\"\")\n        .map(function(cv) {\n          return cv.charCodeAt(0).toString(16);\n        })\n        .join(\"\");\n    } else if (encoding === \"Identity-H\") {\n      result = pdfEscape16(str, fonts[key]);\n    }\n    mutex.isHex = true;\n\n    return {\n      text: result,\n      x: x,\n      y: y,\n      options: options,\n      mutex: mutex\n    };\n  };\n\n  var utf8EscapeFunction = function(parms) {\n    var text = parms.text || \"\",\n      x = parms.x,\n      y = parms.y,\n      options = parms.options,\n      mutex = parms.mutex;\n    var tmpText = [];\n    var args = {\n      text: text,\n      x: x,\n      y: y,\n      options: options,\n      mutex: mutex\n    };\n\n    if (Array.isArray(text)) {\n      var i = 0;\n      for (i = 0; i < text.length; i += 1) {\n        if (Array.isArray(text[i])) {\n          if (text[i].length === 3) {\n            tmpText.push([\n              utf8TextFunction(Object.assign({}, args, { text: text[i][0] }))\n                .text,\n              text[i][1],\n              text[i][2]\n            ]);\n          } else {\n            tmpText.push(\n              utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n            );\n          }\n        } else {\n          tmpText.push(\n            utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n          );\n        }\n      }\n      parms.text = tmpText;\n    } else {\n      parms.text = utf8TextFunction(\n        Object.assign({}, args, { text: text })\n      ).text;\n    }\n  };\n\n  jsPDFAPI.events.push([\"postProcessText\", utf8EscapeFunction]);\n})(jsPDF);\n","/**\n * @license\n * jsPDF virtual FileSystem functionality\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Use the vFS to handle files\n *\n * @name vFS\n * @module\n */\n(function(jsPDFAPI) {\n  \"use strict\";\n\n  var _initializeVFS = function() {\n    if (typeof this.internal.vFS === \"undefined\") {\n      this.internal.vFS = {};\n    }\n    return true;\n  };\n\n  /**\n   * Check if the file exists in the vFS\n   *\n   * @name existsFileInVFS\n   * @function\n   * @param {string} Possible filename in the vFS.\n   * @returns {boolean}\n   * @example\n   * doc.existsFileInVFS(\"someFile.txt\");\n   */\n  jsPDFAPI.existsFileInVFS = function(filename) {\n    _initializeVFS.call(this);\n    return typeof this.internal.vFS[filename] !== \"undefined\";\n  };\n\n  /**\n   * Add a file to the vFS\n   *\n   * @name addFileToVFS\n   * @function\n   * @param {string} filename The name of the file which should be added.\n   * @param {string} filecontent The content of the file.\n   * @returns {jsPDF}\n   * @example\n   * doc.addFileToVFS(\"someFile.txt\", \"BADFACE1\");\n   */\n  jsPDFAPI.addFileToVFS = function(filename, filecontent) {\n    _initializeVFS.call(this);\n    this.internal.vFS[filename] = filecontent;\n    return this;\n  };\n\n  /**\n   * Get the file from the vFS\n   *\n   * @name getFileFromVFS\n   * @function\n   * @param {string} The name of the file which gets requested.\n   * @returns {string}\n   * @example\n   * doc.getFileFromVFS(\"someFile.txt\");\n   */\n  jsPDFAPI.getFileFromVFS = function(filename) {\n    _initializeVFS.call(this);\n\n    if (typeof this.internal.vFS[filename] !== \"undefined\") {\n      return this.internal.vFS[filename];\n    }\n    return null;\n  };\n})(jsPDF.API);\n","/**\n * @license\n * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)\n * MIT License\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDF) {\n  \"use strict\";\n  /**\n   * Table of Unicode types.\n   *\n   * Generated by:\n   *\n   * var bidi = require(\"./bidi/index\");\n   * var bidi_accumulate = bidi.slice(0, 256).concat(bidi.slice(0x0500, 0x0500 + 256 * 3)).\n   * concat(bidi.slice(0x2000, 0x2000 + 256)).concat(bidi.slice(0xFB00, 0xFB00 + 256)).\n   * concat(bidi.slice(0xFE00, 0xFE00 + 2 * 256));\n   *\n   * for( var i = 0; i < bidi_accumulate.length; i++) {\n   * \tif(bidi_accumulate[i] === undefined || bidi_accumulate[i] === 'ON')\n   * \t\tbidi_accumulate[i] = 'N'; //mark as neutral to conserve space and substitute undefined\n   * }\n   * var bidiAccumulateStr = 'return [ \"' + bidi_accumulate.toString().replace(/,/g, '\", \"') + '\" ];';\n   * require(\"fs\").writeFile('unicode-types.js', bidiAccumulateStr);\n   *\n   * Based on:\n   * https://github.com/mathiasbynens/unicode-8.0.0\n   */\n  var bidiUnicodeTypes = [\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"S\",\n    \"B\",\n    \"S\",\n    \"WS\",\n    \"B\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"B\",\n    \"B\",\n    \"B\",\n    \"S\",\n    \"WS\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ES\",\n    \"CS\",\n    \"ES\",\n    \"CS\",\n    \"CS\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"CS\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"B\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"CS\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"BN\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"EN\",\n    \"EN\",\n    \"N\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"EN\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"N\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"R\",\n    \"NSM\",\n    \"R\",\n    \"NSM\",\n    \"NSM\",\n    \"R\",\n    \"NSM\",\n    \"NSM\",\n    \"R\",\n    \"NSM\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"N\",\n    \"N\",\n    \"AL\",\n    \"ET\",\n    \"ET\",\n    \"AL\",\n    \"CS\",\n    \"AL\",\n    \"N\",\n    \"N\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"AL\",\n    \"AL\",\n    \"N\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"AN\",\n    \"ET\",\n    \"AN\",\n    \"AN\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"AN\",\n    \"N\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"NSM\",\n    \"N\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"AL\",\n    \"AL\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"N\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"N\",\n    \"N\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"AL\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"R\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"WS\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"L\",\n    \"R\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"WS\",\n    \"B\",\n    \"LRE\",\n    \"RLE\",\n    \"PDF\",\n    \"LRO\",\n    \"RLO\",\n    \"CS\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"CS\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"WS\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"N\",\n    \"LRI\",\n    \"RLI\",\n    \"FSI\",\n    \"PDI\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"BN\",\n    \"EN\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"ES\",\n    \"ES\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"ES\",\n    \"ES\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"R\",\n    \"NSM\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"ES\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"R\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"N\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"R\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"NSM\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"CS\",\n    \"N\",\n    \"CS\",\n    \"N\",\n    \"N\",\n    \"CS\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"ES\",\n    \"ES\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"N\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"AL\",\n    \"N\",\n    \"N\",\n    \"BN\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ES\",\n    \"CS\",\n    \"ES\",\n    \"CS\",\n    \"CS\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"EN\",\n    \"CS\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"L\",\n    \"L\",\n    \"L\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"ET\",\n    \"ET\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\",\n    \"N\"\n  ];\n\n  /**\n   * Unicode Bidi algorithm compliant Bidi engine.\n   * For reference see http://unicode.org/reports/tr9/\n   */\n\n  /**\n   * constructor ( options )\n   *\n   * Initializes Bidi engine\n   *\n   * @param {Object} See 'setOptions' below for detailed description.\n   * options are cashed between invocation of 'doBidiReorder' method\n   *\n   * sample usage pattern of BidiEngine:\n   * var opt = {\n   * \tisInputVisual: true,\n   * \tisInputRtl: false,\n   * \tisOutputVisual: false,\n   * \tisOutputRtl: false,\n   * \tisSymmetricSwapping: true\n   * }\n   * var sourceToTarget = [], levels = [];\n   * var bidiEng = Globalize.bidiEngine(opt);\n   * var src = \"text string to be reordered\";\n   * var ret = bidiEng.doBidiReorder(src, sourceToTarget, levels);\n   */\n\n  jsPDF.__bidiEngine__ = jsPDF.prototype.__bidiEngine__ = function(options) {\n    var _UNICODE_TYPES = _bidiUnicodeTypes;\n\n    var _STATE_TABLE_LTR = [\n      [0, 3, 0, 1, 0, 0, 0],\n      [0, 3, 0, 1, 2, 2, 0],\n      [0, 3, 0, 0x11, 2, 0, 1],\n      [0, 3, 5, 5, 4, 1, 0],\n      [0, 3, 0x15, 0x15, 4, 0, 1],\n      [0, 3, 5, 5, 4, 2, 0]\n    ];\n\n    var _STATE_TABLE_RTL = [\n      [2, 0, 1, 1, 0, 1, 0],\n      [2, 0, 1, 1, 0, 2, 0],\n      [2, 0, 2, 1, 3, 2, 0],\n      [2, 0, 2, 0x21, 3, 1, 1]\n    ];\n\n    var _TYPE_NAMES_MAP = { L: 0, R: 1, EN: 2, AN: 3, N: 4, B: 5, S: 6 };\n\n    var _UNICODE_RANGES_MAP = {\n      0: 0,\n      5: 1,\n      6: 2,\n      7: 3,\n      0x20: 4,\n      0xfb: 5,\n      0xfe: 6,\n      0xff: 7\n    };\n\n    var _SWAP_TABLE = [\n      \"\\u0028\",\n      \"\\u0029\",\n      \"\\u0028\",\n      \"\\u003C\",\n      \"\\u003E\",\n      \"\\u003C\",\n      \"\\u005B\",\n      \"\\u005D\",\n      \"\\u005B\",\n      \"\\u007B\",\n      \"\\u007D\",\n      \"\\u007B\",\n      \"\\u00AB\",\n      \"\\u00BB\",\n      \"\\u00AB\",\n      \"\\u2039\",\n      \"\\u203A\",\n      \"\\u2039\",\n      \"\\u2045\",\n      \"\\u2046\",\n      \"\\u2045\",\n      \"\\u207D\",\n      \"\\u207E\",\n      \"\\u207D\",\n      \"\\u208D\",\n      \"\\u208E\",\n      \"\\u208D\",\n      \"\\u2264\",\n      \"\\u2265\",\n      \"\\u2264\",\n      \"\\u2329\",\n      \"\\u232A\",\n      \"\\u2329\",\n      \"\\uFE59\",\n      \"\\uFE5A\",\n      \"\\uFE59\",\n      \"\\uFE5B\",\n      \"\\uFE5C\",\n      \"\\uFE5B\",\n      \"\\uFE5D\",\n      \"\\uFE5E\",\n      \"\\uFE5D\",\n      \"\\uFE64\",\n      \"\\uFE65\",\n      \"\\uFE64\"\n    ];\n\n    var _LTR_RANGES_REG_EXPR = new RegExp(\n      /^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/\n    );\n\n    var _lastArabic = false,\n      _hasUbatAl,\n      _hasUbatB,\n      _hasUbatS,\n      DIR_LTR = 0,\n      DIR_RTL = 1,\n      _isInVisual,\n      _isInRtl,\n      _isOutVisual,\n      _isOutRtl,\n      _isSymmetricSwapping,\n      _dir = DIR_LTR;\n\n    this.__bidiEngine__ = {};\n\n    var _init = function(text, sourceToTargetMap) {\n      if (sourceToTargetMap) {\n        for (var i = 0; i < text.length; i++) {\n          sourceToTargetMap[i] = i;\n        }\n      }\n      if (_isInRtl === undefined) {\n        _isInRtl = _isContextualDirRtl(text);\n      }\n      if (_isOutRtl === undefined) {\n        _isOutRtl = _isContextualDirRtl(text);\n      }\n    };\n\n    // for reference see 3.2 in http://unicode.org/reports/tr9/\n    //\n    var _getCharType = function(ch) {\n      var charCode = ch.charCodeAt(),\n        range = charCode >> 8,\n        rangeIdx = _UNICODE_RANGES_MAP[range];\n\n      if (rangeIdx !== undefined) {\n        return _UNICODE_TYPES[rangeIdx * 256 + (charCode & 0xff)];\n      } else if (range === 0xfc || range === 0xfd) {\n        return \"AL\";\n      } else if (_LTR_RANGES_REG_EXPR.test(range)) {\n        //unlikely case\n        return \"L\";\n      } else if (range === 8) {\n        // even less likely\n        return \"R\";\n      }\n      return \"N\"; //undefined type, mark as neutral\n    };\n\n    var _isContextualDirRtl = function(text) {\n      for (var i = 0, charType; i < text.length; i++) {\n        charType = _getCharType(text.charAt(i));\n        if (charType === \"L\") {\n          return false;\n        } else if (charType === \"R\") {\n          return true;\n        }\n      }\n      return false;\n    };\n\n    // for reference see 3.3.4 & 3.3.5 in http://unicode.org/reports/tr9/\n    //\n    var _resolveCharType = function(chars, types, resolvedTypes, index) {\n      var cType = types[index],\n        wType,\n        nType,\n        i,\n        len;\n      switch (cType) {\n        case \"L\":\n        case \"R\":\n          _lastArabic = false;\n          break;\n        case \"N\":\n        case \"AN\":\n          break;\n\n        case \"EN\":\n          if (_lastArabic) {\n            cType = \"AN\";\n          }\n          break;\n\n        case \"AL\":\n          _lastArabic = true;\n          _hasUbatAl = true;\n          cType = \"R\";\n          break;\n\n        case \"WS\":\n          cType = \"N\";\n          break;\n\n        case \"CS\":\n          if (\n            index < 1 ||\n            index + 1 >= types.length ||\n            ((wType = resolvedTypes[index - 1]) !== \"EN\" && wType !== \"AN\") ||\n            ((nType = types[index + 1]) !== \"EN\" && nType !== \"AN\")\n          ) {\n            cType = \"N\";\n          } else if (_lastArabic) {\n            nType = \"AN\";\n          }\n          cType = nType === wType ? nType : \"N\";\n          break;\n\n        case \"ES\":\n          wType = index > 0 ? resolvedTypes[index - 1] : \"B\";\n          cType =\n            wType === \"EN\" &&\n            index + 1 < types.length &&\n            types[index + 1] === \"EN\"\n              ? \"EN\"\n              : \"N\";\n          break;\n\n        case \"ET\":\n          if (index > 0 && resolvedTypes[index - 1] === \"EN\") {\n            cType = \"EN\";\n            break;\n          } else if (_lastArabic) {\n            cType = \"N\";\n            break;\n          }\n          i = index + 1;\n          len = types.length;\n          while (i < len && types[i] === \"ET\") {\n            i++;\n          }\n          if (i < len && types[i] === \"EN\") {\n            cType = \"EN\";\n          } else {\n            cType = \"N\";\n          }\n          break;\n\n        case \"NSM\":\n          if (_isInVisual && !_isInRtl) {\n            //V->L\n            len = types.length;\n            i = index + 1;\n            while (i < len && types[i] === \"NSM\") {\n              i++;\n            }\n            if (i < len) {\n              var c = chars[index];\n              var rtlCandidate = (c >= 0x0591 && c <= 0x08ff) || c === 0xfb1e;\n              wType = types[i];\n              if (rtlCandidate && (wType === \"R\" || wType === \"AL\")) {\n                cType = \"R\";\n                break;\n              }\n            }\n          }\n          if (index < 1 || (wType = types[index - 1]) === \"B\") {\n            cType = \"N\";\n          } else {\n            cType = resolvedTypes[index - 1];\n          }\n          break;\n\n        case \"B\":\n          _lastArabic = false;\n          _hasUbatB = true;\n          cType = _dir;\n          break;\n\n        case \"S\":\n          _hasUbatS = true;\n          cType = \"N\";\n          break;\n\n        case \"LRE\":\n        case \"RLE\":\n        case \"LRO\":\n        case \"RLO\":\n        case \"PDF\":\n          _lastArabic = false;\n          break;\n        case \"BN\":\n          cType = \"N\";\n          break;\n      }\n      return cType;\n    };\n\n    var _handleUbatS = function(types, levels, length) {\n      for (var i = 0; i < length; i++) {\n        if (types[i] === \"S\") {\n          levels[i] = _dir;\n          for (var j = i - 1; j >= 0; j--) {\n            if (types[j] === \"WS\") {\n              levels[j] = _dir;\n            } else {\n              break;\n            }\n          }\n        }\n      }\n    };\n\n    var _invertString = function(text, sourceToTargetMap, levels) {\n      var charArray = text.split(\"\");\n      if (levels) {\n        _computeLevels(charArray, levels, { hiLevel: _dir });\n      }\n      charArray.reverse();\n      sourceToTargetMap && sourceToTargetMap.reverse();\n      return charArray.join(\"\");\n    };\n\n    // For reference see 3.3 in http://unicode.org/reports/tr9/\n    //\n    var _computeLevels = function(chars, levels, params) {\n      var action,\n        condition,\n        i,\n        index,\n        newLevel,\n        prevState,\n        condPos = -1,\n        len = chars.length,\n        newState = 0,\n        resolvedTypes = [],\n        stateTable = _dir ? _STATE_TABLE_RTL : _STATE_TABLE_LTR,\n        types = [];\n\n      _lastArabic = false;\n      _hasUbatAl = false;\n      _hasUbatB = false;\n      _hasUbatS = false;\n      for (i = 0; i < len; i++) {\n        types[i] = _getCharType(chars[i]);\n      }\n      for (index = 0; index < len; index++) {\n        prevState = newState;\n        resolvedTypes[index] = _resolveCharType(\n          chars,\n          types,\n          resolvedTypes,\n          index\n        );\n        newState = stateTable[prevState][_TYPE_NAMES_MAP[resolvedTypes[index]]];\n        action = newState & 0xf0;\n        newState &= 0x0f;\n        levels[index] = newLevel = stateTable[newState][5];\n        if (action > 0) {\n          if (action === 0x10) {\n            for (i = condPos; i < index; i++) {\n              levels[i] = 1;\n            }\n            condPos = -1;\n          } else {\n            condPos = -1;\n          }\n        }\n        condition = stateTable[newState][6];\n        if (condition) {\n          if (condPos === -1) {\n            condPos = index;\n          }\n        } else {\n          if (condPos > -1) {\n            for (i = condPos; i < index; i++) {\n              levels[i] = newLevel;\n            }\n            condPos = -1;\n          }\n        }\n        if (types[index] === \"B\") {\n          levels[index] = 0;\n        }\n        params.hiLevel |= newLevel;\n      }\n      if (_hasUbatS) {\n        _handleUbatS(types, levels, len);\n      }\n    };\n\n    // for reference see 3.4 in http://unicode.org/reports/tr9/\n    //\n    var _invertByLevel = function(\n      level,\n      charArray,\n      sourceToTargetMap,\n      levels,\n      params\n    ) {\n      if (params.hiLevel < level) {\n        return;\n      }\n      if (level === 1 && _dir === DIR_RTL && !_hasUbatB) {\n        charArray.reverse();\n        sourceToTargetMap && sourceToTargetMap.reverse();\n        return;\n      }\n      var ch,\n        high,\n        end,\n        low,\n        len = charArray.length,\n        start = 0;\n\n      while (start < len) {\n        if (levels[start] >= level) {\n          end = start + 1;\n          while (end < len && levels[end] >= level) {\n            end++;\n          }\n          for (low = start, high = end - 1; low < high; low++, high--) {\n            ch = charArray[low];\n            charArray[low] = charArray[high];\n            charArray[high] = ch;\n            if (sourceToTargetMap) {\n              ch = sourceToTargetMap[low];\n              sourceToTargetMap[low] = sourceToTargetMap[high];\n              sourceToTargetMap[high] = ch;\n            }\n          }\n          start = end;\n        }\n        start++;\n      }\n    };\n\n    // for reference see 7 & BD16 in http://unicode.org/reports/tr9/\n    //\n    var _symmetricSwap = function(charArray, levels, params) {\n      if (params.hiLevel !== 0 && _isSymmetricSwapping) {\n        for (var i = 0, index; i < charArray.length; i++) {\n          if (levels[i] === 1) {\n            index = _SWAP_TABLE.indexOf(charArray[i]);\n            if (index >= 0) {\n              charArray[i] = _SWAP_TABLE[index + 1];\n            }\n          }\n        }\n      }\n    };\n\n    var _reorder = function(text, sourceToTargetMap, levels) {\n      var charArray = text.split(\"\"),\n        params = { hiLevel: _dir };\n\n      if (!levels) {\n        levels = [];\n      }\n      _computeLevels(charArray, levels, params);\n      _symmetricSwap(charArray, levels, params);\n      _invertByLevel(DIR_RTL + 1, charArray, sourceToTargetMap, levels, params);\n      _invertByLevel(DIR_RTL, charArray, sourceToTargetMap, levels, params);\n      return charArray.join(\"\");\n    };\n\n    // doBidiReorder( text, sourceToTargetMap, levels )\n    // Performs Bidi reordering by implementing Unicode Bidi algorithm.\n    // Returns reordered string\n    // @text [String]:\n    // - input string to be reordered, this is input parameter\n    // $sourceToTargetMap [Array] (optional)\n    // - resultant mapping between input and output strings, this is output parameter\n    // $levels [Array] (optional)\n    // - array of calculated Bidi levels, , this is output parameter\n    this.__bidiEngine__.doBidiReorder = function(\n      text,\n      sourceToTargetMap,\n      levels\n    ) {\n      _init(text, sourceToTargetMap);\n      if (!_isInVisual && _isOutVisual && !_isOutRtl) {\n        // LLTR->VLTR, LRTL->VLTR\n        _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n        text = _reorder(text, sourceToTargetMap, levels);\n      } else if (_isInVisual && _isOutVisual && _isInRtl ^ _isOutRtl) {\n        // VRTL->VLTR, VLTR->VRTL\n        _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n        text = _invertString(text, sourceToTargetMap, levels);\n      } else if (!_isInVisual && _isOutVisual && _isOutRtl) {\n        // LLTR->VRTL, LRTL->VRTL\n        _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n        text = _reorder(text, sourceToTargetMap, levels);\n        text = _invertString(text, sourceToTargetMap);\n      } else if (_isInVisual && !_isInRtl && !_isOutVisual && !_isOutRtl) {\n        // VLTR->LLTR\n        _dir = DIR_LTR;\n        text = _reorder(text, sourceToTargetMap, levels);\n      } else if (_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n        // VLTR->LRTL, VRTL->LLTR\n        text = _invertString(text, sourceToTargetMap);\n        if (_isInRtl) {\n          //LLTR -> VLTR\n          _dir = DIR_LTR;\n          text = _reorder(text, sourceToTargetMap, levels);\n        } else {\n          //LRTL -> VRTL\n          _dir = DIR_RTL;\n          text = _reorder(text, sourceToTargetMap, levels);\n          text = _invertString(text, sourceToTargetMap);\n        }\n      } else if (_isInVisual && _isInRtl && !_isOutVisual && _isOutRtl) {\n        //  VRTL->LRTL\n        _dir = DIR_RTL;\n        text = _reorder(text, sourceToTargetMap, levels);\n        text = _invertString(text, sourceToTargetMap);\n      } else if (!_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n        // LRTL->LLTR, LLTR->LRTL\n        var isSymmetricSwappingOrig = _isSymmetricSwapping;\n        if (_isInRtl) {\n          //LRTL->LLTR\n          _dir = DIR_RTL;\n          text = _reorder(text, sourceToTargetMap, levels);\n          _dir = DIR_LTR;\n          _isSymmetricSwapping = false;\n          text = _reorder(text, sourceToTargetMap, levels);\n          _isSymmetricSwapping = isSymmetricSwappingOrig;\n        } else {\n          //LLTR->LRTL\n          _dir = DIR_LTR;\n          text = _reorder(text, sourceToTargetMap, levels);\n          text = _invertString(text, sourceToTargetMap);\n          _dir = DIR_RTL;\n          _isSymmetricSwapping = false;\n          text = _reorder(text, sourceToTargetMap, levels);\n          _isSymmetricSwapping = isSymmetricSwappingOrig;\n          text = _invertString(text, sourceToTargetMap);\n        }\n      }\n      return text;\n    };\n\n    /**\n     * @name setOptions( options )\n     * @function\n     * Sets options for Bidi conversion\n     * @param {Object}:\n     * - isInputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n     * - isInputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong character of input string)\n     * - isOutputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n     * - isOutputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong characterof input string)\n     * - isSymmetricSwapping {boolean} (defaults to false): allowed values true(needs symmetric swapping), false (no need in symmetric swapping),\n     */\n    this.__bidiEngine__.setOptions = function(options) {\n      if (options) {\n        _isInVisual = options.isInputVisual;\n        _isOutVisual = options.isOutputVisual;\n        _isInRtl = options.isInputRtl;\n        _isOutRtl = options.isOutputRtl;\n        _isSymmetricSwapping = options.isSymmetricSwapping;\n      }\n    };\n\n    this.__bidiEngine__.setOptions(options);\n    return this.__bidiEngine__;\n  };\n\n  var _bidiUnicodeTypes = bidiUnicodeTypes;\n\n  var bidiEngine = new jsPDF.__bidiEngine__({ isInputVisual: true });\n\n  var bidiEngineFunction = function(args) {\n    var text = args.text;\n    var x = args.x;\n    var y = args.y;\n    var options = args.options || {};\n    var mutex = args.mutex || {};\n    var lang = options.lang;\n    var tmpText = [];\n\n    options.isInputVisual =\n      typeof options.isInputVisual === \"boolean\" ? options.isInputVisual : true;\n    bidiEngine.setOptions(options);\n\n    if (Object.prototype.toString.call(text) === \"[object Array]\") {\n      var i = 0;\n      tmpText = [];\n      for (i = 0; i < text.length; i += 1) {\n        if (Object.prototype.toString.call(text[i]) === \"[object Array]\") {\n          tmpText.push([\n            bidiEngine.doBidiReorder(text[i][0]),\n            text[i][1],\n            text[i][2]\n          ]);\n        } else {\n          tmpText.push([bidiEngine.doBidiReorder(text[i])]);\n        }\n      }\n      args.text = tmpText;\n    } else {\n      args.text = bidiEngine.doBidiReorder(text);\n    }\n    bidiEngine.setOptions({ isInputVisual: true });\n  };\n\n  jsPDF.API.events.push([\"postProcessText\", bidiEngineFunction]);\n})(jsPDF);\n","/* eslint-disable no-control-regex */\n/************************************************\n * Title : custom font                          *\n * Start Data : 2017. 01. 22.                   *\n * Comment : TEXT API                           *\n ************************************************/\n\n/******************************\n * jsPDF extension API Design *\n * ****************************/\n\nimport { jsPDF } from \"../jspdf.js\";\n\njsPDF.API.TTFFont = (function() {\n  /************************************************************************/\n  /* function : open                                                       */\n  /* comment : Decode the encoded ttf content and create a TTFFont object. */\n  /************************************************************************/\n  TTFFont.open = function(file) {\n    return new TTFFont(file);\n  };\n  /***************************************************************/\n  /* function : TTFFont gernerator                               */\n  /* comment : Decode TTF contents are parsed, Data,             */\n  /* Subset object is created, and registerTTF function is called.*/\n  /***************************************************************/\n  function TTFFont(rawData) {\n    var data;\n    this.rawData = rawData;\n    data = this.contents = new Data(rawData);\n    this.contents.pos = 4;\n    if (data.readString(4) === \"ttcf\") {\n      throw new Error(\"TTCF not supported.\");\n    } else {\n      data.pos = 0;\n      this.parse();\n      this.subset = new Subset(this);\n      this.registerTTF();\n    }\n  }\n  /********************************************************/\n  /* function : parse                                     */\n  /* comment : TTF Parses the file contents by each table.*/\n  /********************************************************/\n  TTFFont.prototype.parse = function() {\n    this.directory = new Directory(this.contents);\n    this.head = new HeadTable(this);\n    this.name = new NameTable(this);\n    this.cmap = new CmapTable(this);\n    this.toUnicode = {};\n    this.hhea = new HheaTable(this);\n    this.maxp = new MaxpTable(this);\n    this.hmtx = new HmtxTable(this);\n    this.post = new PostTable(this);\n    this.os2 = new OS2Table(this);\n    this.loca = new LocaTable(this);\n    this.glyf = new GlyfTable(this);\n    this.ascender =\n      (this.os2.exists && this.os2.ascender) || this.hhea.ascender;\n    this.decender =\n      (this.os2.exists && this.os2.decender) || this.hhea.decender;\n    this.lineGap = (this.os2.exists && this.os2.lineGap) || this.hhea.lineGap;\n    return (this.bbox = [\n      this.head.xMin,\n      this.head.yMin,\n      this.head.xMax,\n      this.head.yMax\n    ]);\n  };\n  /***************************************************************/\n  /* function : registerTTF                                      */\n  /* comment : Get the value to assign pdf font descriptors.     */\n  /***************************************************************/\n  TTFFont.prototype.registerTTF = function() {\n    var e, hi, low, raw, _ref;\n    this.scaleFactor = 1000.0 / this.head.unitsPerEm;\n    this.bbox = function() {\n      var _i, _len, _ref, _results;\n      _ref = this.bbox;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        e = _ref[_i];\n        _results.push(Math.round(e * this.scaleFactor));\n      }\n      return _results;\n    }.call(this);\n    this.stemV = 0;\n    if (this.post.exists) {\n      raw = this.post.italic_angle;\n      hi = raw >> 16;\n      low = raw & 0xff;\n      if ((hi & 0x8000) !== 0) {\n        hi = -((hi ^ 0xffff) + 1);\n      }\n      this.italicAngle = +(\"\" + hi + \".\" + low);\n    } else {\n      this.italicAngle = 0;\n    }\n    this.ascender = Math.round(this.ascender * this.scaleFactor);\n    this.decender = Math.round(this.decender * this.scaleFactor);\n    this.lineGap = Math.round(this.lineGap * this.scaleFactor);\n    this.capHeight = (this.os2.exists && this.os2.capHeight) || this.ascender;\n    this.xHeight = (this.os2.exists && this.os2.xHeight) || 0;\n    this.familyClass = ((this.os2.exists && this.os2.familyClass) || 0) >> 8;\n    this.isSerif =\n      (_ref = this.familyClass) === 1 ||\n      _ref === 2 ||\n      _ref === 3 ||\n      _ref === 4 ||\n      _ref === 5 ||\n      _ref === 7;\n    this.isScript = this.familyClass === 10;\n    this.flags = 0;\n    if (this.post.isFixedPitch) {\n      this.flags |= 1 << 0;\n    }\n    if (this.isSerif) {\n      this.flags |= 1 << 1;\n    }\n    if (this.isScript) {\n      this.flags |= 1 << 3;\n    }\n    if (this.italicAngle !== 0) {\n      this.flags |= 1 << 6;\n    }\n    this.flags |= 1 << 5;\n    if (!this.cmap.unicode) {\n      throw new Error(\"No unicode cmap for font\");\n    }\n  };\n  TTFFont.prototype.characterToGlyph = function(character) {\n    var _ref;\n    return (\n      ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) ||\n      0\n    );\n  };\n  TTFFont.prototype.widthOfGlyph = function(glyph) {\n    var scale;\n    scale = 1000.0 / this.head.unitsPerEm;\n    return this.hmtx.forGlyph(glyph).advance * scale;\n  };\n  TTFFont.prototype.widthOfString = function(string, size, charSpace) {\n    var charCode, i, scale, width, _ref;\n    string = \"\" + string;\n    width = 0;\n    for (\n      i = 0, _ref = string.length;\n      0 <= _ref ? i < _ref : i > _ref;\n      i = 0 <= _ref ? ++i : --i\n    ) {\n      charCode = string.charCodeAt(i);\n      width +=\n        this.widthOfGlyph(this.characterToGlyph(charCode)) +\n          charSpace * (1000 / size) || 0;\n    }\n    scale = size / 1000;\n    return width * scale;\n  };\n  TTFFont.prototype.lineHeight = function(size, includeGap) {\n    var gap;\n    if (includeGap == null) {\n      includeGap = false;\n    }\n    gap = includeGap ? this.lineGap : 0;\n    return ((this.ascender + gap - this.decender) / 1000) * size;\n  };\n  return TTFFont;\n})();\n\n/************************************************************************************************/\n/* function : Data                                                                              */\n/* comment : The ttf data decoded and stored in an array is read and written to the Data object.*/\n/************************************************************************************************/\nvar Data = (function() {\n  function Data(data) {\n    this.data = data != null ? data : [];\n    this.pos = 0;\n    this.length = this.data.length;\n  }\n  Data.prototype.readByte = function() {\n    return this.data[this.pos++];\n  };\n  Data.prototype.writeByte = function(byte) {\n    return (this.data[this.pos++] = byte);\n  };\n  Data.prototype.readUInt32 = function() {\n    var b1, b2, b3, b4;\n    b1 = this.readByte() * 0x1000000;\n    b2 = this.readByte() << 16;\n    b3 = this.readByte() << 8;\n    b4 = this.readByte();\n    return b1 + b2 + b3 + b4;\n  };\n  Data.prototype.writeUInt32 = function(val) {\n    this.writeByte((val >>> 24) & 0xff);\n    this.writeByte((val >> 16) & 0xff);\n    this.writeByte((val >> 8) & 0xff);\n    return this.writeByte(val & 0xff);\n  };\n  Data.prototype.readInt32 = function() {\n    var int;\n    int = this.readUInt32();\n    if (int >= 0x80000000) {\n      return int - 0x100000000;\n    } else {\n      return int;\n    }\n  };\n  Data.prototype.writeInt32 = function(val) {\n    if (val < 0) {\n      val += 0x100000000;\n    }\n    return this.writeUInt32(val);\n  };\n  Data.prototype.readUInt16 = function() {\n    var b1, b2;\n    b1 = this.readByte() << 8;\n    b2 = this.readByte();\n    return b1 | b2;\n  };\n  Data.prototype.writeUInt16 = function(val) {\n    this.writeByte((val >> 8) & 0xff);\n    return this.writeByte(val & 0xff);\n  };\n  Data.prototype.readInt16 = function() {\n    var int;\n    int = this.readUInt16();\n    if (int >= 0x8000) {\n      return int - 0x10000;\n    } else {\n      return int;\n    }\n  };\n  Data.prototype.writeInt16 = function(val) {\n    if (val < 0) {\n      val += 0x10000;\n    }\n    return this.writeUInt16(val);\n  };\n  Data.prototype.readString = function(length) {\n    var i, ret;\n    ret = [];\n    for (\n      i = 0;\n      0 <= length ? i < length : i > length;\n      i = 0 <= length ? ++i : --i\n    ) {\n      ret[i] = String.fromCharCode(this.readByte());\n    }\n    return ret.join(\"\");\n  };\n  Data.prototype.writeString = function(val) {\n    var i, _ref, _results;\n    _results = [];\n    for (\n      i = 0, _ref = val.length;\n      0 <= _ref ? i < _ref : i > _ref;\n      i = 0 <= _ref ? ++i : --i\n    ) {\n      _results.push(this.writeByte(val.charCodeAt(i)));\n    }\n    return _results;\n  };\n  /*Data.prototype.stringAt = function (pos, length) {\n            this.pos = pos;\n            return this.readString(length);\n        };*/\n  Data.prototype.readShort = function() {\n    return this.readInt16();\n  };\n  Data.prototype.writeShort = function(val) {\n    return this.writeInt16(val);\n  };\n  Data.prototype.readLongLong = function() {\n    var b1, b2, b3, b4, b5, b6, b7, b8;\n    b1 = this.readByte();\n    b2 = this.readByte();\n    b3 = this.readByte();\n    b4 = this.readByte();\n    b5 = this.readByte();\n    b6 = this.readByte();\n    b7 = this.readByte();\n    b8 = this.readByte();\n    if (b1 & 0x80) {\n      return (\n        ((b1 ^ 0xff) * 0x100000000000000 +\n          (b2 ^ 0xff) * 0x1000000000000 +\n          (b3 ^ 0xff) * 0x10000000000 +\n          (b4 ^ 0xff) * 0x100000000 +\n          (b5 ^ 0xff) * 0x1000000 +\n          (b6 ^ 0xff) * 0x10000 +\n          (b7 ^ 0xff) * 0x100 +\n          (b8 ^ 0xff) +\n          1) *\n        -1\n      );\n    }\n    return (\n      b1 * 0x100000000000000 +\n      b2 * 0x1000000000000 +\n      b3 * 0x10000000000 +\n      b4 * 0x100000000 +\n      b5 * 0x1000000 +\n      b6 * 0x10000 +\n      b7 * 0x100 +\n      b8\n    );\n  };\n  Data.prototype.writeLongLong = function(val) {\n    var high, low;\n    high = Math.floor(val / 0x100000000);\n    low = val & 0xffffffff;\n    this.writeByte((high >> 24) & 0xff);\n    this.writeByte((high >> 16) & 0xff);\n    this.writeByte((high >> 8) & 0xff);\n    this.writeByte(high & 0xff);\n    this.writeByte((low >> 24) & 0xff);\n    this.writeByte((low >> 16) & 0xff);\n    this.writeByte((low >> 8) & 0xff);\n    return this.writeByte(low & 0xff);\n  };\n  Data.prototype.readInt = function() {\n    return this.readInt32();\n  };\n  Data.prototype.writeInt = function(val) {\n    return this.writeInt32(val);\n  };\n  /*Data.prototype.slice = function (start, end) {\n            return this.data.slice(start, end);\n        };*/\n  Data.prototype.read = function(bytes) {\n    var buf, i;\n    buf = [];\n    for (\n      i = 0;\n      0 <= bytes ? i < bytes : i > bytes;\n      i = 0 <= bytes ? ++i : --i\n    ) {\n      buf.push(this.readByte());\n    }\n    return buf;\n  };\n  Data.prototype.write = function(bytes) {\n    var byte, i, _len, _results;\n    _results = [];\n    for (i = 0, _len = bytes.length; i < _len; i++) {\n      byte = bytes[i];\n      _results.push(this.writeByte(byte));\n    }\n    return _results;\n  };\n  return Data;\n})();\n\nvar Directory = (function() {\n  var checksum;\n\n  /*****************************************************************************************************/\n  /* function : Directory generator                                                                    */\n  /* comment : Initialize the offset, tag, length, and checksum for each table for the font to be used.*/\n  /*****************************************************************************************************/\n  function Directory(data) {\n    var entry, i, _ref;\n    this.scalarType = data.readInt();\n    this.tableCount = data.readShort();\n    this.searchRange = data.readShort();\n    this.entrySelector = data.readShort();\n    this.rangeShift = data.readShort();\n    this.tables = {};\n    for (\n      i = 0, _ref = this.tableCount;\n      0 <= _ref ? i < _ref : i > _ref;\n      i = 0 <= _ref ? ++i : --i\n    ) {\n      entry = {\n        tag: data.readString(4),\n        checksum: data.readInt(),\n        offset: data.readInt(),\n        length: data.readInt()\n      };\n      this.tables[entry.tag] = entry;\n    }\n  }\n  /********************************************************************************************************/\n  /* function : encode                                                                                    */\n  /* comment : It encodes and stores the font table object and information used for the directory object. */\n  /********************************************************************************************************/\n  Directory.prototype.encode = function(tables) {\n    var adjustment,\n      directory,\n      directoryLength,\n      entrySelector,\n      headOffset,\n      log2,\n      offset,\n      rangeShift,\n      searchRange,\n      sum,\n      table,\n      tableCount,\n      tableData,\n      tag;\n    tableCount = Object.keys(tables).length;\n    log2 = Math.log(2);\n    searchRange = Math.floor(Math.log(tableCount) / log2) * 16;\n    entrySelector = Math.floor(searchRange / log2);\n    rangeShift = tableCount * 16 - searchRange;\n    directory = new Data();\n    directory.writeInt(this.scalarType);\n    directory.writeShort(tableCount);\n    directory.writeShort(searchRange);\n    directory.writeShort(entrySelector);\n    directory.writeShort(rangeShift);\n    directoryLength = tableCount * 16;\n    offset = directory.pos + directoryLength;\n    headOffset = null;\n    tableData = [];\n    for (tag in tables) {\n      table = tables[tag];\n      directory.writeString(tag);\n      directory.writeInt(checksum(table));\n      directory.writeInt(offset);\n      directory.writeInt(table.length);\n      tableData = tableData.concat(table);\n      if (tag === \"head\") {\n        headOffset = offset;\n      }\n      offset += table.length;\n      while (offset % 4) {\n        tableData.push(0);\n        offset++;\n      }\n    }\n    directory.write(tableData);\n    sum = checksum(directory.data);\n    adjustment = 0xb1b0afba - sum;\n    directory.pos = headOffset + 8;\n    directory.writeUInt32(adjustment);\n    return directory.data;\n  };\n  /***************************************************************/\n  /* function : checksum                                         */\n  /* comment : Duplicate the table for the tag.                  */\n  /***************************************************************/\n  checksum = function(data) {\n    var i, sum, tmp, _ref;\n    data = __slice.call(data);\n    while (data.length % 4) {\n      data.push(0);\n    }\n    tmp = new Data(data);\n    sum = 0;\n    for (i = 0, _ref = data.length; i < _ref; i = i += 4) {\n      sum += tmp.readUInt32();\n    }\n    return sum & 0xffffffff;\n  };\n  return Directory;\n})();\n\nvar Table,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) {\n    for (var key in parent) {\n      if (__hasProp.call(parent, key)) child[key] = parent[key];\n    }\n\n    function ctor() {\n      this.constructor = child;\n    }\n    ctor.prototype = parent.prototype;\n    child.prototype = new ctor();\n    child.__super__ = parent.prototype;\n    return child;\n  };\n\n/***************************************************************/\n/* function : Table                                            */\n/* comment : Save info for each table, and parse the table.    */\n/***************************************************************/\nTable = (function() {\n  function Table(file) {\n    var info;\n    this.file = file;\n    info = this.file.directory.tables[this.tag];\n    this.exists = !!info;\n    if (info) {\n      (this.offset = info.offset), (this.length = info.length);\n      this.parse(this.file.contents);\n    }\n  }\n  Table.prototype.parse = function() {};\n  Table.prototype.encode = function() {};\n  Table.prototype.raw = function() {\n    if (!this.exists) {\n      return null;\n    }\n    this.file.contents.pos = this.offset;\n    return this.file.contents.read(this.length);\n  };\n  return Table;\n})();\n\nvar HeadTable = (function(_super) {\n  __extends(HeadTable, _super);\n\n  function HeadTable() {\n    return HeadTable.__super__.constructor.apply(this, arguments);\n  }\n  HeadTable.prototype.tag = \"head\";\n  HeadTable.prototype.parse = function(data) {\n    data.pos = this.offset;\n    this.version = data.readInt();\n    this.revision = data.readInt();\n    this.checkSumAdjustment = data.readInt();\n    this.magicNumber = data.readInt();\n    this.flags = data.readShort();\n    this.unitsPerEm = data.readShort();\n    this.created = data.readLongLong();\n    this.modified = data.readLongLong();\n    this.xMin = data.readShort();\n    this.yMin = data.readShort();\n    this.xMax = data.readShort();\n    this.yMax = data.readShort();\n    this.macStyle = data.readShort();\n    this.lowestRecPPEM = data.readShort();\n    this.fontDirectionHint = data.readShort();\n    this.indexToLocFormat = data.readShort();\n    return (this.glyphDataFormat = data.readShort());\n  };\n  HeadTable.prototype.encode = function(indexToLocFormat) {\n    var table;\n    table = new Data();\n    table.writeInt(this.version);\n    table.writeInt(this.revision);\n    table.writeInt(this.checkSumAdjustment);\n    table.writeInt(this.magicNumber);\n    table.writeShort(this.flags);\n    table.writeShort(this.unitsPerEm);\n    table.writeLongLong(this.created);\n    table.writeLongLong(this.modified);\n    table.writeShort(this.xMin);\n    table.writeShort(this.yMin);\n    table.writeShort(this.xMax);\n    table.writeShort(this.yMax);\n    table.writeShort(this.macStyle);\n    table.writeShort(this.lowestRecPPEM);\n    table.writeShort(this.fontDirectionHint);\n    table.writeShort(indexToLocFormat);\n    table.writeShort(this.glyphDataFormat);\n    return table.data;\n  };\n  return HeadTable;\n})(Table);\n\n/************************************************************************************/\n/* function : CmapEntry                                                             */\n/* comment : Cmap Initializes and encodes object information (required by pdf spec).*/\n/************************************************************************************/\nvar CmapEntry = (function() {\n  function CmapEntry(data, offset) {\n    var code,\n      count,\n      endCode,\n      glyphId,\n      glyphIds,\n      i,\n      idDelta,\n      idRangeOffset,\n      index,\n      saveOffset,\n      segCount,\n      segCountX2,\n      start,\n      startCode,\n      tail,\n      _j,\n      _k,\n      _len;\n    this.platformID = data.readUInt16();\n    this.encodingID = data.readShort();\n    this.offset = offset + data.readInt();\n    saveOffset = data.pos;\n    data.pos = this.offset;\n    this.format = data.readUInt16();\n    this.length = data.readUInt16();\n    this.language = data.readUInt16();\n    this.isUnicode =\n      (this.platformID === 3 && this.encodingID === 1 && this.format === 4) ||\n      (this.platformID === 0 && this.format === 4);\n    this.codeMap = {};\n    switch (this.format) {\n      case 0:\n        for (i = 0; i < 256; ++i) {\n          this.codeMap[i] = data.readByte();\n        }\n        break;\n      case 4:\n        segCountX2 = data.readUInt16();\n        segCount = segCountX2 / 2;\n        data.pos += 6;\n        endCode = (function() {\n          var _j, _results;\n          _results = [];\n          for (\n            i = _j = 0;\n            0 <= segCount ? _j < segCount : _j > segCount;\n            i = 0 <= segCount ? ++_j : --_j\n          ) {\n            _results.push(data.readUInt16());\n          }\n          return _results;\n        })();\n        data.pos += 2;\n        startCode = (function() {\n          var _j, _results;\n          _results = [];\n          for (\n            i = _j = 0;\n            0 <= segCount ? _j < segCount : _j > segCount;\n            i = 0 <= segCount ? ++_j : --_j\n          ) {\n            _results.push(data.readUInt16());\n          }\n          return _results;\n        })();\n        idDelta = (function() {\n          var _j, _results;\n          _results = [];\n          for (\n            i = _j = 0;\n            0 <= segCount ? _j < segCount : _j > segCount;\n            i = 0 <= segCount ? ++_j : --_j\n          ) {\n            _results.push(data.readUInt16());\n          }\n          return _results;\n        })();\n        idRangeOffset = (function() {\n          var _j, _results;\n          _results = [];\n          for (\n            i = _j = 0;\n            0 <= segCount ? _j < segCount : _j > segCount;\n            i = 0 <= segCount ? ++_j : --_j\n          ) {\n            _results.push(data.readUInt16());\n          }\n          return _results;\n        })();\n        count = (this.length - data.pos + this.offset) / 2;\n        glyphIds = (function() {\n          var _j, _results;\n          _results = [];\n          for (\n            i = _j = 0;\n            0 <= count ? _j < count : _j > count;\n            i = 0 <= count ? ++_j : --_j\n          ) {\n            _results.push(data.readUInt16());\n          }\n          return _results;\n        })();\n        for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) {\n          tail = endCode[i];\n          start = startCode[i];\n          for (\n            code = _k = start;\n            start <= tail ? _k <= tail : _k >= tail;\n            code = start <= tail ? ++_k : --_k\n          ) {\n            if (idRangeOffset[i] === 0) {\n              glyphId = code + idDelta[i];\n            } else {\n              index = idRangeOffset[i] / 2 + (code - start) - (segCount - i);\n              glyphId = glyphIds[index] || 0;\n              if (glyphId !== 0) {\n                glyphId += idDelta[i];\n              }\n            }\n            this.codeMap[code] = glyphId & 0xffff;\n          }\n        }\n    }\n    data.pos = saveOffset;\n  }\n  CmapEntry.encode = function(charmap, encoding) {\n    var charMap,\n      code,\n      codeMap,\n      codes,\n      delta,\n      deltas,\n      diff,\n      endCode,\n      endCodes,\n      entrySelector,\n      glyphIDs,\n      i,\n      id,\n      indexes,\n      last,\n      map,\n      nextID,\n      offset,\n      old,\n      rangeOffsets,\n      rangeShift,\n      searchRange,\n      segCount,\n      segCountX2,\n      startCode,\n      startCodes,\n      startGlyph,\n      subtable,\n      _i,\n      _j,\n      _k,\n      _l,\n      _len,\n      _len1,\n      _len2,\n      _len3,\n      _len4,\n      _len5,\n      _len6,\n      _len7,\n      _m,\n      _n,\n      _name,\n      _o,\n      _p,\n      _q;\n    subtable = new Data();\n    codes = Object.keys(charmap).sort(function(a, b) {\n      return a - b;\n    });\n    switch (encoding) {\n      case \"macroman\":\n        id = 0;\n        indexes = (function() {\n          var _results = [];\n          for (i = 0; i < 256; ++i) {\n            _results.push(0);\n          }\n          return _results;\n        })();\n        map = {\n          0: 0\n        };\n        codeMap = {};\n        for (_i = 0, _len = codes.length; _i < _len; _i++) {\n          code = codes[_i];\n          if (map[(_name = charmap[code])] == null) {\n            map[_name] = ++id;\n          }\n          codeMap[code] = {\n            old: charmap[code],\n            new: map[charmap[code]]\n          };\n          indexes[code] = map[charmap[code]];\n        }\n        subtable.writeUInt16(1);\n        subtable.writeUInt16(0);\n        subtable.writeUInt32(12);\n        subtable.writeUInt16(0);\n        subtable.writeUInt16(262);\n        subtable.writeUInt16(0);\n        subtable.write(indexes);\n        return {\n          charMap: codeMap,\n          subtable: subtable.data,\n          maxGlyphID: id + 1\n        };\n      case \"unicode\":\n        startCodes = [];\n        endCodes = [];\n        nextID = 0;\n        map = {};\n        charMap = {};\n        last = diff = null;\n        for (_j = 0, _len1 = codes.length; _j < _len1; _j++) {\n          code = codes[_j];\n          old = charmap[code];\n          if (map[old] == null) {\n            map[old] = ++nextID;\n          }\n          charMap[code] = {\n            old: old,\n            new: map[old]\n          };\n          delta = map[old] - code;\n          if (last == null || delta !== diff) {\n            if (last) {\n              endCodes.push(last);\n            }\n            startCodes.push(code);\n            diff = delta;\n          }\n          last = code;\n        }\n        if (last) {\n          endCodes.push(last);\n        }\n        endCodes.push(0xffff);\n        startCodes.push(0xffff);\n        segCount = startCodes.length;\n        segCountX2 = segCount * 2;\n        searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2);\n        entrySelector = Math.log(searchRange / 2) / Math.LN2;\n        rangeShift = 2 * segCount - searchRange;\n        deltas = [];\n        rangeOffsets = [];\n        glyphIDs = [];\n        for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) {\n          startCode = startCodes[i];\n          endCode = endCodes[i];\n          if (startCode === 0xffff) {\n            deltas.push(0);\n            rangeOffsets.push(0);\n            break;\n          }\n          startGlyph = charMap[startCode][\"new\"];\n          if (startCode - startGlyph >= 0x8000) {\n            deltas.push(0);\n            rangeOffsets.push(2 * (glyphIDs.length + segCount - i));\n            for (\n              code = _l = startCode;\n              startCode <= endCode ? _l <= endCode : _l >= endCode;\n              code = startCode <= endCode ? ++_l : --_l\n            ) {\n              glyphIDs.push(charMap[code][\"new\"]);\n            }\n          } else {\n            deltas.push(startGlyph - startCode);\n            rangeOffsets.push(0);\n          }\n        }\n        subtable.writeUInt16(3);\n        subtable.writeUInt16(1);\n        subtable.writeUInt32(12);\n        subtable.writeUInt16(4);\n        subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2);\n        subtable.writeUInt16(0);\n        subtable.writeUInt16(segCountX2);\n        subtable.writeUInt16(searchRange);\n        subtable.writeUInt16(entrySelector);\n        subtable.writeUInt16(rangeShift);\n        for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) {\n          code = endCodes[_m];\n          subtable.writeUInt16(code);\n        }\n        subtable.writeUInt16(0);\n        for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) {\n          code = startCodes[_n];\n          subtable.writeUInt16(code);\n        }\n        for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) {\n          delta = deltas[_o];\n          subtable.writeUInt16(delta);\n        }\n        for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) {\n          offset = rangeOffsets[_p];\n          subtable.writeUInt16(offset);\n        }\n        for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) {\n          id = glyphIDs[_q];\n          subtable.writeUInt16(id);\n        }\n        return {\n          charMap: charMap,\n          subtable: subtable.data,\n          maxGlyphID: nextID + 1\n        };\n    }\n  };\n  return CmapEntry;\n})();\n\nvar CmapTable = (function(_super) {\n  __extends(CmapTable, _super);\n\n  function CmapTable() {\n    return CmapTable.__super__.constructor.apply(this, arguments);\n  }\n  CmapTable.prototype.tag = \"cmap\";\n  CmapTable.prototype.parse = function(data) {\n    var entry, i, tableCount;\n    data.pos = this.offset;\n    this.version = data.readUInt16();\n    tableCount = data.readUInt16();\n    this.tables = [];\n    this.unicode = null;\n    for (\n      i = 0;\n      0 <= tableCount ? i < tableCount : i > tableCount;\n      i = 0 <= tableCount ? ++i : --i\n    ) {\n      entry = new CmapEntry(data, this.offset);\n      this.tables.push(entry);\n      if (entry.isUnicode) {\n        if (this.unicode == null) {\n          this.unicode = entry;\n        }\n      }\n    }\n    return true;\n  };\n  /*************************************************************************/\n  /* function : encode                                                     */\n  /* comment : Encode the cmap table corresponding to the input character. */\n  /*************************************************************************/\n  CmapTable.encode = function(charmap, encoding) {\n    var result, table;\n    if (encoding == null) {\n      encoding = \"macroman\";\n    }\n    result = CmapEntry.encode(charmap, encoding);\n    table = new Data();\n    table.writeUInt16(0);\n    table.writeUInt16(1);\n    result.table = table.data.concat(result.subtable);\n    return result;\n  };\n  return CmapTable;\n})(Table);\n\nvar HheaTable = (function(_super) {\n  __extends(HheaTable, _super);\n\n  function HheaTable() {\n    return HheaTable.__super__.constructor.apply(this, arguments);\n  }\n  HheaTable.prototype.tag = \"hhea\";\n  HheaTable.prototype.parse = function(data) {\n    data.pos = this.offset;\n    this.version = data.readInt();\n    this.ascender = data.readShort();\n    this.decender = data.readShort();\n    this.lineGap = data.readShort();\n    this.advanceWidthMax = data.readShort();\n    this.minLeftSideBearing = data.readShort();\n    this.minRightSideBearing = data.readShort();\n    this.xMaxExtent = data.readShort();\n    this.caretSlopeRise = data.readShort();\n    this.caretSlopeRun = data.readShort();\n    this.caretOffset = data.readShort();\n    data.pos += 4 * 2;\n    this.metricDataFormat = data.readShort();\n    return (this.numberOfMetrics = data.readUInt16());\n  };\n  /*HheaTable.prototype.encode = function (ids) {\n            var i, table, _i, _ref;\n            table = new Data;\n            table.writeInt(this.version);\n            table.writeShort(this.ascender);\n            table.writeShort(this.decender);\n            table.writeShort(this.lineGap);\n            table.writeShort(this.advanceWidthMax);\n            table.writeShort(this.minLeftSideBearing);\n            table.writeShort(this.minRightSideBearing);\n            table.writeShort(this.xMaxExtent);\n            table.writeShort(this.caretSlopeRise);\n            table.writeShort(this.caretSlopeRun);\n            table.writeShort(this.caretOffset);\n            for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n                table.writeByte(0);\n            }\n            table.writeShort(this.metricDataFormat);\n            table.writeUInt16(ids.length);\n            return table.data;\n        };*/\n  return HheaTable;\n})(Table);\n\nvar OS2Table = (function(_super) {\n  __extends(OS2Table, _super);\n\n  function OS2Table() {\n    return OS2Table.__super__.constructor.apply(this, arguments);\n  }\n  OS2Table.prototype.tag = \"OS/2\";\n  OS2Table.prototype.parse = function(data) {\n    data.pos = this.offset;\n    this.version = data.readUInt16();\n    this.averageCharWidth = data.readShort();\n    this.weightClass = data.readUInt16();\n    this.widthClass = data.readUInt16();\n    this.type = data.readShort();\n    this.ySubscriptXSize = data.readShort();\n    this.ySubscriptYSize = data.readShort();\n    this.ySubscriptXOffset = data.readShort();\n    this.ySubscriptYOffset = data.readShort();\n    this.ySuperscriptXSize = data.readShort();\n    this.ySuperscriptYSize = data.readShort();\n    this.ySuperscriptXOffset = data.readShort();\n    this.ySuperscriptYOffset = data.readShort();\n    this.yStrikeoutSize = data.readShort();\n    this.yStrikeoutPosition = data.readShort();\n    this.familyClass = data.readShort();\n    this.panose = (function() {\n      var i, _results;\n      _results = [];\n      for (i = 0; i < 10; ++i) {\n        _results.push(data.readByte());\n      }\n      return _results;\n    })();\n    this.charRange = (function() {\n      var i, _results;\n      _results = [];\n      for (i = 0; i < 4; ++i) {\n        _results.push(data.readInt());\n      }\n      return _results;\n    })();\n    this.vendorID = data.readString(4);\n    this.selection = data.readShort();\n    this.firstCharIndex = data.readShort();\n    this.lastCharIndex = data.readShort();\n    if (this.version > 0) {\n      this.ascent = data.readShort();\n      this.descent = data.readShort();\n      this.lineGap = data.readShort();\n      this.winAscent = data.readShort();\n      this.winDescent = data.readShort();\n      this.codePageRange = (function() {\n        var i, _results;\n        _results = [];\n        for (i = 0; i < 2; i = ++i) {\n          _results.push(data.readInt());\n        }\n        return _results;\n      })();\n      if (this.version > 1) {\n        this.xHeight = data.readShort();\n        this.capHeight = data.readShort();\n        this.defaultChar = data.readShort();\n        this.breakChar = data.readShort();\n        return (this.maxContext = data.readShort());\n      }\n    }\n  };\n  /*OS2Table.prototype.encode = function () {\n            return this.raw();\n        };*/\n  return OS2Table;\n})(Table);\n\nvar PostTable = (function(_super) {\n  var POSTSCRIPT_GLYPHS;\n  __extends(PostTable, _super);\n\n  function PostTable() {\n    return PostTable.__super__.constructor.apply(this, arguments);\n  }\n  PostTable.prototype.tag = \"post\";\n  PostTable.prototype.parse = function(data) {\n    var length, numberOfGlyphs, _results;\n    data.pos = this.offset;\n    this.format = data.readInt();\n    this.italicAngle = data.readInt();\n    this.underlinePosition = data.readShort();\n    this.underlineThickness = data.readShort();\n    this.isFixedPitch = data.readInt();\n    this.minMemType42 = data.readInt();\n    this.maxMemType42 = data.readInt();\n    this.minMemType1 = data.readInt();\n    this.maxMemType1 = data.readInt();\n    switch (this.format) {\n      case 0x00010000:\n        break;\n      case 0x00020000:\n        numberOfGlyphs = data.readUInt16();\n        this.glyphNameIndex = [];\n        var i;\n        for (\n          i = 0;\n          0 <= numberOfGlyphs ? i < numberOfGlyphs : i > numberOfGlyphs;\n          i = 0 <= numberOfGlyphs ? ++i : --i\n        ) {\n          this.glyphNameIndex.push(data.readUInt16());\n        }\n        this.names = [];\n        _results = [];\n        while (data.pos < this.offset + this.length) {\n          length = data.readByte();\n          _results.push(this.names.push(data.readString(length)));\n        }\n        return _results;\n      case 0x00025000:\n        numberOfGlyphs = data.readUInt16();\n        return (this.offsets = data.read(numberOfGlyphs));\n      case 0x00030000:\n        break;\n      case 0x00040000:\n        return (this.map = function() {\n          var _j, _ref, _results1;\n          _results1 = [];\n          for (\n            i = _j = 0, _ref = this.file.maxp.numGlyphs;\n            0 <= _ref ? _j < _ref : _j > _ref;\n            i = 0 <= _ref ? ++_j : --_j\n          ) {\n            _results1.push(data.readUInt32());\n          }\n          return _results1;\n        }.call(this));\n    }\n  };\n  /*PostTable.prototype.glyphFor = function (code) {\n            var index;\n            switch (this.format) {\n            case 0x00010000:\n                return POSTSCRIPT_GLYPHS[code] || '.notdef';\n            case 0x00020000:\n                index = this.glyphNameIndex[code];\n                if (index <= 257) {\n                    return POSTSCRIPT_GLYPHS[index];\n                }\n                else {\n                    return this.names[index - 258] || '.notdef';\n                }\n                break;\n            case 0x00025000:\n                return POSTSCRIPT_GLYPHS[code + this.offsets[code]] || '.notdef';\n            case 0x00030000:\n                return '.notdef';\n            case 0x00040000:\n                return this.map[code] || 0xFFFF;\n            }\n        };*/\n  /*PostTable.prototype.encode = function (mapping) {\n            var id, index, indexes, position, post, raw, string, strings, table, _i, _j, _k, _len, _len1, _len2;\n            if (!this.exists) {\n                return null;\n            }\n            raw = this.raw();\n            if (this.format === 0x00030000) {\n                return raw;\n            }\n            table = new Data(raw.slice(0, 32));\n            table.writeUInt32(0x00020000);\n            table.pos = 32;\n            indexes = [];\n            strings = [];\n            for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n                id = mapping[_i];\n                post = this.glyphFor(id);\n                position = POSTSCRIPT_GLYPHS.indexOf(post);\n                if (position !== -1) {\n                    indexes.push(position);\n                }\n                else {\n                    indexes.push(257 + strings.length);\n                    strings.push(post);\n                }\n            }\n            table.writeUInt16(Object.keys(mapping).length);\n            for (_j = 0, _len1 = indexes.length; _j < _len1; _j++) {\n                index = indexes[_j];\n                table.writeUInt16(index);\n            }\n            for (_k = 0, _len2 = strings.length; _k < _len2; _k++) {\n                string = strings[_k];\n                table.writeByte(string.length);\n                table.writeString(string);\n            }\n            return table.data;\n        };*/\n  POSTSCRIPT_GLYPHS = \".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent\\nampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash\\nzero one two three four five six seven eight nine colon semicolon less equal greater\\nquestion at 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\\nbracketleft backslash bracketright asciicircum underscore grave\\na 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\\nbraceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis\\nUdieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave\\necircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve\\nocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent\\nsterling section bullet paragraph germandbls registered copyright trademark acute\\ndieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu\\npartialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash\\nquestiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft\\nguillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash\\nquotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis\\nfraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered\\nquotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis\\nEgrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute\\nUcircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla\\nhungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth\\neth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior\\nonehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla\\nCacute cacute Ccaron ccaron dcroat\".split(\n    /\\s+/g\n  );\n  return PostTable;\n})(Table);\n\n/*********************************************************************************************************/\n/* function : NameEntry                                                                                  */\n/* comment : Store copyright information, platformID, encodingID, and languageID in the NameEntry object.*/\n/*********************************************************************************************************/\nvar NameEntry = (function() {\n  function NameEntry(raw, entry) {\n    this.raw = raw;\n    this.length = raw.length;\n    this.platformID = entry.platformID;\n    this.encodingID = entry.encodingID;\n    this.languageID = entry.languageID;\n  }\n  return NameEntry;\n})();\n\nvar NameTable = (function(_super) {\n  var subsetTag;\n  __extends(NameTable, _super);\n\n  function NameTable() {\n    return NameTable.__super__.constructor.apply(this, arguments);\n  }\n  NameTable.prototype.tag = \"name\";\n  NameTable.prototype.parse = function(data) {\n    var count,\n      entries,\n      entry,\n      i,\n      name,\n      stringOffset,\n      strings,\n      text,\n      _j,\n      _len,\n      _name;\n    data.pos = this.offset;\n    data.readShort(); //format\n    count = data.readShort();\n    stringOffset = data.readShort();\n    entries = [];\n    for (\n      i = 0;\n      0 <= count ? i < count : i > count;\n      i = 0 <= count ? ++i : --i\n    ) {\n      entries.push({\n        platformID: data.readShort(),\n        encodingID: data.readShort(),\n        languageID: data.readShort(),\n        nameID: data.readShort(),\n        length: data.readShort(),\n        offset: this.offset + stringOffset + data.readShort()\n      });\n    }\n    strings = {};\n    for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) {\n      entry = entries[i];\n      data.pos = entry.offset;\n      text = data.readString(entry.length);\n      name = new NameEntry(text, entry);\n      if (strings[(_name = entry.nameID)] == null) {\n        strings[_name] = [];\n      }\n      strings[entry.nameID].push(name);\n    }\n    this.strings = strings;\n    this.copyright = strings[0];\n    this.fontFamily = strings[1];\n    this.fontSubfamily = strings[2];\n    this.uniqueSubfamily = strings[3];\n    this.fontName = strings[4];\n    this.version = strings[5];\n    try {\n      this.postscriptName = strings[6][0].raw.replace(\n        /[\\x00-\\x19\\x80-\\xff]/g,\n        \"\"\n      );\n    } catch (e) {\n      this.postscriptName = strings[4][0].raw.replace(\n        /[\\x00-\\x19\\x80-\\xff]/g,\n        \"\"\n      );\n    }\n    this.trademark = strings[7];\n    this.manufacturer = strings[8];\n    this.designer = strings[9];\n    this.description = strings[10];\n    this.vendorUrl = strings[11];\n    this.designerUrl = strings[12];\n    this.license = strings[13];\n    this.licenseUrl = strings[14];\n    this.preferredFamily = strings[15];\n    this.preferredSubfamily = strings[17];\n    this.compatibleFull = strings[18];\n    return (this.sampleText = strings[19]);\n  };\n  subsetTag = \"AAAAAA\";\n  /*NameTable.prototype.encode = function () {\n            var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref;\n            strings = {};\n            _ref = this.strings;\n            for (id in _ref) {\n                val = _ref[id];\n                strings[id] = val;\n            }\n            postscriptName = new NameEntry(\"\" + subsetTag + \"+\" + this.postscriptName, {\n                platformID: 1\n                , encodingID: 0\n                , languageID: 0\n            });\n            strings[6] = [postscriptName];\n            subsetTag = successorOf(subsetTag);\n            strCount = 0;\n            for (id in strings) {\n                list = strings[id];\n                if (list != null) {\n                    strCount += list.length;\n                }\n            }\n            table = new Data;\n            strTable = new Data;\n            table.writeShort(0);\n            table.writeShort(strCount);\n            table.writeShort(6 + 12 * strCount);\n            for (nameID in strings) {\n                list = strings[nameID];\n                if (list != null) {\n                    for (_i = 0, _len = list.length; _i < _len; _i++) {\n                        string = list[_i];\n                        table.writeShort(string.platformID);\n                        table.writeShort(string.encodingID);\n                        table.writeShort(string.languageID);\n                        table.writeShort(nameID);\n                        table.writeShort(string.length);\n                        table.writeShort(strTable.pos);\n                        strTable.writeString(string.raw);\n                    }\n                }\n            }\n            return nameTable = {\n                postscriptName: postscriptName.raw\n                , table: table.data.concat(strTable.data)\n            };\n        };*/\n  return NameTable;\n})(Table);\n\nvar MaxpTable = (function(_super) {\n  __extends(MaxpTable, _super);\n\n  function MaxpTable() {\n    return MaxpTable.__super__.constructor.apply(this, arguments);\n  }\n  MaxpTable.prototype.tag = \"maxp\";\n  MaxpTable.prototype.parse = function(data) {\n    data.pos = this.offset;\n    this.version = data.readInt();\n    this.numGlyphs = data.readUInt16();\n    this.maxPoints = data.readUInt16();\n    this.maxContours = data.readUInt16();\n    this.maxCompositePoints = data.readUInt16();\n    this.maxComponentContours = data.readUInt16();\n    this.maxZones = data.readUInt16();\n    this.maxTwilightPoints = data.readUInt16();\n    this.maxStorage = data.readUInt16();\n    this.maxFunctionDefs = data.readUInt16();\n    this.maxInstructionDefs = data.readUInt16();\n    this.maxStackElements = data.readUInt16();\n    this.maxSizeOfInstructions = data.readUInt16();\n    this.maxComponentElements = data.readUInt16();\n    return (this.maxComponentDepth = data.readUInt16());\n  };\n  /*MaxpTable.prototype.encode = function (ids) {\n            var table;\n            table = new Data;\n            table.writeInt(this.version);\n            table.writeUInt16(ids.length);\n            table.writeUInt16(this.maxPoints);\n            table.writeUInt16(this.maxContours);\n            table.writeUInt16(this.maxCompositePoints);\n            table.writeUInt16(this.maxComponentContours);\n            table.writeUInt16(this.maxZones);\n            table.writeUInt16(this.maxTwilightPoints);\n            table.writeUInt16(this.maxStorage);\n            table.writeUInt16(this.maxFunctionDefs);\n            table.writeUInt16(this.maxInstructionDefs);\n            table.writeUInt16(this.maxStackElements);\n            table.writeUInt16(this.maxSizeOfInstructions);\n            table.writeUInt16(this.maxComponentElements);\n            table.writeUInt16(this.maxComponentDepth);\n            return table.data;\n        };*/\n  return MaxpTable;\n})(Table);\n\nvar HmtxTable = (function(_super) {\n  __extends(HmtxTable, _super);\n\n  function HmtxTable() {\n    return HmtxTable.__super__.constructor.apply(this, arguments);\n  }\n  HmtxTable.prototype.tag = \"hmtx\";\n  HmtxTable.prototype.parse = function(data) {\n    var i, last, lsbCount, m, _j, _ref, _results;\n    data.pos = this.offset;\n    this.metrics = [];\n    for (\n      i = 0, _ref = this.file.hhea.numberOfMetrics;\n      0 <= _ref ? i < _ref : i > _ref;\n      i = 0 <= _ref ? ++i : --i\n    ) {\n      this.metrics.push({\n        advance: data.readUInt16(),\n        lsb: data.readInt16()\n      });\n    }\n    lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics;\n    this.leftSideBearings = (function() {\n      var _j, _results;\n      _results = [];\n      for (\n        i = _j = 0;\n        0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n        i = 0 <= lsbCount ? ++_j : --_j\n      ) {\n        _results.push(data.readInt16());\n      }\n      return _results;\n    })();\n    this.widths = function() {\n      var _j, _len, _ref1, _results;\n      _ref1 = this.metrics;\n      _results = [];\n      for (_j = 0, _len = _ref1.length; _j < _len; _j++) {\n        m = _ref1[_j];\n        _results.push(m.advance);\n      }\n      return _results;\n    }.call(this);\n    last = this.widths[this.widths.length - 1];\n    _results = [];\n    for (\n      i = _j = 0;\n      0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n      i = 0 <= lsbCount ? ++_j : --_j\n    ) {\n      _results.push(this.widths.push(last));\n    }\n    return _results;\n  };\n  /***************************************************************/\n  /* function : forGlyph                                         */\n  /* comment : Returns the advance width and lsb for this glyph. */\n  /***************************************************************/\n  HmtxTable.prototype.forGlyph = function(id) {\n    if (id in this.metrics) {\n      return this.metrics[id];\n    }\n    return {\n      advance: this.metrics[this.metrics.length - 1].advance,\n      lsb: this.leftSideBearings[id - this.metrics.length]\n    };\n  };\n  /*HmtxTable.prototype.encode = function (mapping) {\n            var id, metric, table, _i, _len;\n            table = new Data;\n            for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n                id = mapping[_i];\n                metric = this.forGlyph(id);\n                table.writeUInt16(metric.advance);\n                table.writeUInt16(metric.lsb);\n            }\n            return table.data;\n        };*/\n  return HmtxTable;\n})(Table);\n\nvar __slice = [].slice;\n\nvar GlyfTable = (function(_super) {\n  __extends(GlyfTable, _super);\n\n  function GlyfTable() {\n    return GlyfTable.__super__.constructor.apply(this, arguments);\n  }\n  GlyfTable.prototype.tag = \"glyf\";\n  GlyfTable.prototype.parse = function() {\n    return (this.cache = {});\n  };\n  GlyfTable.prototype.glyphFor = function(id) {\n    var data,\n      index,\n      length,\n      loca,\n      numberOfContours,\n      raw,\n      xMax,\n      xMin,\n      yMax,\n      yMin;\n    if (id in this.cache) {\n      return this.cache[id];\n    }\n    loca = this.file.loca;\n    data = this.file.contents;\n    index = loca.indexOf(id);\n    length = loca.lengthOf(id);\n    if (length === 0) {\n      return (this.cache[id] = null);\n    }\n    data.pos = this.offset + index;\n    raw = new Data(data.read(length));\n    numberOfContours = raw.readShort();\n    xMin = raw.readShort();\n    yMin = raw.readShort();\n    xMax = raw.readShort();\n    yMax = raw.readShort();\n    if (numberOfContours === -1) {\n      this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax);\n    } else {\n      this.cache[id] = new SimpleGlyph(\n        raw,\n        numberOfContours,\n        xMin,\n        yMin,\n        xMax,\n        yMax\n      );\n    }\n    return this.cache[id];\n  };\n  GlyfTable.prototype.encode = function(glyphs, mapping, old2new) {\n    var glyph, id, offsets, table, _i, _len;\n    table = [];\n    offsets = [];\n    for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n      id = mapping[_i];\n      glyph = glyphs[id];\n      offsets.push(table.length);\n      if (glyph) {\n        table = table.concat(glyph.encode(old2new));\n      }\n    }\n    offsets.push(table.length);\n    return {\n      table: table,\n      offsets: offsets\n    };\n  };\n  return GlyfTable;\n})(Table);\n\nvar SimpleGlyph = (function() {\n  /**************************************************************************/\n  /* function : SimpleGlyph                                                 */\n  /* comment : Stores raw, xMin, yMin, xMax, and yMax values for this glyph.*/\n  /**************************************************************************/\n  function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) {\n    this.raw = raw;\n    this.numberOfContours = numberOfContours;\n    this.xMin = xMin;\n    this.yMin = yMin;\n    this.xMax = xMax;\n    this.yMax = yMax;\n    this.compound = false;\n  }\n  SimpleGlyph.prototype.encode = function() {\n    return this.raw.data;\n  };\n  return SimpleGlyph;\n})();\n\nvar CompoundGlyph = (function() {\n  var ARG_1_AND_2_ARE_WORDS,\n    MORE_COMPONENTS,\n    WE_HAVE_AN_X_AND_Y_SCALE,\n    WE_HAVE_A_SCALE,\n    WE_HAVE_A_TWO_BY_TWO,\n    WE_HAVE_INSTRUCTIONS;\n  ARG_1_AND_2_ARE_WORDS = 0x0001;\n  WE_HAVE_A_SCALE = 0x0008;\n  MORE_COMPONENTS = 0x0020;\n  WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\n  WE_HAVE_A_TWO_BY_TWO = 0x0080;\n  WE_HAVE_INSTRUCTIONS = 0x0100;\n\n  /********************************************************************************************************************/\n  /* function : CompoundGlypg generator                                                                               */\n  /* comment : It stores raw, xMin, yMin, xMax, yMax, glyph id, and glyph offset for the corresponding compound glyph.*/\n  /********************************************************************************************************************/\n  function CompoundGlyph(raw, xMin, yMin, xMax, yMax) {\n    var data, flags;\n    this.raw = raw;\n    this.xMin = xMin;\n    this.yMin = yMin;\n    this.xMax = xMax;\n    this.yMax = yMax;\n    this.compound = true;\n    this.glyphIDs = [];\n    this.glyphOffsets = [];\n    data = this.raw;\n    while (true) {\n      flags = data.readShort();\n      this.glyphOffsets.push(data.pos);\n      this.glyphIDs.push(data.readUInt16());\n      if (!(flags & MORE_COMPONENTS)) {\n        break;\n      }\n      if (flags & ARG_1_AND_2_ARE_WORDS) {\n        data.pos += 4;\n      } else {\n        data.pos += 2;\n      }\n      if (flags & WE_HAVE_A_TWO_BY_TWO) {\n        data.pos += 8;\n      } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n        data.pos += 4;\n      } else if (flags & WE_HAVE_A_SCALE) {\n        data.pos += 2;\n      }\n    }\n  }\n  /****************************************************************************************************************/\n  /* function : CompoundGlypg encode                                                                              */\n  /* comment : After creating a table for the characters you typed, you call directory.encode to encode the table.*/\n  /****************************************************************************************************************/\n  CompoundGlyph.prototype.encode = function() {\n    var i, result, _len, _ref;\n    result = new Data(__slice.call(this.raw.data));\n    _ref = this.glyphIDs;\n    for (i = 0, _len = _ref.length; i < _len; ++i) {\n      result.pos = this.glyphOffsets[i];\n    }\n    return result.data;\n  };\n  return CompoundGlyph;\n})();\n\nvar LocaTable = (function(_super) {\n  __extends(LocaTable, _super);\n\n  function LocaTable() {\n    return LocaTable.__super__.constructor.apply(this, arguments);\n  }\n  LocaTable.prototype.tag = \"loca\";\n  LocaTable.prototype.parse = function(data) {\n    var format, i;\n    data.pos = this.offset;\n    format = this.file.head.indexToLocFormat;\n    if (format === 0) {\n      return (this.offsets = function() {\n        var _ref, _results;\n        _results = [];\n        for (i = 0, _ref = this.length; i < _ref; i += 2) {\n          _results.push(data.readUInt16() * 2);\n        }\n        return _results;\n      }.call(this));\n    } else {\n      return (this.offsets = function() {\n        var _ref, _results;\n        _results = [];\n        for (i = 0, _ref = this.length; i < _ref; i += 4) {\n          _results.push(data.readUInt32());\n        }\n        return _results;\n      }.call(this));\n    }\n  };\n  LocaTable.prototype.indexOf = function(id) {\n    return this.offsets[id];\n  };\n  LocaTable.prototype.lengthOf = function(id) {\n    return this.offsets[id + 1] - this.offsets[id];\n  };\n  LocaTable.prototype.encode = function(offsets, activeGlyphs) {\n    var LocaTable = new Uint32Array(this.offsets.length);\n    var glyfPtr = 0;\n    var listGlyf = 0;\n    for (var k = 0; k < LocaTable.length; ++k) {\n      LocaTable[k] = glyfPtr;\n      if (listGlyf < activeGlyphs.length && activeGlyphs[listGlyf] == k) {\n        ++listGlyf;\n        LocaTable[k] = glyfPtr;\n        var start = this.offsets[k];\n        var len = this.offsets[k + 1] - start;\n        if (len > 0) {\n          glyfPtr += len;\n        }\n      }\n    }\n    var newLocaTable = new Array(LocaTable.length * 4);\n    for (var j = 0; j < LocaTable.length; ++j) {\n      newLocaTable[4 * j + 3] = LocaTable[j] & 0x000000ff;\n      newLocaTable[4 * j + 2] = (LocaTable[j] & 0x0000ff00) >> 8;\n      newLocaTable[4 * j + 1] = (LocaTable[j] & 0x00ff0000) >> 16;\n      newLocaTable[4 * j] = (LocaTable[j] & 0xff000000) >> 24;\n    }\n    return newLocaTable;\n  };\n  return LocaTable;\n})(Table);\n\n/************************************************************************************/\n/* function : invert                                                                */\n/* comment : Change the object's (key: value) to create an object with (value: key).*/\n/************************************************************************************/\nvar invert = function(object) {\n  var key, ret, val;\n  ret = {};\n  for (key in object) {\n    val = object[key];\n    ret[val] = key;\n  }\n  return ret;\n};\n\n/*var successorOf = function (input) {\n        var added, alphabet, carry, i, index, isUpperCase, last, length, next, result;\n        alphabet = 'abcdefghijklmnopqrstuvwxyz';\n        length = alphabet.length;\n        result = input;\n        i = input.length;\n        while (i >= 0) {\n            last = input.charAt(--i);\n            if (isNaN(last)) {\n                index = alphabet.indexOf(last.toLowerCase());\n                if (index === -1) {\n                    next = last;\n                    carry = true;\n                }\n                else {\n                    next = alphabet.charAt((index + 1) % length);\n                    isUpperCase = last === last.toUpperCase();\n                    if (isUpperCase) {\n                        next = next.toUpperCase();\n                    }\n                    carry = index + 1 >= length;\n                    if (carry && i === 0) {\n                        added = isUpperCase ? 'A' : 'a';\n                        result = added + next + result.slice(1);\n                        break;\n                    }\n                }\n            }\n            else {\n                next = +last + 1;\n                carry = next > 9;\n                if (carry) {\n                    next = 0;\n                }\n                if (carry && i === 0) {\n                    result = '1' + next + result.slice(1);\n                    break;\n                }\n            }\n            result = result.slice(0, i) + next + result.slice(i + 1);\n            if (!carry) {\n                break;\n            }\n        }\n        return result;\n    };*/\n\nvar Subset = (function() {\n  function Subset(font) {\n    this.font = font;\n    this.subset = {};\n    this.unicodes = {};\n    this.next = 33;\n  }\n  /*Subset.prototype.use = function (character) {\n            var i, _i, _ref;\n            if (typeof character === 'string') {\n                for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n                    this.use(character.charCodeAt(i));\n                }\n                return;\n            }\n            if (!this.unicodes[character]) {\n                this.subset[this.next] = character;\n                return this.unicodes[character] = this.next++;\n            }\n        };*/\n  /*Subset.prototype.encodeText = function (text) {\n            var char, i, string, _i, _ref;\n            string = '';\n            for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n                char = this.unicodes[text.charCodeAt(i)];\n                string += String.fromCharCode(char);\n            }\n            return string;\n        };*/\n  /***************************************************************/\n  /* function : generateCmap                                     */\n  /* comment : Returns the unicode cmap for this font.         */\n  /***************************************************************/\n  Subset.prototype.generateCmap = function() {\n    var mapping, roman, unicode, unicodeCmap, _ref;\n    unicodeCmap = this.font.cmap.tables[0].codeMap;\n    mapping = {};\n    _ref = this.subset;\n    for (roman in _ref) {\n      unicode = _ref[roman];\n      mapping[roman] = unicodeCmap[unicode];\n    }\n    return mapping;\n  };\n  /*Subset.prototype.glyphIDs = function () {\n            var ret, roman, unicode, unicodeCmap, val, _ref;\n            unicodeCmap = this.font.cmap.tables[0].codeMap;\n            ret = [0];\n            _ref = this.subset;\n            for (roman in _ref) {\n                unicode = _ref[roman];\n                val = unicodeCmap[unicode];\n                if ((val != null) && __indexOf.call(ret, val) < 0) {\n                    ret.push(val);\n                }\n            }\n            return ret.sort();\n        };*/\n  /******************************************************************/\n  /* function : glyphsFor                                           */\n  /* comment : Returns simple glyph objects for the input character.*/\n  /******************************************************************/\n  Subset.prototype.glyphsFor = function(glyphIDs) {\n    var additionalIDs, glyph, glyphs, id, _i, _len, _ref;\n    glyphs = {};\n    for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) {\n      id = glyphIDs[_i];\n      glyphs[id] = this.font.glyf.glyphFor(id);\n    }\n    additionalIDs = [];\n    for (id in glyphs) {\n      glyph = glyphs[id];\n      if (glyph != null ? glyph.compound : void 0) {\n        additionalIDs.push.apply(additionalIDs, glyph.glyphIDs);\n      }\n    }\n    if (additionalIDs.length > 0) {\n      _ref = this.glyphsFor(additionalIDs);\n      for (id in _ref) {\n        glyph = _ref[id];\n        glyphs[id] = glyph;\n      }\n    }\n    return glyphs;\n  };\n  /***************************************************************/\n  /* function : encode                                           */\n  /* comment : Encode various tables for the characters you use. */\n  /***************************************************************/\n  Subset.prototype.encode = function(glyID, indexToLocFormat) {\n    var cmap,\n      code,\n      glyf,\n      glyphs,\n      id,\n      ids,\n      loca,\n      new2old,\n      newIDs,\n      nextGlyphID,\n      old2new,\n      oldID,\n      oldIDs,\n      tables,\n      _ref;\n    cmap = CmapTable.encode(this.generateCmap(), \"unicode\");\n    glyphs = this.glyphsFor(glyID);\n    old2new = {\n      0: 0\n    };\n    _ref = cmap.charMap;\n    for (code in _ref) {\n      ids = _ref[code];\n      old2new[ids.old] = ids[\"new\"];\n    }\n    nextGlyphID = cmap.maxGlyphID;\n    for (oldID in glyphs) {\n      if (!(oldID in old2new)) {\n        old2new[oldID] = nextGlyphID++;\n      }\n    }\n    new2old = invert(old2new);\n    newIDs = Object.keys(new2old).sort(function(a, b) {\n      return a - b;\n    });\n    oldIDs = (function() {\n      var _i, _len, _results;\n      _results = [];\n      for (_i = 0, _len = newIDs.length; _i < _len; _i++) {\n        id = newIDs[_i];\n        _results.push(new2old[id]);\n      }\n      return _results;\n    })();\n    glyf = this.font.glyf.encode(glyphs, oldIDs, old2new);\n    loca = this.font.loca.encode(glyf.offsets, oldIDs);\n    tables = {\n      cmap: this.font.cmap.raw(),\n      glyf: glyf.table,\n      loca: loca,\n      hmtx: this.font.hmtx.raw(),\n      hhea: this.font.hhea.raw(),\n      maxp: this.font.maxp.raw(),\n      post: this.font.post.raw(),\n      name: this.font.name.raw(),\n      head: this.font.head.encode(indexToLocFormat)\n    };\n    if (this.font.os2.exists) {\n      tables[\"OS/2\"] = this.font.os2.raw();\n    }\n    return this.font.directory.encode(tables);\n  };\n  return Subset;\n})();\n\njsPDF.API.PDFObject = (function() {\n  var pad;\n\n  function PDFObject() {}\n  pad = function(str, length) {\n    return (Array(length + 1).join(\"0\") + str).slice(-length);\n  };\n  /*****************************************************************************/\n  /* function : convert                                                        */\n  /* comment :Converts pdf tag's / FontBBox and array values in / W to strings */\n  /*****************************************************************************/\n  PDFObject.convert = function(object) {\n    var e, items, key, out, val;\n    if (Array.isArray(object)) {\n      items = (function() {\n        var _i, _len, _results;\n        _results = [];\n        for (_i = 0, _len = object.length; _i < _len; _i++) {\n          e = object[_i];\n          _results.push(PDFObject.convert(e));\n        }\n        return _results;\n      })().join(\" \");\n      return \"[\" + items + \"]\";\n    } else if (typeof object === \"string\") {\n      return \"/\" + object;\n    } else if (object != null ? object.isString : void 0) {\n      return \"(\" + object + \")\";\n    } else if (object instanceof Date) {\n      return (\n        \"(D:\" +\n        pad(object.getUTCFullYear(), 4) +\n        pad(object.getUTCMonth(), 2) +\n        pad(object.getUTCDate(), 2) +\n        pad(object.getUTCHours(), 2) +\n        pad(object.getUTCMinutes(), 2) +\n        pad(object.getUTCSeconds(), 2) +\n        \"Z)\"\n      );\n    } else if ({}.toString.call(object) === \"[object Object]\") {\n      out = [\"<<\"];\n      for (key in object) {\n        val = object[key];\n        out.push(\"/\" + key + \" \" + PDFObject.convert(val));\n      }\n      out.push(\">>\");\n      return out.join(\"\\n\");\n    } else {\n      return \"\" + object;\n    }\n  };\n  return PDFObject;\n})();\n"],"names":["globalObject","window","global","self","this","consoleLog","console","log","apply","arguments","warn","str","call","error","download","url","name","opts","xhr","XMLHttpRequest","open","responseType","onload","saveAs","response","onerror","send","corsEnabled","e","status","click","node","dispatchEvent","MouseEvent","evt","document","createEvent","initMouseEvent","atob","btoa","_global","HTMLAnchorElement","prototype","blob","URL","webkitURL","a","createElement","rel","href","origin","location","target","createObjectURL","setTimeout","revokeObjectURL","navigator","msSaveOrOpenBlob","autoBom","_typeof","test","type","Blob","String","fromCharCode","bom","popup","title","body","innerText","force","isSafari","HTMLElement","safari","isChromeIOS","userAgent","FileReader","reader","onloadend","result","replace","readAsDataURL","RGBColor","color_string","channels","ok","charAt","substr","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","feldspar","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslateblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","violetred","wheat","white","whitesmoke","yellow","yellowgreen","toLowerCase","color_defs","re","example","process","bits","parseInt","i","length","processor","exec","r","g","b","isNaN","toRGB","toHex","toString","md5cycle","x","k","c","d","ff","gg","hh","ii","add32","cmn","q","s","t","md51","n","state","md5blk","substring","tail","charCodeAt","md5blks","bind","hex_chr","split","rhex","j","singleToByteString","md5Bin","map","join","toByteString","md5Check","hex","lsw","rc4","key","data","lastKey","lastState","num","Array","out","permissionOptions","print","modify","copy","PDFSecurity","permissions","userPassword","ownerPassword","fileId","v","protection","forEach","perm","Error","padding","paddedUserPassword","paddedOwnerPassword","O","processOwnerPassword","P","encryptionKey","lsbFirstWord","hexToBytes","U","toPDFName","strLength","charCode","slice","PubSub","context","topics","subscribe","topic","callback","once","hasOwnProperty","token","Math","random","unsubscribe","Object","keys","publish","args","tokens","sub","ex","message","push","getTopics","GState","parameters","supported","p","indexOf","id","objectNumber","Pattern","gState","matrix","ShadingPattern","coords","colors","TilingPattern","boundingBox","xStep","yStep","stream","cloneIndex","jsPDF","options","precision","orientation","unit","format","compressPdf","filters","userUnit","floatPrecision","defaultPathOperation","encryptionOptions","compress","encryption","userPermissions","abs","putOnlyUsedFonts","usedFonts","API","internal","__private__","pdfVersion","getPdfVersion","setPdfVersion","value","pageFormats","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","dl","letter","legal","ledger","tabloid","getPageFormats","getPageFormat","ApiMode","COMPAT","ADVANCED","apiMode","advancedAPI","saveGraphicsState","Matrix","scaleFactor","getPageHeight","setFontSize","getFontSize","compatAPI","restoreGraphicsState","combineFontStyleAndFontWeight","fontStyle","fontWeight","doSwitch","isAdvancedAPI","hpf","advancedApiModeTrap","methodName","roundToPrecision","number","parmPrecision","tmpPrecision","toFixed","f2","f3","scale","transformY","y","transformScaleY","setPrecision","creationDate","getFileId","setFileId","toUpperCase","floor","convertDateToPDFDate","parmDate","tzoffset","getTimezoneOffset","tzsign","tzhour","tzmin","timeZoneString","padd2","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","convertPDFDateToDate","parmPDFDate","year","month","date","hour","minutes","seconds","Date","setCreationDate","tmpCreationDateString","getCreationDate","currentPage","padd2Hex","hexString","offsets","content","contentLength","additionalObjects","pages","hasCustomDestination","outputDestination","resetDocument","rootDictionaryObjId","newObjectDeferred","resourceDictionaryObjId","setCustomOutputDestination","destination","setOutputDestination","resetCustomOutputDestination","string","write","getArrayBuffer","len","ab","ArrayBuffer","u8","Uint8Array","standardFonts","getStandardFonts","activeFontSize","fontSize","size","zoomMode","R2L","setR2L","getR2L","pageMode","setZoomMode","zoom","validZoomModes","undefined","getZoomMode","layoutMode","setPageMode","pmode","getPageMode","setLayoutMode","layout","getLayoutMode","setDisplayMode","documentProperties","subject","author","keywords","creator","getDocumentProperty","getDocumentProperties","setDocumentProperties","setProperties","properties","property","setDocumentProperty","activeFontKey","pageX","pageY","pageMatrix","fonts","fontmap","fontStateStack","patterns","patternMap","gStates","gStatesMap","activeGState","page","pagesContext","events","hotfixes","renderTargets","renderTargetMap","renderTargetStack","sx","shy","shx","sy","tx","ty","_matrix","defineProperty","get","set","atan2","decompose","separator","multiply","f","scaleX","sqrt","shear","scaleY","translate","rotate","skew","inversed","quot","aInv","bInv","cInv","dInv","applyToPoint","pt","Point","applyToRectangle","rect","pt1","pt2","w","h","Rectangle","clone","matrixMult","m1","m2","identityMatrix","unitMatrix","addPattern","pattern","patternKey","addShadingPattern","beginTilingPattern","beginNewRenderTarget","endTilingPattern","pop","restore","newObject","oid","newObjectDeferredBegin","doOutput","newAdditionalObject","obj","objId","decodeColorString","color","colorEncoded","floatVal","parseFloat","colorAsRGB","encodeColorString","ch1","ch2","ch3","ch4","letterArray","pdfColorType","rgbColor","getFilters","putStream","alreadyAppliedFilters","addLength1","valueOfLength1","objectId","encryptor","processedData","keyValues","additionalKeyValues","filterAsString","processDataByFilters","reverseChain","isArray","decodeParmsArray","putPage","pageNumber","pageObjectNumber","pageContentsObjId","contentsObjId","mediaBox","bottomLeftX","bottomLeftY","topRightX","topRightY","cropBox","bleedBox","trimBox","artBox","pageContext","pageContent","putPages","pageObjectNumbers","kids","putFont","font","isAlreadyPutted","postScriptName","encoding","putFonts","fontKey","putXObject","xObject","width","height","putXObjects","xObjectKey","interpolateAndEncodeRGBStream","numberSamples","tValues","dT","offset","unshift","index","aColor","bColor","round","trim","putShadingPattern","funcObjectNumber","putTilingPattern","deferredResourceDictionaryIds","resourcesObjectId","patternObjectId","resourcesOid","objectOid","putPatterns","putGState","putGStates","gStateKey","putXobjectDict","putEncryptionDict","toHexString","putFontDict","putShadingPatternDict","putTilingPatternDict","putGStatesDict","putResourceDictionary","objectIds","putResources","Number","MAX_SAFE_INTEGER","putAdditionalObjects","addFontToFontDictionary","fontName","addFont","isStandardFont","metadata","instance","addFonts","arrayOfFonts","l","parts","dictionary","SAFE","fn","foo","stack","m","alert","bar","to8bitStream","text","flags","sourceEncoding","encodingBlock","outputEncoding","newtext","isUnicode","ch","bch","autoencode","codePages","noBOM","pdfEscape","beginPage","_setPage","_addPage","parmFormat","parmOrientation","dimensions","min","setLineWidth","lineWidth","strokeColor","lineCapID","lineJoinID","_deletePage","splice","setPage","getNumberOfPages","getFont","fontNameLowerCase","disableWarning","noFallback","putInfo","version","putCatalog","tmpRootDictionaryObjId","pcn","putTrailer","putHeader","putXRef","buildDocument","offsetOfXRef","getBlob","output","filename","save","dataURI","pdfDocument","unescape","encodeURIComponent","pdfObjectUrl","integrity","htmlForNewWindow","JSON","stringify","nW","htmlForPDFjsNewWindow","pdfJsUrl","PDFjsNewWindow","scope","documentElement","querySelector","contentWindow","PDFViewerApplication","htmlForDataURLNewWindow","dataURLNewWindow","hasHotfix","hotfixName","getEncryptor","getPageInfo","pageNumberOneBased","getPageInfoByObjId","getCurrentPageInfo","addPage","insertPage","beforePage","movePage","targetPage","tmpPages","tmpPagesContext","deletePage","transform","payload","da","angle","align","charSpace","maxWidth","horizontalScale","transformationMatrix","tmp","xtra","isHex","lineHeight","lineHeightFactor","ESC","TabLen","transformTextToSpecialArray","curDa","sa","concat","shift","processTextByFunction","processingFunction","tmpResult","textIsOfTypeString","tmpTextIsOfTypeString","match","descent","baseline","splitTextToSize","reduce","acc","textLine","mutex","PI","rotationDirection","cos","sin","activeCharSpace","setCharSpace","getCharSpace","lang","renderingMode","parmRenderingMode","stroke","usedRenderingMode","lineWidths","leading","pageWidth","pageSize","getWidth","activeFont","assign","wordSpacingPerLine","newY","getStringUnitWidth","doKerning","newX","prevWidth","getHorizontalCoordinate","getVerticalCoordinate","doReversing","posX","posY","reverse","activeFontEncoding","STRING","ARRAY","variant","wordSpacing","generatePosition","parmPosX","parmPosY","parmTransformationMatrix","position","lineIndex","textColor","clip","rule","clipEvenOdd","discardPath","isValidStyle","style","setDefaultPathOperation","operator","getStyle","op","close","fill","fillWithOptionalPattern","fillEvenOdd","fillStroke","fillStrokeEvenOdd","fillWithPattern","putStyle","cloneTilingPattern","patternData","patternId","clipRuleFromStyle","setGState","moveTo","lineTo","curveTo","x1","y1","x2","y2","x3","y3","line","lines","closed","scalex","scaley","leg","x4","y4","path","triangle","roundedRect","rx","ry","MyArc","SQRT2","ellipse","lx","ly","circle","setFont","getFontEntry","getFontList","list","encodingOptions","getLineWidth","setLineDash","setLineDashPattern","dashArray","dashPhase","getLineHeight","setLineHeightFactor","getLineHeightFactor","getHorizontalCoordinateString","getVerticalCoordinateString","getStrokeColor","getDrawColor","setStrokeColor","setDrawColor","fillColor","getFillColor","setFillColor","getTextColor","setTextColor","CapJoinStyles","butt","but","miter","rounded","projecting","project","square","bevel","setLineCap","setLineJoin","setLineMiterLimit","setMiterLimit","addGState","equals","duplicate","fontState","setCurrentTransformationMatrix","comment","_x","enumerable","_y","_type","_w","_h","RenderTarget","getPageWidth","setPageWidth","setPageHeight","endFormObject","newXObject","xObjectId","plugin","beginFormObject","doFormObject","getFormObject","returnPromise","unload","Promise","resolve","reject","newEvents","eventname","handler_and_args","getCoordinateString","collections","setWidth","getHeight","setHeight","getPDFVersion","configurable","byteString","byte","bytes","generation","other","ignore","count","jsPDFAPI","pdfUnescape","f5","__acroform__","inherit","child","parent","create","constructor","createFormXObject","formObject","xobj","AcroFormXObject","AcroFormAppearance","BBox","setBit","bitPosition","clearBit","getBit","getBitForPdf","setBitForPdf","clearBitForPdf","calculateCoordinates","coordinates","lowerLeft_X","lowerLeft_Y","upperRight_X","upperRight_Y","calculateAppearanceStream","appearanceStreamContent","V","DV","_V","calcRes","calculateX","maxFontSize","returnValue","textSplit","multiline","word","isSmallerThanWidth","lastLine","calculateFontSpace","FontSize","startX","lastLength","textHeight","startY","lastY","firstWordInLine","lastWordInLine","currWord","lineCount","isWithNewLine","nextLineIsSmaller","isLastWord","currLine","textAlign","acroformPluginTemplate","fields","xForms","acroFormDictionaryRoot","printedOut","isInitialized","createAnnotationReference","object","annotations","find","entry","createXFormObjectCallback","fieldArray","fieldObject","initializeAcroForm","acroformPlugin","AcroFormField","FieldNum","parse","AcroFormDictionary","_eventID","AcroFormDictionaryCallback","Fields","hasAnnotation","annotReferenceCallback","putCatalogCallback","standardFields","Kids","keyValueList","oldRect","Rect","DA","createDefaultAppearanceStream","getKeyValueListForStream","hasAppearanceStream","appearance","appearanceStreamString","createFieldCallback","arrayToPdfArray","array","toPdfString","AcroFormPDFObject","_objId","_scope","writable","getOwnPropertyNames","filter","getOwnPropertyDescriptor","_stream","_BBox","_DA","_Kids","_F","Boolean","F","_Ff","_Rect","_FT","_T","AcroFormChildClass","_fontName","_fontStyle","_fontSize","_maxFontSize","_color","AcroFormTextField","_DV","AcroFormButton","_page","_hasAppearanceStream","Ff","_Q","AcroFormChoiceField","FT","_TI","_Opt","regex","matches","getMatches","getOptions","setOptions","sort","addOption","removeOption","allEntries","combo","AcroFormListBox","AcroFormComboBox","AcroFormEditBox","edit","_AS","_MK","CA","AcroFormPushButton","pushButton","AcroFormRadioButton","radio","_parent","_optionName","caption","appearanceState","_AppearanceType","RadioButton","Circle","createAppearanceStream","optionName","setAppearance","getCA","createOption","Parent","addField","AcroFormCheckBox","CheckBox","_MaxLen","isInteger","AcroFormPasswordField","password","N","On","YesNormal","D","YesPushDown","Off","OffPushDown","encodedColor","DotRadius","Bezier_C","DotRadiusBezier","kc","dc","Cross","cross","calculateCross","AcroForm","ChoiceField","ListBox","ComboBox","EditBox","Button","PushButton","TextField","PasswordField","Appearance","toLookup","arr","lookup","__addimage__","UNKNOWN","imageFileTypeHeaders","PNG","TIFF","JPEG","JPEG2000","GIF87a","GIF89a","WEBP","BMP","getImageFileTypeByImageData","imageData","fallbackFormat","headerSchemata","compareResult","fileType","Uint8ClampedArray","isArrayBufferView","putImage","image","colorSpace","color_spaces","INDEXED","palette","sMask","DEVICE_CMYK","bitsPerComponent","decodeParameters","transparency","predictor","arrayBufferToBinaryString","putResourcesCallback","images","putXObjectsDictCallback","initialize","getImages","getImageIndex","isImageTypeSupported","isDOMElement","nodeType","getImageDataFromElement","element","nodeName","hasAttribute","src","getAttribute","tmpImageData","loadFile","mimeType","toDataURL","checkImagesForAlias","alias","determineWidthAndHeight","writeImageToPDF","rotation","dims","coord","vcoord","f4","rotationTransformationMatrix","DEVICE_RGB","DEVICE_GRAY","CAL_GREY","CAL_RGB","LAB","ICC_BASED","PATTERN","SEPARATION","DEVICE_N","decode","DCT_DECODE","FLATE_DECODE","LZW_DECODE","JPX_DECODE","JBIG2_DECODE","ASCII85_DECODE","ASCII_HEX_DECODE","RUN_LENGTH_DECODE","CCITT_FAX_DECODE","image_compression","NONE","FAST","MEDIUM","SLOW","sHashCode","hash","byteLength","validateStringAsBase64","possibleBase64String","extractImageFromDataUrl","dataUrl","dataUrlParts","extractedInfo","charset","supportsArrayBuffer","isArrayBuffer","Uint32Array","Int8Array","Int16Array","Uint16Array","Int32Array","Float32Array","Float64Array","binaryStringToUint8Array","binary_string","buffer","buf","subarray","addImage","compression","processImageData","dataAsBinaryString","convertBase64ToBinaryString","generateAliasFromImageData","checkCompressValue","stringData","throwError","base64Info","rawData","getImageProperties","notEmpty","addPageData","putPageData","anno","pageInfo","pageAnnos","found","escape","objText","objPopup","encryptorText","bounds","contents","loc","_nameMap","top","finalBounds","magFactor","left","createAnnotation","link","textWithLink","linkHeight","linkWidth","totalLineWidth","getTextWidth","numOfLines","ceil","arabicSubstitionA","ligatures","arabic_diacritics","alfletter","__arabicParser__","isInArabicSubstitutionA","isArabicLetter","isArabicEndLetter","isArabicAlfLetter","arabicLetterHasIsolatedForm","arabicLetterHasFinalForm","arabicLetterHasInitialForm","arabicLetterHasMedialForm","resolveLigatures","letters","tmpLigatures","effectedLetters","isArabicDiacritic","getCorrectForm","currentChar","beforeChar","nextChar","parseArabic","currentLetter","prevLetter","nextLetter","words","newWords","processArabic","tmpText","autoPrint","refAutoPrintTag","addJS","Canvas","jsPdfInstance","_width","getContext","pageWrapXEnabled","pageWrapX","_height","pageWrapYEnabled","pageWrapY","_childNodes","_style","contextType","contextAttributes","pdf","context2d","_canvas","canvas","NO_MARGINS","bottom","right","printingHeaderRow","_initialize","__cell__","headerFunction","margins","_reset","lastCell","Cell","_text","_lineNumber","_align","lineNumber","toArray","setHeaderFunction","func","getTextDimensions","amountOfLines","tempWidth","max","cellAddPage","cell","currentCell","tableHeaderRow","printHeaders","printHeaderRow","table","headers","config","column","headerName","headerNames","headerLabels","headerAligns","columnMatrix","columnWidths","columnMinWidths","tableHeaderConfigs","autoSize","css","headerBackgroundColor","headerTextColor","table_font_size","header","prompt","rec","row","rowHeight","calculateLineHeight","setTableHeaderRow","pv","cv","rowStart","Function","cellData","cellStart","col","table_x","table_y","model","new_page","tableHeaderCell","tempHeaderConf","currentTextColor","fontStyleOrder","italic","oblique","normal","fontStretchOrder","fontStretchLookup","fontWeights","fontWeightsLookup","normalizeFontFace","fontFace","family","normalizeFontStyle","weight","normalizeFontWeight","stretch","normalizeFontStretch","ref","searchFromPivot","matchingSet","order","pivot","dir","defaultGenericFontFamilies","fixed","monospace","terminal","cursive","fantasy","serif","systemFonts","icon","menu","ruleToString","resolveFontFace","fontFaceMap","rules","defaultFontFamily","genericFontFamilies","resolveFontStretch","ordering","resolveFontStyle","resolveFontWeight","eatWhiteSpace","input","trimLeft","parseQuotedFontFamily","quote","parseNonQuotedFontFamily","defaultFont","_ctx","ContextLayer","ctx","isStrokeTransparent","strokeOpacity","strokeStyle","fillStyle","isFillTransparent","fillOpacity","textBaseline","lineJoin","lineCap","globalCompositeOperation","globalAlpha","clip_path","currentPoint","miterLimit","lastPoint","lineDashOffset","lineDash","margin","prevPageLastElemOffset","ignoreClearRect","Context2D","parentNode","_pdf","_pageWrapXEnabled","_pageWrapYEnabled","_posX","_posY","_autoPaging","lastBreak","pageBreaks","_ctxStack","rgba","getRGBA","_fontFaceMap","getFontFaceMap","fontFaces","convertedFontFaces","fontMap","convertToFontFaces","normalized","buildFontFaceMap","_fontFaces","fontFamily","fontSizeUnit","parsed","remaining","parseFontFamily","jsPdfFontName","fallbackFonts","arial","Arial","verdana","Verdana","helvetica","Helvetica","getLineDash","pathPreProcess","beginPath","closePath","pathBegin","quadraticCurveTo","cpx","cpy","pt0","bezierCurveTo","cp1x","cp1y","cp2x","cp2y","arc","radius","startAngle","endAngle","counterclockwise","isIdentity","xpt","x_radPt","x_radPt0","pow","arcTo","fillRect","strokeRect","clearRect","doStackPush","tmpPageNumber","ctxStack","doStackPop","isCanvasGradient","getColor","fillText","degs","rad2deg","putText","strokeText","measureText","txtWidth","TextMetrics","scalewidth","scaleheight","setTransform","hasMargins","drawImage","img","swidth","sheight","imageProperties","factorX","factorY","clipFactorX","clipFactorY","clipPath","decomposedTransformationMatrix","xRect","pageArray","getPagesByPath","sortPages","autoPaging","pageWidthMinusMargins","topMargin","firstPageHeight","pageHeightMinusMargins","previousPageHeightSum","tmpPaths","pathPositionRedo","drawPaths","tmpRect","needsClipping","yOffset","rectOfQuadraticCurve","getQuadraticCurveBoundary","rectOfBezierCurve","getBezierCurveBoundary","paths","isClip","tmpPath","oldLineWidth","origPath","xPath","delta","moves","begin","start","deltas","iii","began","arcs","drawArc","drawLine","drawLines","doClip","getBaseline","getTextBottom","yBaseLine","createLinearGradient","canvasGradient","colorStops","addColorStop","createPattern","createRadialGradient","includeMove","curves","createArc","curve","doMove","drawCurve","textDimensions","yTop","oldSize","baselineRect","textBounds","pageHeightMinusBottomMargin","pageWidthMinusRightMargin","textBoundsOnPage","doSlice","croppedText","baseLineRectOnPage","prevX","prevY","anticlockwise","twoPi","halfPi","totalAngle","sgn","createSmallArc","q1","q2","k2","ar","cos_ar","sin_ar","ey","midX1","midY1","midX2","midY2","resultX1","resultX2","resultY1","resultY2","ax","ay","bx","by","cx","cy","dx","dy","px","py","qx","qy","minx","miny","maxx","maxy","tobx","toby","tocx","tocy","todx","tody","prevLineDash","nextLineDash","require","Worker","u16","u32","fleb","fdeb","clim","freb","eb","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","flt","fdt","flm","flrm","fdm","fdrm","o","bits16","shft","slc","wbits","wbits16","hTree","t2","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","bl","dlt","mlb","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","flen","ftlen","dtlen","llm","lcts","it","clct","dst","deo","et","dopt","opt","pre","post","st","lvl","plvl","lst","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","level","mem","zlibSync","adler","lv","zlh","wbytes","unzlibSync","sl","noBuf","noSt","cbuf","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","mxa","sym","add","dsym","end","inflt","zlv","ASCII85Encode","ASCII85Decode","z","ASCIIHexDecode","regexCheckIfHex","RegExp","FlateEncode","origData","filterChain","sync","request","sanitizeUnicode","dataLength","charArray","StringFromCharCode","overrideMimeType","responseText","browserRequest","loadImageFile","loadHtml2Canvas","exports","module","define","amd","catch","then","html2canvas","default","loadDomPurify","dompurify","objType","tagName","el","className","innerHTML","sanitize","root","convert","template","setProgress","promise","__proto__","prop","container","overlay","progress","val","enableLinks","backgroundColor","from","getType","to","toContainer","toCanvas","toImg","toPdf","thenList","setPageSize","containerCSS","display","windowWidth","clientWidth","scrollWidth","offsetWidth","source","cloneNode","javascriptEnabled","createTextNode","nodeValue","firstChild","nextSibling","appendChild","addEventListener","scrollTop","scrollLeft","scrollHeight","offsetHeight","clientHeight","overflow","zIndex","clear","border","float","prereqs","contains","onrendered","removeChild","toContext2d","async","allowTaint","scrollX","scrollY","imageTimeout","logging","proxy","removeContainer","foreignObjectRendering","useCORS","windowHeight","imgData","quality","outputImg","outputPdf","doCallback","fns","setMargin","cbk","toPx","getPageSize","inner","ratio","updateProgress","onFulfilled","onRejected","thenCore","thenBase","selfPromise","returnVal","thenExternal","catchExternal","msg","using","export","run","format_as_string","pageHeight","err","html","worker","jsNamesObj","jsJsObj","javascript","namesOid","outline","children","render","createNamedDestinations","totalPages","dests","info","names2Oid","makeRef","item","genIds_r","renderRoot","renderItems","objStart","count_r","objEnd","makeString","markers","processJPEG","blockLength","numcomponents","getJpegInfo","getCharWidthsArray","splitLongWord","splitParagraphIntoLines","makeImage","scratchCanvas","scratchCtx","chunkSize","palLen","delayDen","delayNum","frame","section","palShort","_i","_j","_ref","animation","readUInt32","_results","colorType","compressionMethod","filterMethod","interlaceMethod","numFrames","numPlays","Infinity","frames","read","xOffset","readUInt16","delay","disposeOp","blendOp","indexed","grayscale","rgb","hasAlphaChannel","pixelBitlength","decodePixels","pixelBytes","fullPixels","_this","pass","x0","y0","abyte","pa","paeth","pb","pc","pixels","scanlineLength","upper","upperLeft","_k","_l","_m","isFull","fullPos","partPos","decodePalette","ret","_ref1","copyToImageData","alpha","_decodedPalette","hasBrowserCanvas","putImageData","Image","decodeFrames","_len","createImageData","renderFrame","animate","doFrame","frameNumber","_timeout","stopAnimation","clearTimeout","_png","GifReader","pf0","global_palette_flag","num_global_colors","global_palette_offset","global_palette_size","no_eof","transparent_index","disposal","loop_count","block_size","pf1","pf2","interlace_flag","num_local_colors","palette_offset","palette_size","has_local_palette","data_offset","data_length","interlaced","loopCount","frameInfo","frame_num","decodeAndBlitFrameBGRA","num_pixels","index_stream","GifReaderLZWOutputIndexStream","trans","framewidth","framestride","xleft","opbeg","opend","scanstride","interlaceskip","il","decodeAndBlitFrameRGBA","code_stream","output_length","min_code_size","clear_code","eoi_code","next_code","cur_code_size","code_mask","cur_shift","cur","subblock_size","code_table","prev_code","code","chase_code","chase_length","chase","JPEGEncoder","YDC_HT","UVDC_HT","YAC_HT","UVAC_HT","currentQuality","ffloor","YTable","UVTable","fdtbl_Y","fdtbl_UV","bitcode","category","outputfDCTQuant","DU","byteout","bytenew","bytepos","YDU","UDU","VDU","RGB_YUV_TABLE","ZigZag","std_dc_luminance_nrcodes","std_dc_luminance_values","std_ac_luminance_nrcodes","std_ac_luminance_values","std_dc_chrominance_nrcodes","std_dc_chrominance_values","std_ac_chrominance_nrcodes","std_ac_chrominance_values","computeHuffmanTbl","nrcodes","std_table","codevalue","pos_in_table","HT","writeBits","posval","writeByte","writeWord","processDU","CDU","fdtbl","DC","HTDC","HTAC","EOB","M16zeroes","DU_DCT","d0","d1","d2","d3","d4","d5","d6","d7","fDCTQuant","dataOff","tmp0","tmp7","tmp1","tmp6","tmp2","tmp5","tmp3","tmp4","tmp10","tmp13","tmp11","tmp12","z1","z5","z2","z4","z3","z11","z13","tmp0p2","tmp7p2","tmp1p2","tmp6p2","tmp2p2","tmp5p2","tmp3p2","tmp4p2","tmp10p2","tmp13p2","tmp11p2","tmp12p2","z1p2","z5p2","z2p2","z4p2","z3p2","z11p2","z13p2","Diff","end0pos","lng","startpos","nrzeroes","nrmarker","setQuality","sf","YQT","UVQT","u","aasf","initQuantTables","encode","writeDQT","writeSOF0","writeDHT","DCY","DCU","DCV","displayName","quadWidth","fillbits","sfcc","initCharLookupTable","nrlower","nrupper","cat","nr","nrneg","initCategoryNumber","initRGBYUVTable","BmpDecoder","is_with_alpha","datav","DataView","bottom_up","flag","parseHeader","parseBGR","WebPDecoder","fa","L","J","H","I","Z","M","wa","Ed","ma","_WebPDecoder","Fd","Ub","G","jc","Qb","qb","nd","pd","xb","Ca","Ka","oa","Jd","Yc","Zc","Qa","na","K","ca","cb","Sb","Ra","bb","Vb","ob","db","Gd","Hd","Wb","Sa","Xb","Id","ra","Ta","Yb","Ha","Zb","X","Mb","Xa","$b","ac","bc","xa","yb","ud","hd","jd","aa","Ia","cc","Kd","Ld","ec","Ea","Md","Nd","Od","Pd","Qd","fb","gb","hb","zb","Ab","Ja","Bb","Rd","A","Sd","ea","Tc","Cd","lb","Db","W","Cb","S","RGBA","kb","sd","Td","Ud","ib","bd","Da","Vd","T","Wd","ba","ka","Mc","Nc","fc","Rc","Xd","ya","Kb","za","gc","Ua","Va","memory","Ib","Jb","hc","Oa","ic","Aa","Yd","Ba","Wa","Zd","$d","ae","ta","Eb","be","ga","ce","Dc","mc","nc","de","ua","ub","ha","xc","vc","Ya","oc","C","ee","E","B","Q","fe","qc","Fb","rc","ge","va","Ma","sc","Gb","tc","uc","Hb","wc","yc","zc","qd","rd","ia","tb","he","$","Pb","wd","xd","vb","ie","Ac","Bc","je","Cc","VP8LMapColor32b","ke","VP8LMapColor8b","rb","Oc","R","me","qa","Y","la","ja","Fa","ne","sb","La","Za","$a","jb","oe","pe","nb","qe","Pa","Ga","Na","Ec","se","Fc","ue","yd","td","Rb","ve","we","Lb","Gc","wb","xe","Wc","Xc","ye","Pc","Tb","zd","vd","od","ld","dd","Hc","ze","Sc","Qc","ad","Ob","Ad","Dd","Ae","Nb","Ic","Be","Kc","ed","$c","Jc","Bd","gd","Uc","Vc","put","Ce","De","Ee","Fe","Ge","He","Ie","Lc","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","ef","gf","hf","jf","kf","mf","nf","of","pf","qf","rf","tf","uf","vf","wf","xf","yf","zf","Af","Bf","Ke","Le","Je","kd","Cf","Df","Ef","Gf","Hf","If","Jf","Kf","Lf","Mf","Nf","Of","Pf","Predictor0","Predictor1","Predictor2","Predictor3","Predictor4","Predictor5","Predictor6","Predictor7","Predictor8","Predictor9","Predictor10","Predictor11","Predictor12","Predictor13","PredictorAdd0","PredictorAdd1","PredictorAdd2","ColorIndexInverseTransform","MapARGB","VP8LColorIndexInverseTransformAlpha","MapAlpha","VP8LPredictorsAdd","VP8LPredictors","VP8LPredictorsAdd_C","VP8LPredictors_C","UpsampleRgbLinePair","UpsampleBgrLinePair","UpsampleRgbaLinePair","UpsampleBgraLinePair","UpsampleArgbLinePair","UpsampleRgba4444LinePair","UpsampleRgb565LinePair","Qf","WebPDecodeRGBA","te","GetTag","data_off","GetLE24","GetLE32","webpdecoder","imagearray","src_off","alpha_chunk","alpha_size","alpha_offset","memcmp","fourcc","payload_size","payload_size_padded","src_off_","temp","WebPRiffParser","hasCompressionJS","compressBytes","lineLength","colorsPerPixel","filter_method","filterUp","filterSub","filterAverage","filterPaeth","applyPngFilterMethod","prevLine","filter_methods","getFilterMethods","results","ind","getIndexOfSmallestSum","filterNone","up","upLeft","paethPredictor","pLeft","pUp","pUpLeft","arrays","sum","processPNG","trns","pal","smask","alphaData","hasColors","pixel","pbl","pDiff","total","getPredictorFromCompression","processGIF89A","rawImageData","processGIF87A","fileSize","getUint32","reserved","headerSize","getInt32","planes","getUint16","bitPP","rawSize","hr","vr","importantColors","getUint8","quad","bitn","bit1","xlen","mode","bit4","before","after","bit8","bit15","dif_w","_1_5","bit16","_1_6","bit24","bit32","getData","processBMP","processWEBP","processRGBA","imagePixels","rgbOut","alphaOut","outIndex","alphaIndex","rgbData","setLanguage","langCode","languageSettings","isSubscribed","sq","an","hy","as","ast","az","eu","bn","br","bg","my","zh","cr","cs","en","eo","fo","fj","fi","fr","fy","fur","gl","gu","ht","hi","hu","is","iu","kn","ks","kk","km","ky","tlh","ko","mk","ms","mt","mi","mr","mo","nv","ng","no","nn","or","om","pl","qu","rm","ro","ru","sz","sg","si","sr","sk","so","es","sw","tt","th","tig","ts","tn","tk","uk","hsb","ur","vi","vo","xh","ji","zu","languageCode","char_code","widths","Unicode","widthsFractionOf","fof","kerning","kerningFractionOf","kerningValue","prior_char_code","default_char_width","widthOfString","widthOfGlyph","characterToGlyph","widths_array","firstLineMaxLen","maxLen","answer","workingLen","startOfLine","maxlen","lineIndent","postProcess","line_length","textIndent","separator_length","current_word_length","spaceCharWidth","pad","wrds","wrd","idx","paragraphs","fsize","newOptions","fontUnit_maxLen","__fontmetrics__","encoded","mappingUncompress","mappingCompress","keystring","valuestring","numberprefix","vals","uncompress","stringparts","parent_key_pair","sign","activeobject","parentchain","keyparts","valueparts","datalen","WinAnsiEncoding","encodings","Courier","fontMetrics","Symbol","ZapfDingbats","metrics","file","existsFileInVFS","getFileFromVFS","TTFFont","glyIdsUsed","loadCanvg","canvg","addSvgAsImage","svg","ignoreMouse","ignoreAnimation","ignoreDimensions","doc","fromString","putTotalPages","pageExpression","replaceExpression","totalNumberOfPages","pdfEscape16","viewerPreferences","doReset","configuration","isValid","method","configurationTemplate","HideToolbar","defaultValue","explicitSet","valueSet","HideMenubar","HideWindowUI","FitWindow","CenterWindow","DisplayDocTitle","NonFullScreenPageMode","Direction","ViewArea","ViewClip","PrintArea","PrintClip","PrintScaling","Duplex","PickTrayByPDFSize","PrintPageRange","NumCopies","configurationKeys","rangeArray","arrayContainsElement","iterator","viewerpreferences","vPref","pdfDict","postPutResources","rdf_beginning","__metadata__","namespaceuri","utf8_xmpmeta_beginning","utf8_rdf_beginning","utf8_metadata","utf8_rdf_ending","utf8_xmpmeta_ending","total_len","metadata_object_number","addMetadata","padz","toUnicode","toUnicodeCmap","codes","range","unicode","unicodeMap","pdfOutput","subset","pdfOutput2","fontTable","cmap","fontDescriptor","PDFObject","bbox","stemV","italicAngle","ascender","decender","capHeight","DescendantFont","identityHFunction","hmtx","unitsPerEm","winAnsiEncodingFunction","utf8TextFunction","cmapConfirm","strText","codeMap","parms","_initializeVFS","vFS","addFileToVFS","filecontent","__bidiEngine__","_hasUbatB","_hasUbatS","_isInVisual","_isInRtl","_isOutVisual","_isOutRtl","_isSymmetricSwapping","_UNICODE_TYPES","_bidiUnicodeTypes","_STATE_TABLE_LTR","_STATE_TABLE_RTL","_TYPE_NAMES_MAP","EN","AN","_UNICODE_RANGES_MAP","_SWAP_TABLE","_LTR_RANGES_REG_EXPR","_lastArabic","_dir","_getCharType","rangeIdx","_isContextualDirRtl","charType","_resolveCharType","chars","types","resolvedTypes","wType","nType","cType","rtlCandidate","_invertString","sourceToTargetMap","levels","_computeLevels","hiLevel","params","action","newLevel","prevState","condPos","newState","stateTable","_handleUbatS","_invertByLevel","high","low","_reorder","_symmetricSwap","DIR_RTL","doBidiReorder","_init","isSymmetricSwappingOrig","isInputVisual","isOutputVisual","isInputRtl","isOutputRtl","isSymmetricSwapping","bidiEngine","Data","readString","Subset","registerTTF","directory","Directory","HeadTable","NameTable","CmapTable","hhea","HheaTable","maxp","MaxpTable","HmtxTable","PostTable","os2","OS2Table","loca","LocaTable","glyf","GlyfTable","exists","lineGap","xMin","yMin","xMax","yMax","raw","italic_angle","xHeight","familyClass","isSerif","isScript","isFixedPitch","character","glyph","forGlyph","advance","includeGap","gap","Table","readByte","writeUInt32","readInt32","int","writeInt32","writeUInt16","readInt16","writeInt16","writeString","readShort","writeShort","readLongLong","writeLongLong","readInt","writeInt","checksum","scalarType","tableCount","searchRange","entrySelector","rangeShift","tables","tag","adjustment","directoryLength","headOffset","log2","tableData","__slice","__hasProp","__extends","ctor","__super__","_super","revision","checkSumAdjustment","magicNumber","created","modified","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","CmapEntry","endCode","glyphId","glyphIds","idDelta","idRangeOffset","saveOffset","segCount","segCountX2","startCode","platformID","encodingID","language","charmap","charMap","diff","endCodes","glyphIDs","indexes","last","nextID","old","rangeOffsets","startCodes","startGlyph","subtable","_len1","_len2","_len3","_len4","_len5","_len6","_len7","_n","_name","_o","_p","_q","new","maxGlyphID","LN2","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","charRange","vendorID","selection","firstCharIndex","lastCharIndex","ascent","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContext","numberOfGlyphs","underlinePosition","underlineThickness","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","_results1","numGlyphs","NameEntry","languageID","entries","stringOffset","strings","nameID","copyright","fontSubfamily","uniqueSubfamily","postscriptName","trademark","manufacturer","designer","description","vendorUrl","designerUrl","license","licenseUrl","preferredFamily","preferredSubfamily","compatibleFull","sampleText","maxPoints","maxContours","maxCompositePoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","lsbCount","lsb","leftSideBearings","cache","glyphFor","numberOfContours","lengthOf","CompoundGlyph","SimpleGlyph","glyphs","mapping","old2new","compound","glyphOffsets","activeGlyphs","glyfPtr","listGlyf","newLocaTable","unicodes","next","generateCmap","roman","unicodeCmap","glyphsFor","additionalIDs","glyID","ids","new2old","newIDs","nextGlyphID","oldID","oldIDs","invert","isString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds"],"mappings":"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K,IAAI16D,MAAM,IACf26D,EAAU,GACVC,EAAU,EACVC,EAAU,EAEVC,EAAM,IAAI96D,MAAM,IAChB+6D,EAAM,IAAI/6D,MAAM,IAChBg7D,EAAM,IAAIh7D,MAAM,IAChB4mD,EAAM,IAAI5mD,MAAM,KAChBi7D,EAAgB,IAAIj7D,MAAM,MAG1Bk7D,EAAS,CACX,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IAGEC,EAA2B,CAC7B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEEC,EAA0B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC7DC,EAA2B,CAC7B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAEEC,EAA0B,CAC5B,EACA,EACA,EACA,EACA,EACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,EACA,GACA,IACA,GACA,GACA,IACA,IACA,IACA,EACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAGEC,EAA6B,CAC/B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEEC,EAA4B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC/DC,EAA6B,CAC/B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAEEC,EAA4B,CAC9B,EACA,EACA,EACA,EACA,GACA,EACA,EACA,GACA,GACA,EACA,GACA,GACA,GACA,EACA,GACA,IACA,GACA,GACA,GACA,IACA,EACA,GACA,GACA,IACA,IACA,IACA,IACA,EACA,GACA,GACA,GACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA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AAGA,GAAYH,IAAOG,EACxClE,EAAUW,GACZsD,GAAsB,GAExBjf,EAAM,MAAQyZ,EAAG99D,GACjBq/D,EAAUS,GAAMwD,GAAY,GAAK1F,EAASvZ,KAC1Cgb,EAAU1B,EAAQtZ,IAClBrkD,WA5CQ,IA8CNmjE,GACF9D,EAAUU,GAELH,WA8HA4D,EAAWtS,IAClBA,EAAUvrD,KAAKsb,IAAItb,KAAK+mC,IAAIwkB,EAAS,GAAI,KAErCmM,GAAkBnM,eA1qBCuS,WACnBC,EAAM,CACR,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IAGO1jE,EAAI,EAAGA,EAAI,GAAIA,IAAK,KACvBwB,EAAI87D,GAAQoG,EAAI1jE,GAAKyjE,EAAK,IAAM,KACpCjiE,EAAImE,KAAKsb,IAAItb,KAAK+mC,IAAIlrC,EAAG,GAAI,KAC7B+7D,EAAOe,EAAOt+D,IAAMwB,UAElBmiE,EAAO,CACT,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IAEOthE,EAAI,EAAGA,EAAI,GAAIA,IAAK,KACvBuhE,EAAItG,GAAQqG,EAAKthE,GAAKohE,EAAK,IAAM,KACrCG,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KwV,EAAKtV,GAAKgB,GAAKtN,EAAE62E,GAAMvqE,GAAK,MAAQtM,EAAEklC,QAE5D54B,EAAI,EACTtM,EAAIsM,EAAI,EAAI,UAGZ,GAAKtM,SACD8M,GAAKA,EAAEygD,KAAOvtD,EAAI4gF,GAAG7zE,IADV/M,MAIjB8yE,GAAK,GACPmB,GAAK,CACH,EACA,EACA,EACA,EACA,GACA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,UAEFD,GAAK,GACLF,GAAK,GACLM,GAAK,EACLC,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EA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GAAI,GAAI,IACpEvD,GAAK,CACH,GACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,EACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,EACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,GACA,GACA,EACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,GACA,KAEFiD,GAAK,CACH,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEFX,GAAK,EACLuC,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEFlK,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEF3B,GAAK,KACLqO,GAAK,CACH,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,IAAK,GACrB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,GAC1B,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAE1DC,GAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IACxDtJ,GAAK,EAAE,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GACnEmJ,GAAK,CACH,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAChD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEpD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEpD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEpD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEpD,CACE,CAAC,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC/C,CAAC,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClD,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAClD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEpD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClD,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEpD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC/C,CAAC,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGrD,CACE,CACE,CAAC,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAChD,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClD,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEpD,CACE,CAAC,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAChD,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAChD,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClD,CAAC,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClD,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAChD,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEpD,CACE,CAAC,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAChD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEpD,CACE,CAAC,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClD,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAEnD,CACE,CAAC,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC/C,CAAC,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjD,CAAC,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,QAIvD0C,GAAK,CACH,CACE,CAAC,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,KACvC,CAAC,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,IACtC,CAAC,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,KACpC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KACpC,CAAC,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,KACpC,CAAC,IAAK,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,IACnC,CAAC,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,IACrC,CAAC,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,IACrC,CAAC,GAAI,GAAI,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,KAClC,CAAC,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,KAEpC,CACE,CAAC,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,KACvC,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IACtC,CAAC,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,KACpC,CAAC,GAAI,GAAI,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,KAClC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,KACnC,CAAC,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,KACpC,CAAC,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,GACpC,CAAC,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,IACnC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KACpC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KAEtC,CACE,CAAC,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,KACpC,CAAC,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IACpC,CAAC,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,KACnC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,IACpC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,IACnC,CAAC,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IACpC,CAAC,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IACjC,CAAC,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,KACpC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KACpC,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KAEnC,CACE,CAAC,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KACtC,CAAC,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KACrC,CAAC,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,KACtC,CAAC,GAAI,GAAI,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,KACnC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KACpC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,EAAG,KACjC,CAAC,IAAK,GAAI,EAAG,GAAI,IAAK,EAAG,GAAI,GAAI,IACjC,CAAC,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,KACrC,CAAC,GAAI,GAAI,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,KACjC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KAEtC,CACE,CAAC,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,KACpC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,KACnC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,KACnC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KACpC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,KACnC,CAAC,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,GAAI,GAAI,KACjC,CAAC,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,GAAI,IACjC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,KACpC,CAAC,GAAI,EAAG,EAAG,IAAK,GAAI,IAAK,GAAI,EAAG,KAChC,CAAC,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,KAEnC,CACE,CAAC,IAAK,GAAI,GAAI,IAAK,EAAG,GAAI,GAAI,IAAK,KACnC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,IAClC,CAAC,GAAI,GAAI,IAAK,IAAK,EAAG,GAAI,GAAI,IAAK,KACnC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KACpC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,KACnC,CAAC,GAAI,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,IAAK,IAChC,CAAC,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,IACpC,CAAC,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,IACnC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,KACnC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,GAAI,KAEpC,CACE,CAAC,IAAK,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,IACrC,CAAC,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IACrC,CAAC,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,GACpC,CAAC,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,IACjC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,EAAG,IACjC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,KACnC,CAAC,IAAK,GAAI,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,GACpC,CAAC,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IACrC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,IACpC,CAAC,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,KAErC,CACE,CAAC,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,KACnC,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,IACnC,CAAC,GAAI,GAAI,IAAK,GAAI,EAAG,GAAI,GAAI,IAAK,KAClC,CAAC,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,IAClC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,GACrC,CAAC,GAAI,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,IAAK,IAClC,CAAC,GAAI,GAAI,EAAG,EAAG,GAAI,IAAK,IAAK,IAAK,IAClC,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GACjC,CAAC,GAAI,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KACpC,CAAC,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,KAErC,CACE,CAAC,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KACrC,CAAC,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,EAAG,KACpC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KACrC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,EAAG,KACnC,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,EAAG,KAChC,CAAC,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,KACpC,CAAC,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,IACnC,CAAC,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,KACpC,CAAC,GAAI,GAAI,EAAG,GAAI,IAAK,IAAK,EAAG,EAAG,KAChC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,MAEtC,CACE,CAAC,IAAK,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,IACpC,CAAC,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,IACnC,CAAC,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACxC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,EAAG,IAClC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KACpC,CAAC,IAAK,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,KACnC,CAAC,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,IACpC,CAAC,IAAK,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,IAAK,IACnC,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,KACpC,CAAC,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,MAGvC3C,GAAK,CACH,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IA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IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,MACA,IACA,MACA,MACA,IACA,MACA,MACA,IACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,MACA,MACA,IACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,KACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,IACA,IACA,IACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,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"}
\ No newline at end of file
diff --git a/content/static/js/main.js b/content/static/js/main.js
index 8c906bc..1b1e4c7 100644
--- a/content/static/js/main.js
+++ b/content/static/js/main.js
@@ -29,7 +29,7 @@ const setHighestPossibleFontSize = (
 	
 	context.font = `${currentSize}px ${font}`;
 	
-	while (context.measureText(text).width > maxWidth) {
+	while (context.measureText(text).width > maxWidth && currentSize > 0) {
 		currentSize -= 1;
 		context.font = `${currentSize}px ${font}`;
 	}
@@ -279,102 +279,250 @@ const fillCanvas = async () => {
 			
 			break;
 	}
-	
-	const currentDate = new Date();
-	const formattedCurrentDate = (
-		currentDate.getDate()
-		+ ". "
-		+ currentDate.getMonth()
-		+ ". "
-		+ currentDate.getFullYear()
-	);
-	
-	setHighestPossibleFontSize(
-		secondPageContext,
-		formattedCurrentDate,
-		"Open Sans",
-		secondPageCanvas.height * 0.013,
-		secondPageCanvas.width * 0.32
-	);
-	
-	secondPageContext.fillText(
-		formattedCurrentDate,
-		secondPageCanvas.width * 0.56, secondPageCanvas.height * 0.232
-	);
 }
 
-window.onload = () => {
-	const autocompleteWidget = new autocomplete.GeocoderAutocomplete(
-		document.getElementById("address-autocomplete"), 
-		AUTOCOMPLETE_API_KEY,
-		{
-			"lang": "cs",
-			"filter": {
-				"countrycode": ["cz"]
-			},
-			"placeholder": "🔎  Vyhledat adresu..."
-		}
-	);
+$(window).ready(
+	() => {
+		const { jsPDF } = window.jspdf;
+		
+		const currentDate = new Date();
+		$("#current-date").val(
+			currentDate.getDate()
+			+ ". "
+			+ currentDate.getMonth()
+			+ ". "
+			+ currentDate.getFullYear()
+		);
+		
+		const autocompleteWidget = new autocomplete.GeocoderAutocomplete(
+			document.getElementById("address-autocomplete"), 
+			AUTOCOMPLETE_API_KEY,
+			{
+				"lang": "cs",
+				"filter": {
+					"countrycode": ["cz"]
+				},
+				"placeholder": "🔎  Vyhledat adresu..."
+			}
+		);
 
-	autocompleteWidget.on(
-		"select",
-		(location) => {
-			const properties = location.properties;
-			
-			const street = (
-				(properties.street !== undefined) ?
-				properties.street : ""
-			);
-			const houseNumber = (
-				(properties.housenumber !== undefined) ?
-				properties.housenumber : ""
-			);
-			
-			document.getElementById("street").value = (
-				street
-				+ (
-					(street !== "") ?
-					" " : ""
-				)
-				+ houseNumber
-			);
-			
-			if (properties.city !== undefined) document.getElementById("city").value = properties.city;
-			if (properties.postcode !== undefined) document.getElementById("zip").value = properties.postcode;
-		}
-	);
-	
-	$("#receiving-type").on(
-		"change",
-		(event) => {
-			if (event.target.value === "Zaslat jinam") {
-				$("#other-address-conditional").css("display", "block");
-			} else {
-				$("#other-address-conditional").css("display", "none");
+		autocompleteWidget.on(
+			"select",
+			(location) => {
+				const properties = location.properties;
+				
+				const street = (
+					(properties.street !== undefined) ?
+					properties.street : ""
+				);
+				const houseNumber = (
+					(properties.housenumber !== undefined) ?
+					properties.housenumber : ""
+				);
+				
+				document.getElementById("street").value = (
+					street
+					+ (
+						(street !== "") ?
+						" " : ""
+					)
+					+ houseNumber
+				);
+				
+				if (properties.city !== undefined) document.getElementById("city").value = properties.city;
+				if (properties.postcode !== undefined) document.getElementById("zip").value = properties.postcode;
 			}
-		}
-	);
-	
-	$("#create-filled-form").on(
-		"click",
-		async (event) => {
-			$("#form-wrapper input,#form-wrapper select").attr("disabled", true);
-			// We already know this, don't waste time looking it up.
-			// Repeating ourselves once is fine here.
-			$(event.target).attr("disabled", true);
-			
-			await fillCanvas();
-			
-			await new Promise(
-				resolve => { $("#step1").fadeOut(200, resolve); }
-			);
-			$("#step1").css("display", "none");
-			
-			$("#step2").css("opacity", "0");
-			$("#step2").css("display", "flex");
-			await new Promise(
-				resolve => { $("#step2").fadeIn(200, resolve); }
-			);
-		}
-	);
-}
+		);
+		
+		$("#receiving-type").on(
+			"change",
+			(event) => {
+				if (event.target.value === "Zaslat jinam") {
+					$("#other-address-conditional").css("display", "block");
+				} else {
+					$("#other-address-conditional").css("display", "none");
+				}
+			}
+		);
+		
+		$("#create-filled-form").on(
+			"click",
+			async (event) => {
+				$("#form-wrapper input,#form-wrapper select").attr("disabled", true);
+				// We already know this, don't waste time looking it up.
+				// Repeating ourselves once is fine here.
+				$(event.target).attr("disabled", true);
+				
+				await fillCanvas();
+				
+				await new Promise(
+					resolve => { $("#step1").fadeOut(200, resolve); }
+				);
+				$("#step1").css("display", "none");
+				
+				await new Promise(
+					resolve => { $("#step2").fadeIn(200, resolve); }
+				);
+				
+				$("#signature").jSignature();
+			}
+		);
+		
+		$("#signature-undo").on(
+			"click",
+			(event) => {
+				$("#signature").jSignature("reset");
+			}
+		);
+		
+		$("#show-document").on(
+			"click",
+			async (event) => {
+				await new Promise(
+					resolve => { $("#step2").fadeOut(200, resolve); }
+				);
+				$("#step2").css("display", "none");
+				
+				await new Promise(
+					resolve => { $("#canvas-wrapper").fadeIn(200, resolve); }
+				);
+			}
+		);
+		
+		$("#back-to-step2").on(
+			"click",
+			async (event) => {
+				await new Promise(
+					resolve => { $("#canvas-wrapper").fadeOut(200, resolve); }
+				);
+				$("#canvas-wrapper").css("display", "none");
+				
+				await new Promise(
+					resolve => { $("#step2").fadeIn(200, resolve); }
+				);
+			}
+		);
+		
+		$("#finish").on(
+			"click",
+			async (event) => {
+				// Canvas
+				
+				const secondPageCanvas = document.getElementById("page-2-canvas");
+				const secondPageContext = secondPageCanvas.getContext("2d");
+				
+				// Date
+				
+				const desiredCurrentDate = $("#current-date").val()
+				
+				setHighestPossibleFontSize(
+					secondPageContext,
+					desiredCurrentDate,
+					"Open Sans",
+					secondPageCanvas.height * 0.013,
+					secondPageCanvas.width * 0.32
+				);
+				
+				secondPageContext.fillText(
+					desiredCurrentDate,
+					secondPageCanvas.width * 0.56, secondPageCanvas.height * 0.232
+				);
+				
+				// Location
+				
+				const location = $("#signature-location").val();
+				
+				setHighestPossibleFontSize(
+					secondPageContext,
+					location,
+					"Open Sans",
+					secondPageCanvas.height * 0.013,
+					secondPageCanvas.width * 0.31
+				);
+				
+				secondPageContext.fillText(
+					location,
+					secondPageCanvas.width * 0.155, secondPageCanvas.height * 0.232
+				);
+				
+				// Signature
+				
+				const signature = await getImage($("#signature").jSignature("getData"));
+				
+				const signatureWidth = secondPageCanvas.width * 0.315;
+				const signatureHeight = (
+					signature.height
+					* (signatureWidth / signature.width)
+				);
+				
+				console.log(signatureHeight, signatureWidth, signature);
+				
+				secondPageContext.drawImage(
+					signature,
+					secondPageCanvas.width * 0.57, secondPageCanvas.height * 0.31 - signatureHeight,
+					signatureWidth, signatureHeight
+				);
+				
+				// UI
+				
+				await new Promise(
+					resolve => { $("#step2").fadeOut(200, resolve); }
+				);
+				$("#step2").css("display", "none");
+				
+				const city = $("#city").val();
+				
+				if (city in OFFICES) {
+					const office = OFFICES[city];
+					
+					$("#office-address-direction").html(
+						office["address"]["street"]
+						+ ", "
+						+ office["address"]["zip"]
+						+ " "
+						+ office["address"]["city"]
+					);
+					
+					$("#office-ds-id-direction").html(office["ds_id"]);
+					
+					$("#found-office").css("display", "block");
+				} else {
+					$("#found-office").css("display", "none");
+				}
+				
+				await new Promise(
+					resolve => { $("#step3").fadeIn(200, resolve); }
+				);
+			}
+		);
+		
+		$("#download-pdf").on(
+			"click",
+			() => {
+				const pdfDocument = new jsPDF({
+					orientation: "portrait",
+					unit: "pt",
+					format: "a4"
+				});
+				
+				pdfDocument.addImage(
+					document.getElementById("page-1-canvas"),
+					"JPEG",
+					0, 0,
+					595.28, 841.89
+				);
+				
+				pdfDocument.addPage();
+				
+				pdfDocument.addImage(
+					document.getElementById("page-2-canvas"),
+					"JPEG",
+					0, 0,
+					595.28, 841.89
+				);
+				
+				pdfDocument.save("Přihláška k volebnímu průkazu.pdf");
+			}
+		);
+	}
+);
diff --git a/content/static/js/offices.js b/content/static/js/offices.js
new file mode 100644
index 0000000..0837591
--- /dev/null
+++ b/content/static/js/offices.js
@@ -0,0 +1,46388 @@
+const OFFICES = {
+    "Abertamy": {
+        "address": {
+            "street": "Farn\u00ed 2",
+            "zip": "362 35",
+            "city": "Abertamy",
+            "district": "Abertamy"
+        },
+        "ds_id": "7v4b7kr"
+    },
+    "Adamov": {
+        "address": {
+            "street": "V chalup\u00e1ch 47",
+            "zip": "373 71",
+            "city": "Adamov",
+            "district": "Adamov"
+        },
+        "ds_id": "q7bb677"
+    },
+    "And\u011blsk\u00e1 Hora": {
+        "address": {
+            "street": "18",
+            "zip": "364 71",
+            "city": "And\u011blsk\u00e1 Hora",
+            "district": "And\u011blsk\u00e1 Hora"
+        },
+        "ds_id": "tjtb453"
+    },
+    "A\u0161": {
+        "address": {
+            "street": "Kamenn\u00e1 473",
+            "zip": "352 01",
+            "city": "A\u0161",
+            "district": "A\u0161"
+        },
+        "ds_id": "5nubqy8"
+    },
+    "Bakov nad Jizerou": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 208",
+            "zip": "294 01",
+            "city": "Bakov nad Jizerou",
+            "district": "Bakov nad Jizerou"
+        },
+        "ds_id": "6xqbfks"
+    },
+    "Bavorov": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed M\u00edru 1",
+            "zip": "387 73",
+            "city": "Bavorov",
+            "district": "Bavorov"
+        },
+        "ds_id": "3skbfjd"
+    },
+    "Be\u010dov nad Teplou": {
+        "address": {
+            "street": "n\u00e1m. 5. kv\u011btna 1",
+            "zip": "364 64",
+            "city": "Be\u010dov nad Teplou",
+            "district": "Be\u010dov nad Teplou"
+        },
+        "ds_id": "szbbfjh"
+    },
+    "Bechyn\u011b": {
+        "address": {
+            "street": "n\u00e1m. T. G. Masaryka 2",
+            "zip": "391 65",
+            "city": "Bechyn\u011b",
+            "district": "Bechyn\u011b"
+        },
+        "ds_id": "sshbg5j"
+    },
+    "B\u011bl\u00e1 nad Radbuzou": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 200",
+            "zip": "345 26",
+            "city": "B\u011bl\u00e1 nad Radbuzou",
+            "district": "B\u011bl\u00e1 nad Radbuzou"
+        },
+        "ds_id": "4jwb3jv"
+    },
+    "B\u011bl\u00e1 pod Bezd\u011bzem": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 90",
+            "zip": "294 21",
+            "city": "B\u011bl\u00e1 pod Bezd\u011bzem",
+            "district": "B\u011bl\u00e1 pod Bezd\u011bzem"
+        },
+        "ds_id": "hy8bg5r"
+    },
+    "B\u011bl\u010dice": {
+        "address": {
+            "street": "n\u00e1m. J. Ku\u010dery 17",
+            "zip": "387 43",
+            "city": "B\u011bl\u010dice",
+            "district": "B\u011bl\u010dice"
+        },
+        "ds_id": "h72bfjp"
+    },
+    "Ben\u00e1tky nad Jizerou": {
+        "address": {
+            "street": "Z\u00e1mek 49",
+            "zip": "294 71",
+            "city": "Ben\u00e1tky nad Jizerou",
+            "district": "Ben\u00e1tky nad Jizerou I"
+        },
+        "ds_id": "wzhbv2s"
+    },
+    "Bene\u0161ov": {
+        "address": {
+            "street": "122",
+            "zip": "679 53",
+            "city": "Bene\u0161ov",
+            "district": "Bene\u0161ov"
+        },
+        "ds_id": "x6vbxsh"
+    },
+    "Bene\u0161ov nad Plou\u010dnic\u00ed": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 1",
+            "zip": "407 22",
+            "city": "Bene\u0161ov nad Plou\u010dnic\u00ed",
+            "district": "Bene\u0161ov nad Plou\u010dnic\u00ed"
+        },
+        "ds_id": "ymgbfiz"
+    },
+    "Beroun": {
+        "address": {
+            "street": "Husovo n\u00e1m. 68",
+            "zip": "266 01",
+            "city": "Beroun",
+            "district": "Beroun-Centrum"
+        },
+        "ds_id": "2gubtq5"
+    },
+    "Bezdru\u017eice": {
+        "address": {
+            "street": "\u010cSA 196",
+            "zip": "349 53",
+            "city": "Bezdru\u017eice",
+            "district": "Bezdru\u017eice"
+        },
+        "ds_id": "b7tbzux"
+    },
+    "B\u00edlina": {
+        "address": {
+            "street": "B\u0159e\u017e\u00e1nsk\u00e1 50",
+            "zip": "418 01",
+            "city": "B\u00edlina",
+            "district": "B\u00edlina"
+        },
+        "ds_id": "qdtb7vx"
+    },
+    "B\u00edlovec": {
+        "address": {
+            "street": "Slezsk\u00e9 n\u00e1m\u011bst\u00ed 1",
+            "zip": "743 01",
+            "city": "B\u00edlovec",
+            "district": "B\u00edlovec"
+        },
+        "ds_id": "y9qbxiy"
+    },
+    "Blansko": {
+        "address": {
+            "street": "n\u00e1m. Svobody 32",
+            "zip": "678 01",
+            "city": "Blansko",
+            "district": "Blansko"
+        },
+        "ds_id": "ecmb355"
+    },
+    "Blatn\u00e1": {
+        "address": {
+            "street": "t\u0159. T. G. Masaryka 322",
+            "zip": "388 01",
+            "city": "Blatn\u00e1",
+            "district": "Blatn\u00e1"
+        },
+        "ds_id": "ih3bzwr"
+    },
+    "Blovice": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 143",
+            "zip": "336 01",
+            "city": "Blovice",
+            "district": "Blovice"
+        },
+        "ds_id": "dv8bxph"
+    },
+    "Bl\u0161any": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 29",
+            "zip": "439 88",
+            "city": "Bl\u0161any",
+            "district": "Bl\u0161any"
+        },
+        "ds_id": "cgdbsqb"
+    },
+    "Bohum\u00edn": {
+        "address": {
+            "street": "Masarykova 158",
+            "zip": "735 81",
+            "city": "Bohum\u00edn",
+            "district": "Nov\u00fd Bohum\u00edn"
+        },
+        "ds_id": "u3kbfuf"
+    },
+    "Bohu\u0161ovice nad Oh\u0159\u00ed": {
+        "address": {
+            "street": "Husovo n\u00e1m\u011bst\u00ed 42",
+            "zip": "411 56",
+            "city": "Bohu\u0161ovice nad Oh\u0159\u00ed",
+            "district": "Bohu\u0161ovice nad Oh\u0159\u00ed"
+        },
+        "ds_id": "ectbffy"
+    },
+    "Bochov": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 1",
+            "zip": "364 71",
+            "city": "Bochov",
+            "district": "Bochov"
+        },
+        "ds_id": "hhxbfgd"
+    },
+    "Bojkovice": {
+        "address": {
+            "street": "Su\u0161ilova 952",
+            "zip": "687 71",
+            "city": "Bojkovice",
+            "district": "Bojkovice"
+        },
+        "ds_id": "5jibfe6"
+    },
+    "Bor": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Republiky 1",
+            "zip": "348 02",
+            "city": "Bor",
+            "district": "Bor"
+        },
+        "ds_id": "7ibbst7"
+    },
+    "Borovany": {
+        "address": {
+            "street": "23",
+            "zip": "398 43",
+            "city": "Borovany",
+            "district": "Borovany"
+        },
+        "ds_id": "rr4bvqi"
+    },
+    "Boskovice": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 4",
+            "zip": "680 01",
+            "city": "Boskovice",
+            "district": "Boskovice"
+        },
+        "ds_id": "qmkbq7h"
+    },
+    "Bo\u017e\u00ed Dar": {
+        "address": {
+            "street": "1",
+            "zip": "362 62",
+            "city": "Bo\u017e\u00ed Dar",
+            "district": "Bo\u017e\u00ed Dar"
+        },
+        "ds_id": "kkcbz7n"
+    },
+    "Brand\u00fds nad Labem-Star\u00e1 Boleslav": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 1",
+            "zip": "250 01",
+            "city": "Brand\u00fds nad Labem-Star\u00e1 Boleslav",
+            "district": "Brand\u00fds nad Labem"
+        },
+        "ds_id": "c5hb7xy"
+    },
+    "Brand\u00fds nad Orlic\u00ed": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed Komensk\u00e9ho 203",
+            "zip": "561 12",
+            "city": "Brand\u00fds nad Orlic\u00ed",
+            "district": "Brand\u00fds nad Orlic\u00ed"
+        },
+        "ds_id": "w9abfcc"
+    },
+    "Brtnice": {
+        "address": {
+            "street": "n\u00e1m. Svobody 379",
+            "zip": "588 32",
+            "city": "Brtnice",
+            "district": "Brtnice"
+        },
+        "ds_id": "d94bz5w"
+    },
+    "Brumov - Bylnice": {
+        "address": {
+            "street": "H. Synkov\u00e9 942",
+            "zip": "763 31",
+            "city": "Brumov-Bylnice",
+            "district": "Brumov"
+        },
+        "ds_id": "rqcb3a2"
+    },
+    "Brunt\u00e1l": {
+        "address": {
+            "street": "N\u00e1dra\u017en\u00ed 994",
+            "zip": "792 01",
+            "city": "Brunt\u00e1l",
+            "district": "Brunt\u00e1l"
+        },
+        "ds_id": "c9vbr2k"
+    },
+    "Bru\u0161perk": {
+        "address": {
+            "street": "K n\u00e1m\u011bst\u00ed 22",
+            "zip": "739 44",
+            "city": "Bru\u0161perk",
+            "district": "Bru\u0161perk"
+        },
+        "ds_id": "37cbe8h"
+    },
+    "B\u0159eclav": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed T. G. Masaryka 42",
+            "zip": "690 02",
+            "city": "B\u0159eclav",
+            "district": "B\u0159eclav"
+        },
+        "ds_id": "fesbhyp"
+    },
+    "B\u0159eznice": {
+        "address": {
+            "street": "48",
+            "zip": "391 71",
+            "city": "B\u0159eznice",
+            "district": "B\u0159eznice"
+        },
+        "ds_id": "4cebi8z"
+    },
+    "B\u0159ezov\u00e1": {
+        "address": {
+            "street": "Hamersk\u00e1 104",
+            "zip": "360 01",
+            "city": "B\u0159ezov\u00e1",
+            "district": "B\u0159ezov\u00e1"
+        },
+        "ds_id": "5f2bsib"
+    },
+    "B\u0159ezov\u00e1 nad Svitavou": {
+        "address": {
+            "street": "Moravsk\u00e9 n\u00e1m\u011bst\u00ed 1",
+            "zip": "569 02",
+            "city": "B\u0159ezov\u00e1 nad Svitavou",
+            "district": "B\u0159ezov\u00e1 nad Svitavou"
+        },
+        "ds_id": "ahkbfb9"
+    },
+    "B\u0159idli\u010dn\u00e1": {
+        "address": {
+            "street": "N\u00e1b\u0159e\u017en\u00ed 452",
+            "zip": "793 51",
+            "city": "B\u0159idli\u010dn\u00e1",
+            "district": "B\u0159idli\u010dn\u00e1"
+        },
+        "ds_id": "f5rbfaq"
+    },
+    "Bu\u010dovice": {
+        "address": {
+            "street": "Jir\u00e1skova 502",
+            "zip": "685 01",
+            "city": "Bu\u010dovice",
+            "district": "Bu\u010dovice"
+        },
+        "ds_id": "td3be8p"
+    },
+    "Budi\u0161ov nad Budi\u0161ovkou": {
+        "address": {
+            "street": "Hala\u0161kovo n\u00e1m\u011bst\u00ed 2",
+            "zip": "747 87",
+            "city": "Budi\u0161ov nad Budi\u0161ovkou",
+            "district": "Budi\u0161ov nad Budi\u0161ovkou"
+        },
+        "ds_id": "iksbe8t"
+    },
+    "Budyn\u011b nad Oh\u0159\u00ed": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 65",
+            "zip": "411 18",
+            "city": "Budyn\u011b nad Oh\u0159\u00ed",
+            "district": "Budyn\u011b nad Oh\u0159\u00ed"
+        },
+        "ds_id": "9thbe7y"
+    },
+    "Bu\u0161t\u011bhrad": {
+        "address": {
+            "street": "Revolu\u010dn\u00ed 1",
+            "zip": "273 43",
+            "city": "Bu\u0161t\u011bhrad",
+            "district": "Bu\u0161t\u011bhrad"
+        },
+        "ds_id": "pmdbg47"
+    },
+    "Bystr\u00e9": {
+        "address": {
+            "street": "n\u00e1m. Na podkov\u011b 2",
+            "zip": "569 92",
+            "city": "Bystr\u00e9",
+            "district": "Bystr\u00e9"
+        },
+        "ds_id": "22nbxdq"
+    },
+    "Byst\u0159ice": {
+        "address": {
+            "street": "334",
+            "zip": "739 95",
+            "city": "Byst\u0159ice",
+            "district": "Byst\u0159ice"
+        },
+        "ds_id": "cg6b2a6"
+    },
+    "Byst\u0159ice nad Pern\u0161tejnem": {
+        "address": {
+            "street": "P\u0159\u00ed\u010dn\u00ed 405",
+            "zip": "593 01",
+            "city": "Byst\u0159ice nad Pern\u0161tejnem",
+            "district": "Byst\u0159ice nad Pern\u0161tejnem"
+        },
+        "ds_id": "b3mbs36"
+    },
+    "Byst\u0159ice pod Host\u00fdnem": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 137",
+            "zip": "768 61",
+            "city": "Byst\u0159ice pod Host\u00fdnem",
+            "district": "Byst\u0159ice pod Host\u00fdnem"
+        },
+        "ds_id": "vqqbu36"
+    },
+    "Bzenec": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 73",
+            "zip": "696 81",
+            "city": "Bzenec",
+            "district": "Bzenec"
+        },
+        "ds_id": "uyvb2ie"
+    },
+    "Cvikov": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed Osvobozen\u00ed 63",
+            "zip": "471 54",
+            "city": "Cvikov",
+            "district": "Cvikov I"
+        },
+        "ds_id": "4j4bevp"
+    },
+    "\u010c\u00e1slav": {
+        "address": {
+            "street": "n\u00e1m. Jana \u017di\u017eky z Trocnova 1",
+            "zip": "286 01",
+            "city": "\u010c\u00e1slav",
+            "district": "\u010c\u00e1slav-Star\u00e9 M\u011bsto"
+        },
+        "ds_id": "ffnbe7e"
+    },
+    "\u010cel\u00e1kovice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 5. kv\u011btna 1",
+            "zip": "250 88",
+            "city": "\u010cel\u00e1kovice",
+            "district": "\u010cel\u00e1kovice"
+        },
+        "ds_id": "fn6bxia"
+    },
+    "\u010cerno\u0161\u00edn": {
+        "address": {
+            "street": "n\u00e1m. 1. m\u00e1je 62",
+            "zip": "349 58",
+            "city": "\u010cerno\u0161\u00edn",
+            "district": "\u010cerno\u0161\u00edn"
+        },
+        "ds_id": "85ebe4n"
+    },
+    "\u010cernovice": {
+        "address": {
+            "street": "113",
+            "zip": "679 75",
+            "city": "\u010cernovice",
+            "district": "\u010cernovice"
+        },
+        "ds_id": "aijaz7x"
+    },
+    "\u010cerven\u00e1 \u0158e\u010dice": {
+        "address": {
+            "street": "19",
+            "zip": "394 46",
+            "city": "\u010cerven\u00e1 \u0158e\u010dice",
+            "district": "\u010cerven\u00e1 \u0158e\u010dice"
+        },
+        "ds_id": "5yabe39"
+    },
+    "\u010cesk\u00e1 Kamenice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed M\u00edru 219",
+            "zip": "407 21",
+            "city": "\u010cesk\u00e1 Kamenice",
+            "district": "\u010cesk\u00e1 Kamenice"
+        },
+        "ds_id": "cu5bsdg"
+    },
+    "\u010cesk\u00e1 L\u00edpa": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed T. G. Masaryka 1",
+            "zip": "470 01",
+            "city": "\u010cesk\u00e1 L\u00edpa",
+            "district": "\u010cesk\u00e1 L\u00edpa"
+        },
+        "ds_id": "bkfbe3p"
+    },
+    "\u010cesk\u00e1 T\u0159ebov\u00e1": {
+        "address": {
+            "street": "Star\u00e9 n\u00e1m\u011bst\u00ed 78",
+            "zip": "560 02",
+            "city": "\u010cesk\u00e1 T\u0159ebov\u00e1",
+            "district": "\u010cesk\u00e1 T\u0159ebov\u00e1"
+        },
+        "ds_id": "bhqbzrn"
+    },
+    "\u010cesk\u00e9 Velenice": {
+        "address": {
+            "street": "Revolu\u010dn\u00ed 228",
+            "zip": "378 10",
+            "city": "\u010cesk\u00e9 Velenice",
+            "district": "\u010cesk\u00e9 Velenice"
+        },
+        "ds_id": "wwvb6dn"
+    },
+    "\u010cesk\u00fd Brod": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Husovo 70",
+            "zip": "282 01",
+            "city": "\u010cesk\u00fd Brod",
+            "district": "\u010cesk\u00fd Brod"
+        },
+        "ds_id": "jgqbsve"
+    },
+    "\u010cesk\u00fd Dub": {
+        "address": {
+            "street": "n\u00e1m. Bed\u0159icha Smetany 1",
+            "zip": "463 43",
+            "city": "\u010cesk\u00fd Dub",
+            "district": "\u010cesk\u00fd Dub I"
+        },
+        "ds_id": "4c4b45x"
+    },
+    "\u010cesk\u00fd Krumlov": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svornosti 1",
+            "zip": "381 01",
+            "city": "\u010cesk\u00fd Krumlov",
+            "district": "Vnit\u0159n\u00ed M\u011bsto"
+        },
+        "ds_id": "64pbvxc"
+    },
+    "\u010cesk\u00fd T\u011b\u0161\u00edn": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed \u010cSA 1",
+            "zip": "737 01",
+            "city": "\u010cesk\u00fd T\u011b\u0161\u00edn",
+            "district": "\u010cesk\u00fd T\u011b\u0161\u00edn"
+        },
+        "ds_id": "dicbu92"
+    },
+    "Da\u010dice": {
+        "address": {
+            "street": "Kraj\u00ed\u0159ova 27",
+            "zip": "380 01",
+            "city": "Da\u010dice",
+            "district": "Da\u010dice I"
+        },
+        "ds_id": "s5ebypd"
+    },
+    "Da\u0161ice": {
+        "address": {
+            "street": "Komensk\u00e9ho 25",
+            "zip": "533 03",
+            "city": "Da\u0161ice",
+            "district": "Da\u0161ice"
+        },
+        "ds_id": "95mbn7y"
+    },
+    "Desn\u00e1": {
+        "address": {
+            "street": "100",
+            "zip": "570 01",
+            "city": "Desn\u00e1",
+            "district": "Desn\u00e1"
+        },
+        "ds_id": "gika4ku"
+    },
+    "De\u0161tn\u00e1": {
+        "address": {
+            "street": "61",
+            "zip": "679 61",
+            "city": "De\u0161tn\u00e1",
+            "district": "De\u0161tn\u00e1"
+        },
+        "ds_id": "t45az7p"
+    },
+    "Dobrovice": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m\u011bst\u00ed 28",
+            "zip": "294 41",
+            "city": "Dobrovice",
+            "district": "Dobrovice"
+        },
+        "ds_id": "gwabtqc"
+    },
+    "Dobru\u0161ka": {
+        "address": {
+            "street": "n\u00e1m. F. L. V\u011bka 11",
+            "zip": "518 01",
+            "city": "Dobru\u0161ka",
+            "district": "Dobru\u0161ka"
+        },
+        "ds_id": "mgjbetz"
+    },
+    "Dob\u0159any": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed T. G. M. 1",
+            "zip": "334 41",
+            "city": "Dob\u0159any",
+            "district": "Dob\u0159any"
+        },
+        "ds_id": "9y9b44e"
+    },
+    "Dob\u0159ichovice": {
+        "address": {
+            "street": "V\u00edtova 61",
+            "zip": "252 29",
+            "city": "Dob\u0159ichovice",
+            "district": "Dob\u0159ichovice"
+        },
+        "ds_id": "v9ubetv"
+    },
+    "Dob\u0159\u00ed\u0161": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 119",
+            "zip": "263 01",
+            "city": "Dob\u0159\u00ed\u0161",
+            "district": "Dob\u0159\u00ed\u0161"
+        },
+        "ds_id": "pnxbx8u"
+    },
+    "Doksy": {
+        "address": {
+            "street": "Sokolsk\u00e1 305",
+            "zip": "273 64",
+            "city": "Doksy",
+            "district": "Doksy"
+        },
+        "ds_id": "u49bkm2"
+    },
+    "Doln\u00ed Bene\u0161ov": {
+        "address": {
+            "street": "H\u00e1jeck\u00e1 65",
+            "zip": "747 22",
+            "city": "Doln\u00ed Bene\u0161ov",
+            "district": "Doln\u00ed Bene\u0161ov"
+        },
+        "ds_id": "s4qbesg"
+    },
+    "Doln\u00ed Bousov": {
+        "address": {
+            "street": "n\u00e1m. T. G. Masaryka 1",
+            "zip": "294 04",
+            "city": "Doln\u00ed Bousov",
+            "district": "Doln\u00ed Bousov"
+        },
+        "ds_id": "ibfbesk"
+    },
+    "Doln\u00ed Kounice": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 66",
+            "zip": "664 64",
+            "city": "Doln\u00ed Kounice",
+            "district": "Doln\u00ed Kounice"
+        },
+        "ds_id": "52tbg3i"
+    },
+    "Doln\u00ed Poustevna": {
+        "address": {
+            "street": "Vil\u00e9movsk\u00e1 77",
+            "zip": "407 82",
+            "city": "Doln\u00ed Poustevna",
+            "district": "Doln\u00ed Poustevna"
+        },
+        "ds_id": "s2vbwp6"
+    },
+    "Doma\u017elice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 1",
+            "zip": "344 01",
+            "city": "Doma\u017elice",
+            "district": "M\u011bsto"
+        },
+        "ds_id": "q25byeg"
+    },
+    "Dub\u00e1": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 138",
+            "zip": "471 41",
+            "city": "Dub\u00e1",
+            "district": "Dub\u00e1"
+        },
+        "ds_id": "75ybej8"
+    },
+    "Dub\u00ed": {
+        "address": {
+            "street": "Rusk\u00e1 264",
+            "zip": "417 01",
+            "city": "Dub\u00ed",
+            "district": "Dub\u00ed"
+        },
+        "ds_id": "fg8bwb3"
+    },
+    "Dub\u0148any": {
+        "address": {
+            "street": "N\u00e1m. 15.dubna 1149",
+            "zip": "696 03",
+            "city": "Dub\u0148any",
+            "district": "Dub\u0148any"
+        },
+        "ds_id": "dr5bejn"
+    },
+    "Duchcov": {
+        "address": {
+            "street": "n\u00e1m. Republiky 20",
+            "zip": "419 01",
+            "city": "Duchcov",
+            "district": "Duchcov"
+        },
+        "ds_id": "jeabei3"
+    },
+    "Dv\u016fr Kr\u00e1lov\u00e9 nad Labem": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed T. G. Masaryka 38",
+            "zip": "544 01",
+            "city": "Dv\u016fr Kr\u00e1lov\u00e9 nad Labem",
+            "district": "Dv\u016fr Kr\u00e1lov\u00e9 nad Labem"
+        },
+        "ds_id": "mu5b26c"
+    },
+    "Franti\u0161kovy L\u00e1zn\u011b": {
+        "address": {
+            "street": "N\u00e1dra\u017en\u00ed 208",
+            "zip": "351 01",
+            "city": "Franti\u0161kovy L\u00e1zn\u011b",
+            "district": "Franti\u0161kovy L\u00e1zn\u011b"
+        },
+        "ds_id": "4sqbzzr"
+    },
+    "Fren\u0161t\u00e1t pod Radho\u0161t\u011bm": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 1",
+            "zip": "744 01",
+            "city": "Fren\u0161t\u00e1t pod Radho\u0161t\u011bm",
+            "district": "Fren\u0161t\u00e1t pod Radho\u0161t\u011bm"
+        },
+        "ds_id": "vz9a8t8"
+    },
+    "Fr\u00fddlant": {
+        "address": {
+            "street": "n\u00e1m. T. G. Masaryka 37",
+            "zip": "464 01",
+            "city": "Fr\u00fddlant",
+            "district": "Fr\u00fddlant"
+        },
+        "ds_id": "t27bufd"
+    },
+    "Fr\u00fddlant nad Ostravic\u00ed": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 3",
+            "zip": "739 11",
+            "city": "Fr\u00fddlant nad Ostravic\u00ed",
+            "district": "Fr\u00fddlant"
+        },
+        "ds_id": "7fvbegw"
+    },
+    "Fry\u0161t\u00e1k": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 43",
+            "zip": "763 16",
+            "city": "Fry\u0161t\u00e1k",
+            "district": "Fry\u0161t\u00e1k"
+        },
+        "ds_id": "mvbbeg5"
+    },
+    "Fulnek": {
+        "address": {
+            "street": "n\u00e1m. Komensk\u00e9ho 12",
+            "zip": "742 45",
+            "city": "Fulnek",
+            "district": "Fulnek"
+        },
+        "ds_id": "7fsbqty"
+    },
+    "Gol\u010d\u016fv Jen\u00edkov": {
+        "address": {
+            "street": "N\u00e1m. T. G. Masaryka 110",
+            "zip": "582 82",
+            "city": "Gol\u010d\u016fv Jen\u00edkov",
+            "district": "Gol\u010d\u016fv Jen\u00edkov"
+        },
+        "ds_id": "c32begb"
+    },
+    "Habartov": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed P\u0159\u00e1telstv\u00ed 112",
+            "zip": "357 09",
+            "city": "Habartov",
+            "district": "Habartov"
+        },
+        "ds_id": "s63b5gx"
+    },
+    "Habry": {
+        "address": {
+            "street": "\u017di\u017ekovo n\u00e1m. 66",
+            "zip": "582 81",
+            "city": "Habry",
+            "district": "Habry"
+        },
+        "ds_id": "4arbefh"
+    },
+    "Hanu\u0161ovice": {
+        "address": {
+            "street": "Hlavn\u00ed 92",
+            "zip": "788 33",
+            "city": "Hanu\u0161ovice",
+            "district": "Hanu\u0161ovice"
+        },
+        "ds_id": "9wwbeey"
+    },
+    "Harrachov": {
+        "address": {
+            "street": "150",
+            "zip": "512 46",
+            "city": "Harrachov",
+            "district": "Harrachov"
+        },
+        "ds_id": "y5mbee4"
+    },
+    "Hartmanice": {
+        "address": {
+            "street": "109",
+            "zip": "569 92",
+            "city": "Hartmanice",
+            "district": "Hartmanice"
+        },
+        "ds_id": "nuua4nm"
+    },
+    "Havl\u00ed\u010dk\u016fv Brod": {
+        "address": {
+            "street": "Havl\u00ed\u010dkovo n\u00e1m\u011bst\u00ed 57",
+            "zip": "580 01",
+            "city": "Havl\u00ed\u010dk\u016fv Brod",
+            "district": "Havl\u00ed\u010dk\u016fv Brod"
+        },
+        "ds_id": "5uvbfub"
+    },
+    "Hejnice": {
+        "address": {
+            "street": "66",
+            "zip": "564 01",
+            "city": "Hejnice",
+            "district": "Hejnice"
+        },
+        "ds_id": "uy6a3h8"
+    },
+    "He\u0159man\u016fv M\u011bstec": {
+        "address": {
+            "street": "Havl\u00ed\u010dkova 801",
+            "zip": "538 03",
+            "city": "He\u0159man\u016fv M\u011bstec",
+            "district": "He\u0159man\u016fv M\u011bstec"
+        },
+        "ds_id": "n5wb35z"
+    },
+    "Hlinsko": {
+        "address": {
+            "street": "13",
+            "zip": "751 31",
+            "city": "Hlinsko",
+            "district": "Hlinsko"
+        },
+        "ds_id": "uiraw3i"
+    },
+    "Hlubok\u00e1 nad Vltavou": {
+        "address": {
+            "street": "Masarykova 36",
+            "zip": "373 41",
+            "city": "Hlubok\u00e1 nad Vltavou",
+            "district": "Hlubok\u00e1 nad Vltavou"
+        },
+        "ds_id": "cdxbedz"
+    },
+    "Hlu\u010d\u00edn": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 24",
+            "zip": "748 01",
+            "city": "Hlu\u010d\u00edn",
+            "district": "Hlu\u010d\u00edn"
+        },
+        "ds_id": "mfpbhkb"
+    },
+    "Hluk": {
+        "address": {
+            "street": "H\u0159bitovn\u00ed 140",
+            "zip": "687 25",
+            "city": "Hluk",
+            "district": "Hluk"
+        },
+        "ds_id": "uhkbyvz"
+    },
+    "Hodkovice nad Mohelkou": {
+        "address": {
+            "street": "n\u00e1m. T. G. Masaryka 1",
+            "zip": "463 42",
+            "city": "Hodkovice nad Mohelkou",
+            "district": "Hodkovice nad Mohelkou"
+        },
+        "ds_id": "d6pb2ww"
+    },
+    "Hodon\u00edn": {
+        "address": {
+            "street": "25",
+            "zip": "679 75",
+            "city": "Hodon\u00edn",
+            "district": "Hodon\u00edn"
+        },
+        "ds_id": "g9jazwu"
+    },
+    "Hole\u0161ov": {
+        "address": {
+            "street": "Masarykova 628",
+            "zip": "769 01",
+            "city": "Hole\u0161ov",
+            "district": "Hole\u0161ov"
+        },
+        "ds_id": "x8qbfvu"
+    },
+    "Holice": {
+        "address": {
+            "street": "Holubova 1",
+            "zip": "534 01",
+            "city": "Holice",
+            "district": "Holice"
+        },
+        "ds_id": "hwkbrgj"
+    },
+    "Hol\u00fd\u0161ov": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 5. kv\u011btna 32",
+            "zip": "345 62",
+            "city": "Hol\u00fd\u0161ov",
+            "district": "Hol\u00fd\u0161ov"
+        },
+        "ds_id": "yfibebs"
+    },
+    "Hora Svat\u00e9 Kate\u0159iny": {
+        "address": {
+            "street": "Dlouh\u00e1 261",
+            "zip": "435 46",
+            "city": "Hora Svat\u00e9 Kate\u0159iny",
+            "district": "Hora Svat\u00e9 Kate\u0159iny"
+        },
+        "ds_id": "pm9beby"
+    },
+    "Hora\u017e\u010fovice": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 1",
+            "zip": "341 01",
+            "city": "Hora\u017e\u010fovice",
+            "district": "Hora\u017e\u010fovice"
+        },
+        "ds_id": "ubnbxnt"
+    },
+    "Horn\u00ed Bene\u0161ov": {
+        "address": {
+            "street": "Masarykova 32",
+            "zip": "793 12",
+            "city": "Horn\u00ed Bene\u0161ov",
+            "district": "Horn\u00ed Bene\u0161ov"
+        },
+        "ds_id": "sxgbxg6"
+    },
+    "Horn\u00ed Blatn\u00e1": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Sv. Vav\u0159ince 1",
+            "zip": "362 35",
+            "city": "Horn\u00ed Blatn\u00e1",
+            "district": "Horn\u00ed Blatn\u00e1"
+        },
+        "ds_id": "8duamir"
+    },
+    "Horn\u00ed B\u0159\u00edza": {
+        "address": {
+            "street": "T\u0159\u00edda 1. m\u00e1je 300",
+            "zip": "330 12",
+            "city": "Horn\u00ed B\u0159\u00edza",
+            "district": "Horn\u00ed B\u0159\u00edza"
+        },
+        "ds_id": "hbzbd96"
+    },
+    "Horn\u00ed Cerekev": {
+        "address": {
+            "street": "n\u00e1m. T. G. Masaryka 41",
+            "zip": "394 03",
+            "city": "Horn\u00ed Cerekev",
+            "district": "Horn\u00ed Cerekev"
+        },
+        "ds_id": "xrfbd8g"
+    },
+    "Horn\u00ed Jelen\u00ed": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Komensk\u00e9ho 114",
+            "zip": "533 74",
+            "city": "Horn\u00ed Jelen\u00ed",
+            "district": "Horn\u00ed Jelen\u00ed"
+        },
+        "ds_id": "5dkbd7x"
+    },
+    "Horn\u00ed Ji\u0159et\u00edn": {
+        "address": {
+            "street": "Poto\u010dn\u00ed 15",
+            "zip": "435 43",
+            "city": "Horn\u00ed Ji\u0159et\u00edn",
+            "district": "Horn\u00ed Ji\u0159et\u00edn"
+        },
+        "ds_id": "fp2burz"
+    },
+    "Horn\u00ed Plan\u00e1": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 54",
+            "zip": "382 26",
+            "city": "Horn\u00ed Plan\u00e1",
+            "district": "Horn\u00ed Plan\u00e1"
+        },
+        "ds_id": "re7bd6q"
+    },
+    "Horn\u00ed Slavkov": {
+        "address": {
+            "street": "Dlouh\u00e1 634",
+            "zip": "357 31",
+            "city": "Horn\u00ed Slavkov",
+            "district": "Horn\u00ed Slavkov"
+        },
+        "ds_id": "pm6bqn3"
+    },
+    "Hor\u0161ovsk\u00fd T\u00fdn": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Republiky 52",
+            "zip": "346 01",
+            "city": "Hor\u0161ovsk\u00fd T\u00fdn",
+            "district": "M\u011bsto"
+        },
+        "ds_id": "zgibvyv"
+    },
+    "Ho\u0159ice": {
+        "address": {
+            "street": "47",
+            "zip": "396 01",
+            "city": "Ho\u0159ice",
+            "district": "Ho\u0159ice"
+        },
+        "ds_id": "h4fb42u"
+    },
+    "Ho\u0159ovice": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m\u011bst\u00ed 2",
+            "zip": "268 01",
+            "city": "Ho\u0159ovice",
+            "district": "Ho\u0159ovice"
+        },
+        "ds_id": "yjmbxfn"
+    },
+    "Hostinn\u00e9": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 69",
+            "zip": "543 71",
+            "city": "Hostinn\u00e9",
+            "district": "Hostinn\u00e9"
+        },
+        "ds_id": "dgsbd5f"
+    },
+    "Hostivice": {
+        "address": {
+            "street": "Husovo n\u00e1m\u011bst\u00ed 13",
+            "zip": "253 01",
+            "city": "Hostivice",
+            "district": "Hostivice"
+        },
+        "ds_id": "cdrb236"
+    },
+    "Hostomice": {
+        "address": {
+            "street": "Ml\u00fdnsk\u00e1 158",
+            "zip": "417 52",
+            "city": "Hostomice",
+            "district": "Hostomice"
+        },
+        "ds_id": "tv8bd4s"
+    },
+    "Hostou\u0148": {
+        "address": {
+            "street": "Kladensk\u00e1 119",
+            "zip": "273 53",
+            "city": "Hostou\u0148",
+            "district": "Hostou\u0148"
+        },
+        "ds_id": "i94a7re"
+    },
+    "Ho\u0161tka": {
+        "address": {
+            "street": "n\u00e1m. Svobody 2",
+            "zip": "411 72",
+            "city": "Ho\u0161tka",
+            "district": "Ho\u0161tka"
+        },
+        "ds_id": "4phbd4m"
+    },
+    "Hradec nad Moravic\u00ed": {
+        "address": {
+            "street": "Opavsk\u00e1 265",
+            "zip": "747 41",
+            "city": "Hradec nad Moravic\u00ed",
+            "district": "Hradec nad Moravic\u00ed"
+        },
+        "ds_id": "bybbhh4"
+    },
+    "Hr\u00e1dek": {
+        "address": {
+            "street": "78",
+            "zip": "342 01",
+            "city": "Hr\u00e1dek",
+            "district": "Hr\u00e1dek"
+        },
+        "ds_id": "668bxxm"
+    },
+    "Hr\u00e1dek nad Nisou": {
+        "address": {
+            "street": "Horn\u00ed n\u00e1m\u011bst\u00ed 73",
+            "zip": "463 34",
+            "city": "Hr\u00e1dek nad Nisou",
+            "district": "Hr\u00e1dek nad Nisou"
+        },
+        "ds_id": "4tkbw8g"
+    },
+    "Hranice": {
+        "address": {
+            "street": "86",
+            "zip": "374 01",
+            "city": "Hranice",
+            "district": "Hranice"
+        },
+        "ds_id": "acfbmnu"
+    },
+    "Hrob": {
+        "address": {
+            "street": "U Radnice 234",
+            "zip": "417 04",
+            "city": "Hrob",
+            "district": "Hrob"
+        },
+        "ds_id": "tbcbzwj"
+    },
+    "Hroch\u016fv T\u00fdnec": {
+        "address": {
+            "street": "Smetanova 25",
+            "zip": "538 62",
+            "city": "Hroch\u016fv T\u00fdnec",
+            "district": "Hroch\u016fv T\u00fdnec"
+        },
+        "ds_id": "mjybd2z"
+    },
+    "Hrotovice": {
+        "address": {
+            "street": "n\u00e1m. 8. kv\u011btna 1",
+            "zip": "675 55",
+            "city": "Hrotovice",
+            "district": "Hrotovice"
+        },
+        "ds_id": "3zebdza"
+    },
+    "Hrozn\u011bt\u00edn": {
+        "address": {
+            "street": "Kru\u0161nohorsk\u00e9 n\u00e1m\u011bst\u00ed 1",
+            "zip": "362 33",
+            "city": "Hrozn\u011bt\u00edn",
+            "district": "Hrozn\u011bt\u00edn"
+        },
+        "ds_id": "s75bdzg"
+    },
+    "Hru\u0161ovany nad Jevi\u0161ovkou": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 22",
+            "zip": "671 67",
+            "city": "Hru\u0161ovany nad Jevi\u0161ovkou",
+            "district": "Hru\u0161ovany nad Jevi\u0161ovkou"
+        },
+        "ds_id": "yuabdyv"
+    },
+    "Hul\u00edn": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 162",
+            "zip": "768 24",
+            "city": "Hul\u00edn",
+            "district": "Hul\u00edn"
+        },
+        "ds_id": "2prbftx"
+    },
+    "Humpolec": {
+        "address": {
+            "street": "Horn\u00ed n\u00e1m\u011bst\u00ed 300",
+            "zip": "396 01",
+            "city": "Humpolec",
+            "district": "Humpolec"
+        },
+        "ds_id": "6gfbdxd"
+    },
+    "Husinec": {
+        "address": {
+            "street": "Prokopovo n\u00e1m\u011bst\u00ed 1",
+            "zip": "384 21",
+            "city": "Husinec",
+            "district": "Husinec"
+        },
+        "ds_id": "vn6bdxj"
+    },
+    "Hustope\u010de": {
+        "address": {
+            "street": "Dukelsk\u00e9 n\u00e1m. 2",
+            "zip": "693 01",
+            "city": "Hustope\u010de",
+            "district": "Hustope\u010de"
+        },
+        "ds_id": "z34bt3y"
+    },
+    "Chaba\u0159ovice": {
+        "address": {
+            "street": "Husovo n\u00e1m\u011bst\u00ed 183",
+            "zip": "403 17",
+            "city": "Chaba\u0159ovice",
+            "district": "Chaba\u0159ovice"
+        },
+        "ds_id": "7hfbvkh"
+    },
+    "Cheb": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Kr\u00e1le Ji\u0159\u00edho z Pod\u011bbrad 1",
+            "zip": "350 02",
+            "city": "Cheb",
+            "district": "Cheb"
+        },
+        "ds_id": "a8gbnyc"
+    },
+    "Chlumec": {
+        "address": {
+            "street": "10",
+            "zip": "382 32",
+            "city": "Chlumec",
+            "district": "Chlumec"
+        },
+        "ds_id": "9dsbun9"
+    },
+    "Chlumec nad Cidlinou": {
+        "address": {
+            "street": "Klicperovo n\u00e1m\u011bst\u00ed 64",
+            "zip": "503 51",
+            "city": "Chlumec nad Cidlinou",
+            "district": "Chlumec nad Cidlinou I"
+        },
+        "ds_id": "enubzs2"
+    },
+    "Choce\u0148": {
+        "address": {
+            "street": "Jungmannova 301",
+            "zip": "565 01",
+            "city": "Choce\u0148",
+            "district": "Choce\u0148"
+        },
+        "ds_id": "2bpbz3p"
+    },
+    "Chodov": {
+        "address": {
+            "street": "155",
+            "zip": "345 33",
+            "city": "Chodov",
+            "district": "Chodov"
+        },
+        "ds_id": "ybfau7y"
+    },
+    "Chot\u011bbo\u0159": {
+        "address": {
+            "street": "Tr\u010dk\u016f z L\u00edpy 69",
+            "zip": "583 01",
+            "city": "Chot\u011bbo\u0159",
+            "district": "Chot\u011bbo\u0159"
+        },
+        "ds_id": "94ubfm7"
+    },
+    "Chrast": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 1",
+            "zip": "538 51",
+            "city": "Chrast",
+            "district": "Chrast"
+        },
+        "ds_id": "gtrbrq5"
+    },
+    "Chrastava": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 1. m\u00e1je 1",
+            "zip": "463 31",
+            "city": "Chrastava",
+            "district": "Chrastava"
+        },
+        "ds_id": "awcbeyc"
+    },
+    "Chropyn\u011b": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 29",
+            "zip": "768 11",
+            "city": "Chropyn\u011b",
+            "district": "Chropyn\u011b"
+        },
+        "ds_id": "rbsbexq"
+    },
+    "Chrudim": {
+        "address": {
+            "street": "Resselovo n\u00e1m\u011bst\u00ed 77",
+            "zip": "537 01",
+            "city": "Chrudim",
+            "district": "Chrudim I"
+        },
+        "ds_id": "3y8b2pi"
+    },
+    "Ch\u0159ibsk\u00e1": {
+        "address": {
+            "street": "197",
+            "zip": "407 44",
+            "city": "Ch\u0159ibsk\u00e1",
+            "district": "Ch\u0159ibsk\u00e1"
+        },
+        "ds_id": "xcsa38b"
+    },
+    "Chvaletice": {
+        "address": {
+            "street": "U Stadionu 237",
+            "zip": "533 12",
+            "city": "Chvaletice",
+            "district": "Chvaletice"
+        },
+        "ds_id": "wfpbsd7"
+    },
+    "Ch\u00fdnov": {
+        "address": {
+            "street": "Gabrielovo n\u00e1m\u011bst\u00ed 7",
+            "zip": "391 55",
+            "city": "Ch\u00fdnov",
+            "district": "Ch\u00fdnov"
+        },
+        "ds_id": "ct6b7hu"
+    },
+    "Chy\u0161e": {
+        "address": {
+            "street": "\u017di\u017ekovo n\u00e1m\u011bst\u00ed 18",
+            "zip": "364 53",
+            "city": "Chy\u0161e",
+            "district": "Chy\u0161e"
+        },
+        "ds_id": "g3fbmdr"
+    },
+    "Ivan\u010dice": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m\u011bst\u00ed 196",
+            "zip": "664 91",
+            "city": "Ivan\u010dice",
+            "district": "Ivan\u010dice"
+        },
+        "ds_id": "sh2bdw6"
+    },
+    "Ivanovice Na Han\u00e9": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m\u011bst\u00ed 796",
+            "zip": "683 23",
+            "city": "Ivanovice na Han\u00e9",
+            "district": "Ivanovice na Han\u00e9"
+        },
+        "ds_id": "hqrbdwa"
+    },
+    "Jablonn\u00e9 nad Orlic\u00ed": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 5. kv\u011btna 4",
+            "zip": "561 64",
+            "city": "Jablonn\u00e9 nad Orlic\u00ed",
+            "district": "Jablonn\u00e9 nad Orlic\u00ed"
+        },
+        "ds_id": "m5kb6ds"
+    },
+    "Jablonn\u00e9 v Podje\u0161t\u011bd\u00ed": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 22",
+            "zip": "471 25",
+            "city": "Jablonn\u00e9 v Podje\u0161t\u011bd\u00ed",
+            "district": "Jablonn\u00e9 v Podje\u0161t\u011bd\u00ed"
+        },
+        "ds_id": "5gtbz44"
+    },
+    "Jablunkov": {
+        "address": {
+            "street": "Dukelsk\u00e1 144",
+            "zip": "739 91",
+            "city": "Jablunkov",
+            "district": "Jablunkov"
+        },
+        "ds_id": "dj4bppi"
+    },
+    "J\u00e1chymov": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Republiky 1",
+            "zip": "362 51",
+            "city": "J\u00e1chymov",
+            "district": "J\u00e1chymov"
+        },
+        "ds_id": "3m5b7tw"
+    },
+    "Janov": {
+        "address": {
+            "street": "216",
+            "zip": "569 55",
+            "city": "Janov",
+            "district": "Janov"
+        },
+        "ds_id": "hwsa4sf"
+    },
+    "Janovice nad \u00dahlavou": {
+        "address": {
+            "street": "Harantova 132",
+            "zip": "340 21",
+            "city": "Janovice nad \u00dahlavou",
+            "district": "Janovice nad \u00dahlavou"
+        },
+        "ds_id": "9hyb3f2"
+    },
+    "Jansk\u00e9 L\u00e1zn\u011b": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 273",
+            "zip": "542 25",
+            "city": "Jansk\u00e9 L\u00e1zn\u011b",
+            "district": "Jansk\u00e9 L\u00e1zn\u011b"
+        },
+        "ds_id": "4bfbycd"
+    },
+    "Jarom\u011b\u0159": {
+        "address": {
+            "street": "n\u00e1m. \u010ceskoslovensk\u00e9 arm\u00e1dy 16",
+            "zip": "551 01",
+            "city": "Jarom\u011b\u0159",
+            "district": "Jarom\u011b\u0159"
+        },
+        "ds_id": "sbwbzd5"
+    },
+    "Jarom\u011b\u0159ice Nad Rokytnou": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 2",
+            "zip": "675 51",
+            "city": "Jarom\u011b\u0159ice nad Rokytnou",
+            "district": "Jarom\u011b\u0159ice nad Rokytnou"
+        },
+        "ds_id": "rzsbrd5"
+    },
+    "Javorn\u00edk": {
+        "address": {
+            "street": "26",
+            "zip": "568 02",
+            "city": "Javorn\u00edk",
+            "district": "Javorn\u00edk"
+        },
+        "ds_id": "k3wa4tu"
+    },
+    "Jemnice": {
+        "address": {
+            "street": "Husova 103",
+            "zip": "675 31",
+            "city": "Jemnice",
+            "district": "Jemnice"
+        },
+        "ds_id": "uy3bdu8"
+    },
+    "Jesenice": {
+        "address": {
+            "street": "11",
+            "zip": "264 01",
+            "city": "Jesenice",
+            "district": "Jesenice"
+        },
+        "ds_id": "zxtbxma"
+    },
+    "Jesen\u00edk": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 167",
+            "zip": "790 01",
+            "city": "Jesen\u00edk",
+            "district": "Jesen\u00edk"
+        },
+        "ds_id": "vhwbwm9"
+    },
+    "Jev\u00ed\u010dko": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m. 1",
+            "zip": "569 43",
+            "city": "Jev\u00ed\u010dko",
+            "district": "Jev\u00ed\u010dko"
+        },
+        "ds_id": "behbdug"
+    },
+    "Jevi\u0161ovice": {
+        "address": {
+            "street": "56",
+            "zip": "671 53",
+            "city": "Jevi\u0161ovice",
+            "district": "Jevi\u0161ovice"
+        },
+        "ds_id": "2k8bdtq"
+    },
+    "Ji\u010d\u00edn": {
+        "address": {
+            "street": "\u017di\u017ekovo n\u00e1m\u011bst\u00ed 18",
+            "zip": "506 01",
+            "city": "Ji\u010d\u00edn",
+            "district": "Valdick\u00e9 P\u0159edm\u011bst\u00ed"
+        },
+        "ds_id": "ztmbqug"
+    },
+    "Jilemnice": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 82",
+            "zip": "514 01",
+            "city": "Jilemnice",
+            "district": "Jilemnice"
+        },
+        "ds_id": "g2nbdtx"
+    },
+    "J\u00edlov\u00e9": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m. 280",
+            "zip": "407 01",
+            "city": "J\u00edlov\u00e9",
+            "district": "J\u00edlov\u00e9"
+        },
+        "ds_id": "bx8btu8"
+    },
+    "J\u00edlov\u00e9 u Prahy": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 194",
+            "zip": "254 01",
+            "city": "J\u00edlov\u00e9 u Prahy",
+            "district": "J\u00edlov\u00e9 u Prahy"
+        },
+        "ds_id": "bmwb8if"
+    },
+    "Jind\u0159ich\u016fv Hradec": {
+        "address": {
+            "street": "Kl\u00e1\u0161tersk\u00e1 135",
+            "zip": "377 01",
+            "city": "Jind\u0159ich\u016fv Hradec",
+            "district": "Jind\u0159ich\u016fv Hradec II"
+        },
+        "ds_id": "dc7b3kp"
+    },
+    "Jirkov": {
+        "address": {
+            "street": "n\u00e1m. Dr. E. Bene\u0161e 1",
+            "zip": "431 11",
+            "city": "Jirkov",
+            "district": "Jirkov"
+        },
+        "ds_id": "9zcbsra"
+    },
+    "Ji\u0159\u00edkov": {
+        "address": {
+            "street": "86",
+            "zip": "793 51",
+            "city": "Ji\u0159\u00edkov",
+            "district": "Ji\u0159\u00edkov"
+        },
+        "ds_id": "6rkb23r"
+    },
+    "Jistebnice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 1",
+            "zip": "391 33",
+            "city": "Jistebnice",
+            "district": "Jistebnice"
+        },
+        "ds_id": "dvibdsi"
+    },
+    "Kada\u0148": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 1",
+            "zip": "432 01",
+            "city": "Kada\u0148",
+            "district": "Kada\u0148"
+        },
+        "ds_id": "uaybdrx"
+    },
+    "Kamenice nad Lipou": {
+        "address": {
+            "street": "n\u00e1m. \u010csl. arm\u00e1dy 52",
+            "zip": "394 70",
+            "city": "Kamenice nad Lipou",
+            "district": "Kamenice nad Lipou"
+        },
+        "ds_id": "735bwgv"
+    },
+    "Kamenick\u00fd \u0160enov": {
+        "address": {
+            "street": "Osvobozen\u00ed 470",
+            "zip": "471 14",
+            "city": "Kamenick\u00fd \u0160enov",
+            "district": "Kamenick\u00fd \u0160enov"
+        },
+        "ds_id": "qb6b24f"
+    },
+    "Kaplice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 70",
+            "zip": "382 41",
+            "city": "Kaplice",
+            "district": "Kaplice"
+        },
+        "ds_id": "b3ib5e9"
+    },
+    "Karda\u0161ova \u0158e\u010dice": {
+        "address": {
+            "street": "n\u00e1m. J. Hrub\u00e9ho 64",
+            "zip": "378 21",
+            "city": "Karda\u0161ova \u0158e\u010dice",
+            "district": "Karda\u0161ova \u0158e\u010dice"
+        },
+        "ds_id": "trrb6ca"
+    },
+    "Karolinka": {
+        "address": {
+            "street": "Radni\u010dn\u00ed n\u00e1m\u011bst\u00ed 42",
+            "zip": "756 05",
+            "city": "Karolinka",
+            "district": "Karolinka"
+        },
+        "ds_id": "fgcby4a"
+    },
+    "Kasejovice": {
+        "address": {
+            "street": "98",
+            "zip": "335 44",
+            "city": "Kasejovice",
+            "district": "Kasejovice"
+        },
+        "ds_id": "3eibzt5"
+    },
+    "Ka\u0161persk\u00e9 Hory": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 1",
+            "zip": "341 92",
+            "city": "Ka\u0161persk\u00e9 Hory",
+            "district": "Ka\u0161persk\u00e9 Hory"
+        },
+        "ds_id": "kwjbxui"
+    },
+    "Kazn\u011bjov": {
+        "address": {
+            "street": "Ke \u0160k\u00e1le 220",
+            "zip": "331 51",
+            "city": "Kazn\u011bjov",
+            "district": "Kazn\u011bjov"
+        },
+        "ds_id": "wrzbdp2"
+    },
+    "Kdyn\u011b": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 1",
+            "zip": "345 06",
+            "city": "Kdyn\u011b",
+            "district": "Kdyn\u011b"
+        },
+        "ds_id": "myqbdp5"
+    },
+    "Kel\u010d": {
+        "address": {
+            "street": "5",
+            "zip": "756 43",
+            "city": "Kel\u010d",
+            "district": "Kel\u010d"
+        },
+        "ds_id": "c7fbdp9"
+    },
+    "Kladruby": {
+        "address": {
+            "street": "29",
+            "zip": "415 01",
+            "city": "Kladruby",
+            "district": "Kladruby"
+        },
+        "ds_id": "2y7a5w4"
+    },
+    "Kl\u00e1\u0161terec nad Oh\u0159\u00ed": {
+        "address": {
+            "street": "n\u00e1m. Dr. Eduarda Bene\u0161e 85",
+            "zip": "431 51",
+            "city": "Kl\u00e1\u0161terec nad Oh\u0159\u00ed",
+            "district": "Kl\u00e1\u0161terec nad Oh\u0159\u00ed"
+        },
+        "ds_id": "6dqbymc"
+    },
+    "Klatovy": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 62",
+            "zip": "339 01",
+            "city": "Klatovy",
+            "district": "Klatovy I"
+        },
+        "ds_id": "24ebrt5"
+    },
+    "Klecany": {
+        "address": {
+            "street": "U \u0161kolky 74",
+            "zip": "250 67",
+            "city": "Klecany",
+            "district": "Klecany"
+        },
+        "ds_id": "4d6bdnh"
+    },
+    "Klimkovice": {
+        "address": {
+            "street": "Lidick\u00e1 1",
+            "zip": "742 83",
+            "city": "Klimkovice",
+            "district": "Klimkovice"
+        },
+        "ds_id": "ximbfsi"
+    },
+    "Klobouky u Brna": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 169",
+            "zip": "691 72",
+            "city": "Klobouky u Brna",
+            "district": "Klobouky u Brna"
+        },
+        "ds_id": "92bbdmw"
+    },
+    "Kojet\u00edn": {
+        "address": {
+            "street": "36",
+            "zip": "580 01",
+            "city": "Kojet\u00edn",
+            "district": "Kojet\u00edn"
+        },
+        "ds_id": "nckbf5i"
+    },
+    "Kol\u00edn": {
+        "address": {
+            "street": "Karlovo n\u00e1m\u011bst\u00ed 78",
+            "zip": "280 02",
+            "city": "Kol\u00edn",
+            "district": "Kol\u00edn I"
+        },
+        "ds_id": "9kkbs46"
+    },
+    "Konice": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 27",
+            "zip": "798 52",
+            "city": "Konice",
+            "district": "Konice"
+        },
+        "ds_id": "3m8bvgu"
+    },
+    "Kopidlno": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Hilmarovo 13",
+            "zip": "507 32",
+            "city": "Kopidlno",
+            "district": "Kopidlno"
+        },
+        "ds_id": "yhvb4z8"
+    },
+    "Kop\u0159ivnice": {
+        "address": {
+            "street": "\u0160tef\u00e1nikova 1163",
+            "zip": "742 21",
+            "city": "Kop\u0159ivnice",
+            "district": "Kop\u0159ivnice"
+        },
+        "ds_id": "42bb7zg"
+    },
+    "Kory\u010dany": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 401",
+            "zip": "768 05",
+            "city": "Kory\u010dany",
+            "district": "Kory\u010dany"
+        },
+        "ds_id": "3p3bdj7"
+    },
+    "Kosmonosy": {
+        "address": {
+            "street": "Deb\u0159sk\u00e1 223",
+            "zip": "293 06",
+            "city": "Kosmonosy",
+            "district": "Kosmonosy"
+        },
+        "ds_id": "9b8bdin"
+    },
+    "Kostelec nad \u010cern\u00fdmi Lesy": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Smi\u0159ick\u00fdch 53",
+            "zip": "281 63",
+            "city": "Kostelec nad \u010cern\u00fdmi lesy",
+            "district": "Kostelec nad \u010cern\u00fdmi lesy"
+        },
+        "ds_id": "yy6b6nm"
+    },
+    "Kostelec nad Labem": {
+        "address": {
+            "street": "n\u00e1m. Komensk\u00e9ho 1",
+            "zip": "277 13",
+            "city": "Kostelec nad Labem",
+            "district": "Kostelec nad Labem"
+        },
+        "ds_id": "vdtbdhd"
+    },
+    "Kostelec nad Orlic\u00ed": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m\u011bst\u00ed 38",
+            "zip": "517 41",
+            "city": "Kostelec nad Orlic\u00ed",
+            "district": "Kostelec nad Orlic\u00ed"
+        },
+        "ds_id": "aj5bhbi"
+    },
+    "Kostelec Na Han\u00e9": {
+        "address": {
+            "street": "Jakubsk\u00e9 n\u00e1m\u011bst\u00ed 138",
+            "zip": "798 41",
+            "city": "Kostelec na Han\u00e9",
+            "district": "Kostelec na Han\u00e9"
+        },
+        "ds_id": "564bdh9"
+    },
+    "Ko\u0161\u0165any": {
+        "address": {
+            "street": "Teplick\u00e1 297",
+            "zip": "417 23",
+            "city": "Ko\u0161\u0165any",
+            "district": "Ko\u0161\u0165any"
+        },
+        "ds_id": "yixbdis"
+    },
+    "Kou\u0159im": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 145",
+            "zip": "281 61",
+            "city": "Kou\u0159im",
+            "district": "Kou\u0159im"
+        },
+        "ds_id": "irrbvje"
+    },
+    "Ko\u017elany": {
+        "address": {
+            "street": "Pra\u017esk\u00e1 135",
+            "zip": "331 44",
+            "city": "Ko\u017elany",
+            "district": "Ko\u017elany"
+        },
+        "ds_id": "ffjbrih"
+    },
+    "Kr\u00e1l\u00edky": {
+        "address": {
+            "street": "Velk\u00e9 n\u00e1m\u011bst\u00ed 5",
+            "zip": "561 69",
+            "city": "Kr\u00e1l\u00edky",
+            "district": "Kr\u00e1l\u00edky"
+        },
+        "ds_id": "kf6btex"
+    },
+    "Kralovice": {
+        "address": {
+            "street": "Markova t\u0159. 2",
+            "zip": "331 41",
+            "city": "Kralovice",
+            "district": "Kralovice"
+        },
+        "ds_id": "jidbxnx"
+    },
+    "Kralupy nad Vltavou": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m. 1",
+            "zip": "278 01",
+            "city": "Kralupy nad Vltavou",
+            "district": "Kralupy nad Vltavou"
+        },
+        "ds_id": "8zzbfvq"
+    },
+    "Kr\u00e1l\u016fv Dv\u016fr": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 139",
+            "zip": "267 01",
+            "city": "Kr\u00e1l\u016fv Dv\u016fr",
+            "district": "Kr\u00e1l\u016fv Dv\u016fr"
+        },
+        "ds_id": "eaabdfp"
+    },
+    "Kraslice": {
+        "address": {
+            "street": "n\u00e1m. 28. \u0159\u00edjna 1438",
+            "zip": "358 01",
+            "city": "Kraslice",
+            "district": "Kraslice"
+        },
+        "ds_id": "riebz3t"
+    },
+    "Kr\u00e1sn\u00e1 Hora nad Vltavou": {
+        "address": {
+            "street": "45",
+            "zip": "262 56",
+            "city": "Kr\u00e1sn\u00e1 Hora nad Vltavou",
+            "district": "Kr\u00e1sn\u00e1 Hora nad Vltavou"
+        },
+        "ds_id": "5gzbdex"
+    },
+    "Kr\u00e1sn\u00e1 L\u00edpa": {
+        "address": {
+            "street": "Masarykova 246",
+            "zip": "407 46",
+            "city": "Kr\u00e1sn\u00e1 L\u00edpa",
+            "district": "Kr\u00e1sn\u00e1 L\u00edpa"
+        },
+        "ds_id": "upqbde3"
+    },
+    "Kr\u00e1sn\u00e9 \u00dadol\u00ed": {
+        "address": {
+            "street": "77",
+            "zip": "364 01",
+            "city": "Kr\u00e1sn\u00e9 \u00dadol\u00ed",
+            "district": "Kr\u00e1sn\u00e9 \u00dadol\u00ed"
+        },
+        "ds_id": "yynax3j"
+    },
+    "Kr\u00e1sno": {
+        "address": {
+            "street": "Radni\u010dn\u00ed 1",
+            "zip": "357 31",
+            "city": "Kr\u00e1sno",
+            "district": "Kr\u00e1sno"
+        },
+        "ds_id": "36ab6py"
+    },
+    "Krava\u0159e": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 166",
+            "zip": "471 03",
+            "city": "Krava\u0159e",
+            "district": "Krava\u0159e"
+        },
+        "ds_id": "darbn9b"
+    },
+    "Krnov": {
+        "address": {
+            "street": "Hlavn\u00ed n\u00e1m\u011bst\u00ed 96",
+            "zip": "794 01",
+            "city": "Krnov",
+            "district": "Pod Bezru\u010dov\u00fdm vrchem"
+        },
+        "ds_id": "ndgbdc9"
+    },
+    "Krom\u011b\u0159\u00ed\u017e": {
+        "address": {
+            "street": "Velk\u00e9 n\u00e1m\u011bst\u00ed 115",
+            "zip": "767 01",
+            "city": "Krom\u011b\u0159\u00ed\u017e",
+            "district": "Krom\u011b\u0159\u00ed\u017e"
+        },
+        "ds_id": "bg2bfur"
+    },
+    "Krupka": {
+        "address": {
+            "street": "Mari\u00e1nsk\u00e9 n\u00e1m\u011bst\u00ed 32",
+            "zip": "417 42",
+            "city": "Krupka",
+            "district": "Bohosudov"
+        },
+        "ds_id": "mmibu6k"
+    },
+    "Kryry": {
+        "address": {
+            "street": "Hlavn\u00ed 1",
+            "zip": "439 81",
+            "city": "Kryry",
+            "district": "Kryry"
+        },
+        "ds_id": "tzmbdbq"
+    },
+    "Kunovice": {
+        "address": {
+            "street": "153",
+            "zip": "756 44",
+            "city": "Kunovice",
+            "district": "Kunovice"
+        },
+        "ds_id": "vs9bw3e"
+    },
+    "Kun\u0161t\u00e1t": {
+        "address": {
+            "street": "n\u00e1m. Kr\u00e1le Ji\u0159\u00edho 106",
+            "zip": "679 72",
+            "city": "Kun\u0161t\u00e1t",
+            "district": "Kun\u0161t\u00e1t"
+        },
+        "ds_id": "ae3bdb2"
+    },
+    "Ku\u0159im": {
+        "address": {
+            "street": "Jungmannova 968",
+            "zip": "664 34",
+            "city": "Ku\u0159im",
+            "district": "Ku\u0159im"
+        },
+        "ds_id": "5dhbqi2"
+    },
+    "Kutn\u00e1 Hora": {
+        "address": {
+            "street": "Havl\u00ed\u010dkovo n\u00e1m\u011bst\u00ed 552",
+            "zip": "284 01",
+            "city": "Kutn\u00e1 Hora",
+            "district": "Kutn\u00e1 Hora-Vnit\u0159n\u00ed M\u011bsto"
+        },
+        "ds_id": "b65bfx3"
+    },
+    "Kyjov": {
+        "address": {
+            "street": "Dvorce ",
+            "zip": "580 01",
+            "city": "Kyjov",
+            "district": "Kyjov"
+        },
+        "ds_id": "g96bv6t"
+    },
+    "Kyn\u0161perk nad Oh\u0159\u00ed": {
+        "address": {
+            "street": "Jana A. Komensk\u00e9ho 221",
+            "zip": "357 51",
+            "city": "Kyn\u0161perk nad Oh\u0159\u00ed",
+            "district": "Kyn\u0161perk nad Oh\u0159\u00ed"
+        },
+        "ds_id": "ca8by3x"
+    },
+    "Lan\u0161kroun": {
+        "address": {
+            "street": "n\u00e1m. J. M. Mark\u016f 12",
+            "zip": "563 01",
+            "city": "Lan\u0161kroun",
+            "district": "Lan\u0161kroun-Vnit\u0159n\u00ed M\u011bsto"
+        },
+        "ds_id": "27tbq25"
+    },
+    "Lan\u017ehot": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 177",
+            "zip": "691 51",
+            "city": "Lan\u017ehot",
+            "district": "Lan\u017ehot"
+        },
+        "ds_id": "34tbc8a"
+    },
+    "L\u00e1zn\u011b B\u011blohrad": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed K. V. Raise 35",
+            "zip": "507 81",
+            "city": "L\u00e1zn\u011b B\u011blohrad",
+            "district": "L\u00e1zn\u011b B\u011blohrad"
+        },
+        "ds_id": "ih9bc8k"
+    },
+    "L\u00e1zn\u011b Bohdane\u010d": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 1",
+            "zip": "533 41",
+            "city": "L\u00e1zn\u011b Bohdane\u010d",
+            "district": "L\u00e1zn\u011b Bohdane\u010d"
+        },
+        "ds_id": "wucb4dd"
+    },
+    "L\u00e1zn\u011b Kyn\u017evart": {
+        "address": {
+            "street": "n\u00e1m. Republiky 1",
+            "zip": "354 91",
+            "city": "L\u00e1zn\u011b Kyn\u017evart",
+            "district": "L\u00e1zn\u011b Kyn\u017evart"
+        },
+        "ds_id": "9qybc7s"
+    },
+    "Lede\u010d nad S\u00e1zavou": {
+        "address": {
+            "street": "Husovo n\u00e1m\u011bst\u00ed 7",
+            "zip": "584 01",
+            "city": "Lede\u010d nad S\u00e1zavou",
+            "district": "Lede\u010d nad S\u00e1zavou"
+        },
+        "ds_id": "7jybxks"
+    },
+    "Ledvice": {
+        "address": {
+            "street": "M\u00edrov\u00e1 422",
+            "zip": "417 72",
+            "city": "Ledvice",
+            "district": "Ledvice"
+        },
+        "ds_id": "r5ybx6w"
+    },
+    "Letohrad": {
+        "address": {
+            "street": "V\u00e1clavsk\u00e9 n\u00e1m\u011bst\u00ed 10",
+            "zip": "561 51",
+            "city": "Letohrad",
+            "district": "Letohrad"
+        },
+        "ds_id": "mnbb4qe"
+    },
+    "Letovice": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 210",
+            "zip": "679 61",
+            "city": "Letovice",
+            "district": "Letovice"
+        },
+        "ds_id": "kzabc6k"
+    },
+    "Lib\u00e1\u0148": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 36",
+            "zip": "507 23",
+            "city": "Lib\u00e1\u0148",
+            "district": "Lib\u00e1\u0148"
+        },
+        "ds_id": "guibzaw"
+    },
+    "Lib\u010dice nad Vltavou": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 90",
+            "zip": "252 66",
+            "city": "Lib\u010dice nad Vltavou",
+            "district": "Lib\u010dice nad Vltavou"
+        },
+        "ds_id": "3eqbc5y"
+    },
+    "Lib\u011bchov": {
+        "address": {
+            "street": "Rumbursk\u00e1 53",
+            "zip": "277 21",
+            "city": "Lib\u011bchov",
+            "district": "Lib\u011bchov"
+        },
+        "ds_id": "hk6b3di"
+    },
+    "Libochovice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 5. kv\u011btna 48",
+            "zip": "411 17",
+            "city": "Libochovice",
+            "district": "Libochovice"
+        },
+        "ds_id": "x9kbc4j"
+    },
+    "Libu\u0161\u00edn": {
+        "address": {
+            "street": "H\u00e1lkova 140",
+            "zip": "273 06",
+            "city": "Libu\u0161\u00edn",
+            "district": "Libu\u0161\u00edn"
+        },
+        "ds_id": "mnebsdb"
+    },
+    "Lipnice nad S\u00e1zavou": {
+        "address": {
+            "street": "50",
+            "zip": "582 32",
+            "city": "Lipnice nad S\u00e1zavou",
+            "district": "Lipnice nad S\u00e1zavou"
+        },
+        "ds_id": "bhwbc3g"
+    },
+    "Lipn\u00edk nad Be\u010dvou": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed T. G. Masaryka 89",
+            "zip": "751 31",
+            "city": "Lipn\u00edk nad Be\u010dvou",
+            "district": "Lipn\u00edk nad Be\u010dvou I-M\u011bsto"
+        },
+        "ds_id": "6pxbwa9"
+    },
+    "Li\u0161ov": {
+        "address": {
+            "street": "t\u0159\u00edda 5. kv\u011btna 139",
+            "zip": "373 72",
+            "city": "Li\u0161ov",
+            "district": "Li\u0161ov"
+        },
+        "ds_id": "ek7buzi"
+    },
+    "Litom\u011b\u0159ice": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 15",
+            "zip": "412 01",
+            "city": "Litom\u011b\u0159ice",
+            "district": "Litom\u011b\u0159ice-M\u011bsto"
+        },
+        "ds_id": "tpebfnu"
+    },
+    "Litomy\u0161l": {
+        "address": {
+            "street": "B\u0159\u00ed \u0160\u0165astn\u00fdch 1000",
+            "zip": "570 01",
+            "city": "Litomy\u0161l",
+            "district": "Litomy\u0161l-M\u011bsto"
+        },
+        "ds_id": "x4cbvs8"
+    },
+    "Litovel": {
+        "address": {
+            "street": "N\u00e1m. P\u0159. Otakara 778",
+            "zip": "784 01",
+            "city": "Litovel",
+            "district": "Litovel"
+        },
+        "ds_id": "4rub4s3"
+    },
+    "Litv\u00ednov": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 11",
+            "zip": "436 01",
+            "city": "Litv\u00ednov",
+            "district": "Horn\u00ed Litv\u00ednov"
+        },
+        "ds_id": "8tybqzk"
+    },
+    "Loket": {
+        "address": {
+            "street": "66",
+            "zip": "257 65",
+            "city": "Loket",
+            "district": "Loket"
+        },
+        "ds_id": "sy8brwm"
+    },
+    "Lom": {
+        "address": {
+            "street": "60",
+            "zip": "390 02",
+            "city": "Lom",
+            "district": "Lom"
+        },
+        "ds_id": "w46ed6z"
+    },
+    "Lomnice nad Lu\u017enic\u00ed": {
+        "address": {
+            "street": "n\u00e1m. 5. kv\u011btna 130",
+            "zip": "378 16",
+            "city": "Lomnice nad Lu\u017enic\u00ed",
+            "district": "Lomnice nad Lu\u017enic\u00ed"
+        },
+        "ds_id": "attbcy5"
+    },
+    "Lo\u0161tice": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 66",
+            "zip": "789 83",
+            "city": "Lo\u0161tice",
+            "district": "Lo\u0161tice"
+        },
+        "ds_id": "wneb267"
+    },
+    "Lou\u010dn\u00e1 pod Kl\u00ednovcem": {
+        "address": {
+            "street": "89",
+            "zip": "431 91",
+            "city": "Lou\u010dn\u00e1 pod Kl\u00ednovcem",
+            "district": "Lou\u010dn\u00e1"
+        },
+        "ds_id": "kpubn3j"
+    },
+    "Louny": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 35",
+            "zip": "440 01",
+            "city": "Louny",
+            "district": "Louny"
+        },
+        "ds_id": "gc9bxmk"
+    },
+    "Lovosice": {
+        "address": {
+            "street": "\u0160koln\u00ed 407",
+            "zip": "410 02",
+            "city": "Lovosice",
+            "district": "Lovosice"
+        },
+        "ds_id": "ytbbs49"
+    },
+    "Luby": {
+        "address": {
+            "street": "n\u00e1m. 5. kv\u011btna 164",
+            "zip": "351 37",
+            "city": "Luby",
+            "district": "Luby"
+        },
+        "ds_id": "wvebcww"
+    },
+    "Lu\u010dany nad Nisou": {
+        "address": {
+            "street": "333",
+            "zip": "468 71",
+            "city": "Lu\u010dany nad Nisou",
+            "district": "Lu\u010dany nad Nisou"
+        },
+        "ds_id": "jfubvnq"
+    },
+    "Luha\u010dovice": {
+        "address": {
+            "street": "n\u00e1m. 28. \u0159\u00edjna 543",
+            "zip": "763 26",
+            "city": "Luha\u010dovice",
+            "district": "Luha\u010dovice"
+        },
+        "ds_id": "m35bcw4"
+    },
+    "Lu\u017ee": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Plk. Josefa Koukala 1",
+            "zip": "538 54",
+            "city": "Lu\u017ee",
+            "district": "Lu\u017ee"
+        },
+        "ds_id": "zh7b2rg"
+    },
+    "Lys\u00e1 nad Labem": {
+        "address": {
+            "street": "Husovo n\u00e1m\u011bst\u00ed 23",
+            "zip": "289 22",
+            "city": "Lys\u00e1 nad Labem",
+            "district": "Lys\u00e1 nad Labem"
+        },
+        "ds_id": "5adasau"
+    },
+    "Man\u011bt\u00edn": {
+        "address": {
+            "street": "89",
+            "zip": "331 62",
+            "city": "Man\u011bt\u00edn",
+            "district": "Man\u011bt\u00edn"
+        },
+        "ds_id": "wzeb8dv"
+    },
+    "Mari\u00e1nsk\u00e9 L\u00e1zn\u011b": {
+        "address": {
+            "street": "Rusk\u00e1 155",
+            "zip": "353 01",
+            "city": "Mari\u00e1nsk\u00e9 L\u00e1zn\u011b",
+            "district": "Mari\u00e1nsk\u00e9 L\u00e1zn\u011b"
+        },
+        "ds_id": "bprbqms"
+    },
+    "Ma\u0161\u0165ov": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 80",
+            "zip": "431 56",
+            "city": "Ma\u0161\u0165ov",
+            "district": "Ma\u0161\u0165ov"
+        },
+        "ds_id": "yvubu4i"
+    },
+    "M\u011b\u010d\u00edn": {
+        "address": {
+            "street": "Farn\u00ed 43",
+            "zip": "340 12",
+            "city": "M\u011b\u010d\u00edn",
+            "district": "M\u011b\u010d\u00edn"
+        },
+        "ds_id": "m5sbhpm"
+    },
+    "M\u011bln\u00edk": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 1",
+            "zip": "276 01",
+            "city": "M\u011bln\u00edk",
+            "district": "M\u011bln\u00edk"
+        },
+        "ds_id": "hqjb2kg"
+    },
+    "M\u011bstec Kr\u00e1lov\u00e9": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed Republiky 1",
+            "zip": "289 03",
+            "city": "M\u011bstec Kr\u00e1lov\u00e9",
+            "district": "M\u011bstec Kr\u00e1lov\u00e9"
+        },
+        "ds_id": "ckrbctw"
+    },
+    "Albrechtice": {
+        "address": {
+            "street": "Obecn\u00ed 186",
+            "zip": "735 43",
+            "city": "Albrechtice",
+            "district": "Albrechtice"
+        },
+        "ds_id": "tudbvzd"
+    },
+    "Tou\u0161kov": {
+        "address": {
+            "street": "Doln\u00ed n\u00e1m\u011bst\u00ed 1",
+            "zip": "330 33",
+            "city": "M\u011bsto Tou\u0161kov",
+            "district": "M\u011bsto Tou\u0161kov"
+        },
+        "ds_id": "7qcbhpc"
+    },
+    "Mezibo\u0159\u00ed": {
+        "address": {
+            "street": "n\u00e1m. 8. kv\u011btna 341",
+            "zip": "435 13",
+            "city": "Mezibo\u0159\u00ed",
+            "district": "Mezibo\u0159\u00ed"
+        },
+        "ds_id": "sz7bcs9"
+    },
+    "Mezim\u011bst\u00ed": {
+        "address": {
+            "street": "5. kv\u011btna 1",
+            "zip": "549 81",
+            "city": "Mezim\u011bst\u00ed",
+            "district": "Mezim\u011bst\u00ed"
+        },
+        "ds_id": "2pjb4h5"
+    },
+    "Mikul\u00e1\u0161ovice": {
+        "address": {
+            "street": "1007",
+            "zip": "407 79",
+            "city": "Mikul\u00e1\u0161ovice",
+            "district": "Mikul\u00e1\u0161ovice"
+        },
+        "ds_id": "h8wbcsd"
+    },
+    "Mikulov": {
+        "address": {
+            "street": "Tr\u017en\u00ed n\u00e1m\u011bst\u00ed 27",
+            "zip": "419 01",
+            "city": "Mikulov",
+            "district": "Mikulov"
+        },
+        "ds_id": "ajfaxen"
+    },
+    "Milet\u00edn": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed K. J. Erbena 99",
+            "zip": "507 71",
+            "city": "Milet\u00edn",
+            "district": "Milet\u00edn"
+        },
+        "ds_id": "yncbcrq"
+    },
+    "Milevsko": {
+        "address": {
+            "street": "n\u00e1m. E. Bene\u0161e 420",
+            "zip": "399 01",
+            "city": "Milevsko",
+            "district": "Milevsko"
+        },
+        "ds_id": "8kabvcx"
+    },
+    "Mili\u010d\u00edn": {
+        "address": {
+            "street": "1",
+            "zip": "257 86",
+            "city": "Mili\u010d\u00edn",
+            "district": "Mili\u010d\u00edn"
+        },
+        "ds_id": "8xdbp8i"
+    },
+    "Milovice": {
+        "address": {
+            "street": "38",
+            "zip": "691 88",
+            "city": "Milovice",
+            "district": "Milovice"
+        },
+        "ds_id": "zraaz65"
+    },
+    "Mimo\u0148": {
+        "address": {
+            "street": "M\u00edrov\u00e1 120",
+            "zip": "471 24",
+            "city": "Mimo\u0148",
+            "district": "Mimo\u0148 III"
+        },
+        "ds_id": "ys8b5fe"
+    },
+    "Miroslav": {
+        "address": {
+            "street": "n\u00e1m. Svobody 1",
+            "zip": "671 72",
+            "city": "Miroslav",
+            "district": "Miroslav"
+        },
+        "ds_id": "vg8bcqd"
+    },
+    "Miro\u0161ov": {
+        "address": {
+            "street": "27",
+            "zip": "592 55",
+            "city": "Miro\u0161ov",
+            "district": "Miro\u0161ov"
+        },
+        "ds_id": "vbvb7r5"
+    },
+    "Mirotice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed Mikol\u00e1\u0161e Al\u0161e 18",
+            "zip": "398 01",
+            "city": "Mirotice",
+            "district": "Mirotice"
+        },
+        "ds_id": "iynbhn8"
+    },
+    "Mirovice": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 38",
+            "zip": "398 06",
+            "city": "Mirovice",
+            "district": "Mirovice"
+        },
+        "ds_id": "8e5b3pk"
+    },
+    "Mlad\u00e1 Vo\u017eice": {
+        "address": {
+            "street": "\u017di\u017ekovo n\u00e1m\u011bst\u00ed 80",
+            "zip": "391 43",
+            "city": "Mlad\u00e1 Vo\u017eice",
+            "district": "Mlad\u00e1 Vo\u017eice"
+        },
+        "ds_id": "kpxbcqh"
+    },
+    "Mnichovice": {
+        "address": {
+            "street": "97",
+            "zip": "257 65",
+            "city": "Mnichovice",
+            "district": "Mnichovice"
+        },
+        "ds_id": "i3gakm9"
+    },
+    "Mnichovo Hradi\u0161t\u011b": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 1",
+            "zip": "295 01",
+            "city": "Mnichovo Hradi\u0161t\u011b",
+            "district": "Mnichovo Hradi\u0161t\u011b"
+        },
+        "ds_id": "8ztb4jw"
+    },
+    "Mn\u00ed\u0161ek pod Brdy": {
+        "address": {
+            "street": "Dob\u0159\u00ed\u0161sk\u00e1 56",
+            "zip": "252 10",
+            "city": "Mn\u00ed\u0161ek pod Brdy",
+            "district": "Mn\u00ed\u0161ek pod Brdy"
+        },
+        "ds_id": "96ebwrs"
+    },
+    "Mod\u0159ice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 93",
+            "zip": "664 42",
+            "city": "Mod\u0159ice",
+            "district": "Mod\u0159ice"
+        },
+        "ds_id": "6yebzhn"
+    },
+    "Mohelnice": {
+        "address": {
+            "street": "22",
+            "zip": "335 01",
+            "city": "Mohelnice",
+            "district": "Mohelnice"
+        },
+        "ds_id": "bjrau6v"
+    },
+    "Moravsk\u00e1 T\u0159ebov\u00e1": {
+        "address": {
+            "street": "n\u00e1m. T. G. Masaryka 32",
+            "zip": "571 01",
+            "city": "Moravsk\u00e1 T\u0159ebov\u00e1",
+            "district": "M\u011bsto"
+        },
+        "ds_id": "fqtb4bs"
+    },
+    "Moravsk\u00e9 Bud\u011bjovice": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 31",
+            "zip": "676 02",
+            "city": "Moravsk\u00e9 Bud\u011bjovice",
+            "district": "Moravsk\u00e9 Bud\u011bjovice"
+        },
+        "ds_id": "25dbcps"
+    },
+    "Moravsk\u00fd Beroun": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 9. kv\u011btna 4",
+            "zip": "793 05",
+            "city": "Moravsk\u00fd Beroun",
+            "district": "Moravsk\u00fd Beroun"
+        },
+        "ds_id": "3jpbtgj"
+    },
+    "Moravsk\u00fd Krumlov": {
+        "address": {
+            "street": "n\u00e1m. Kl\u00e1\u0161tern\u00ed 125",
+            "zip": "672 01",
+            "city": "Moravsk\u00fd Krumlov",
+            "district": "Moravsk\u00fd Krumlov"
+        },
+        "ds_id": "sb4bcpy"
+    },
+    "Morkovice-Sl\u00ed\u017eany": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 900",
+            "zip": "768 33",
+            "city": "Morkovice-Sl\u00ed\u017eany",
+            "district": "Morkovice"
+        },
+        "ds_id": "kgxb2yq"
+    },
+    "M\u0161eno": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 1",
+            "zip": "277 35",
+            "city": "M\u0161eno",
+            "district": "M\u0161eno"
+        },
+        "ds_id": "rj6buhb"
+    },
+    "M\u00fdto": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 109",
+            "zip": "338 05",
+            "city": "M\u00fdto",
+            "district": "M\u00fdto"
+        },
+        "ds_id": "us5bcm2"
+    },
+    "Nal\u017eovsk\u00e9 Hory": {
+        "address": {
+            "street": "104",
+            "zip": "341 01",
+            "city": "Nal\u017eovsk\u00e9 Hory",
+            "district": "St\u0159\u00edbrn\u00e9 Hory"
+        },
+        "ds_id": "hhubrtf"
+    },
+    "N\u00e1m\u011b\u0161\u0165 nad Oslavou": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 104",
+            "zip": "675 71",
+            "city": "N\u00e1m\u011b\u0161\u0165 nad Oslavou",
+            "district": "N\u00e1m\u011b\u0161\u0165 nad Oslavou"
+        },
+        "ds_id": "s72bqcj"
+    },
+    "Napajedla": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 89",
+            "zip": "763 61",
+            "city": "Napajedla",
+            "district": "Napajedla"
+        },
+        "ds_id": "rmzbckn"
+    },
+    "Nasavrky": {
+        "address": {
+            "street": "31",
+            "zip": "565 01",
+            "city": "Nasavrky",
+            "district": "Nasavrky"
+        },
+        "ds_id": "dgva3se"
+    },
+    "Nechanice": {
+        "address": {
+            "street": "Husovo n\u00e1m. 83",
+            "zip": "503 15",
+            "city": "Nechanice",
+            "district": "Nechanice"
+        },
+        "ds_id": "73fbcjx"
+    },
+    "Nejdek": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Karla IV. 239",
+            "zip": "362 21",
+            "city": "Nejdek",
+            "district": "Nejdek"
+        },
+        "ds_id": "b56bu3f"
+    },
+    "N\u011bm\u010dice nad Hanou": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m. 3",
+            "zip": "798 27",
+            "city": "N\u011bm\u010dice nad Hanou",
+            "district": "N\u011bm\u010dice nad Hanou"
+        },
+        "ds_id": "udbb4fb"
+    },
+    "Nepomuk": {
+        "address": {
+            "street": "50",
+            "zip": "262 42",
+            "city": "Nepomuk",
+            "district": "Nepomuk"
+        },
+        "ds_id": "67haywd"
+    },
+    "Neratovice": {
+        "address": {
+            "street": "Kojetick\u00e1 1028",
+            "zip": "277 11",
+            "city": "Neratovice",
+            "district": "Neratovice"
+        },
+        "ds_id": "45qb68g"
+    },
+    "Netolice": {
+        "address": {
+            "street": "M\u00edrov\u00e9 N\u00e1m\u011bst\u00ed 208",
+            "zip": "384 11",
+            "city": "Netolice",
+            "district": "Netolice"
+        },
+        "ds_id": "wj3bcgt"
+    },
+    "Neveklov": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Jana He\u0159mana 80",
+            "zip": "257 56",
+            "city": "Neveklov",
+            "district": "Neveklov"
+        },
+        "ds_id": "mssbcgw"
+    },
+    "Nov\u00e1 Byst\u0159ice": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m. 58",
+            "zip": "378 33",
+            "city": "Nov\u00e1 Byst\u0159ice",
+            "district": "Nov\u00e1 Byst\u0159ice"
+        },
+        "ds_id": "aevbzz7"
+    },
+    "Nov\u00e1 Paka": {
+        "address": {
+            "street": "Dukelsk\u00e9 n\u00e1m\u011bst\u00ed 39",
+            "zip": "509 01",
+            "city": "Nov\u00e1 Paka",
+            "district": "Nov\u00e1 Paka"
+        },
+        "ds_id": "y73bsrg"
+    },
+    "Nov\u00e1 Role": {
+        "address": {
+            "street": "Chodovsk\u00e1 236",
+            "zip": "362 25",
+            "city": "Nov\u00e1 Role",
+            "district": "Nov\u00e1 Role"
+        },
+        "ds_id": "y24bcev"
+    },
+    "Nov\u00e1 V\u010delnice": {
+        "address": {
+            "street": "Komensk\u00e9ho 386",
+            "zip": "378 42",
+            "city": "Nov\u00e1 V\u010delnice",
+            "district": "Nov\u00e1 V\u010delnice"
+        },
+        "ds_id": "hkdbttn"
+    },
+    "Nov\u00e9 Hrady": {
+        "address": {
+            "street": "123",
+            "zip": "539 45",
+            "city": "Nov\u00e9 Hrady",
+            "district": "Nov\u00e9 Hrady"
+        },
+        "ds_id": "bvva46u"
+    },
+    "Nov\u00e9 nad Metuj\u00ed": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Republiky 6",
+            "zip": "549 01",
+            "city": "Nov\u00e9 M\u011bsto nad Metuj\u00ed",
+            "district": "Nov\u00e9 M\u011bsto nad Metuj\u00ed"
+        },
+        "ds_id": "qgfbxi4"
+    },
+    "Nov\u00e9 Na Morav\u011b": {
+        "address": {
+            "street": "Vratislavovo n\u00e1m\u011bst\u00ed 103",
+            "zip": "592 31",
+            "city": "Nov\u00e9 M\u011bsto na Morav\u011b",
+            "district": "Nov\u00e9 M\u011bsto na Morav\u011b"
+        },
+        "ds_id": "y67bvir"
+    },
+    "Nov\u00e9 pod Smrkem": {
+        "address": {
+            "street": "Palack\u00e9ho 280",
+            "zip": "463 65",
+            "city": "Nov\u00e9 M\u011bsto pod Smrkem",
+            "district": "Nov\u00e9 M\u011bsto pod Smrkem"
+        },
+        "ds_id": "63tbyqn"
+    },
+    "Nov\u00e9 Sedlo": {
+        "address": {
+            "street": "Farn\u00ed 36",
+            "zip": "438 01",
+            "city": "Nov\u00e9 Sedlo",
+            "district": "Nov\u00e9 Sedlo"
+        },
+        "ds_id": "eyabpv3"
+    },
+    "Nov\u00e9 Stra\u0161ec\u00ed": {
+        "address": {
+            "street": "Komensk\u00e9ho n\u00e1m\u011bst\u00ed 201",
+            "zip": "271 01",
+            "city": "Nov\u00e9 Stra\u0161ec\u00ed",
+            "district": "Nov\u00e9 Stra\u0161ec\u00ed"
+        },
+        "ds_id": "h2sbx9c"
+    },
+    "Nov\u00fd Bor": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 1",
+            "zip": "473 01",
+            "city": "Nov\u00fd Bor",
+            "district": "Nov\u00fd Bor"
+        },
+        "ds_id": "b7wbphv"
+    },
+    "Nov\u00fd Byd\u017eov": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 1",
+            "zip": "504 01",
+            "city": "Nov\u00fd Byd\u017eov",
+            "district": "Nov\u00fd Byd\u017eov"
+        },
+        "ds_id": "2umb8hk"
+    },
+    "Nov\u00fd Ji\u010d\u00edn": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 1",
+            "zip": "741 01",
+            "city": "Nov\u00fd Ji\u010d\u00edn",
+            "district": "Nov\u00fd Ji\u010d\u00edn"
+        },
+        "ds_id": "ywmb4nc"
+    },
+    "Nov\u00fd Kn\u00edn": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Ji\u0159\u00edho z Pod\u011bbrad 1",
+            "zip": "262 03",
+            "city": "Nov\u00fd Kn\u00edn",
+            "district": "Nov\u00fd Kn\u00edn"
+        },
+        "ds_id": "xqjbgzr"
+    },
+    "Nymburk": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed P\u0159emyslovc\u016f 163",
+            "zip": "288 02",
+            "city": "Nymburk",
+            "district": "Nymburk"
+        },
+        "ds_id": "86abcbd"
+    },
+    "N\u00fdrsko": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 122",
+            "zip": "340 22",
+            "city": "N\u00fdrsko",
+            "district": "N\u00fdrsko"
+        },
+        "ds_id": "gwdbhd9"
+    },
+    "N\u00fd\u0159any": {
+        "address": {
+            "street": "Bene\u0161ova t\u0159\u00edda 295",
+            "zip": "330 23",
+            "city": "N\u00fd\u0159any",
+            "district": "N\u00fd\u0159any"
+        },
+        "ds_id": "8hrbtcq"
+    },
+    "Odolena Voda": {
+        "address": {
+            "street": "Doln\u00ed n\u00e1m\u011bst\u00ed 14",
+            "zip": "250 70",
+            "city": "Odolena Voda",
+            "district": "Odolena Voda"
+        },
+        "ds_id": "nxabgzu"
+    },
+    "Odry": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 16",
+            "zip": "742 35",
+            "city": "Odry",
+            "district": "Odry"
+        },
+        "ds_id": "kyebfxv"
+    },
+    "Ole\u0161nice": {
+        "address": {
+            "street": "63",
+            "zip": "511 01",
+            "city": "Ole\u0161nice",
+            "district": "Ole\u0161nice"
+        },
+        "ds_id": "7wpjd4d"
+    },
+    "Olov\u00ed": {
+        "address": {
+            "street": "42",
+            "zip": "357 07",
+            "city": "Olov\u00ed",
+            "district": "Hory"
+        },
+        "ds_id": "5y6bca2"
+    },
+    "Opo\u010dno": {
+        "address": {
+            "street": "62",
+            "zip": "440 01",
+            "city": "Opo\u010dno",
+            "district": "Opo\u010dno"
+        },
+        "ds_id": "fb6bsbj"
+    },
+    "Orlov\u00e1": {
+        "address": {
+            "street": "Osvobozen\u00ed 796",
+            "zip": "735 14",
+            "city": "Orlov\u00e1",
+            "district": "Lutyn\u011b"
+        },
+        "ds_id": "r7qbskc"
+    },
+    "Ose\u010dn\u00e1": {
+        "address": {
+            "street": "Svatov\u00edtsk\u00e9 n\u00e1m\u011bst\u00ed 105",
+            "zip": "463 52",
+            "city": "Ose\u010dn\u00e1",
+            "district": "Ose\u010dn\u00e1"
+        },
+        "ds_id": "r2rbb9r"
+    },
+    "Osek": {
+        "address": {
+            "street": "38",
+            "zip": "399 01",
+            "city": "Osek",
+            "district": "Osek"
+        },
+        "ds_id": "cwsbw6y"
+    },
+    "Oslavany": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 13. prosince 51",
+            "zip": "664 12",
+            "city": "Oslavany",
+            "district": "Oslavany"
+        },
+        "ds_id": "jasbrn8"
+    },
+    "Ostrov": {
+        "address": {
+            "street": "57",
+            "zip": "538 63",
+            "city": "Ostrov",
+            "district": "Ostrov"
+        },
+        "ds_id": "puaa473"
+    },
+    "Otrokovice": {
+        "address": {
+            "street": "n\u00e1m. 3. kv\u011btna 1340",
+            "zip": "765 02",
+            "city": "Otrokovice",
+            "district": "Otrokovice"
+        },
+        "ds_id": "jfrb7zs"
+    },
+    "Pacov": {
+        "address": {
+            "street": "n\u00e1m. Svobody 320",
+            "zip": "395 01",
+            "city": "Pacov",
+            "district": "Pacov"
+        },
+        "ds_id": "xbtbhcm"
+    },
+    "Paskov": {
+        "address": {
+            "street": "N\u00e1dra\u017en\u00ed 700",
+            "zip": "739 21",
+            "city": "Paskov",
+            "district": "Paskov"
+        },
+        "ds_id": "dd9bb58"
+    },
+    "Pe\u010dky": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 78",
+            "zip": "289 11",
+            "city": "Pe\u010dky",
+            "district": "Pe\u010dky"
+        },
+        "ds_id": "8zwbr8t"
+    },
+    "Pelh\u0159imov": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 1",
+            "zip": "393 01",
+            "city": "Pelh\u0159imov",
+            "district": "Pelh\u0159imov"
+        },
+        "ds_id": "ugqb3nb"
+    },
+    "Pet\u0159vald": {
+        "address": {
+            "street": "175",
+            "zip": "742 60",
+            "city": "Pet\u0159vald",
+            "district": "Pet\u0159vald 1-Pet\u0159vald"
+        },
+        "ds_id": "ntpb6g4"
+    },
+    "Piln\u00edkov": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 36",
+            "zip": "542 42",
+            "city": "Piln\u00edkov",
+            "district": "Piln\u00edkov"
+        },
+        "ds_id": "xecbjcu"
+    },
+    "P\u00edsek": {
+        "address": {
+            "street": "51",
+            "zip": "739 84",
+            "city": "P\u00edsek",
+            "district": "P\u00edsek"
+        },
+        "ds_id": "m44axss"
+    },
+    "Plan\u00e1": {
+        "address": {
+            "street": "59",
+            "zip": "370 01",
+            "city": "Plan\u00e1",
+            "district": "Plan\u00e1"
+        },
+        "ds_id": "6qqb5u2"
+    },
+    "Plan\u00e1 nad Lu\u017enic\u00ed": {
+        "address": {
+            "street": "Z\u00e1kosteln\u00ed 720",
+            "zip": "391 11",
+            "city": "Plan\u00e1 nad Lu\u017enic\u00ed",
+            "district": "Plan\u00e1 nad Lu\u017enic\u00ed"
+        },
+        "ds_id": "552b4yp"
+    },
+    "Pl\u00e1nice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 180",
+            "zip": "340 34",
+            "city": "Pl\u00e1nice",
+            "district": "Pl\u00e1nice"
+        },
+        "ds_id": "cp6bb2w"
+    },
+    "Plasy": {
+        "address": {
+            "street": "Plze\u0148sk\u00e1 285",
+            "zip": "331 01",
+            "city": "Plasy",
+            "district": "Plasy"
+        },
+        "ds_id": "km4bum6"
+    },
+    "Plesn\u00e1": {
+        "address": {
+            "street": "5. kv\u011btna 301",
+            "zip": "351 35",
+            "city": "Plesn\u00e1",
+            "district": "Plesn\u00e1"
+        },
+        "ds_id": "jmya97t"
+    },
+    "Plumlov": {
+        "address": {
+            "street": "Rud\u00e9 arm\u00e1dy 302",
+            "zip": "798 03",
+            "city": "Plumlov",
+            "district": "Plumlov"
+        },
+        "ds_id": "s5kbbz7"
+    },
+    "Pob\u011b\u017eovice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 47",
+            "zip": "345 22",
+            "city": "Pob\u011b\u017eovice",
+            "district": "Pob\u011b\u017eovice"
+        },
+        "ds_id": "zqzby7d"
+    },
+    "Po\u010d\u00e1tky": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m. 1",
+            "zip": "394 64",
+            "city": "Po\u010d\u00e1tky",
+            "district": "Po\u010d\u00e1tky"
+        },
+        "ds_id": "icbbbzb"
+    },
+    "Podbo\u0159any": {
+        "address": {
+            "street": "M\u00edrov\u00e1 615",
+            "zip": "441 01",
+            "city": "Podbo\u0159any",
+            "district": "Podbo\u0159any"
+        },
+        "ds_id": "fh4btis"
+    },
+    "Pod\u011bbrady": {
+        "address": {
+            "street": "Ji\u0159\u00edho n\u00e1m\u011bst\u00ed 20",
+            "zip": "290 01",
+            "city": "Pod\u011bbrady",
+            "district": "Pod\u011bbrady I"
+        },
+        "ds_id": "3qrbxg3"
+    },
+    "Podiv\u00edn": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 192",
+            "zip": "691 45",
+            "city": "Podiv\u00edn",
+            "district": "Podiv\u00edn"
+        },
+        "ds_id": "47gbznw"
+    },
+    "Poho\u0159elice": {
+        "address": {
+            "street": "\u0160koln\u00ed 35",
+            "zip": "763 61",
+            "city": "Poho\u0159elice",
+            "district": "Poho\u0159elice"
+        },
+        "ds_id": "nnqbp5i"
+    },
+    "Police nad Metuj\u00ed": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 98",
+            "zip": "549 54",
+            "city": "Police nad Metuj\u00ed",
+            "district": "Police nad Metuj\u00ed"
+        },
+        "ds_id": "3shbrwf"
+    },
+    "Poli\u010dka": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m. 160",
+            "zip": "572 01",
+            "city": "Poli\u010dka",
+            "district": "Poli\u010dka-M\u011bsto"
+        },
+        "ds_id": "w87brph"
+    },
+    "Poln\u00e1": {
+        "address": {
+            "street": "Husovo n\u00e1m\u011bst\u00ed 39",
+            "zip": "588 13",
+            "city": "Poln\u00e1",
+            "district": "Poln\u00e1"
+        },
+        "ds_id": "ss7b22h"
+    },
+    "Postoloprty": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 318",
+            "zip": "439 42",
+            "city": "Postoloprty",
+            "district": "Postoloprty"
+        },
+        "ds_id": "2nsbuxb"
+    },
+    "Pot\u0161t\u00e1t": {
+        "address": {
+            "street": "Z\u00e1meck\u00e1 1",
+            "zip": "753 62",
+            "city": "Pot\u0161t\u00e1t",
+            "district": "Pot\u0161t\u00e1t"
+        },
+        "ds_id": "r3fbv6m"
+    },
+    "Prachatice": {
+        "address": {
+            "street": "Velk\u00e9 n\u00e1m\u011bst\u00ed 3",
+            "zip": "383 01",
+            "city": "Prachatice",
+            "district": "Prachatice I"
+        },
+        "ds_id": "j5xbvr2"
+    },
+    "Prose\u010d": {
+        "address": {
+            "street": "24",
+            "zip": "396 01",
+            "city": "Prose\u010d",
+            "district": "Prose\u010d"
+        },
+        "ds_id": "upmbpr6"
+    },
+    "Protiv\u00edn": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 128",
+            "zip": "398 11",
+            "city": "Protiv\u00edn",
+            "district": "Protiv\u00edn"
+        },
+        "ds_id": "x48bszz"
+    },
+    "P\u0159ebuz": {
+        "address": {
+            "street": "7",
+            "zip": "358 01",
+            "city": "P\u0159ebuz",
+            "district": "P\u0159ebuz"
+        },
+        "ds_id": "ghfb6eb"
+    },
+    "P\u0159elou\u010d": {
+        "address": {
+            "street": "\u010ceskoslovensk\u00e9 arm\u00e1dy 1665",
+            "zip": "535 01",
+            "city": "P\u0159elou\u010d",
+            "district": "P\u0159elou\u010d"
+        },
+        "ds_id": "b4hbqav"
+    },
+    "P\u0159e\u0161tice": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 107",
+            "zip": "334 01",
+            "city": "P\u0159e\u0161tice",
+            "district": "P\u0159e\u0161tice"
+        },
+        "ds_id": "hcpbx62"
+    },
+    "P\u0159\u00edbor": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Sigmunda Freuda 19",
+            "zip": "742 58",
+            "city": "P\u0159\u00edbor",
+            "district": "P\u0159\u00edbor"
+        },
+        "ds_id": "rfvbx3k"
+    },
+    "P\u0159\u00edbram": {
+        "address": {
+            "street": "Tyr\u0161ova 108",
+            "zip": "261 01",
+            "city": "P\u0159\u00edbram",
+            "district": "P\u0159\u00edbram I"
+        },
+        "ds_id": "2ebbrqu"
+    },
+    "P\u0159ibyslav": {
+        "address": {
+            "street": "Bechy\u0148ovo n\u00e1m\u011bst\u00ed 1",
+            "zip": "582 22",
+            "city": "P\u0159ibyslav",
+            "district": "P\u0159ibyslav"
+        },
+        "ds_id": "gw6bqx4"
+    },
+    "P\u0159imda": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Republiky 112",
+            "zip": "348 06",
+            "city": "P\u0159imda",
+            "district": "P\u0159imda"
+        },
+        "ds_id": "ww3bhph"
+    },
+    "Py\u0161ely": {
+        "address": {
+            "street": "n\u00e1m. T. G. Masaryka 4",
+            "zip": "251 67",
+            "city": "Py\u0161ely",
+            "district": "Py\u0161ely"
+        },
+        "ds_id": "pctbp8u"
+    },
+    "Rab\u00ed": {
+        "address": {
+            "street": "57",
+            "zip": "342 01",
+            "city": "Rab\u00ed",
+            "district": "Rab\u00ed"
+        },
+        "ds_id": "dhgbx2b"
+    },
+    "Radnice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Ka\u0161para \u0160ternberka 363",
+            "zip": "338 28",
+            "city": "Radnice",
+            "district": "Radnice"
+        },
+        "ds_id": "c9sb4dp"
+    },
+    "R\u00e1jec - Jest\u0159eb\u00ed": {
+        "address": {
+            "street": "Blanensk\u00e1 84",
+            "zip": "679 02",
+            "city": "R\u00e1jec-Jest\u0159eb\u00ed",
+            "district": "R\u00e1jec"
+        },
+        "ds_id": "2ipbbtf"
+    },
+    "Rajhrad": {
+        "address": {
+            "street": "Masarykova 32",
+            "zip": "664 61",
+            "city": "Rajhrad",
+            "district": "Rajhrad"
+        },
+        "ds_id": "rrebbtj"
+    },
+    "Rakovn\u00edk": {
+        "address": {
+            "street": "Husovo n\u00e1m\u011bst\u00ed 27",
+            "zip": "269 01",
+            "city": "Rakovn\u00edk",
+            "district": "Rakovn\u00edk I"
+        },
+        "ds_id": "qb9bqrd"
+    },
+    "Ralsko": {
+        "address": {
+            "street": "701",
+            "zip": "471 24",
+            "city": "Ralsko",
+            "district": "Ku\u0159\u00edvody"
+        },
+        "ds_id": "xztbtsz"
+    },
+    "Raspenava": {
+        "address": {
+            "street": "Fu\u010d\u00edkova 421",
+            "zip": "464 01",
+            "city": "Raspenava",
+            "district": "Raspenava"
+        },
+        "ds_id": "nkabbs6"
+    },
+    "Rej\u0161tejn": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed Svobody 1",
+            "zip": "341 92",
+            "city": "Rej\u0161tejn",
+            "district": "Rej\u0161tejn"
+        },
+        "ds_id": "6g5bxub"
+    },
+    "Rokycany": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 1",
+            "zip": "337 01",
+            "city": "Rokycany",
+            "district": "St\u0159ed"
+        },
+        "ds_id": "mmfb7hp"
+    },
+    "Rokytnice nad Jizerou": {
+        "address": {
+            "street": "197",
+            "zip": "512 44",
+            "city": "Rokytnice nad Jizerou",
+            "district": "Horn\u00ed Rokytnice"
+        },
+        "ds_id": "htabfwg"
+    },
+    "Rokytnice v Orlick\u00fdch Hor\u00e1ch": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Jind\u0159icha \u0160imka 3",
+            "zip": "517 61",
+            "city": "Rokytnice v Orlick\u00fdch hor\u00e1ch",
+            "district": "Rokytnice v Orlick\u00fdch hor\u00e1ch"
+        },
+        "ds_id": "2pnbr62"
+    },
+    "Ronov nad Doubravou": {
+        "address": {
+            "street": "Chittussiho n\u00e1m. 150",
+            "zip": "538 42",
+            "city": "Ronov nad Doubravou",
+            "district": "Ronov nad Doubravou"
+        },
+        "ds_id": "q3bbbq9"
+    },
+    "Rosice": {
+        "address": {
+            "street": "96",
+            "zip": "538 34",
+            "city": "Rosice",
+            "district": "Rosice"
+        },
+        "ds_id": "f22bzyn"
+    },
+    "Rotava": {
+        "address": {
+            "street": "S\u00eddli\u0161t\u011b 721",
+            "zip": "357 01",
+            "city": "Rotava",
+            "district": "Rotava"
+        },
+        "ds_id": "w4tb7kv"
+    },
+    "Roudnice nad Labem": {
+        "address": {
+            "street": "Karlovo n\u00e1m\u011bst\u00ed 21",
+            "zip": "413 01",
+            "city": "Roudnice nad Labem",
+            "district": "Roudnice nad Labem"
+        },
+        "ds_id": "qdwbviv"
+    },
+    "Rous\u00ednov": {
+        "address": {
+            "street": "Su\u0161ilovo n\u00e1m\u011bst\u00ed 84",
+            "zip": "683 01",
+            "city": "Rous\u00ednov",
+            "district": "Rous\u00ednov"
+        },
+        "ds_id": "f92bbqf"
+    },
+    "Rovensko pod Troskami": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed prof. Draho\u0148ovsk\u00e9ho 1",
+            "zip": "512 63",
+            "city": "Rovensko pod Troskami",
+            "district": "Rovensko pod Troskami"
+        },
+        "ds_id": "wpgbbpr"
+    },
+    "Roztoky": {
+        "address": {
+            "street": "128",
+            "zip": "270 23",
+            "city": "Roztoky",
+            "district": "Roztoky"
+        },
+        "ds_id": "yrjbynv"
+    },
+    "Ro\u017e\u010falovice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 93",
+            "zip": "289 34",
+            "city": "Ro\u017e\u010falovice",
+            "district": "Ro\u017e\u010falovice"
+        },
+        "ds_id": "xq9b2wp"
+    },
+    "Ro\u017emberk nad Vltavou": {
+        "address": {
+            "street": "2",
+            "zip": "382 18",
+            "city": "Ro\u017emberk nad Vltavou",
+            "district": "Ro\u017emberk nad Vltavou"
+        },
+        "ds_id": "cieam5i"
+    },
+    "Ro\u017emit\u00e1l pod T\u0159em\u0161\u00ednem": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 8",
+            "zip": "262 42",
+            "city": "Ro\u017emit\u00e1l pod T\u0159em\u0161\u00ednem",
+            "district": "Ro\u017emit\u00e1l pod T\u0159em\u0161\u00ednem"
+        },
+        "ds_id": "c4wbbp2"
+    },
+    "Ro\u017enov pod Radho\u0161t\u011bm": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 128",
+            "zip": "756 61",
+            "city": "Ro\u017enov pod Radho\u0161t\u011bm",
+            "district": "Ro\u017enov pod Radho\u0161t\u011bm"
+        },
+        "ds_id": "epqbwzr"
+    },
+    "Rtyn\u011b v Podkrkono\u0161\u00ed": {
+        "address": {
+            "street": "Hronovsk\u00e1 431",
+            "zip": "542 33",
+            "city": "Rtyn\u011b v Podkrkono\u0161\u00ed",
+            "district": "Rtyn\u011b v Podkrkono\u0161\u00ed"
+        },
+        "ds_id": "2awbshw"
+    },
+    "Rudn\u00e1": {
+        "address": {
+            "street": "41",
+            "zip": "569 04",
+            "city": "Rudn\u00e1",
+            "district": "Rudn\u00e1"
+        },
+        "ds_id": "cssa3p4"
+    },
+    "Rudolfov": {
+        "address": {
+            "street": "Ke Str\u00e1\u017enici 760",
+            "zip": "373 71",
+            "city": "Rudolfov",
+            "district": "Rudolfov"
+        },
+        "ds_id": "g4qjdsb"
+    },
+    "Rumburk": {
+        "address": {
+            "street": "T\u0159\u00edda 9. kv\u011btna 1366",
+            "zip": "408 01",
+            "city": "Rumburk",
+            "district": "Rumburk 1"
+        },
+        "ds_id": "sdrbhgg"
+    },
+    "Rychnov nad Kn\u011b\u017enou": {
+        "address": {
+            "street": "Havl\u00ed\u010dkova 136",
+            "zip": "516 01",
+            "city": "Rychnov nad Kn\u011b\u017enou",
+            "district": "Rychnov nad Kn\u011b\u017enou"
+        },
+        "ds_id": "qc8bbmz"
+    },
+    "Rychnov u Jablonce nad Nisou": {
+        "address": {
+            "street": "Husova 490",
+            "zip": "468 02",
+            "city": "Rychnov u Jablonce nad Nisou",
+            "district": "Rychnov u Jablonce nad Nisou"
+        },
+        "ds_id": "fjxbbm5"
+    },
+    "Rychvald": {
+        "address": {
+            "street": "Orlovsk\u00e1 678",
+            "zip": "735 32",
+            "city": "Rychvald",
+            "district": "Rychvald"
+        },
+        "ds_id": "6snbbka"
+    },
+    "R\u00fdma\u0159ov": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 230",
+            "zip": "795 01",
+            "city": "R\u00fdma\u0159ov",
+            "district": "R\u00fdma\u0159ov"
+        },
+        "ds_id": "7zkbugk"
+    },
+    "\u0158evnice": {
+        "address": {
+            "street": "n\u00e1m. Kr\u00e1le Ji\u0159\u00edho z Pod\u011bbrad 74",
+            "zip": "252 30",
+            "city": "\u0158evnice",
+            "district": "\u0158evnice"
+        },
+        "ds_id": "t8fbbrn"
+    },
+    "\u0158\u00ed\u010dany": {
+        "address": {
+            "street": "n\u00e1m. Osvobozen\u00ed 340",
+            "zip": "664 82",
+            "city": "\u0158\u00ed\u010dany",
+            "district": "\u0158\u00ed\u010dany"
+        },
+        "ds_id": "s6abvw3"
+    },
+    "Sadsk\u00e1": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m. 1",
+            "zip": "289 12",
+            "city": "Sadsk\u00e1",
+            "district": "Sadsk\u00e1"
+        },
+        "ds_id": "trubtz7"
+    },
+    "S\u00e1zava": {
+        "address": {
+            "street": "2",
+            "zip": "563 01",
+            "city": "S\u00e1zava",
+            "district": "S\u00e1zava"
+        },
+        "ds_id": "45wbiib"
+    },
+    "Se\u010d": {
+        "address": {
+            "street": "17",
+            "zip": "562 01",
+            "city": "Se\u010d",
+            "district": "Se\u010d"
+        },
+        "ds_id": "wdca3pt"
+    },
+    "Sedl\u010dany": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed T. G. Masaryka 32",
+            "zip": "264 01",
+            "city": "Sedl\u010dany",
+            "district": "Sedl\u010dany"
+        },
+        "ds_id": "frsbn7e"
+    },
+    "Sedlec-Pr\u010dice": {
+        "address": {
+            "street": "n\u00e1m. 7. kv\u011btna 62",
+            "zip": "257 91",
+            "city": "Sedlec-Pr\u010dice",
+            "district": "Sedlec"
+        },
+        "ds_id": "bqibx7j"
+    },
+    "Sedlice": {
+        "address": {
+            "street": "19",
+            "zip": "262 42",
+            "city": "Sedlice",
+            "district": "Sedlice"
+        },
+        "ds_id": "k8ya8tc"
+    },
+    "Semily": {
+        "address": {
+            "street": "Husova 82",
+            "zip": "513 01",
+            "city": "Semily",
+            "district": "Semily"
+        },
+        "ds_id": "d36bywp"
+    },
+    "Sezemice": {
+        "address": {
+            "street": "13",
+            "zip": "294 11",
+            "city": "Sezemice",
+            "district": "Sezemice"
+        },
+        "ds_id": "8bbajig"
+    },
+    "Sezimovo \u00dast\u00ed": {
+        "address": {
+            "street": "Dr. E. Bene\u0161e 21",
+            "zip": "391 01",
+            "city": "Sezimovo \u00dast\u00ed",
+            "district": "Sezimovo \u00dast\u00ed"
+        },
+        "ds_id": "h76j9ss"
+    },
+    "Skaln\u00e1": {
+        "address": {
+            "street": "Sportovn\u00ed 9",
+            "zip": "351 34",
+            "city": "Skaln\u00e1",
+            "district": "Skaln\u00e1"
+        },
+        "ds_id": "54jbbhy"
+    },
+    "Skute\u010d": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m\u011bst\u00ed 133",
+            "zip": "539 73",
+            "city": "Skute\u010d",
+            "district": "Skute\u010d"
+        },
+        "ds_id": "khzbbha"
+    },
+    "Slan\u00fd": {
+        "address": {
+            "street": "Velvarsk\u00e1 136",
+            "zip": "274 01",
+            "city": "Slan\u00fd",
+            "district": "Slan\u00fd"
+        },
+        "ds_id": "h3jb7t5"
+    },
+    "Slati\u0148any": {
+        "address": {
+            "street": "T. G. Masaryka 36",
+            "zip": "538 21",
+            "city": "Slati\u0148any",
+            "district": "Slati\u0148any"
+        },
+        "ds_id": "jzrbny8"
+    },
+    "Slavi\u010d\u00edn": {
+        "address": {
+            "street": "Osvobozen\u00ed 25",
+            "zip": "763 21",
+            "city": "Slavi\u010d\u00edn",
+            "district": "Slavi\u010d\u00edn"
+        },
+        "ds_id": "jsub2vd"
+    },
+    "Slavkov u Brna": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m\u011bst\u00ed 65",
+            "zip": "684 01",
+            "city": "Slavkov u Brna",
+            "district": "Slavkov u Brna"
+        },
+        "ds_id": "zrvbwe4"
+    },
+    "Slavonice": {
+        "address": {
+            "street": "Horn\u00ed n\u00e1m\u011bst\u00ed 525",
+            "zip": "378 81",
+            "city": "Slavonice",
+            "district": "Slavonice"
+        },
+        "ds_id": "ux4bsyk"
+    },
+    "Slu\u0161ovice": {
+        "address": {
+            "street": "n\u00e1m. Svobody 25",
+            "zip": "763 15",
+            "city": "Slu\u0161ovice",
+            "district": "Slu\u0161ovice"
+        },
+        "ds_id": "72db32d"
+    },
+    "Sme\u010dno": {
+        "address": {
+            "street": "n\u00e1m. T. G. Masaryka 12",
+            "zip": "273 05",
+            "city": "Sme\u010dno",
+            "district": "Sme\u010dno"
+        },
+        "ds_id": "xsbbbf6"
+    },
+    "SMI\u0158ICE": {
+        "address": {
+            "street": "Palack\u00e9ho 106",
+            "zip": "503 03",
+            "city": "Smi\u0159ice",
+            "district": "Smi\u0159ice"
+        },
+        "ds_id": "nunbrcq"
+    },
+    "Smr\u017eovka": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed T. G. Masaryka 600",
+            "zip": "468 51",
+            "city": "Smr\u017eovka",
+            "district": "Smr\u017eovka"
+        },
+        "ds_id": "5egbben"
+    },
+    "Sob\u011bslav": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Republiky 59",
+            "zip": "392 01",
+            "city": "Sob\u011bslav",
+            "district": "Sob\u011bslav I"
+        },
+        "ds_id": "gfvbpaq"
+    },
+    "Sobotka": {
+        "address": {
+            "street": "Boleslavsk\u00e1 440",
+            "zip": "507 43",
+            "city": "Sobotka",
+            "district": "Sobotka"
+        },
+        "ds_id": "p2wbqb6"
+    },
+    "Sokolov": {
+        "address": {
+            "street": "Rokycanova 1929",
+            "zip": "356 01",
+            "city": "Sokolov",
+            "district": "Sokolov"
+        },
+        "ds_id": "6xmbrxu"
+    },
+    "Sp\u00e1len\u00e9 Po\u0159\u00ed\u010d\u00ed": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed Svobody 132",
+            "zip": "335 61",
+            "city": "Sp\u00e1len\u00e9 Po\u0159\u00ed\u010d\u00ed",
+            "district": "Sp\u00e1len\u00e9 Po\u0159\u00ed\u010d\u00ed"
+        },
+        "ds_id": "5m3bhef"
+    },
+    "Sta\u0148kov": {
+        "address": {
+            "street": "83",
+            "zip": "378 06",
+            "city": "Sta\u0148kov",
+            "district": "Sta\u0148kov"
+        },
+        "ds_id": "4rbed5f"
+    },
+    "Star\u00e9 M\u011bsto": {
+        "address": {
+            "street": "Jamnick\u00e1 46",
+            "zip": "738 01",
+            "city": "Star\u00e9 M\u011bsto",
+            "district": "Star\u00e9 M\u011bsto"
+        },
+        "ds_id": "hefbskg"
+    },
+    "St\u00e1rkov": {
+        "address": {
+            "street": "82",
+            "zip": "549 36",
+            "city": "St\u00e1rkov",
+            "district": "St\u00e1rkov"
+        },
+        "ds_id": "uyybp7b"
+    },
+    "Star\u00fd Plzenec": {
+        "address": {
+            "street": "Smetanova 932",
+            "zip": "332 02",
+            "city": "Star\u00fd Plzenec",
+            "district": "Star\u00fd Plzenec"
+        },
+        "ds_id": "dyrbzpq"
+    },
+    "Stod": {
+        "address": {
+            "street": "n\u00e1m. \u010cSA 294",
+            "zip": "333 01",
+            "city": "Stod",
+            "district": "Stod"
+        },
+        "ds_id": "u4abzrc"
+    },
+    "Stochov": {
+        "address": {
+            "street": "Jaroslava \u0160\u00edpka 486",
+            "zip": "273 03",
+            "city": "Stochov",
+            "district": "Stochov"
+        },
+        "ds_id": "gssb6ug"
+    },
+    "Strakonice": {
+        "address": {
+            "street": "Velk\u00e9 n\u00e1m\u011bst\u00ed 2",
+            "zip": "386 01",
+            "city": "Strakonice",
+            "district": "Strakonice I"
+        },
+        "ds_id": "4gpbfnq"
+    },
+    "Str\u00e1\u017e nad Ne\u017e\u00e1rkou": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Emy Destinnov\u00e9 61",
+            "zip": "378 02",
+            "city": "Str\u00e1\u017e nad Ne\u017e\u00e1rkou",
+            "district": "Str\u00e1\u017e nad Ne\u017e\u00e1rkou"
+        },
+        "ds_id": "q6ibxme"
+    },
+    "Str\u00e1\u017enice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 503",
+            "zip": "696 62",
+            "city": "Str\u00e1\u017enice",
+            "district": "Str\u00e1\u017enice"
+        },
+        "ds_id": "ngpby9e"
+    },
+    "Str\u00e1\u017eov": {
+        "address": {
+            "street": "71",
+            "zip": "340 21",
+            "city": "Str\u00e1\u017eov",
+            "district": "Str\u00e1\u017eov"
+        },
+        "ds_id": "xmxbrcm"
+    },
+    "Str\u00e1\u017e pod Ralskem": {
+        "address": {
+            "street": "Revolu\u010dn\u00ed 164",
+            "zip": "471 27",
+            "city": "Str\u00e1\u017e pod Ralskem",
+            "district": "Str\u00e1\u017e pod Ralskem"
+        },
+        "ds_id": "ifqba8b"
+    },
+    "Strmilov": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 60",
+            "zip": "378 53",
+            "city": "Strmilov",
+            "district": "Strmilov"
+        },
+        "ds_id": "rywbt6e"
+    },
+    "St\u0159\u00edbro": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 1",
+            "zip": "349 01",
+            "city": "St\u0159\u00edbro",
+            "district": "St\u0159\u00edbro"
+        },
+        "ds_id": "gkub5mb"
+    },
+    "Stud\u00e9nka": {
+        "address": {
+            "street": "n\u00e1m. Republiky 762",
+            "zip": "742 13",
+            "city": "Stud\u00e9nka",
+            "district": "Butovice"
+        },
+        "ds_id": "vz3bvhc"
+    },
+    "Suchdol nad Lu\u017enic\u00ed": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed T. G. Masaryka 9",
+            "zip": "378 06",
+            "city": "Suchdol nad Lu\u017enic\u00ed",
+            "district": "Suchdol nad Lu\u017enic\u00ed"
+        },
+        "ds_id": "rtrb2hz"
+    },
+    "Su\u0161ice": {
+        "address": {
+            "street": "54",
+            "zip": "687 04",
+            "city": "Su\u0161ice",
+            "district": "Su\u0161ice"
+        },
+        "ds_id": "z8nargf"
+    },
+    "Sv\u011btl\u00e1 nad S\u00e1zavou": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Tr\u010dk\u016f z L\u00edpy 18",
+            "zip": "582 91",
+            "city": "Sv\u011btl\u00e1 nad S\u00e1zavou",
+            "district": "Sv\u011btl\u00e1 nad S\u00e1zavou"
+        },
+        "ds_id": "yptb58f"
+    },
+    "Svitavy": {
+        "address": {
+            "street": "T. G. Masaryka 5",
+            "zip": "568 02",
+            "city": "Svitavy",
+            "district": "P\u0159edm\u011bst\u00ed"
+        },
+        "ds_id": "6jrbphg"
+    },
+    "Svratka": {
+        "address": {
+            "street": "Palack\u00e9ho 30",
+            "zip": "592 02",
+            "city": "Svratka",
+            "district": "Svratka"
+        },
+        "ds_id": "ekhba4k"
+    },
+    "\u0160enov": {
+        "address": {
+            "street": "Radni\u010dn\u00ed n\u00e1m\u011bst\u00ed 300",
+            "zip": "739 34",
+            "city": "\u0160enov",
+            "district": "\u0160enov"
+        },
+        "ds_id": "zznbfqm"
+    },
+    "\u0160lapanice": {
+        "address": {
+            "street": "68",
+            "zip": "273 71",
+            "city": "\u0160lapanice",
+            "district": "\u0160lapanice"
+        },
+        "ds_id": "m75b8d3"
+    },
+    "\u0160luknov": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 1",
+            "zip": "407 77",
+            "city": "\u0160luknov",
+            "district": "\u0160luknov"
+        },
+        "ds_id": "8jkbbf3"
+    },
+    "\u0160pindler\u016fv Ml\u00fdn": {
+        "address": {
+            "street": "173",
+            "zip": "543 51",
+            "city": "\u0160pindler\u016fv Ml\u00fdn",
+            "district": "\u0160pindler\u016fv Ml\u00fdn"
+        },
+        "ds_id": "fb3b4nn"
+    },
+    "\u0160t\u011bp\u00e1nov": {
+        "address": {
+            "street": "Horn\u00ed 444",
+            "zip": "783 13",
+            "city": "\u0160t\u011bp\u00e1nov",
+            "district": "\u0160t\u011bp\u00e1nov"
+        },
+        "ds_id": "8xab2jm"
+    },
+    "\u0160ternberk": {
+        "address": {
+            "street": "Horn\u00ed n\u00e1m\u011bst\u00ed 78",
+            "zip": "785 01",
+            "city": "\u0160ternberk",
+            "district": "\u0160ternberk"
+        },
+        "ds_id": "ud7bzn4"
+    },
+    "\u0160t\u011bt\u00ed": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m. 163",
+            "zip": "411 08",
+            "city": "\u0160t\u011bt\u00ed",
+            "district": "\u0160t\u011bt\u00ed"
+        },
+        "ds_id": "fypbba8"
+    },
+    "\u0160t\u00edty": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 55",
+            "zip": "789 91",
+            "city": "\u0160t\u00edty",
+            "district": "\u0160t\u00edty"
+        },
+        "ds_id": "67eba9e"
+    },
+    "\u0160tramberk": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 9",
+            "zip": "742 66",
+            "city": "\u0160tramberk",
+            "district": "\u0160tramberk"
+        },
+        "ds_id": "ctjba9t"
+    },
+    "\u0160umperk": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 364",
+            "zip": "787 01",
+            "city": "\u0160umperk",
+            "district": "\u0160umperk"
+        },
+        "ds_id": "8bqb4gk"
+    },
+    "\u0160vihov": {
+        "address": {
+            "street": "9",
+            "zip": "270 33",
+            "city": "\u0160vihov",
+            "district": "\u0160vihov"
+        },
+        "ds_id": "rhwatgu"
+    },
+    "T\u00e1bor": {
+        "address": {
+            "street": "\u017di\u017ekovo n\u00e1m. 2",
+            "zip": "390 01",
+            "city": "T\u00e1bor",
+            "district": "T\u00e1bor"
+        },
+        "ds_id": "5zrb8iz"
+    },
+    "Tachov": {
+        "address": {
+            "street": "34",
+            "zip": "472 01",
+            "city": "Tachov",
+            "district": "Tachov"
+        },
+        "ds_id": "t8man3i"
+    },
+    "Tanvald": {
+        "address": {
+            "street": "Palack\u00e9ho 359",
+            "zip": "468 41",
+            "city": "Tanvald",
+            "district": "Tanvald"
+        },
+        "ds_id": "92zbxiu"
+    },
+    "Tel\u010d": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Zachari\u00e1\u0161e z Hradce 10",
+            "zip": "588 56",
+            "city": "Tel\u010d",
+            "district": "Tel\u010d-Vnit\u0159n\u00ed M\u011bsto"
+        },
+        "ds_id": "c26bg9k"
+    },
+    "Tepl\u00e1": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 1",
+            "zip": "364 61",
+            "city": "Tepl\u00e1",
+            "district": "Tepl\u00e1"
+        },
+        "ds_id": "gpdb7mi"
+    },
+    "Terez\u00edn": {
+        "address": {
+            "street": "78",
+            "zip": "696 14",
+            "city": "Terez\u00edn",
+            "district": "Terez\u00edn"
+        },
+        "ds_id": "utwbj7t"
+    },
+    "Ti\u0161nov": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 111",
+            "zip": "666 01",
+            "city": "Ti\u0161nov",
+            "district": "Ti\u0161nov"
+        },
+        "ds_id": "qzjbhat"
+    },
+    "Tou\u017eim": {
+        "address": {
+            "street": "S\u00eddli\u0161t\u011b 428",
+            "zip": "364 01",
+            "city": "Tou\u017eim",
+            "district": "Tou\u017eim"
+        },
+        "ds_id": "ji6b68s"
+    },
+    "Tova\u010dov": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 12",
+            "zip": "751 01",
+            "city": "Tova\u010dov",
+            "district": "Tova\u010dov I-M\u011bsto"
+        },
+        "ds_id": "nppbaz6"
+    },
+    "Trhov\u00e9 Sviny": {
+        "address": {
+            "street": "\u017di\u017ekovo n\u00e1m\u011bst\u00ed 32",
+            "zip": "374 01",
+            "city": "Trhov\u00e9 Sviny",
+            "district": "Trhov\u00e9 Sviny"
+        },
+        "ds_id": "q6qbax8"
+    },
+    "Trhov\u00fd \u0160t\u011bp\u00e1nov": {
+        "address": {
+            "street": "Dub\u011bjovick\u00e1 269",
+            "zip": "257 63",
+            "city": "Trhov\u00fd \u0160t\u011bp\u00e1nov",
+            "district": "Trhov\u00fd \u0160t\u011bp\u00e1nov"
+        },
+        "ds_id": "vf6b37t"
+    },
+    "Trmice": {
+        "address": {
+            "street": "F\u00fcgnerova 448",
+            "zip": "400 04",
+            "city": "Trmice",
+            "district": "Trmice"
+        },
+        "ds_id": "gdfbaxc"
+    },
+    "T\u0159ebechovice pod Orebem": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 14",
+            "zip": "503 46",
+            "city": "T\u0159ebechovice pod Orebem",
+            "district": "T\u0159ebechovice pod Orebem"
+        },
+        "ds_id": "ububaym"
+    },
+    "T\u0159ebenice": {
+        "address": {
+            "street": "58",
+            "zip": "675 52",
+            "city": "T\u0159ebenice",
+            "district": "T\u0159ebenice"
+        },
+        "ds_id": "uf8au3b"
+    },
+    "T\u0159eb\u00ed\u010d": {
+        "address": {
+            "street": "Karlovo n\u00e1m. 104",
+            "zip": "674 01",
+            "city": "T\u0159eb\u00ed\u010d",
+            "district": "Vnit\u0159n\u00ed M\u011bsto"
+        },
+        "ds_id": "6pub8mc"
+    },
+    "T\u0159ebo\u0148": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m. 46",
+            "zip": "379 01",
+            "city": "T\u0159ebo\u0148",
+            "district": "T\u0159ebo\u0148 II"
+        },
+        "ds_id": "4cbbvj4"
+    },
+    "T\u0159emo\u0161n\u00e1": {
+        "address": {
+            "street": "S\u00eddli\u0161t\u011b 992",
+            "zip": "330 11",
+            "city": "T\u0159emo\u0161n\u00e1",
+            "district": "T\u0159emo\u0161n\u00e1"
+        },
+        "ds_id": "vmbbvu6"
+    },
+    "T\u0159emo\u0161nice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed M\u00edru 451",
+            "zip": "538 43",
+            "city": "T\u0159emo\u0161nice",
+            "district": "T\u0159emo\u0161nice"
+        },
+        "ds_id": "zsrbtms"
+    },
+    "T\u0159e\u0161\u0165": {
+        "address": {
+            "street": "Revolu\u010dn\u00ed 20",
+            "zip": "589 01",
+            "city": "T\u0159e\u0161\u0165",
+            "district": "T\u0159e\u0161\u0165"
+        },
+        "ds_id": "fcxbzvc"
+    },
+    "T\u00fdnec nad Labem": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 1",
+            "zip": "281 26",
+            "city": "T\u00fdnec nad Labem",
+            "district": "T\u00fdnec nad Labem"
+        },
+        "ds_id": "927baun"
+    },
+    "T\u00fdnec nad S\u00e1zavou": {
+        "address": {
+            "street": "K N\u00e1kl\u00ed 404",
+            "zip": "257 41",
+            "city": "T\u00fdnec nad S\u00e1zavou",
+            "district": "T\u00fdnec nad S\u00e1zavou"
+        },
+        "ds_id": "vrpbfxs"
+    },
+    "T\u00fdni\u0161t\u011b nad Orlic\u00ed": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m. 90",
+            "zip": "517 21",
+            "city": "T\u00fdni\u0161t\u011b nad Orlic\u00ed",
+            "district": "T\u00fdni\u0161t\u011b nad Orlic\u00ed"
+        },
+        "ds_id": "y9wbaus"
+    },
+    "T\u00fdn nad Vltavou": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 2",
+            "zip": "375 01",
+            "city": "T\u00fdn nad Vltavou",
+            "district": "T\u00fdn nad Vltavou"
+        },
+        "ds_id": "tn8b4c3"
+    },
+    "Uhersk\u00e9 Hradi\u0161t\u011b": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 19",
+            "zip": "686 01",
+            "city": "Uhersk\u00e9 Hradi\u0161t\u011b",
+            "district": "Uhersk\u00e9 Hradi\u0161t\u011b"
+        },
+        "ds_id": "ef2b3c5"
+    },
+    "Uhersk\u00fd Brod": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 100",
+            "zip": "688 01",
+            "city": "Uhersk\u00fd Brod",
+            "district": "Uhersk\u00fd Brod"
+        },
+        "ds_id": "e3kbzf6"
+    },
+    "Uhersk\u00fd Ostroh": {
+        "address": {
+            "street": "Z\u00e1meck\u00e1 24",
+            "zip": "687 24",
+            "city": "Uhersk\u00fd Ostroh",
+            "district": "Uhersk\u00fd Ostroh"
+        },
+        "ds_id": "vm7bs3x"
+    },
+    "Uhl\u00ed\u0159sk\u00e9 Janovice": {
+        "address": {
+            "street": "V\u00e1clavsk\u00e9 n\u00e1m\u011bst\u00ed 6",
+            "zip": "285 04",
+            "city": "Uhl\u00ed\u0159sk\u00e9 Janovice",
+            "district": "Uhl\u00ed\u0159sk\u00e9 Janovice"
+        },
+        "ds_id": "fpcbau2"
+    },
+    "\u00dajezd u Brna": {
+        "address": {
+            "street": "Komensk\u00e9ho 107",
+            "zip": "664 53",
+            "city": "\u00dajezd u Brna",
+            "district": "\u00dajezd u Brna"
+        },
+        "ds_id": "iu3b65f"
+    },
+    "Unho\u0161\u0165": {
+        "address": {
+            "street": "V\u00e1clavsk\u00e9 n\u00e1m. 44",
+            "zip": "273 51",
+            "city": "Unho\u0161\u0165",
+            "district": "Unho\u0161\u0165"
+        },
+        "ds_id": "8gvbv5z"
+    },
+    "Uni\u010dov": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 1",
+            "zip": "783 91",
+            "city": "Uni\u010dov",
+            "district": "Uni\u010dov"
+        },
+        "ds_id": "zbdb4bg"
+    },
+    "\u00dasov": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 86",
+            "zip": "789 73",
+            "city": "\u00dasov",
+            "district": "\u00dasov"
+        },
+        "ds_id": "ch8batp"
+    },
+    "\u00dast\u00ed nad Orlic\u00ed": {
+        "address": {
+            "street": "Sychrova 16",
+            "zip": "562 01",
+            "city": "\u00dast\u00ed nad Orlic\u00ed",
+            "district": "\u00dast\u00ed nad Orlic\u00ed"
+        },
+        "ds_id": "bxcbwmg"
+    },
+    "\u00da\u0161t\u011bk": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 83",
+            "zip": "411 45",
+            "city": "\u00da\u0161t\u011bk",
+            "district": "\u00da\u0161t\u011bk-Vnit\u0159n\u00ed M\u011bsto"
+        },
+        "ds_id": "45tbuvd"
+    },
+    "\u00dater\u00fd": {
+        "address": {
+            "street": "1",
+            "zip": "330 40",
+            "city": "\u00dater\u00fd",
+            "district": "\u00dater\u00fd"
+        },
+        "ds_id": "ghmbhq6"
+    },
+    "\u00davaly": {
+        "address": {
+            "street": "Arno\u0161ta z Pardubic 95",
+            "zip": "250 82",
+            "city": "\u00davaly",
+            "district": "\u00davaly"
+        },
+        "ds_id": "pa3bvse"
+    },
+    "Vala\u0161sk\u00e9 Klobouky": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 189",
+            "zip": "766 01",
+            "city": "Vala\u0161sk\u00e9 Klobouky",
+            "district": "Vala\u0161sk\u00e9 Klobouky"
+        },
+        "ds_id": "wi4brk7"
+    },
+    "Vala\u0161sk\u00e9 Mezi\u0159\u00ed\u010d\u00ed": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 7",
+            "zip": "757 01",
+            "city": "Vala\u0161sk\u00e9 Mezi\u0159\u00ed\u010d\u00ed",
+            "district": "Vala\u0161sk\u00e9 Mezi\u0159\u00ed\u010d\u00ed"
+        },
+        "ds_id": "9c4bard"
+    },
+    "Valtice": {
+        "address": {
+            "street": "n\u00e1m. Svobody 21",
+            "zip": "691 42",
+            "city": "Valtice",
+            "district": "Valtice"
+        },
+        "ds_id": "qv3buey"
+    },
+    "Vamberk": {
+        "address": {
+            "street": "Husovo n\u00e1m\u011bst\u00ed 1",
+            "zip": "517 54",
+            "city": "Vamberk",
+            "district": "Vamberk"
+        },
+        "ds_id": "f83bqus"
+    },
+    "Varnsdorf": {
+        "address": {
+            "street": "N\u00e1m. E. Bene\u0161e 470",
+            "zip": "407 47",
+            "city": "Varnsdorf",
+            "district": "Varnsdorf"
+        },
+        "ds_id": "kabbfuj"
+    },
+    "Vejprty": {
+        "address": {
+            "street": "Tylova 870",
+            "zip": "431 91",
+            "city": "Vejprty",
+            "district": "Vejprty"
+        },
+        "ds_id": "4v5by8r"
+    },
+    "Vele\u0161\u00edn": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed J. V. Kamar\u00fdta 76",
+            "zip": "382 32",
+            "city": "Vele\u0161\u00edn",
+            "district": "Vele\u0161\u00edn"
+        },
+        "ds_id": "8r8bwj8"
+    },
+    "Velk\u00e1 B\u00edte\u0161": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 87",
+            "zip": "595 01",
+            "city": "Velk\u00e1 B\u00edte\u0161",
+            "district": "Velk\u00e1 B\u00edte\u0161"
+        },
+        "ds_id": "67zb7hf"
+    },
+    "Velk\u00e1 Byst\u0159ice": {
+        "address": {
+            "street": "Z\u00e1meck\u00e9 n\u00e1m\u011bst\u00ed 79",
+            "zip": "783 53",
+            "city": "Velk\u00e1 Byst\u0159ice",
+            "district": "Velk\u00e1 Byst\u0159ice"
+        },
+        "ds_id": "tv5bqfv"
+    },
+    "Velk\u00e9 B\u00edlovice": {
+        "address": {
+            "street": "n\u00e1m. Osvoboditel\u016f 570",
+            "zip": "691 02",
+            "city": "Velk\u00e9 B\u00edlovice",
+            "district": "Velk\u00e9 B\u00edlovice"
+        },
+        "ds_id": "vepbaq4"
+    },
+    "Velk\u00e9 Hamry": {
+        "address": {
+            "street": "362",
+            "zip": "468 45",
+            "city": "Velk\u00e9 Hamry",
+            "district": "Velk\u00e9 Hamry"
+        },
+        "ds_id": "vivbhhv"
+    },
+    "Velk\u00e9 Mezi\u0159\u00ed\u010d\u00ed": {
+        "address": {
+            "street": "Radnick\u00e1 29",
+            "zip": "594 01",
+            "city": "Velk\u00e9 Mezi\u0159\u00ed\u010d\u00ed",
+            "district": "Velk\u00e9 Mezi\u0159\u00ed\u010d\u00ed"
+        },
+        "ds_id": "gvebwhm"
+    },
+    "Velk\u00e9 Opatovice": {
+        "address": {
+            "street": "Z\u00e1mek 14",
+            "zip": "679 63",
+            "city": "Velk\u00e9 Opatovice",
+            "district": "Velk\u00e9 Opatovice"
+        },
+        "ds_id": "8nzban3"
+    },
+    "Velk\u00e9 Pavlovice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 9. kv\u011btna 700",
+            "zip": "691 06",
+            "city": "Velk\u00e9 Pavlovice",
+            "district": "Velk\u00e9 Pavlovice"
+        },
+        "ds_id": "xvqban6"
+    },
+    "Velk\u00fd \u0160enov": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m. 342",
+            "zip": "407 78",
+            "city": "Velk\u00fd \u0160enov",
+            "district": "Velk\u00fd \u0160enov"
+        },
+        "ds_id": "ea6bang"
+    },
+    "Veltrusy": {
+        "address": {
+            "street": "Palack\u00e9ho 9",
+            "zip": "277 46",
+            "city": "Veltrusy",
+            "district": "Veltrusy"
+        },
+        "ds_id": "yn2bwnn"
+    },
+    "Velvary": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Kr\u00e1le Vladislava 1",
+            "zip": "273 24",
+            "city": "Velvary",
+            "district": "Velvary"
+        },
+        "ds_id": "4ghb4cv"
+    },
+    "Verne\u0159ice": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 138",
+            "zip": "407 25",
+            "city": "Verne\u0159ice",
+            "district": "Verne\u0159ice"
+        },
+        "ds_id": "av6b3nk"
+    },
+    "Vesel\u00ed nad Lu\u017enic\u00ed": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed T. G. Masaryka 26",
+            "zip": "391 81",
+            "city": "Vesel\u00ed nad Lu\u017enic\u00ed",
+            "district": "Vesel\u00ed nad Lu\u017enic\u00ed I"
+        },
+        "ds_id": "3wpbyp9"
+    },
+    "Vesel\u00ed nad Moravou": {
+        "address": {
+            "street": "t\u0159. Masarykova 119",
+            "zip": "698 01",
+            "city": "Vesel\u00ed nad Moravou",
+            "district": "Vesel\u00ed nad Moravou"
+        },
+        "ds_id": "ismbss3"
+    },
+    "V\u011bt\u0159n\u00ed": {
+        "address": {
+            "street": "Na \u017dof\u00edn\u011b 191",
+            "zip": "382 11",
+            "city": "V\u011bt\u0159n\u00ed",
+            "district": "V\u011bt\u0159n\u00ed"
+        },
+        "ds_id": "fjrbyba"
+    },
+    "Veversk\u00e1 B\u00edt\u00fd\u0161ka": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Na M\u011bste\u010dku 72",
+            "zip": "664 71",
+            "city": "Veversk\u00e1 B\u00edt\u00fd\u0161ka",
+            "district": "Veversk\u00e1 B\u00edt\u00fd\u0161ka"
+        },
+        "ds_id": "gr7bakj"
+    },
+    "Vidnava": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 80",
+            "zip": "790 55",
+            "city": "Vidnava",
+            "district": "Vidnava"
+        },
+        "ds_id": "7ywbajq"
+    },
+    "Vimperk": {
+        "address": {
+            "street": "Steinbrenerova 6",
+            "zip": "385 01",
+            "city": "Vimperk",
+            "district": "Vimperk I"
+        },
+        "ds_id": "9ydb7vm"
+    },
+    "V\u00edtkov": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Jana Zaj\u00edce 7",
+            "zip": "749 01",
+            "city": "V\u00edtkov",
+            "district": "V\u00edtkov"
+        },
+        "ds_id": "3seb39i"
+    },
+    "Vizovice": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 1007",
+            "zip": "763 12",
+            "city": "Vizovice",
+            "district": "Vizovice"
+        },
+        "ds_id": "wwybt2j"
+    },
+    "Vlachovo B\u0159ez\u00ed": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 56",
+            "zip": "384 22",
+            "city": "Vlachovo B\u0159ez\u00ed",
+            "district": "Vlachovo B\u0159ez\u00ed"
+        },
+        "ds_id": "xd9bvpz"
+    },
+    "Vla\u0161im": {
+        "address": {
+            "street": "Jana Masaryka 302",
+            "zip": "258 01",
+            "city": "Vla\u0161im",
+            "district": "Vla\u0161im"
+        },
+        "ds_id": "zbjbfmb"
+    },
+    "Vod\u0148any": {
+        "address": {
+            "street": "n\u00e1m. Svobody 18",
+            "zip": "389 01",
+            "city": "Vod\u0148any",
+            "district": "Vod\u0148any I"
+        },
+        "ds_id": "fb9bfyg"
+    },
+    "Volary": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 25",
+            "zip": "384 51",
+            "city": "Volary",
+            "district": "Volary"
+        },
+        "ds_id": "kxrj2k8"
+    },
+    "Volyn\u011b": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 41",
+            "zip": "387 01",
+            "city": "Volyn\u011b",
+            "district": "Volyn\u011b"
+        },
+        "ds_id": "2fybwhe"
+    },
+    "Votice": {
+        "address": {
+            "street": "Komensk\u00e9ho n\u00e1m. 700",
+            "zip": "259 01",
+            "city": "Votice",
+            "district": "Votice"
+        },
+        "ds_id": "9gbbwng"
+    },
+    "Vracov": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 202",
+            "zip": "696 42",
+            "city": "Vracov",
+            "district": "Vracov"
+        },
+        "ds_id": "xiibr5m"
+    },
+    "Vratimov": {
+        "address": {
+            "street": "Fr\u00fddeck\u00e1 853",
+            "zip": "739 32",
+            "city": "Vratimov",
+            "district": "Vratimov"
+        },
+        "ds_id": "m29bfpe"
+    },
+    "Vrbno pod Prad\u011bdem": {
+        "address": {
+            "street": "N\u00e1dra\u017en\u00ed 389",
+            "zip": "793 26",
+            "city": "Vrbno pod Prad\u011bdem",
+            "district": "Vrbno pod Prad\u011bdem"
+        },
+        "ds_id": "znnbahx"
+    },
+    "Vrchlab\u00ed": {
+        "address": {
+            "street": "Z\u00e1mek 1",
+            "zip": "543 01",
+            "city": "Vrchlab\u00ed",
+            "district": "Vrchlab\u00ed"
+        },
+        "ds_id": "f77btm4"
+    },
+    "Vroutek": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 166",
+            "zip": "439 82",
+            "city": "Vroutek",
+            "district": "Vroutek"
+        },
+        "ds_id": "iyjbtza"
+    },
+    "Vset\u00edn": {
+        "address": {
+            "street": "Sv\u00e1rov 1080",
+            "zip": "755 01",
+            "city": "Vset\u00edn",
+            "district": "Vset\u00edn"
+        },
+        "ds_id": "75sb29d"
+    },
+    "V\u0161eruby": {
+        "address": {
+            "street": "77",
+            "zip": "345 07",
+            "city": "V\u0161eruby",
+            "district": "V\u0161eruby"
+        },
+        "ds_id": "4i8bhnz"
+    },
+    "V\u00fdslun\u00ed": {
+        "address": {
+            "street": "14",
+            "zip": "431 83",
+            "city": "V\u00fdslun\u00ed",
+            "district": "V\u00fdslun\u00ed"
+        },
+        "ds_id": "kbvbwy8"
+    },
+    "Vysok\u00e9 M\u00fdto": {
+        "address": {
+            "street": "B. Smetany 92",
+            "zip": "566 01",
+            "city": "Vysok\u00e9 M\u00fdto",
+            "district": "Vysok\u00e9 M\u00fdto-M\u011bsto"
+        },
+        "ds_id": "47jbpbt"
+    },
+    "Vysok\u00e9 nad Jizerou": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed Dr. Karla Kram\u00e1\u0159e 227",
+            "zip": "512 11",
+            "city": "Vysok\u00e9 nad Jizerou",
+            "district": "Vysok\u00e9 nad Jizerou"
+        },
+        "ds_id": "tcebaf5"
+    },
+    "Vysok\u00e9 Vesel\u00ed": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 9",
+            "zip": "507 03",
+            "city": "Vysok\u00e9 Vesel\u00ed",
+            "district": "Vysok\u00e9 Vesel\u00ed"
+        },
+        "ds_id": "ii5bafb"
+    },
+    "Vy\u0161kov": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 108",
+            "zip": "682 01",
+            "city": "Vy\u0161kov",
+            "district": "Vy\u0161kov-M\u011bsto"
+        },
+        "ds_id": "wc6bqdy"
+    },
+    "Vy\u0161\u0161\u00ed Brod": {
+        "address": {
+            "street": "M\u00edru 250",
+            "zip": "382 73",
+            "city": "Vy\u0161\u0161\u00ed Brod",
+            "district": "Vy\u0161\u0161\u00ed Brod"
+        },
+        "ds_id": "7tnbs9d"
+    },
+    "Z\u00e1b\u0159eh": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 510",
+            "zip": "789 01",
+            "city": "Z\u00e1b\u0159eh",
+            "district": "Z\u00e1b\u0159eh"
+        },
+        "ds_id": "hk9bq2f"
+    },
+    "Z\u00e1kupy": {
+        "address": {
+            "street": "Borsk\u00e1 5",
+            "zip": "471 23",
+            "city": "Z\u00e1kupy",
+            "district": "Z\u00e1kupy"
+        },
+        "ds_id": "6jnbzui"
+    },
+    "Z\u00e1smuky": {
+        "address": {
+            "street": "Komensk\u00e9ho n\u00e1m. 133",
+            "zip": "281 44",
+            "city": "Z\u00e1smuky",
+            "district": "Z\u00e1smuky"
+        },
+        "ds_id": "dcebt2t"
+    },
+    "Zbiroh": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 112",
+            "zip": "338 08",
+            "city": "Zbiroh",
+            "district": "Zbiroh"
+        },
+        "ds_id": "vtfbad7"
+    },
+    "Zb\u00fd\u0161ov": {
+        "address": {
+            "street": "30",
+            "zip": "285 65",
+            "city": "Zb\u00fd\u0161ov",
+            "district": "Zb\u00fd\u0161ov"
+        },
+        "ds_id": "wwaa95p"
+    },
+    "Zdice": {
+        "address": {
+            "street": "Husova 2",
+            "zip": "267 51",
+            "city": "Zdice",
+            "district": "Zdice"
+        },
+        "ds_id": "yagbaba"
+    },
+    "Zlat\u00e9 Hory": {
+        "address": {
+            "street": "n\u00e1m. Svobody 80",
+            "zip": "793 76",
+            "city": "Zlat\u00e9 Hory",
+            "district": "Zlat\u00e9 Hory"
+        },
+        "ds_id": "rx8a99k"
+    },
+    "Zliv": {
+        "address": {
+            "street": "Doln\u00ed n\u00e1m\u011bst\u00ed 585",
+            "zip": "373 44",
+            "city": "Zliv",
+            "district": "Zliv"
+        },
+        "ds_id": "8dna98w"
+    },
+    "Znojmo": {
+        "address": {
+            "street": "Obrokov\u00e1 1",
+            "zip": "669 02",
+            "city": "Znojmo",
+            "district": "Znojmo"
+        },
+        "ds_id": "ns4a987"
+    },
+    "Zru\u010d nad S\u00e1zavou": {
+        "address": {
+            "street": "Z\u00e1mek 1",
+            "zip": "285 22",
+            "city": "Zru\u010d nad S\u00e1zavou",
+            "district": "Zru\u010d nad S\u00e1zavou"
+        },
+        "ds_id": "v3qb2au"
+    },
+    "Zub\u0159\u00ed": {
+        "address": {
+            "street": "37",
+            "zip": "592 31",
+            "city": "Zub\u0159\u00ed",
+            "district": "Zub\u0159\u00ed"
+        },
+        "ds_id": "cc9aug7"
+    },
+    "\u017dacl\u00e9\u0159": {
+        "address": {
+            "street": "R\u00fdchorsk\u00e9 n\u00e1m\u011bst\u00ed 181",
+            "zip": "542 01",
+            "city": "\u017dacl\u00e9\u0159",
+            "district": "\u017dacl\u00e9\u0159"
+        },
+        "ds_id": "sqnby29"
+    },
+    "\u017damberk": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 166",
+            "zip": "564 01",
+            "city": "\u017damberk",
+            "district": "\u017damberk"
+        },
+        "ds_id": "ia9b3gu"
+    },
+    "\u017datec": {
+        "address": {
+            "street": "25",
+            "zip": "588 62",
+            "city": "\u017datec",
+            "district": "\u017datec"
+        },
+        "ds_id": "bepaq6d"
+    },
+    "\u017dd\u00e1nice": {
+        "address": {
+            "street": "70",
+            "zip": "281 63",
+            "city": "\u017dd\u00e1nice",
+            "district": "\u017dd\u00e1nice"
+        },
+        "ds_id": "rmbasps"
+    },
+    "\u017d\u010f\u00e1r nad S\u00e1zavou": {
+        "address": {
+            "street": "\u017di\u017ekova 227",
+            "zip": "591 01",
+            "city": "\u017d\u010f\u00e1r nad S\u00e1zavou",
+            "district": "\u017d\u010f\u00e1r nad S\u00e1zavou 1"
+        },
+        "ds_id": "ybxb3sz"
+    },
+    "\u017dd\u00edrec nad Doubravou": {
+        "address": {
+            "street": "\u0160koln\u00ed 500",
+            "zip": "582 63",
+            "city": "\u017dd\u00edrec nad Doubravou",
+            "district": "\u017dd\u00edrec nad Doubravou"
+        },
+        "ds_id": "kg2bqmn"
+    },
+    "\u017debr\u00e1k": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 1",
+            "zip": "267 53",
+            "city": "\u017debr\u00e1k",
+            "district": "\u017debr\u00e1k"
+        },
+        "ds_id": "5wmbaar"
+    },
+    "\u017delezn\u00e1 Ruda": {
+        "address": {
+            "street": "Klostermannovo n\u00e1m\u011bst\u00ed 295",
+            "zip": "340 04",
+            "city": "\u017delezn\u00e1 Ruda",
+            "district": "\u017delezn\u00e1 Ruda"
+        },
+        "ds_id": "u5cbaav"
+    },
+    "\u017deleznice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed Svobody 1",
+            "zip": "507 13",
+            "city": "\u017deleznice",
+            "district": "\u017deleznice"
+        },
+        "ds_id": "pz8a6ec"
+    },
+    "\u017delezn\u00fd Brod": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 3. kv\u011btna 1",
+            "zip": "468 22",
+            "city": "\u017delezn\u00fd Brod",
+            "district": "\u017delezn\u00fd Brod"
+        },
+        "ds_id": "zbgbryd"
+    },
+    "\u017didlochovice": {
+        "address": {
+            "street": "Masarykova 100",
+            "zip": "667 01",
+            "city": "\u017didlochovice",
+            "district": "\u017didlochovice"
+        },
+        "ds_id": "hxdby2c"
+    },
+    "\u017dirovnice": {
+        "address": {
+            "street": "Cholunsk\u00e1 665",
+            "zip": "394 68",
+            "city": "\u017dirovnice",
+            "district": "\u017dirovnice"
+        },
+        "ds_id": "9sibubc"
+    },
+    "\u017dlutice": {
+        "address": {
+            "street": "Velk\u00e9 n\u00e1m\u011bst\u00ed 144",
+            "zip": "364 52",
+            "city": "\u017dlutice",
+            "district": "\u017dlutice"
+        },
+        "ds_id": "q9xbwud"
+    },
+    "\u017dulov\u00e1": {
+        "address": {
+            "street": "Hlavn\u00ed 36",
+            "zip": "790 65",
+            "city": "\u017dulov\u00e1",
+            "district": "\u017dulov\u00e1"
+        },
+        "ds_id": "j5ub744"
+    },
+    "Brno-Bohunice": {
+        "address": {
+            "street": "Dlouh\u00e1 577",
+            "zip": "625 00",
+            "city": "Brno",
+            "district": "Bohunice"
+        },
+        "ds_id": "hm2byk9"
+    },
+    "Brno-Bosonohy": {
+        "address": {
+            "street": "Bosono\u017esk\u00e9 n\u00e1m\u011bst\u00ed 74",
+            "zip": "642 00",
+            "city": "Brno",
+            "district": "Bosonohy"
+        },
+        "ds_id": "kk8bxef"
+    },
+    "Brno-Bystrc": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 28. dubna 145",
+            "zip": "635 00",
+            "city": "Brno",
+            "district": "Bystrc"
+        },
+        "ds_id": "6kibw39"
+    },
+    "Brno-\u010cernovice": {
+        "address": {
+            "street": "Bolzanova 763",
+            "zip": "618 00",
+            "city": "Brno",
+            "district": "\u010cernovice"
+        },
+        "ds_id": "bs3bz7t"
+    },
+    "Brno-Chrlice": {
+        "address": {
+            "street": "Chrlick\u00e9 n\u00e1m\u011bst\u00ed 1",
+            "zip": "643 00",
+            "city": "Brno",
+            "district": "Chrlice"
+        },
+        "ds_id": "sfbbyk3"
+    },
+    "Brno-Ivanovice": {
+        "address": {
+            "street": "M\u00e1cova 37",
+            "zip": "621 00",
+            "city": "Brno",
+            "district": "Ivanovice"
+        },
+        "ds_id": "e4gbwnv"
+    },
+    "Brno-Jehnice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 3. kv\u011btna 221",
+            "zip": "621 00",
+            "city": "Brno",
+            "district": "Jehnice"
+        },
+        "ds_id": "76nbyg4"
+    },
+    "Brno-jih": {
+        "address": {
+            "street": "Mari\u00e1nsk\u00e9 n\u00e1m\u011bst\u00ed 152",
+            "zip": "617 00",
+            "city": "Brno",
+            "district": "Kom\u00e1rov"
+        },
+        "ds_id": "xphb8g8"
+    },
+    "Brno-Jundrov": {
+        "address": {
+            "street": "Vesla\u0159sk\u00e1 97",
+            "zip": "637 00",
+            "city": "Brno",
+            "district": "Jundrov"
+        },
+        "ds_id": "8gsb8g4"
+    },
+    "Brno-Kn\u00edni\u010dky": {
+        "address": {
+            "street": "Nov\u00e1 92",
+            "zip": "635 00",
+            "city": "Brno",
+            "district": "Kn\u00edni\u010dky"
+        },
+        "ds_id": "uwcbyi5"
+    },
+    "Brno-Kohoutovice": {
+        "address": {
+            "street": "Ba\u0161n\u00e9ho 71",
+            "zip": "623 00",
+            "city": "Brno",
+            "district": "Kohoutovice"
+        },
+        "ds_id": "x3gbyji"
+    },
+    "Brno-Kom\u00edn": {
+        "address": {
+            "street": "Vav\u0159ineck\u00e1 733",
+            "zip": "624 00",
+            "city": "Brno",
+            "district": "Kom\u00edn"
+        },
+        "ds_id": "bikbwyc"
+    },
+    "Brno-Kr\u00e1lovo Pole": {
+        "address": {
+            "street": "Palack\u00e9ho t\u0159\u00edda 1365",
+            "zip": "612 00",
+            "city": "Brno",
+            "district": "Kr\u00e1lovo Pole"
+        },
+        "ds_id": "xyxbwjb"
+    },
+    "Brno-L\u00ed\u0161e\u0148": {
+        "address": {
+            "street": "J\u00edrova 2609",
+            "zip": "628 00",
+            "city": "Brno",
+            "district": "L\u00ed\u0161e\u0148"
+        },
+        "ds_id": "u8jbv72"
+    },
+    "Brno-Malom\u011b\u0159ice a Ob\u0159any": {
+        "address": {
+            "street": "Selsk\u00e1 32",
+            "zip": "614 00",
+            "city": "Brno",
+            "district": "Malom\u011b\u0159ice"
+        },
+        "ds_id": "3xjbvwx"
+    },
+    "Brno-Medl\u00e1nky": {
+        "address": {
+            "street": "Hudcova 239",
+            "zip": "621 00",
+            "city": "Brno",
+            "district": "Medl\u00e1nky"
+        },
+        "ds_id": "xddbyg8"
+    },
+    "Brno-Nov\u00fd L\u00edskovec": {
+        "address": {
+            "street": "Obl\u00e1 518",
+            "zip": "634 00",
+            "city": "Brno",
+            "district": "Nov\u00fd L\u00edskovec"
+        },
+        "ds_id": "ixpbwsj"
+    },
+    "Brno-O\u0159e\u0161\u00edn": {
+        "address": {
+            "street": "U zvoni\u010dky 12",
+            "zip": "621 00",
+            "city": "Brno",
+            "district": "O\u0159e\u0161\u00edn"
+        },
+        "ds_id": "b8pbw3n"
+    },
+    "Brno \u0158e\u010dkovice a Mokr\u00e1 Hora": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m\u011bst\u00ed 78",
+            "zip": "621 00",
+            "city": "Brno",
+            "district": "\u0158e\u010dkovice"
+        },
+        "ds_id": "py6bvvq"
+    },
+    "Brno-sever": {
+        "address": {
+            "street": "Bratislavsk\u00e1 251",
+            "zip": "602 00",
+            "city": "Brno",
+            "district": "Z\u00e1brdovice"
+        },
+        "ds_id": "cqubvxs"
+    },
+    "Brno-Slatina": {
+        "address": {
+            "street": "Tilhonova 450",
+            "zip": "627 00",
+            "city": "Brno",
+            "district": "Slatina"
+        },
+        "ds_id": "bj9b3rx"
+    },
+    "Brno-Star\u00fd L\u00edskovec": {
+        "address": {
+            "street": "Odersk\u00e1 260",
+            "zip": "625 00",
+            "city": "Brno",
+            "district": "Star\u00fd L\u00edskovec"
+        },
+        "ds_id": "2rbbwxi"
+    },
+    "Brno-st\u0159ed": {
+        "address": {
+            "street": "Dominik\u00e1nsk\u00e1 264",
+            "zip": "602 00",
+            "city": "Brno",
+            "district": "Brno-m\u011bsto"
+        },
+        "ds_id": "qykbwe7"
+    },
+    "Brno-Tu\u0159any": {
+        "address": {
+            "street": "Tu\u0159ansk\u00e9 n\u00e1m\u011bst\u00ed 84",
+            "zip": "620 00",
+            "city": "Brno",
+            "district": "Tu\u0159any"
+        },
+        "ds_id": "f9ubyek"
+    },
+    "Brno-\u00dat\u011bchov": {
+        "address": {
+            "street": "Adamovsk\u00e1 15",
+            "zip": "644 00",
+            "city": "Brno",
+            "district": "\u00dat\u011bchov"
+        },
+        "ds_id": "8urbyje"
+    },
+    "Brno-Vinohrady": {
+        "address": {
+            "street": "Velkopavlovick\u00e1 4310",
+            "zip": "628 00",
+            "city": "Brno",
+            "district": "\u017didenice"
+        },
+        "ds_id": "gxxbyhw"
+    },
+    "Brno-\u017dabov\u0159esky": {
+        "address": {
+            "street": "Horova 1623",
+            "zip": "616 00",
+            "city": "Brno",
+            "district": "\u017dabov\u0159esky"
+        },
+        "ds_id": "n97byjq"
+    },
+    "Brno-\u017deb\u011bt\u00edn": {
+        "address": {
+            "street": "K\u0159iv\u00e1nkovo n\u00e1m\u011bst\u00ed 43",
+            "zip": "641 00",
+            "city": "Brno",
+            "district": "\u017deb\u011bt\u00edn"
+        },
+        "ds_id": "82pbzsk"
+    },
+    "Brno-\u017didenice": {
+        "address": {
+            "street": "Gajdo\u0161ova 4392",
+            "zip": "615 00",
+            "city": "Brno",
+            "district": "\u017didenice"
+        },
+        "ds_id": "rnpbwhi"
+    },
+    "Kom\u00e1rov": {
+        "address": {
+            "street": "124",
+            "zip": "763 61",
+            "city": "Kom\u00e1rov",
+            "district": "Kom\u00e1rov"
+        },
+        "ds_id": "v28atpv"
+    },
+    "Mal\u00e9 Ho\u0161tice": {
+        "address": {
+            "street": "Slezsk\u00e1 4",
+            "zip": "747 05",
+            "city": "Opava",
+            "district": "Mal\u00e9 Ho\u0161tice"
+        },
+        "ds_id": "vakarka"
+    },
+    "Milostovice": {
+        "address": {
+            "street": "Lihovarsk\u00e1 32",
+            "zip": "746 01",
+            "city": "Opava",
+            "district": "Milostovice"
+        },
+        "ds_id": "53vark6"
+    },
+    "Podvihov": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "Polomsk\u00e1 \u010d.or. 55, Opava PS\u010c 747 70",
+            "district": ""
+        },
+        "ds_id": "eu6army"
+    },
+    "Praha-B\u011bchovice": {
+        "address": {
+            "street": "\u010ceskobrodsk\u00e1 3",
+            "zip": "190 11",
+            "city": "Praha 9",
+            "district": "B\u011bchovice"
+        },
+        "ds_id": "erdb3s9"
+    },
+    "Praha-Benice": {
+        "address": {
+            "street": "Kv\u011btnov\u00e9ho povst\u00e1n\u00ed 21",
+            "zip": "103 00",
+            "city": "Praha 10",
+            "district": "Benice"
+        },
+        "ds_id": "ftfbtyv"
+    },
+    "Praha-B\u0159ezin\u011bves": {
+        "address": {
+            "street": "U parku 140",
+            "zip": "182 00",
+            "city": "Praha 8",
+            "district": "B\u0159ezin\u011bves"
+        },
+        "ds_id": "atzaqa2"
+    },
+    "Praha-\u010cakovice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 25. b\u0159ezna 121",
+            "zip": "196 00",
+            "city": "Praha 9",
+            "district": "\u010cakovice"
+        },
+        "ds_id": "3pybpw9"
+    },
+    "Praha-\u010e\u00e1blice": {
+        "address": {
+            "street": "Osinalick\u00e1 1104",
+            "zip": "182 00",
+            "city": "Praha 8",
+            "district": "\u010e\u00e1blice"
+        },
+        "ds_id": "dkvbw9b"
+    },
+    "Praha-Doln\u00ed Chabry": {
+        "address": {
+            "street": "Hru\u0161ovansk\u00e9 n\u00e1m\u011bst\u00ed 253",
+            "zip": "184 00",
+            "city": "Praha 8",
+            "district": "Doln\u00ed Chabry"
+        },
+        "ds_id": "ztib27j"
+    },
+    "Praha-Doln\u00ed M\u011bcholupy": {
+        "address": {
+            "street": "Dolnom\u011bcholupsk\u00e1 168",
+            "zip": "111 01",
+            "city": "Praha 10",
+            "district": "Doln\u00ed M\u011bcholupy"
+        },
+        "ds_id": "i82bw8s"
+    },
+    "Praha-Doln\u00ed Po\u010dernice": {
+        "address": {
+            "street": "Star\u00e1 obec 10",
+            "zip": "190 12",
+            "city": "Praha 9",
+            "district": "Doln\u00ed Po\u010dernice"
+        },
+        "ds_id": "ehpb75m"
+    },
+    "Praha-Dube\u010d": {
+        "address": {
+            "street": "Starodube\u010dsk\u00e1 401",
+            "zip": "107 00",
+            "city": "Praha 10",
+            "district": "Dube\u010d"
+        },
+        "ds_id": "bm4bju9"
+    },
+    "Praha-Kl\u00e1novice": {
+        "address": {
+            "street": "U Besedy 300",
+            "zip": "190 14",
+            "city": "Praha 9",
+            "district": "Kl\u00e1novice"
+        },
+        "ds_id": "2u4aks8"
+    },
+    "Praha-Kolod\u011bje": {
+        "address": {
+            "street": "K j\u00edzd\u00e1rn\u011b 9",
+            "zip": "190 16",
+            "city": "Praha 9",
+            "district": "Kolod\u011bje"
+        },
+        "ds_id": "haiaksg"
+    },
+    "Praha-Kolovraty": {
+        "address": {
+            "street": "M\u00edrov\u00e1 364",
+            "zip": "103 00",
+            "city": "Praha 10",
+            "district": "Kolovraty"
+        },
+        "ds_id": "xa2a9sv"
+    },
+    "Praha-Kr\u00e1lovice": {
+        "address": {
+            "street": "K Nedv\u011bz\u00ed 66",
+            "zip": "104 00",
+            "city": "Praha 10",
+            "district": "Kr\u00e1lovice"
+        },
+        "ds_id": "z92bva7"
+    },
+    "Praha-K\u0159eslice": {
+        "address": {
+            "street": "\u0160tychova 2",
+            "zip": "104 00",
+            "city": "Praha 10",
+            "district": "K\u0159eslice"
+        },
+        "ds_id": "5z8aktm"
+    },
+    "Praha-Kunratice": {
+        "address": {
+            "street": "K Libu\u0161i 7",
+            "zip": "148 00",
+            "city": "Praha 4",
+            "district": "Kunratice"
+        },
+        "ds_id": "cxnbudp"
+    },
+    "Praha-Libu\u0161": {
+        "address": {
+            "street": "Libu\u0161sk\u00e1 35",
+            "zip": "142 00",
+            "city": "Praha 4",
+            "district": "Libu\u0161"
+        },
+        "ds_id": "u8xaktr"
+    },
+    "Praha-Lipence": {
+        "address": {
+            "street": "K obci 47",
+            "zip": "155 31",
+            "city": "Praha 5",
+            "district": "Lipence"
+        },
+        "ds_id": "a4da5ui"
+    },
+    "Praha-Lochkov": {
+        "address": {
+            "street": "Za ov\u010d\u00ednem 1",
+            "zip": "154 00",
+            "city": "Praha 5",
+            "district": "Lochkov"
+        },
+        "ds_id": "sufanvv"
+    },
+    "Praha-Lysolaje": {
+        "address": {
+            "street": "Kov\u00e1rensk\u00e1 8",
+            "zip": "165 00",
+            "city": "Praha 6",
+            "district": "Lysolaje"
+        },
+        "ds_id": "einbsz9"
+    },
+    "Praha-Nebu\u0161ice": {
+        "address": {
+            "street": "Nebu\u0161ick\u00e1 128",
+            "zip": "164 00",
+            "city": "Praha 6",
+            "district": "Nebu\u0161ice"
+        },
+        "ds_id": "27qb3d8"
+    },
+    "Praha-Nedv\u011bz\u00ed": {
+        "address": {
+            "street": "\u00danorov\u00e1 15",
+            "zip": "103 00",
+            "city": "Praha 10",
+            "district": "Nedv\u011bz\u00ed u \u0158\u00ed\u010dan"
+        },
+        "ds_id": "kfnaktv"
+    },
+    "Praha-Petrovice": {
+        "address": {
+            "street": "Edisonova 429",
+            "zip": "109 00",
+            "city": "Praha 10",
+            "district": "Petrovice"
+        },
+        "ds_id": "wmmbtke"
+    },
+    "Praha-P\u0159edn\u00ed Kopanina": {
+        "address": {
+            "street": "Hoke\u0161ovo n\u00e1m\u011bst\u00ed 193",
+            "zip": "164 00",
+            "city": "Praha 6",
+            "district": "P\u0159edn\u00ed Kopanina"
+        },
+        "ds_id": "bndaktz"
+    },
+    "Praha-\u0158eporyje": {
+        "address": {
+            "street": "Nad n\u00e1m\u011bst\u00edm 84",
+            "zip": "155 00",
+            "city": "Praha 5",
+            "district": "\u0158eporyje"
+        },
+        "ds_id": "zb9bzi9"
+    },
+    "Praha-Satalice": {
+        "address": {
+            "street": "K Radonic\u016fm 81",
+            "zip": "190 15",
+            "city": "Praha 9",
+            "district": "Satalice"
+        },
+        "ds_id": "r3taksc"
+    },
+    "Praha-Slivenec": {
+        "address": {
+            "street": "K Lochkovu 6",
+            "zip": "154 00",
+            "city": "Praha 5",
+            "district": "Slivenec"
+        },
+        "ds_id": "7p9bt2g"
+    },
+    "Praha-Suchdol": {
+        "address": {
+            "street": "Suchdolsk\u00e9 n\u00e1m\u011bst\u00ed 734",
+            "zip": "165 00",
+            "city": "Praha 6",
+            "district": "Suchdol"
+        },
+        "ds_id": "95ibzi3"
+    },
+    "Praha-\u0160eberov": {
+        "address": {
+            "street": "K Hrn\u010d\u00ed\u0159\u016fm 160",
+            "zip": "149 00",
+            "city": "Praha 4",
+            "district": "\u0160eberov"
+        },
+        "ds_id": "r3ibjti"
+    },
+    "Praha-\u0160t\u011brboholy": {
+        "address": {
+            "street": "\u00dast\u0159edn\u00ed 527",
+            "zip": "102 00",
+            "city": "Praha 10",
+            "district": "\u0160t\u011brboholy"
+        },
+        "ds_id": "ethakud"
+    },
+    "Praha-Troja": {
+        "address": {
+            "street": "Trojsk\u00e1 230",
+            "zip": "171 00",
+            "city": "Praha 7",
+            "district": "Troja"
+        },
+        "ds_id": "9qsbzvx"
+    },
+    "Praha-\u00dajezd": {
+        "address": {
+            "street": "Kate\u0159insk\u00e9 n\u00e1m\u011bst\u00ed 465",
+            "zip": "149 00",
+            "city": "Praha 4",
+            "district": "\u00dajezd u Pr\u016fhonic"
+        },
+        "ds_id": "2w9bx6s"
+    },
+    "Praha-Velk\u00e1 Chuchle": {
+        "address": {
+            "street": "U sk\u00e1ly 262",
+            "zip": "159 00",
+            "city": "Praha 5",
+            "district": "Velk\u00e1 Chuchle"
+        },
+        "ds_id": "nqdbuw2"
+    },
+    "Praha-Vino\u0159": {
+        "address": {
+            "street": "Bohdane\u010dsk\u00e1 97",
+            "zip": "190 17",
+            "city": "Praha 9",
+            "district": "Vino\u0159"
+        },
+        "ds_id": "m5pbt2p"
+    },
+    "Praha-Zbraslav": {
+        "address": {
+            "street": "Zbraslavsk\u00e9 n\u00e1m\u011bst\u00ed 464",
+            "zip": "156 00",
+            "city": "Praha 5",
+            "district": "Zbraslav"
+        },
+        "ds_id": "zcmap6w"
+    },
+    "Praha-Zli\u010d\u00edn": {
+        "address": {
+            "street": "Tylovick\u00e1 207",
+            "zip": "155 21",
+            "city": "Praha 5",
+            "district": "Zli\u010d\u00edn"
+        },
+        "ds_id": "cnbbtxh"
+    },
+    "Praha 1": {
+        "address": {
+            "street": "Vodi\u010dkova 681",
+            "zip": "110 00",
+            "city": "Praha 1",
+            "district": "Nov\u00e9 M\u011bsto"
+        },
+        "ds_id": "b4eb2my"
+    },
+    "Praha 10": {
+        "address": {
+            "street": "Vr\u0161ovick\u00e1 1429",
+            "zip": "101 00",
+            "city": "Praha 10",
+            "district": "Vr\u0161ovice"
+        },
+        "ds_id": "irnb7wg"
+    },
+    "Praha 11": {
+        "address": {
+            "street": "Ocel\u00edkova 672",
+            "zip": "149 00",
+            "city": "Praha 4",
+            "district": "H\u00e1je"
+        },
+        "ds_id": "nr5bpci"
+    },
+    "Praha 12": {
+        "address": {
+            "street": "Gener\u00e1la \u0160i\u0161ky 2375",
+            "zip": "143 00",
+            "city": "Praha 4",
+            "district": "Mod\u0159any"
+        },
+        "ds_id": "ktcbbxd"
+    },
+    "Praha 13": {
+        "address": {
+            "street": "Slune\u010dn\u00ed n\u00e1m\u011bst\u00ed 2580",
+            "zip": "158 00",
+            "city": "Praha 5",
+            "district": "Stod\u016flky"
+        },
+        "ds_id": "zv6bsur"
+    },
+    "Praha 14": {
+        "address": {
+            "street": "Brat\u0159\u00ed Vencl\u00edk\u016f 1073",
+            "zip": "198 00",
+            "city": "Praha 9",
+            "district": "\u010cern\u00fd Most"
+        },
+        "ds_id": "pmabtfa"
+    },
+    "Praha 15": {
+        "address": {
+            "street": "Bolo\u0148sk\u00e1 478",
+            "zip": "109 00",
+            "city": "Praha 10",
+            "district": "Horn\u00ed M\u011bcholupy"
+        },
+        "ds_id": "nkybvp5"
+    },
+    "Praha 16": {
+        "address": {
+            "street": "V\u00e1clava Bal\u00e9ho 23",
+            "zip": "153 00",
+            "city": "Praha 5",
+            "district": "Radot\u00edn"
+        },
+        "ds_id": "ntsbt5z"
+    },
+    "Praha 17": {
+        "address": {
+            "street": "\u017dalansk\u00e9ho 291",
+            "zip": "163 00",
+            "city": "Praha 6",
+            "district": "\u0158epy"
+        },
+        "ds_id": "4mnbvza"
+    },
+    "Praha 18": {
+        "address": {
+            "street": "Bechy\u0148sk\u00e1 639",
+            "zip": "199 00",
+            "city": "Praha 9",
+            "district": "Let\u0148any"
+        },
+        "ds_id": "87ubtf2"
+    },
+    "Praha 19": {
+        "address": {
+            "street": "Semilsk\u00e1 43",
+            "zip": "197 00",
+            "city": "Praha 9",
+            "district": "Kbely"
+        },
+        "ds_id": "ji9buvp"
+    },
+    "Praha 2": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 600",
+            "zip": "120 00",
+            "city": "Praha 2",
+            "district": "Vinohrady"
+        },
+        "ds_id": "y7yb44i"
+    },
+    "Praha 20": {
+        "address": {
+            "street": "J\u00edvansk\u00e1 647",
+            "zip": "193 00",
+            "city": "Praha 9",
+            "district": "Horn\u00ed Po\u010dernice"
+        },
+        "ds_id": "seibq29"
+    },
+    "Praha 21": {
+        "address": {
+            "street": "Starokl\u00e1novick\u00e1 260",
+            "zip": "190 16",
+            "city": "Praha 9",
+            "district": "\u00dajezd nad Lesy"
+        },
+        "ds_id": "bz3bbxj"
+    },
+    "Praha 22": {
+        "address": {
+            "street": "Nov\u00e9 n\u00e1m\u011bst\u00ed 1250",
+            "zip": "104 00",
+            "city": "Praha 10",
+            "district": "Uh\u0159\u00edn\u011bves"
+        },
+        "ds_id": "42ebvne"
+    },
+    "Praha 3": {
+        "address": {
+            "street": "Havl\u00ed\u010dkovo n\u00e1m\u011bst\u00ed 700",
+            "zip": "130 00",
+            "city": "Praha 3",
+            "district": "\u017di\u017ekov"
+        },
+        "ds_id": "eqkbt8g"
+    },
+    "Praha 4": {
+        "address": {
+            "street": "Antala Sta\u0161ka 2059",
+            "zip": "140 00",
+            "city": "Praha 4",
+            "district": "Kr\u010d"
+        },
+        "ds_id": "ergbrf7"
+    },
+    "Praha 5": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 14. \u0159\u00edjna 1381",
+            "zip": "150 00",
+            "city": "Praha 5",
+            "district": "Sm\u00edchov"
+        },
+        "ds_id": "yctbyzq"
+    },
+    "Praha 6": {
+        "address": {
+            "street": "\u010cs. arm\u00e1dy 601",
+            "zip": "160 00",
+            "city": "Praha 6",
+            "district": "Bubene\u010d"
+        },
+        "ds_id": "bmzbv7c"
+    },
+    "Praha 7": {
+        "address": {
+            "street": "U pr\u016fhonu 1338",
+            "zip": "170 00",
+            "city": "Praha 7",
+            "district": "Hole\u0161ovice"
+        },
+        "ds_id": "r44b2x7"
+    },
+    "Praha 8": {
+        "address": {
+            "street": "Zenklova 1",
+            "zip": "180 00",
+            "city": "Praha 8",
+            "district": "Libe\u0148"
+        },
+        "ds_id": "g5ybpd2"
+    },
+    "Praha 9": {
+        "address": {
+            "street": "Sokolovsk\u00e1 14",
+            "zip": "190 00",
+            "city": "Praha 9",
+            "district": "Vyso\u010dany"
+        },
+        "ds_id": "nddbppc"
+    },
+    "Such\u00e9 Lazce": {
+        "address": {
+            "street": "P\u0159eroveck\u00e1 9",
+            "zip": "747 95",
+            "city": "Opava",
+            "district": "Such\u00e9 Lazce"
+        },
+        "ds_id": "pnfarmt"
+    },
+    "V\u00e1vrovice": {
+        "address": {
+            "street": "Jantarov\u00e1 288",
+            "zip": "747 73",
+            "city": "Opava",
+            "district": "V\u00e1vrovice"
+        },
+        "ds_id": "yfqarmp"
+    },
+    "Vla\u0161tovi\u010dky": {
+        "address": {
+            "street": "Okru\u017en\u00ed 21",
+            "zip": "746 01",
+            "city": "Opava",
+            "district": "Vla\u0161tovi\u010dky"
+        },
+        "ds_id": "88zarmj"
+    },
+    "Zlatn\u00edky": {
+        "address": {
+            "street": "6. kv\u011btna 52",
+            "zip": "746 01",
+            "city": "Opava",
+            "district": "Zlatn\u00edky"
+        },
+        "ds_id": "h2aarnb"
+    },
+    "Batelov": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 148",
+            "zip": "588 51",
+            "city": "Batelov",
+            "district": "Batelov"
+        },
+        "ds_id": "cjvbfk8"
+    },
+    "B\u011bha\u0159ovice": {
+        "address": {
+            "street": "43",
+            "zip": "671 39",
+            "city": "B\u011bha\u0159ovice",
+            "district": "B\u011bha\u0159ovice"
+        },
+        "ds_id": "mh5bvxn"
+    },
+    "Bernartice": {
+        "address": {
+            "street": "77",
+            "zip": "542 04",
+            "city": "Bernartice",
+            "district": "Bernartice"
+        },
+        "ds_id": "reea6kx"
+    },
+    "Besednice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 52",
+            "zip": "382 81",
+            "city": "Besednice",
+            "district": "Besednice"
+        },
+        "ds_id": "e2wbfia"
+    },
+    "Bezno": {
+        "address": {
+            "street": "Boleslavsk\u00e1 154",
+            "zip": "294 29",
+            "city": "Bezno",
+            "district": "Bezno"
+        },
+        "ds_id": "7hcb7xj"
+    },
+    "B\u00edl\u00e9 Podol\u00ed": {
+        "address": {
+            "street": "12",
+            "zip": "285 72",
+            "city": "B\u00edl\u00e9 Podol\u00ed",
+            "district": "B\u00edl\u00e9 Podol\u00ed"
+        },
+        "ds_id": "i42a3rw"
+    },
+    "Bl\u00ed\u017ekovice": {
+        "address": {
+            "street": "130",
+            "zip": "671 55",
+            "city": "Bl\u00ed\u017ekovice",
+            "district": "Bl\u00ed\u017ekovice"
+        },
+        "ds_id": "bvsbfhv"
+    },
+    "Bobrov\u00e1": {
+        "address": {
+            "street": "138",
+            "zip": "592 55",
+            "city": "Bobrov\u00e1",
+            "district": "Bobrov\u00e1"
+        },
+        "ds_id": "ithbpzs"
+    },
+    "Bohdalov": {
+        "address": {
+            "street": "250",
+            "zip": "592 13",
+            "city": "Bohdalov",
+            "district": "Bohdalov"
+        },
+        "ds_id": "8qnbffj"
+    },
+    "Bojanov": {
+        "address": {
+            "street": "18",
+            "zip": "538 26",
+            "city": "Bojanov",
+            "district": "Bojanov"
+        },
+        "ds_id": "s4mbq5j"
+    },
+    "Boleradice": {
+        "address": {
+            "street": "401",
+            "zip": "691 12",
+            "city": "Boleradice",
+            "district": "Boleradice"
+        },
+        "ds_id": "ur9bfec"
+    },
+    "Borot\u00edn": {
+        "address": {
+            "street": "200",
+            "zip": "679 37",
+            "city": "Borot\u00edn",
+            "district": "Borot\u00edn"
+        },
+        "ds_id": "9iubynr"
+    },
+    "Bo\u017eejov": {
+        "address": {
+            "street": "111",
+            "zip": "394 61",
+            "city": "Bo\u017eejov",
+            "district": "Bo\u017eejov"
+        },
+        "ds_id": "cz7bwdy"
+    },
+    "Brankovice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 101",
+            "zip": "683 33",
+            "city": "Brankovice",
+            "district": "Brankovice"
+        },
+        "ds_id": "dnqbfcn"
+    },
+    "Brodce": {
+        "address": {
+            "street": "Dobrovick\u00e1 34",
+            "zip": "294 73",
+            "city": "Brodce",
+            "district": "Brodce"
+        },
+        "ds_id": "tjwbssy"
+    },
+    "Brodek u Prost\u011bjova": {
+        "address": {
+            "street": "C\u00edsa\u0159sk\u00e1 39",
+            "zip": "798 07",
+            "city": "Brodek u Prost\u011bjova",
+            "district": "Brodek u Prost\u011bjova"
+        },
+        "ds_id": "cfhbvhk"
+    },
+    "Brodek u P\u0159erova": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 13",
+            "zip": "751 03",
+            "city": "Brodek u P\u0159erova",
+            "district": "Brodek u P\u0159erova"
+        },
+        "ds_id": "qu7bw79"
+    },
+    "Brozany nad Oh\u0159\u00ed": {
+        "address": {
+            "street": "Palack\u00e9ho n\u00e1m\u011bst\u00ed 75",
+            "zip": "411 81",
+            "city": "Brozany nad Oh\u0159\u00ed",
+            "district": "Brozany nad Oh\u0159\u00ed"
+        },
+        "ds_id": "ciwbuqk"
+    },
+    "B\u0159ezno": {
+        "address": {
+            "street": "Radni\u010dn\u00ed 97",
+            "zip": "431 45",
+            "city": "B\u0159ezno",
+            "district": "B\u0159ezno"
+        },
+        "ds_id": "i6hbu8h"
+    },
+    "Budi\u0161ov": {
+        "address": {
+            "street": "360",
+            "zip": "675 03",
+            "city": "Budi\u0161ov",
+            "district": "Budi\u0161ov"
+        },
+        "ds_id": "n5zbrsw"
+    },
+    "Buchlovice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 800",
+            "zip": "687 08",
+            "city": "Buchlovice",
+            "district": "Buchlovice"
+        },
+        "ds_id": "tczb6p6"
+    },
+    "Cerhenice": {
+        "address": {
+            "street": "\u0160kolsk\u00e1 444",
+            "zip": "281 02",
+            "city": "Cerhenice",
+            "district": "Cerhenice"
+        },
+        "ds_id": "eerak7a"
+    },
+    "Cerhovice": {
+        "address": {
+            "street": "n\u00e1m.Kapit\u00e1na Ku\u010dery 10",
+            "zip": "267 61",
+            "city": "Cerhovice",
+            "district": "Cerhovice"
+        },
+        "ds_id": "caibe6z"
+    },
+    "C\u00edtoliby": {
+        "address": {
+            "street": "Zem\u011b\u0161sk\u00e1 219",
+            "zip": "439 02",
+            "city": "C\u00edtoliby",
+            "district": "C\u00edtoliby"
+        },
+        "ds_id": "m6nbewb"
+    },
+    "\u010cachrov": {
+        "address": {
+            "street": "55",
+            "zip": "339 01",
+            "city": "\u010cachrov",
+            "district": "\u010cachrov"
+        },
+        "ds_id": "t6vaum5"
+    },
+    "\u010castolovice": {
+        "address": {
+            "street": "Masarykova 10",
+            "zip": "517 50",
+            "city": "\u010castolovice",
+            "district": "\u010castolovice"
+        },
+        "ds_id": "sg9a6cf"
+    },
+    "\u010cechtice": {
+        "address": {
+            "street": "n\u00e1m. Dr. Tyr\u0161e 56",
+            "zip": "257 65",
+            "city": "\u010cechtice",
+            "district": "\u010cechtice"
+        },
+        "ds_id": "7mmb4da"
+    },
+    "\u010cern\u00e1 Hora": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 50",
+            "zip": "679 21",
+            "city": "\u010cern\u00e1 Hora",
+            "district": "\u010cern\u00e1 Hora"
+        },
+        "ds_id": "beebp7j"
+    },
+    "\u010cern\u00fd D\u016fl": {
+        "address": {
+            "street": "48",
+            "zip": "543 44",
+            "city": "\u010cern\u00fd D\u016fl",
+            "district": "\u010cern\u00fd D\u016fl"
+        },
+        "ds_id": "piube4y"
+    },
+    "\u010cerven\u00e9 Pe\u010dky": {
+        "address": {
+            "street": "Dr. Dvo\u0159\u00e1ka 38",
+            "zip": "281 21",
+            "city": "\u010cerven\u00e9 Pe\u010dky",
+            "district": "\u010cerven\u00e9 Pe\u010dky"
+        },
+        "ds_id": "erjbe44"
+    },
+    "\u010cesk\u00e1 B\u011bl\u00e1": {
+        "address": {
+            "street": "122",
+            "zip": "582 61",
+            "city": "\u010cesk\u00e1 B\u011bl\u00e1",
+            "district": "\u010cesk\u00e1 B\u011bl\u00e1"
+        },
+        "ds_id": "ywtbfy6"
+    },
+    "\u010cesk\u00e9 He\u0159manice": {
+        "address": {
+            "street": "75",
+            "zip": "565 52",
+            "city": "\u010cesk\u00e9 He\u0159manice",
+            "district": "\u010cesk\u00e9 He\u0159manice"
+        },
+        "ds_id": "p67bkrv"
+    },
+    "\u010cesk\u00fd \u0160ternberk": {
+        "address": {
+            "street": "27",
+            "zip": "257 26",
+            "city": "\u010cesk\u00fd \u0160ternberk",
+            "district": "\u010cesk\u00fd \u0160ternberk"
+        },
+        "ds_id": "d8cb7pf"
+    },
+    "\u010cestice": {
+        "address": {
+            "street": "1",
+            "zip": "387 19",
+            "city": "\u010cestice",
+            "district": "\u010cestice"
+        },
+        "ds_id": "rzvbe22"
+    },
+    "Dale\u0161ice": {
+        "address": {
+            "street": "67",
+            "zip": "468 02",
+            "city": "Dale\u0161ice",
+            "district": "Dale\u0161ice"
+        },
+        "ds_id": "ichapb8"
+    },
+    "DAVLE": {
+        "address": {
+            "street": "Na n\u00e1m\u011bst\u00ed 63",
+            "zip": "252 06",
+            "city": "Davle",
+            "district": "Davle"
+        },
+        "ds_id": "aeybpn5"
+    },
+    "Debl\u00edn": {
+        "address": {
+            "street": "43",
+            "zip": "664 75",
+            "city": "Debl\u00edn",
+            "district": "Debl\u00edn"
+        },
+        "ds_id": "izibevw"
+    },
+    "De\u0161enice": {
+        "address": {
+            "street": "162",
+            "zip": "340 22",
+            "city": "De\u0161enice",
+            "district": "De\u0161enice"
+        },
+        "ds_id": "grzbxaq"
+    },
+    "Divi\u0161ov": {
+        "address": {
+            "street": "Horn\u00ed n\u00e1m\u011bst\u00ed 21",
+            "zip": "257 26",
+            "city": "Divi\u0161ov",
+            "district": "Divi\u0161ov"
+        },
+        "ds_id": "qmpbeue"
+    },
+    "Doln\u00ed Bukovsko": {
+        "address": {
+            "street": "n\u00e1m. Jir\u00e1skovo 67",
+            "zip": "373 65",
+            "city": "Doln\u00ed Bukovsko",
+            "district": "Doln\u00ed Bukovsko"
+        },
+        "ds_id": "yqvberz"
+    },
+    "Doln\u00ed Cerekev": {
+        "address": {
+            "street": "107",
+            "zip": "588 45",
+            "city": "Doln\u00ed Cerekev",
+            "district": "Doln\u00ed Cerekev"
+        },
+        "ds_id": "edkbnzr"
+    },
+    "Doln\u00ed \u010cermn\u00e1": {
+        "address": {
+            "street": "76",
+            "zip": "561 53",
+            "city": "Doln\u00ed \u010cermn\u00e1",
+            "district": "Doln\u00ed \u010cermn\u00e1"
+        },
+        "ds_id": "pxkber4"
+    },
+    "Doubravice nad Svitavou": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 31",
+            "zip": "679 11",
+            "city": "Doubravice nad Svitavou",
+            "district": "Doubravice nad Svitavou"
+        },
+        "ds_id": "uvnbem9"
+    },
+    "Doubravn\u00edk": {
+        "address": {
+            "street": "75",
+            "zip": "592 61",
+            "city": "Doubravn\u00edk",
+            "district": "Doubravn\u00edk"
+        },
+        "ds_id": "5nxbem6"
+    },
+    "Doudleby nad Orlic\u00ed": {
+        "address": {
+            "street": "Dukelsk\u00e1 68",
+            "zip": "517 42",
+            "city": "Doudleby nad Orlic\u00ed",
+            "district": "Doudleby nad Orlic\u00ed"
+        },
+        "ds_id": "j4dbemd"
+    },
+    "Drahany": {
+        "address": {
+            "street": "26",
+            "zip": "798 61",
+            "city": "Drahany",
+            "district": "Drahany"
+        },
+        "ds_id": "2htbekr"
+    },
+    "Dr\u00e1sov": {
+        "address": {
+            "street": "11",
+            "zip": "261 01",
+            "city": "Dr\u00e1sov",
+            "district": "Dr\u00e1sov"
+        },
+        "ds_id": "5rdbsyf"
+    },
+    "Drnholec": {
+        "address": {
+            "street": "Kosteln\u00ed 368",
+            "zip": "691 83",
+            "city": "Drnholec",
+            "district": "Drnholec"
+        },
+        "ds_id": "gw9bek2"
+    },
+    "D\u0159evohostice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 74",
+            "zip": "751 14",
+            "city": "D\u0159evohostice",
+            "district": "D\u0159evohostice"
+        },
+        "ds_id": "ipbbg82"
+    },
+    "Dub": {
+        "address": {
+            "street": "4",
+            "zip": "384 25",
+            "city": "Dub",
+            "district": "Dub"
+        },
+        "ds_id": "a28b7n4"
+    },
+    "Dub nad Moravou": {
+        "address": {
+            "street": "Brodeck\u00e1 1",
+            "zip": "783 75",
+            "city": "Dub nad Moravou",
+            "district": "Dub nad Moravou"
+        },
+        "ds_id": "4yubeit"
+    },
+    "Frymburk": {
+        "address": {
+            "street": "53",
+            "zip": "342 01",
+            "city": "Frymburk",
+            "district": "Frymburk"
+        },
+        "ds_id": "ctdbxxy"
+    },
+    "Havl\u00ed\u010dkova Borov\u00e1": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 278",
+            "zip": "582 23",
+            "city": "Havl\u00ed\u010dkova Borov\u00e1",
+            "district": "Havl\u00ed\u010dkova Borov\u00e1"
+        },
+        "ds_id": "qccbee8"
+    },
+    "Heraltice": {
+        "address": {
+            "street": "78",
+            "zip": "675 21",
+            "city": "Heraltice",
+            "district": "Heraltice"
+        },
+        "ds_id": "bsga5xu"
+    },
+    "Holany": {
+        "address": {
+            "street": "43",
+            "zip": "470 02",
+            "city": "Holany",
+            "district": "Holany"
+        },
+        "ds_id": "yaabwzf"
+    },
+    "Ho\u0159ice Na \u0160umav\u011b": {
+        "address": {
+            "street": "40",
+            "zip": "382 22",
+            "city": "Ho\u0159ice na \u0160umav\u011b",
+            "district": "Ho\u0159ice na \u0160umav\u011b"
+        },
+        "ds_id": "vaebead"
+    },
+    "Hustope\u010de nad Be\u010dvou": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 21",
+            "zip": "753 66",
+            "city": "Hustope\u010de nad Be\u010dvou",
+            "district": "Hustope\u010de nad Be\u010dvou"
+        },
+        "ds_id": "abjbqf5"
+    },
+    "Hv\u011bzdlice": {
+        "address": {
+            "street": "72",
+            "zip": "683 41",
+            "city": "Hv\u011bzdlice",
+            "district": "Nov\u00e9 Hv\u011bzdlice"
+        },
+        "ds_id": "yy9bubi"
+    },
+    "Chlum u T\u0159ebon\u011b": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 115",
+            "zip": "378 04",
+            "city": "Chlum u T\u0159ebon\u011b",
+            "district": "Chlum u T\u0159ebon\u011b"
+        },
+        "ds_id": "xm2bezi"
+    },
+    "Chodov\u00e1 Plan\u00e1": {
+        "address": {
+            "street": "Pohrani\u010dn\u00ed str\u00e1\u017ee 129",
+            "zip": "348 13",
+            "city": "Chodov\u00e1 Plan\u00e1",
+            "district": "Chodov\u00e1 Plan\u00e1"
+        },
+        "ds_id": "sefb3dc"
+    },
+    "Choltice": {
+        "address": {
+            "street": "Pardubick\u00e1 78",
+            "zip": "533 61",
+            "city": "Choltice",
+            "district": "Choltice"
+        },
+        "ds_id": "d3gbezr"
+    },
+    "Chot\u011btov": {
+        "address": {
+            "street": "Husovo n\u00e1m\u011bst\u00ed 31",
+            "zip": "294 28",
+            "city": "Chot\u011btov",
+            "district": "Chot\u011btov"
+        },
+        "ds_id": "et4bg4c"
+    },
+    "Choustn\u00edkovo Hradi\u0161t\u011b": {
+        "address": {
+            "street": "102",
+            "zip": "544 42",
+            "city": "Choustn\u00edkovo Hradi\u0161t\u011b",
+            "district": "Choustn\u00edkovo Hradi\u0161t\u011b"
+        },
+        "ds_id": "g9dbnky"
+    },
+    "Chroustovice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Josefa Ha\u0161ka 93",
+            "zip": "538 63",
+            "city": "Chroustovice",
+            "district": "Chroustovice"
+        },
+        "ds_id": "zykb673"
+    },
+    "Chudenice": {
+        "address": {
+            "street": "Kvapilova 215",
+            "zip": "339 01",
+            "city": "Chudenice",
+            "district": "Chudenice"
+        },
+        "ds_id": "rzpb3q8"
+    },
+    "Jedovnice": {
+        "address": {
+            "street": "Havl\u00ed\u010dkovo n\u00e1m\u011bst\u00ed 71",
+            "zip": "679 06",
+            "city": "Jedovnice",
+            "district": "Jedovnice"
+        },
+        "ds_id": "5scbdu2"
+    },
+    "Jimramov": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Jana Karafi\u00e1ta 39",
+            "zip": "592 42",
+            "city": "Jimramov",
+            "district": "Jimramov"
+        },
+        "ds_id": "pe9b4j8"
+    },
+    "JINCE": {
+        "address": {
+            "street": "\u010csl. d\u011blost\u0159elc\u016f 172",
+            "zip": "262 23",
+            "city": "Jince",
+            "district": "Jince"
+        },
+        "ds_id": "gewb4e4"
+    },
+    "K\u00e1cov": {
+        "address": {
+            "street": "157",
+            "zip": "285 09",
+            "city": "K\u00e1cov",
+            "district": "K\u00e1cov"
+        },
+        "ds_id": "439bdrt"
+    },
+    "Kamenice": {
+        "address": {
+            "street": "Ringhofferovo n\u00e1m\u011bst\u00ed 434",
+            "zip": "251 68",
+            "city": "Kamenice",
+            "district": "Ole\u0161ovice"
+        },
+        "ds_id": "f6ibnuh"
+    },
+    "Karl\u0161tejn": {
+        "address": {
+            "street": "185",
+            "zip": "267 18",
+            "city": "Karl\u0161tejn",
+            "district": "Karl\u0161tejn"
+        },
+        "ds_id": "gcjbdqn"
+    },
+    "Katovice": {
+        "address": {
+            "street": "Husovo n\u00e1m\u011bst\u00ed 5",
+            "zip": "387 11",
+            "city": "Katovice",
+            "district": "Katovice"
+        },
+        "ds_id": "rd5b5m7"
+    },
+    "Klen\u010d\u00ed pod \u010cerchovem": {
+        "address": {
+            "street": "118",
+            "zip": "345 34",
+            "city": "Klen\u010d\u00ed pod \u010cerchovem",
+            "district": "Klen\u010d\u00ed pod \u010cerchovem"
+        },
+        "ds_id": "tkvbdnm"
+    },
+    "Kn\u011b\u017eeves": {
+        "address": {
+            "street": "U N\u00e1rodn\u00edho v\u00fdboru 62",
+            "zip": "252 68",
+            "city": "Kn\u011b\u017eeves",
+            "district": "Kn\u011b\u017eeves"
+        },
+        "ds_id": "6bjak9s"
+    },
+    "Kn\u00ednice": {
+        "address": {
+            "street": "2",
+            "zip": "588 56",
+            "city": "Kn\u00ednice",
+            "district": "Kn\u00ednice"
+        },
+        "ds_id": "gzva598"
+    },
+    "Kolinec": {
+        "address": {
+            "street": "28",
+            "zip": "341 42",
+            "city": "Kolinec",
+            "district": "Kolinec"
+        },
+        "ds_id": "fyhbxyd"
+    },
+    "Kolove\u010d": {
+        "address": {
+            "street": "U star\u00e9 fary 142",
+            "zip": "345 43",
+            "city": "Kolove\u010d",
+            "district": "Kolove\u010d"
+        },
+        "ds_id": "9tbb3v5"
+    },
+    "Kounice": {
+        "address": {
+            "street": "127",
+            "zip": "289 15",
+            "city": "Kounice",
+            "district": "Kounice"
+        },
+        "ds_id": "em6bfv6"
+    },
+    "Kov\u00e1\u0159sk\u00e1": {
+        "address": {
+            "street": "n\u00e1m. J. \u0160vermy 64",
+            "zip": "431 86",
+            "city": "Kov\u00e1\u0159sk\u00e1",
+            "district": "Kov\u00e1\u0159sk\u00e1"
+        },
+        "ds_id": "n3jbdfj"
+    },
+    "Kralice Na Han\u00e9": {
+        "address": {
+            "street": "Masarykovo n\u00e1m. 41",
+            "zip": "798 12",
+            "city": "Kralice na Han\u00e9",
+            "district": "Kralice na Han\u00e9"
+        },
+        "ds_id": "vuwb3uw"
+    },
+    "Krucemburk": {
+        "address": {
+            "street": "N\u00e1m. Jana Zrzav\u00e9ho 13",
+            "zip": "582 66",
+            "city": "Krucemburk",
+            "district": "Krucemburk"
+        },
+        "ds_id": "4swbdbk"
+    },
+    "K\u0159em\u017ee": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 35",
+            "zip": "382 03",
+            "city": "K\u0159em\u017ee",
+            "district": "K\u0159em\u017ee"
+        },
+        "ds_id": "a46bdec"
+    },
+    "K\u0159inec": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 25",
+            "zip": "289 33",
+            "city": "K\u0159inec",
+            "district": "K\u0159inec"
+        },
+        "ds_id": "grbbdds"
+    },
+    "K\u0159ivokl\u00e1t": {
+        "address": {
+            "street": "93",
+            "zip": "270 23",
+            "city": "K\u0159ivokl\u00e1t",
+            "district": "K\u0159ivokl\u00e1t"
+        },
+        "ds_id": "wizb3x9"
+    },
+    "K\u0159ivsoudov": {
+        "address": {
+            "street": "1",
+            "zip": "257 66",
+            "city": "K\u0159ivsoudov",
+            "district": "K\u0159ivsoudov"
+        },
+        "ds_id": "xgvbmc5"
+    },
+    "K\u0159i\u017eanov": {
+        "address": {
+            "street": "1",
+            "zip": "398 43",
+            "city": "K\u0159i\u017eanov",
+            "district": "K\u0159i\u017eanov"
+        },
+        "ds_id": "25japzn"
+    },
+    "K\u0159tiny": {
+        "address": {
+            "street": "26",
+            "zip": "679 05",
+            "city": "K\u0159tiny",
+            "district": "K\u0159tiny"
+        },
+        "ds_id": "ssbb5tq"
+    },
+    "Kunvald": {
+        "address": {
+            "street": "40",
+            "zip": "561 81",
+            "city": "Kunvald",
+            "district": "Kunvald"
+        },
+        "ds_id": "5sfa3h2"
+    },
+    "L\u00e1zn\u011b Tou\u0161e\u0148": {
+        "address": {
+            "street": "Hlavn\u00ed 56",
+            "zip": "250 89",
+            "city": "L\u00e1zn\u011b Tou\u0161e\u0148",
+            "district": "L\u00e1zn\u011b Tou\u0161e\u0148"
+        },
+        "ds_id": "6tia8t2"
+    },
+    "Ledenice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 89",
+            "zip": "373 11",
+            "city": "Ledenice",
+            "district": "Ledenice"
+        },
+        "ds_id": "dh9b7k7"
+    },
+    "Lev\u00edn": {
+        "address": {
+            "street": "58",
+            "zip": "411 45",
+            "city": "Lev\u00edn",
+            "district": "Lev\u00edn"
+        },
+        "ds_id": "vgiastg"
+    },
+    "Lhenice": {
+        "address": {
+            "street": "\u0160koln\u00ed 124",
+            "zip": "384 02",
+            "city": "Lhenice",
+            "district": "Lhenice"
+        },
+        "ds_id": "b7zbc6s"
+    },
+    "Libice nad Doubravou": {
+        "address": {
+            "street": "Z\u00e1meck\u00e1 47",
+            "zip": "582 77",
+            "city": "Libice nad Doubravou",
+            "district": "Libice nad Doubravou"
+        },
+        "ds_id": "262bhgc"
+    },
+    "Libl\u00edn": {
+        "address": {
+            "street": "47",
+            "zip": "331 41",
+            "city": "Libl\u00edn",
+            "district": "Libl\u00edn"
+        },
+        "ds_id": "yghay7g"
+    },
+    "Lib\u0161t\u00e1t": {
+        "address": {
+            "street": "198",
+            "zip": "512 03",
+            "city": "Lib\u0161t\u00e1t",
+            "district": "Lib\u0161t\u00e1t"
+        },
+        "ds_id": "5vrbc32"
+    },
+    "Lite\u0148": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 71",
+            "zip": "267 27",
+            "city": "Lite\u0148",
+            "district": "Lite\u0148"
+        },
+        "ds_id": "rgnb7me"
+    },
+    "Liten\u010dice": {
+        "address": {
+            "street": "97",
+            "zip": "768 13",
+            "city": "Liten\u010dice",
+            "district": "Liten\u010dice"
+        },
+        "ds_id": "xjhbcz9"
+    },
+    "Litultovice": {
+        "address": {
+            "street": "1",
+            "zip": "747 55",
+            "city": "Litultovice",
+            "district": "Litultovice"
+        },
+        "ds_id": "nr8bczf"
+    },
+    "Lomnice": {
+        "address": {
+            "street": "42",
+            "zip": "793 02",
+            "city": "Lomnice",
+            "district": "Lomnice"
+        },
+        "ds_id": "vjxar2g"
+    },
+    "Lou\u010de\u0148": {
+        "address": {
+            "street": "Za Po\u0161tou 97",
+            "zip": "289 37",
+            "city": "Lou\u010de\u0148",
+            "district": "Lou\u010de\u0148"
+        },
+        "ds_id": "6sgbyaf"
+    },
+    "Lou\u0148ovice pod Blan\u00edkem": {
+        "address": {
+            "street": "J. \u017di\u017eky 16",
+            "zip": "257 06",
+            "city": "Lou\u0148ovice pod Blan\u00edkem",
+            "district": "Lou\u0148ovice pod Blan\u00edkem"
+        },
+        "ds_id": "q89bcxh"
+    },
+    "Luka nad Jihlavou": {
+        "address": {
+            "street": "1. m\u00e1je 76",
+            "zip": "588 22",
+            "city": "Luka nad Jihlavou",
+            "district": "Luka nad Jihlavou"
+        },
+        "ds_id": "8ckbzpb"
+    },
+    "Lukavec": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "Lukavec 24, Lukavec, 41002 Lukavec",
+            "district": ""
+        },
+        "ds_id": "4yxa37s"
+    },
+    "Lukov": {
+        "address": {
+            "street": "119",
+            "zip": "676 02",
+            "city": "Lukov",
+            "district": "Lukov"
+        },
+        "ds_id": "c5vawjq"
+    },
+    "Lysice": {
+        "address": {
+            "street": "Horn\u00ed n\u00e1m\u011bst\u00ed 157",
+            "zip": "679 71",
+            "city": "Lysice",
+            "district": "Lysice"
+        },
+        "ds_id": "aheb3ze"
+    },
+    "Machov": {
+        "address": {
+            "street": "119",
+            "zip": "549 63",
+            "city": "Machov",
+            "district": "Machov"
+        },
+        "ds_id": "95qbcuv"
+    },
+    "Male\u0161ov": {
+        "address": {
+            "street": "45",
+            "zip": "285 41",
+            "city": "Male\u0161ov",
+            "district": "Male\u0161ov"
+        },
+        "ds_id": "6ccautj"
+    },
+    "Mal\u0161ice": {
+        "address": {
+            "street": "131",
+            "zip": "391 75",
+            "city": "Mal\u0161ice",
+            "district": "Mal\u0161ice"
+        },
+        "ds_id": "qi6bcu7"
+    },
+    "Mar\u0161ovice": {
+        "address": {
+            "street": "52",
+            "zip": "468 01",
+            "city": "Mar\u0161ovice",
+            "district": "Mar\u0161ovice"
+        },
+        "ds_id": "avdbt4q"
+    },
+    "Medlov": {
+        "address": {
+            "street": "300",
+            "zip": "783 91",
+            "city": "Medlov",
+            "district": "Medlov"
+        },
+        "ds_id": "wxubq9a"
+    },
+    "M\u011bcholupy": {
+        "address": {
+            "street": "76",
+            "zip": "335 51",
+            "city": "M\u011bcholupy",
+            "district": "M\u011bcholupy"
+        },
+        "ds_id": "k22a7k6"
+    },
+    "M\u011b\u0159\u00edn": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 106",
+            "zip": "594 42",
+            "city": "M\u011b\u0159\u00edn",
+            "district": "M\u011b\u0159\u00edn"
+        },
+        "ds_id": "stabqpd"
+    },
+    "Mikulovice": {
+        "address": {
+            "street": "Val\u010d\u00edkova 52",
+            "zip": "530 02",
+            "city": "Mikulovice",
+            "district": "Mikulovice"
+        },
+        "ds_id": "2eha42q"
+    },
+    "Mlad\u00e9 Buky": {
+        "address": {
+            "street": "186",
+            "zip": "542 23",
+            "city": "Mlad\u00e9 Buky",
+            "district": "Mlad\u00e9 Buky"
+        },
+        "ds_id": "sa2b36e"
+    },
+    "Mladkov": {
+        "address": {
+            "street": "95",
+            "zip": "561 67",
+            "city": "Mladkov",
+            "district": "Mladkov"
+        },
+        "ds_id": "xf7a3fb"
+    },
+    "Ml\u00e1zovice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 4",
+            "zip": "507 58",
+            "city": "Ml\u00e1zovice",
+            "district": "Ml\u00e1zovice"
+        },
+        "ds_id": "xfzbp5e"
+    },
+    "Mohelno": {
+        "address": {
+            "street": "84",
+            "zip": "675 75",
+            "city": "Mohelno",
+            "district": "Mohelno"
+        },
+        "ds_id": "bf3buy5"
+    },
+    "Moravsk\u00e1 Nov\u00e1 Ves": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Republiky 107",
+            "zip": "691 55",
+            "city": "Moravsk\u00e1 Nov\u00e1 Ves",
+            "district": "Moravsk\u00e1 Nov\u00e1 Ves"
+        },
+        "ds_id": "ydpbv8f"
+    },
+    "M\u0161ec": {
+        "address": {
+            "street": "Tyr\u0161ovo n\u00e1m\u011bst\u00ed 109",
+            "zip": "270 64",
+            "city": "M\u0161ec",
+            "district": "M\u0161ec"
+        },
+        "ds_id": "n6ybcnj"
+    },
+    "Na\u010deradec": {
+        "address": {
+            "street": "Z\u00e1meck\u00e9 n\u00e1m\u011bst\u00ed 152",
+            "zip": "257 08",
+            "city": "Na\u010deradec",
+            "district": "Na\u010deradec"
+        },
+        "ds_id": "d6sbqju"
+    },
+    "N\u00e1m\u011b\u0161\u0165 Na Han\u00e9": {
+        "address": {
+            "street": "n\u00e1m. T. G. Masaryka 100",
+            "zip": "783 44",
+            "city": "N\u00e1m\u011b\u0161\u0165 na Han\u00e9",
+            "district": "N\u00e1m\u011b\u0161\u0165 na Han\u00e9"
+        },
+        "ds_id": "2fabckg"
+    },
+    "Nedv\u011bdice": {
+        "address": {
+            "street": "42",
+            "zip": "592 62",
+            "city": "Nedv\u011bdice",
+            "district": "Nedv\u011bdice"
+        },
+        "ds_id": "myib2da"
+    },
+    "Nehvizdy": {
+        "address": {
+            "street": "Pra\u017esk\u00e1 255",
+            "zip": "250 81",
+            "city": "Nehvizdy",
+            "district": "Nehvizdy"
+        },
+        "ds_id": "bgxbr7u"
+    },
+    "Nepomy\u0161l": {
+        "address": {
+            "street": "102",
+            "zip": "439 71",
+            "city": "Nepomy\u0161l",
+            "district": "Nepomy\u0161l"
+        },
+        "ds_id": "hyfa9jy"
+    },
+    "Netvo\u0159ice": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 19",
+            "zip": "257 44",
+            "city": "Netvo\u0159ice",
+            "district": "Netvo\u0159ice"
+        },
+        "ds_id": "jgzatu8"
+    },
+    "Neustupov": {
+        "address": {
+            "street": "94",
+            "zip": "257 86",
+            "city": "Neustupov",
+            "district": "Neustupov"
+        },
+        "ds_id": "4qgayyb"
+    },
+    "Nosislav": {
+        "address": {
+            "street": "M\u011bste\u010dko 54",
+            "zip": "691 64",
+            "city": "Nosislav",
+            "district": "Nosislav"
+        },
+        "ds_id": "gmqb2uz"
+    },
+    "Nov\u00e1 Cerekev": {
+        "address": {
+            "street": "276",
+            "zip": "394 15",
+            "city": "Nov\u00e1 Cerekev",
+            "district": "Nov\u00e1 Cerekev"
+        },
+        "ds_id": "7pdbwtp"
+    },
+    "Nov\u00e1 \u0158\u00ed\u0161e": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 40",
+            "zip": "588 65",
+            "city": "Nov\u00e1 \u0158\u00ed\u0161e",
+            "district": "Nov\u00e1 \u0158\u00ed\u0161e"
+        },
+        "ds_id": "9udbcep"
+    },
+    "Nov\u00e9 Dvory": {
+        "address": {
+            "street": "70",
+            "zip": "592 12",
+            "city": "Nov\u00e9 Dvory",
+            "district": "Nov\u00e9 Dvory"
+        },
+        "ds_id": "ssebtgn"
+    },
+    "Nov\u00e9 Vesel\u00ed": {
+        "address": {
+            "street": "Na M\u011bste\u010dku 114",
+            "zip": "592 14",
+            "city": "Nov\u00e9 Vesel\u00ed",
+            "district": "Nov\u00e9 Vesel\u00ed"
+        },
+        "ds_id": "vvybcdg"
+    },
+    "Nov\u00fd Hrozenkov": {
+        "address": {
+            "street": "454",
+            "zip": "756 04",
+            "city": "Nov\u00fd Hrozenkov",
+            "district": "Nov\u00fd Hrozenkov"
+        },
+        "ds_id": "squbcc4"
+    },
+    "Nov\u00fd Rychnov": {
+        "address": {
+            "street": "87",
+            "zip": "394 04",
+            "city": "Nov\u00fd Rychnov",
+            "district": "Nov\u00fd Rychnov"
+        },
+        "ds_id": "hxjbcc7"
+    },
+    "Ok\u0159\u00ed\u0161ky": {
+        "address": {
+            "street": "Jihlavsk\u00e1 1",
+            "zip": "675 21",
+            "city": "Ok\u0159\u00ed\u0161ky",
+            "district": "Ok\u0159\u00ed\u0161ky"
+        },
+        "ds_id": "pjqbcbp"
+    },
+    "Olbramkostel": {
+        "address": {
+            "street": "69",
+            "zip": "671 51",
+            "city": "Olbramkostel",
+            "district": "Olbramkostel"
+        },
+        "ds_id": "pdpbmfj"
+    },
+    "Olbramovice": {
+        "address": {
+            "street": "158",
+            "zip": "259 01",
+            "city": "Olbramovice",
+            "district": "Olbramovice Ves"
+        },
+        "ds_id": "8btbr5h"
+    },
+    "Oleksovice": {
+        "address": {
+            "street": "69",
+            "zip": "671 62",
+            "city": "Oleksovice",
+            "district": "Oleksovice"
+        },
+        "ds_id": "wbebvxg"
+    },
+    "Opatov": {
+        "address": {
+            "street": "159",
+            "zip": "569 12",
+            "city": "Opatov",
+            "district": "Opatov"
+        },
+        "ds_id": "vgfa46j"
+    },
+    "Ostrova\u010dice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Vil\u00e9ma Mr\u0161t\u00edka 54",
+            "zip": "664 81",
+            "city": "Ostrova\u010dice",
+            "district": "Ostrova\u010dice"
+        },
+        "ds_id": "4jzbq8s"
+    },
+    "Ostrov nad Oslavou": {
+        "address": {
+            "street": "246",
+            "zip": "594 45",
+            "city": "Ostrov nad Oslavou",
+            "district": "Ostrov nad Oslavou"
+        },
+        "ds_id": "ba7a4ai"
+    },
+    "Ostrov u Macochy": {
+        "address": {
+            "street": "80",
+            "zip": "679 14",
+            "city": "Ostrov u Macochy",
+            "district": "Ostrov u Macochy"
+        },
+        "ds_id": "z5xbb6b"
+    },
+    "Osv\u011btimany": {
+        "address": {
+            "street": "350",
+            "zip": "687 42",
+            "city": "Osv\u011btimany",
+            "district": "Osv\u011btimany"
+        },
+        "ds_id": "5cqbgy8"
+    },
+    "Panensk\u00fd T\u00fdnec": {
+        "address": {
+            "street": "10",
+            "zip": "439 05",
+            "city": "Panensk\u00fd T\u00fdnec",
+            "district": "Panensk\u00fd T\u00fdnec"
+        },
+        "ds_id": "wytbb5w"
+    },
+    "Pavl\u00edkov": {
+        "address": {
+            "street": "185",
+            "zip": "270 21",
+            "city": "Pavl\u00edkov",
+            "district": "Pavl\u00edkov"
+        },
+        "ds_id": "sz4bn5c"
+    },
+    "Pecka": {
+        "address": {
+            "street": "2",
+            "zip": "507 82",
+            "city": "Pecka",
+            "district": "Pecka"
+        },
+        "ds_id": "677bit9"
+    },
+    "Peruc": {
+        "address": {
+            "street": "Old\u0159ichova 49",
+            "zip": "439 07",
+            "city": "Peruc",
+            "district": "Peruc"
+        },
+        "ds_id": "zfubb3z"
+    },
+    "Pla\u0148any": {
+        "address": {
+            "street": "Tyr\u0161ova 72",
+            "zip": "281 04",
+            "city": "Pla\u0148any",
+            "district": "Pla\u0148any"
+        },
+        "ds_id": "e5cbtvj"
+    },
+    "Podhrad\u00ed": {
+        "address": {
+            "street": "55",
+            "zip": "352 01",
+            "city": "Podhrad\u00ed",
+            "district": "Podhrad\u00ed"
+        },
+        "ds_id": "uvjbqyb"
+    },
+    "Pole\u0161ovice": {
+        "address": {
+            "street": "242",
+            "zip": "687 37",
+            "city": "Pole\u0161ovice",
+            "district": "Pole\u0161ovice"
+        },
+        "ds_id": "yrrbbyp"
+    },
+    "Pozlovice": {
+        "address": {
+            "street": "Hlavn\u00ed 51",
+            "zip": "763 26",
+            "city": "Pozlovice",
+            "district": "Pozlovice"
+        },
+        "ds_id": "qubbzyg"
+    },
+    "Pozo\u0159ice": {
+        "address": {
+            "street": "Na M\u011bste\u010dku 14",
+            "zip": "664 07",
+            "city": "Pozo\u0159ice",
+            "district": "Pozo\u0159ice"
+        },
+        "ds_id": "ysfbvvi"
+    },
+    "Prosim\u011b\u0159ice": {
+        "address": {
+            "street": "197",
+            "zip": "671 61",
+            "city": "Prosim\u011b\u0159ice",
+            "district": "Prosim\u011b\u0159ice"
+        },
+        "ds_id": "8uxbbv8"
+    },
+    "Protivanov": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 32",
+            "zip": "798 48",
+            "city": "Protivanov",
+            "district": "Protivanov"
+        },
+        "ds_id": "x3nbbvc"
+    },
+    "P\u0159\u00eddol\u00ed": {
+        "address": {
+            "street": "1",
+            "zip": "381 01",
+            "city": "P\u0159\u00eddol\u00ed",
+            "district": "P\u0159\u00eddol\u00ed"
+        },
+        "ds_id": "n2vatir"
+    },
+    "Radim\u011b\u0159": {
+        "address": {
+            "street": "170",
+            "zip": "569 07",
+            "city": "Radim\u011b\u0159",
+            "district": "Radim\u011b\u0159"
+        },
+        "ds_id": "6zga929"
+    },
+    "Radomy\u0161l": {
+        "address": {
+            "street": "Malt\u00e9zsk\u00e9 n\u00e1m\u011bst\u00ed 82",
+            "zip": "387 31",
+            "city": "Radomy\u0161l",
+            "district": "Radomy\u0161l"
+        },
+        "ds_id": "j49bbu5"
+    },
+    "Radost\u00edn nad Oslavou": {
+        "address": {
+            "street": "223",
+            "zip": "594 44",
+            "city": "Radost\u00edn nad Oslavou",
+            "district": "Radost\u00edn nad Oslavou"
+        },
+        "ds_id": "mn7bzx6"
+    },
+    "Rataje nad S\u00e1zavou": {
+        "address": {
+            "street": "Z\u00e1meck\u00e1 1",
+            "zip": "285 07",
+            "city": "Rataje nad S\u00e1zavou",
+            "district": "Rataje nad S\u00e1zavou"
+        },
+        "ds_id": "793bxp4"
+    },
+    "Ro\u010dov": {
+        "address": {
+            "street": "121",
+            "zip": "439 67",
+            "city": "Ro\u010dov",
+            "district": "Ro\u010dov"
+        },
+        "ds_id": "674bu6c"
+    },
+    "Rokytnice nad Rokytnou": {
+        "address": {
+            "street": "67",
+            "zip": "675 25",
+            "city": "Rokytnice nad Rokytnou",
+            "district": "Rokytnice nad Rokytnou"
+        },
+        "ds_id": "z6ib8ea"
+    },
+    "Senomaty": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed Karla Buriana 55",
+            "zip": "270 31",
+            "city": "Senomaty",
+            "district": "Senomaty"
+        },
+        "ds_id": "ygebbih"
+    },
+    "Sepekov": {
+        "address": {
+            "street": "174",
+            "zip": "398 51",
+            "city": "Sepekov",
+            "district": "Sepekov"
+        },
+        "ds_id": "3ycb5gr"
+    },
+    "Slabce": {
+        "address": {
+            "street": "28",
+            "zip": "270 41",
+            "city": "Slabce",
+            "district": "Slabce"
+        },
+        "ds_id": "bqqbbhe"
+    },
+    "Slav\u011bt\u00edn": {
+        "address": {
+            "street": "7",
+            "zip": "582 63",
+            "city": "Slav\u011bt\u00edn",
+            "district": "Slav\u011bt\u00edn"
+        },
+        "ds_id": "869aw75"
+    },
+    "Sloup": {
+        "address": {
+            "street": "1",
+            "zip": "679 13",
+            "city": "Sloup",
+            "district": "Sloup"
+        },
+        "ds_id": "r56bbgr"
+    },
+    "Sn\u011b\u017en\u00e9": {
+        "address": {
+            "street": "55",
+            "zip": "592 03",
+            "city": "Sn\u011b\u017en\u00e9",
+            "district": "Sn\u011b\u017en\u00e9"
+        },
+        "ds_id": "uk7bbeu"
+    },
+    "Sov\u00ednky": {
+        "address": {
+            "street": "Na M\u011bste\u010dku 25",
+            "zip": "294 29",
+            "city": "Sov\u00ednky",
+            "district": "Sov\u00ednky"
+        },
+        "ds_id": "syia7zr"
+    },
+    "Sp\u00e1lov": {
+        "address": {
+            "street": "62",
+            "zip": "742 37",
+            "city": "Sp\u00e1lov",
+            "district": "Sp\u00e1lov"
+        },
+        "ds_id": "rf3bbdf"
+    },
+    "St\u00e1dlec": {
+        "address": {
+            "street": "150",
+            "zip": "391 62",
+            "city": "St\u00e1dlec",
+            "district": "St\u00e1dlec"
+        },
+        "ds_id": "p43jdxf"
+    },
+    "Star\u00e1 \u0158\u00ed\u0161e": {
+        "address": {
+            "street": "124",
+            "zip": "588 67",
+            "city": "Star\u00e1 \u0158\u00ed\u0161e",
+            "district": "Star\u00e1 \u0158\u00ed\u0161e"
+        },
+        "ds_id": "vcxbgan"
+    },
+    "Star\u00e9 M\u011bsto pod Land\u0161tejnem": {
+        "address": {
+            "street": "19",
+            "zip": "378 82",
+            "city": "Star\u00e9 M\u011bsto pod Land\u0161tejnem",
+            "district": "Star\u00e9 M\u011bsto pod Land\u0161tejnem"
+        },
+        "ds_id": "xhxavvq"
+    },
+    "Sta\u0159e\u010d": {
+        "address": {
+            "street": "Jakubsk\u00e9 n\u00e1m\u011bst\u00ed 50",
+            "zip": "675 22",
+            "city": "Sta\u0159e\u010d",
+            "district": "Sta\u0159e\u010d"
+        },
+        "ds_id": "w6nbpp8"
+    },
+    "Stona\u0159ov": {
+        "address": {
+            "street": "232",
+            "zip": "588 33",
+            "city": "Stona\u0159ov",
+            "district": "Stona\u0159ov"
+        },
+        "ds_id": "ex7bz88"
+    },
+    "Str\u00e1\u017e": {
+        "address": {
+            "street": "4",
+            "zip": "344 01",
+            "city": "Str\u00e1\u017e",
+            "district": "Str\u00e1\u017e"
+        },
+        "ds_id": "s8zba87"
+    },
+    "Str\u00e1\u017eek": {
+        "address": {
+            "street": "13",
+            "zip": "592 53",
+            "city": "Str\u00e1\u017eek",
+            "district": "Str\u00e1\u017eek"
+        },
+        "ds_id": "uqebxbx"
+    },
+    "Str\u00e1\u017en\u00fd": {
+        "address": {
+            "street": "23",
+            "zip": "384 43",
+            "city": "Str\u00e1\u017en\u00fd",
+            "district": "Str\u00e1\u017en\u00fd"
+        },
+        "ds_id": "i6red5q"
+    },
+    "Strunkovice nad Blanic\u00ed": {
+        "address": {
+            "street": "86",
+            "zip": "384 26",
+            "city": "Strunkovice nad Blanic\u00ed",
+            "district": "Strunkovice nad Blanic\u00ed"
+        },
+        "ds_id": "st3bx98"
+    },
+    "Suchdol": {
+        "address": {
+            "street": "38",
+            "zip": "798 45",
+            "city": "Suchdol",
+            "district": "Jednov"
+        },
+        "ds_id": "cwvbktv"
+    },
+    "Suchdol nad Odrou": {
+        "address": {
+            "street": "Komensk\u00e9ho 318",
+            "zip": "742 01",
+            "city": "Suchdol nad Odrou",
+            "district": "Suchdol nad Odrou"
+        },
+        "ds_id": "fakba7w"
+    },
+    "Svatava": {
+        "address": {
+            "street": "\u010cSA 277",
+            "zip": "357 03",
+            "city": "Svatava",
+            "district": "Svatava"
+        },
+        "ds_id": "kb9amky"
+    },
+    "Svit\u00e1vka": {
+        "address": {
+            "street": "Hybe\u0161ova 166",
+            "zip": "679 32",
+            "city": "Svit\u00e1vka",
+            "district": "Svit\u00e1vka"
+        },
+        "ds_id": "pdsba4g"
+    },
+    "Svojanov": {
+        "address": {
+            "street": "25",
+            "zip": "569 73",
+            "city": "Svojanov",
+            "district": "Svojanov"
+        },
+        "ds_id": "x6ybmff"
+    },
+    "\u0160atov": {
+        "address": {
+            "street": "124",
+            "zip": "671 22",
+            "city": "\u0160atov",
+            "district": "\u0160atov"
+        },
+        "ds_id": "fzab7i7"
+    },
+    "\u0160ev\u011bt\u00edn": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed \u0160imona Lomnick\u00e9ho 2",
+            "zip": "373 63",
+            "city": "\u0160ev\u011bt\u00edn",
+            "district": "\u0160ev\u011bt\u00edn"
+        },
+        "ds_id": "c2yb5xr"
+    },
+    "\u0160T\u011aCHOVICE": {
+        "address": {
+            "street": "Hlavn\u00ed 3",
+            "zip": "252 07",
+            "city": "\u0160t\u011bchovice",
+            "district": "\u0160t\u011bchovice"
+        },
+        "ds_id": "i5tbbbm"
+    },
+    "\u0160t\u011bke\u0148": {
+        "address": {
+            "street": "Na M\u011bste\u010dku 20",
+            "zip": "387 51",
+            "city": "\u0160t\u011bke\u0148",
+            "district": "\u0160t\u011bke\u0148"
+        },
+        "ds_id": "acibbbr"
+    },
+    "\u0160t\u011bp\u00e1nov nad Svratkou": {
+        "address": {
+            "street": "23",
+            "zip": "592 63",
+            "city": "\u0160t\u011bp\u00e1nov nad Svratkou",
+            "district": "\u0160t\u011bp\u00e1nov nad Svratkou"
+        },
+        "ds_id": "zi9bbaz"
+    },
+    "\u0160t\u00edtary": {
+        "address": {
+            "street": "149",
+            "zip": "671 02",
+            "city": "\u0160t\u00edtary",
+            "district": "\u0160t\u00edtary"
+        },
+        "ds_id": "j8jbme6"
+    },
+    "\u0160toky": {
+        "address": {
+            "street": "261",
+            "zip": "582 53",
+            "city": "\u0160toky",
+            "district": "\u0160toky"
+        },
+        "ds_id": "thdbqsp"
+    },
+    "\u0160v\u00e1benice": {
+        "address": {
+            "street": "18",
+            "zip": "683 23",
+            "city": "\u0160v\u00e1benice",
+            "district": "\u0160v\u00e1benice"
+        },
+        "ds_id": "iagbtwy"
+    },
+    "Trhov\u00e1 Kamenice": {
+        "address": {
+            "street": "Raisovo n\u00e1m\u011bst\u00ed 4",
+            "zip": "539 52",
+            "city": "Trhov\u00e1 Kamenice",
+            "district": "Trhov\u00e1 Kamenice"
+        },
+        "ds_id": "zxzbax4"
+    },
+    "Troskotovice": {
+        "address": {
+            "street": "18",
+            "zip": "671 78",
+            "city": "Troskotovice",
+            "district": "Troskotovice"
+        },
+        "ds_id": "39vbg8s"
+    },
+    "Uheln\u00e1 P\u0159\u00edbram": {
+        "address": {
+            "street": "15",
+            "zip": "582 45",
+            "city": "Uheln\u00e1 P\u0159\u00edbram",
+            "district": "Uheln\u00e1 P\u0159\u00edbram"
+        },
+        "ds_id": "s23a9z2"
+    },
+    "\u00dasob\u00ed": {
+        "address": {
+            "street": "43",
+            "zip": "582 54",
+            "city": "\u00dasob\u00ed",
+            "district": "\u00dasob\u00ed"
+        },
+        "ds_id": "exebsnd"
+    },
+    "V\u010del\u00e1kov": {
+        "address": {
+            "street": "81",
+            "zip": "539 57",
+            "city": "V\u010del\u00e1kov",
+            "district": "V\u010del\u00e1kov"
+        },
+        "ds_id": "kyha5kv"
+    },
+    "Velk\u00e9 N\u011bm\u010dice": {
+        "address": {
+            "street": "M\u011bste\u010dko 85",
+            "zip": "691 63",
+            "city": "Velk\u00e9 N\u011bm\u010dice",
+            "district": "Velk\u00e9 N\u011bm\u010dice"
+        },
+        "ds_id": "xtvbsjt"
+    },
+    "Velk\u00e9 Po\u0159\u00ed\u010d\u00ed": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 102",
+            "zip": "549 32",
+            "city": "Velk\u00e9 Po\u0159\u00ed\u010d\u00ed",
+            "district": "Velk\u00e9 Po\u0159\u00ed\u010d\u00ed"
+        },
+        "ds_id": "2utbjte"
+    },
+    "Velk\u00fd \u00dajezd": {
+        "address": {
+            "street": "Olomouck\u00e1 15",
+            "zip": "783 55",
+            "city": "Velk\u00fd \u00dajezd",
+            "district": "Velk\u00fd \u00dajezd"
+        },
+        "ds_id": "jxbbamv"
+    },
+    "Velk\u00fd V\u0159e\u0161\u0165ov": {
+        "address": {
+            "street": "34",
+            "zip": "544 54",
+            "city": "Velk\u00fd V\u0159e\u0161\u0165ov",
+            "district": "Velk\u00fd V\u0159e\u0161\u0165ov"
+        },
+        "ds_id": "metbkdk"
+    },
+    "V\u00e9myslice": {
+        "address": {
+            "street": "31",
+            "zip": "671 42",
+            "city": "V\u00e9myslice",
+            "district": "V\u00e9myslice"
+        },
+        "ds_id": "2crbak9"
+    },
+    "V\u011btrn\u00fd Jen\u00edkov": {
+        "address": {
+            "street": "5",
+            "zip": "588 42",
+            "city": "V\u011btrn\u00fd Jen\u00edkov",
+            "district": "V\u011btrn\u00fd Jen\u00edkov"
+        },
+        "ds_id": "fepbubs"
+    },
+    "Vil\u00e9mov": {
+        "address": {
+            "street": "7",
+            "zip": "783 22",
+            "city": "Vil\u00e9mov",
+            "district": "Vil\u00e9mov"
+        },
+        "ds_id": "wzkbjpq"
+    },
+    "Vi\u0161\u0148ov\u00e9": {
+        "address": {
+            "street": "212",
+            "zip": "671 38",
+            "city": "Vi\u0161\u0148ov\u00e9",
+            "district": "Vi\u0161\u0148ov\u00e9"
+        },
+        "ds_id": "w7mbaju"
+    },
+    "Vladislav": {
+        "address": {
+            "street": "76",
+            "zip": "675 01",
+            "city": "Vladislav",
+            "district": "Vladislav"
+        },
+        "ds_id": "dk3baj6"
+    },
+    "Vojn\u016fv M\u011bstec": {
+        "address": {
+            "street": "27",
+            "zip": "591 01",
+            "city": "Vojn\u016fv M\u011bstec",
+            "district": "Vojn\u016fv M\u011bstec"
+        },
+        "ds_id": "ekebmfp"
+    },
+    "Vranov nad Dyj\u00ed": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 21",
+            "zip": "671 03",
+            "city": "Vranov nad Dyj\u00ed",
+            "district": "Vranov nad Dyj\u00ed"
+        },
+        "ds_id": "4ugbuf7"
+    },
+    "Vran\u00fd": {
+        "address": {
+            "street": "9",
+            "zip": "273 73",
+            "city": "Vran\u00fd",
+            "district": "Vran\u00fd"
+        },
+        "ds_id": "eegbj8g"
+    },
+    "Vrat\u011bn\u00edn": {
+        "address": {
+            "street": "88",
+            "zip": "671 07",
+            "city": "Vrat\u011bn\u00edn",
+            "district": "Vrat\u011bn\u00edn"
+        },
+        "ds_id": "vdwa26c"
+    },
+    "Vrchotovy Janovice": {
+        "address": {
+            "street": "2",
+            "zip": "257 53",
+            "city": "Vrchotovy Janovice",
+            "district": "Vrchotovy Janovice"
+        },
+        "ds_id": "ayvbgym"
+    },
+    "V\u0161etaty": {
+        "address": {
+            "street": "81",
+            "zip": "270 21",
+            "city": "V\u0161etaty",
+            "district": "V\u0161etaty"
+        },
+        "ds_id": "mp9bagq"
+    },
+    "Vysok\u00fd Chlumec": {
+        "address": {
+            "street": "14",
+            "zip": "262 52",
+            "city": "Vysok\u00fd Chlumec",
+            "district": "Vysok\u00fd Chlumec"
+        },
+        "ds_id": "hs7br9m"
+    },
+    "Z\u00e1py": {
+        "address": {
+            "street": "7",
+            "zip": "250 61",
+            "city": "Z\u00e1py",
+            "district": "Z\u00e1py"
+        },
+        "ds_id": "j8rayq3"
+    },
+    "Z\u00c1SADA": {
+        "address": {
+            "street": "188",
+            "zip": "468 25",
+            "city": "Z\u00e1sada",
+            "district": "Z\u00e1sada"
+        },
+        "ds_id": "vsdbzum"
+    },
+    "Zdislava": {
+        "address": {
+            "street": "3",
+            "zip": "463 53",
+            "city": "Zdislava",
+            "district": "Zdislava"
+        },
+        "ds_id": "q3han25"
+    },
+    "Zdislavice": {
+        "address": {
+            "street": "6",
+            "zip": "257 64",
+            "city": "Zdislavice",
+            "district": "Zdislavice"
+        },
+        "ds_id": "43jatuw"
+    },
+    "Zlonice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Pod Lipami 29",
+            "zip": "273 71",
+            "city": "Zlonice",
+            "district": "Zlonice"
+        },
+        "ds_id": "2npb7ae"
+    },
+    "Zv\u00edkovec": {
+        "address": {
+            "street": "100",
+            "zip": "338 08",
+            "city": "Zv\u00edkovec",
+            "district": "Zv\u00edkovec"
+        },
+        "ds_id": "z4ybrap"
+    },
+    "\u017dehu\u0161ice": {
+        "address": {
+            "street": "Hlavn\u00ed 107",
+            "zip": "285 75",
+            "city": "\u017dehu\u0161ice",
+            "district": "\u017dehu\u0161ice"
+        },
+        "ds_id": "wtgb66n"
+    },
+    "\u017deletava": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 1",
+            "zip": "675 26",
+            "city": "\u017deletava",
+            "district": "\u017deletava"
+        },
+        "ds_id": "g2jbp62"
+    },
+    "\u017dernov": {
+        "address": {
+            "street": "7",
+            "zip": "512 63",
+            "city": "\u017dernov",
+            "district": "\u017dernov"
+        },
+        "ds_id": "fqbavqr"
+    },
+    "\u017dinkovy": {
+        "address": {
+            "street": "84",
+            "zip": "335 54",
+            "city": "\u017dinkovy",
+            "district": "\u017dinkovy"
+        },
+        "ds_id": "2rha99f"
+    },
+    "\u017dumberk": {
+        "address": {
+            "street": "71",
+            "zip": "538 36",
+            "city": "\u017dumberk",
+            "district": "\u017dumberk"
+        },
+        "ds_id": "sdnbtti"
+    },
+    "Albrechtice nad Vltavou": {
+        "address": {
+            "street": "79",
+            "zip": "398 16",
+            "city": "Albrechtice nad Vltavou",
+            "district": "Albrechtice nad Vltavou"
+        },
+        "ds_id": "nq9br5t"
+    },
+    "Albrechti\u010dky": {
+        "address": {
+            "street": "131",
+            "zip": "742 55",
+            "city": "Albrechti\u010dky",
+            "district": "Albrechti\u010dky"
+        },
+        "ds_id": "29gbvtm"
+    },
+    "Alojzov": {
+        "address": {
+            "street": "113",
+            "zip": "798 04",
+            "city": "Alojzov",
+            "district": "Alojzov"
+        },
+        "ds_id": "qxtbnud"
+    },
+    "Anensk\u00e1 Stud\u00e1nka": {
+        "address": {
+            "street": "54",
+            "zip": "563 01",
+            "city": "Anensk\u00e1 Stud\u00e1nka",
+            "district": "Anensk\u00e1 Stud\u00e1nka"
+        },
+        "ds_id": "g2ra3gx"
+    },
+    "Archlebov": {
+        "address": {
+            "street": "2",
+            "zip": "696 33",
+            "city": "Archlebov",
+            "district": "Archlebov"
+        },
+        "ds_id": "mzhbk9w"
+    },
+    "Arne\u0161tovice": {
+        "address": {
+            "street": "16",
+            "zip": "395 01",
+            "city": "Arne\u0161tovice",
+            "district": "Arne\u0161tovice"
+        },
+        "ds_id": "i6sav7b"
+    },
+    "Arnolec": {
+        "address": {
+            "street": "53",
+            "zip": "588 27",
+            "city": "Arnolec",
+            "district": "Arnolec"
+        },
+        "ds_id": "y4nbtig"
+    },
+    "Arnoltice": {
+        "address": {
+            "street": "34",
+            "zip": "407 14",
+            "city": "Arnoltice",
+            "district": "Arnoltice"
+        },
+        "ds_id": "hdra8pn"
+    },
+    "Babice": {
+        "address": {
+            "street": "65",
+            "zip": "785 01",
+            "city": "Babice",
+            "district": "Babice"
+        },
+        "ds_id": "qkqbtys"
+    },
+    "Babice nad Svitavou": {
+        "address": {
+            "street": "197",
+            "zip": "664 01",
+            "city": "Babice nad Svitavou",
+            "district": "Babice nad Svitavou"
+        },
+        "ds_id": "7r7azss"
+    },
+    "Babice u Rosic": {
+        "address": {
+            "street": "N\u00e1ves 14",
+            "zip": "664 84",
+            "city": "Babice u Rosic",
+            "district": "Babice u Rosic"
+        },
+        "ds_id": "8vta84z"
+    },
+    "Babylon": {
+        "address": {
+            "street": "27",
+            "zip": "344 01",
+            "city": "Babylon",
+            "district": "Babylon"
+        },
+        "ds_id": "z3bbkh5"
+    },
+    "B\u00e1covice": {
+        "address": {
+            "street": "23",
+            "zip": "393 01",
+            "city": "B\u00e1covice",
+            "district": "B\u00e1covice"
+        },
+        "ds_id": "ejtaq7s"
+    },
+    "Ba\u010dalky": {
+        "address": {
+            "street": "101",
+            "zip": "507 23",
+            "city": "Ba\u010dalky",
+            "district": "Ba\u010dalky"
+        },
+        "ds_id": "t6sa6y7"
+    },
+    "Ba\u010dice": {
+        "address": {
+            "street": "36",
+            "zip": "675 55",
+            "city": "Ba\u010dice",
+            "district": "Ba\u010dice"
+        },
+        "ds_id": "tmuayib"
+    },
+    "Ba\u010dkov": {
+        "address": {
+            "street": "38",
+            "zip": "582 91",
+            "city": "Ba\u010dkov",
+            "district": "Ba\u010dkov"
+        },
+        "ds_id": "d97bpst"
+    },
+    "Ba\u010dkovice": {
+        "address": {
+            "street": "19",
+            "zip": "675 32",
+            "city": "Ba\u010dkovice",
+            "district": "Ba\u010dkovice"
+        },
+        "ds_id": "iq9anye"
+    },
+    "Baliny": {
+        "address": {
+            "street": "9",
+            "zip": "594 01",
+            "city": "Baliny",
+            "district": "Baliny"
+        },
+        "ds_id": "g4zb4he"
+    },
+    "Balkova Lhota": {
+        "address": {
+            "street": "1",
+            "zip": "391 31",
+            "city": "Balkova Lhota",
+            "district": "Balkova Lhota"
+        },
+        "ds_id": "cfeb7un"
+    },
+    "Ban\u00edn": {
+        "address": {
+            "street": "41",
+            "zip": "568 02",
+            "city": "Ban\u00edn",
+            "district": "Ban\u00edn"
+        },
+        "ds_id": "6c5a4df"
+    },
+    "B\u00e1nov": {
+        "address": {
+            "street": "700",
+            "zip": "687 54",
+            "city": "B\u00e1nov",
+            "district": "B\u00e1nov"
+        },
+        "ds_id": "v6fbfkw"
+    },
+    "B\u00e1\u0148ovice": {
+        "address": {
+            "street": "7",
+            "zip": "380 01",
+            "city": "B\u00e1\u0148ovice",
+            "district": "B\u00e1\u0148ovice"
+        },
+        "ds_id": "vipb572"
+    },
+    "Bantice": {
+        "address": {
+            "street": "14",
+            "zip": "671 61",
+            "city": "Bantice",
+            "district": "Bantice"
+        },
+        "ds_id": "gjgazti"
+    },
+    "Barchov": {
+        "address": {
+            "street": "68",
+            "zip": "530 02",
+            "city": "Barchov",
+            "district": "Barchov"
+        },
+        "ds_id": "eu3a3y2"
+    },
+    "Barchovice": {
+        "address": {
+            "street": "68",
+            "zip": "281 63",
+            "city": "Barchovice",
+            "district": "Barchovice"
+        },
+        "ds_id": "53hb2ye"
+    },
+    "Barto\u0161ovice": {
+        "address": {
+            "street": "135",
+            "zip": "742 54",
+            "city": "Barto\u0161ovice",
+            "district": "Barto\u0161ovice"
+        },
+        "ds_id": "anjbvnu"
+    },
+    "Bartou\u0161ov": {
+        "address": {
+            "street": "71",
+            "zip": "580 01",
+            "city": "Bartou\u0161ov",
+            "district": "Bartou\u0161ov"
+        },
+        "ds_id": "f37ax67"
+    },
+    "Ba\u0159ice - Velk\u00e9 T\u011b\u0161any": {
+        "address": {
+            "street": "8",
+            "zip": "767 01",
+            "city": "Ba\u0159ice-Velk\u00e9 T\u011b\u0161any",
+            "district": "Ba\u0159ice"
+        },
+        "ds_id": "mc6bfk4"
+    },
+    "Ba\u0161ka": {
+        "address": {
+            "street": "420",
+            "zip": "739 01",
+            "city": "Ba\u0161ka",
+            "district": "Ba\u0161ka"
+        },
+        "ds_id": "g5vbzq5"
+    },
+    "Ba\u0161nice": {
+        "address": {
+            "street": "3",
+            "zip": "508 01",
+            "city": "Ba\u0161nice",
+            "district": "Ba\u0161nice"
+        },
+        "ds_id": "7iha554"
+    },
+    "Ba\u0161\u0165": {
+        "address": {
+            "street": "Obecn\u00ed 126",
+            "zip": "250 85",
+            "city": "Ba\u0161\u0165",
+            "district": "Ba\u0161\u0165"
+        },
+        "ds_id": "krhbtu3"
+    },
+    "Bat\u0148ovice": {
+        "address": {
+            "street": "4",
+            "zip": "542 37",
+            "city": "Bat\u0148ovice",
+            "district": "Bat\u0148ovice"
+        },
+        "ds_id": "c7cbp2b"
+    },
+    "Bavory": {
+        "address": {
+            "street": "9",
+            "zip": "692 01",
+            "city": "Bavory",
+            "district": "Bavory"
+        },
+        "ds_id": "rcrazte"
+    },
+    "Bavoryn\u011b": {
+        "address": {
+            "street": "8",
+            "zip": "267 51",
+            "city": "Bavoryn\u011b",
+            "district": "Bavoryn\u011b"
+        },
+        "ds_id": "qeaaj6i"
+    },
+    "Bden\u011bves": {
+        "address": {
+            "street": "49",
+            "zip": "330 32",
+            "city": "Bden\u011bves",
+            "district": "Bden\u011bves"
+        },
+        "ds_id": "9d3avm3"
+    },
+    "Bd\u00edn": {
+        "address": {
+            "street": "38",
+            "zip": "270 54",
+            "city": "Bd\u00edn",
+            "district": "Bd\u00edn"
+        },
+        "ds_id": "ak7aru5"
+    },
+    "Be\u010dice": {
+        "address": {
+            "street": "21",
+            "zip": "375 01",
+            "city": "Be\u010dice",
+            "district": "Be\u010dice"
+        },
+        "ds_id": "g6zefu2"
+    },
+    "Be\u010dov": {
+        "address": {
+            "street": "126",
+            "zip": "435 26",
+            "city": "Be\u010dov",
+            "district": "Be\u010dov"
+        },
+        "ds_id": "hsbbu2u"
+    },
+    "Be\u010dv\u00e1ry": {
+        "address": {
+            "street": "161",
+            "zip": "281 43",
+            "city": "Be\u010dv\u00e1ry",
+            "district": "Be\u010dv\u00e1ry"
+        },
+        "ds_id": "ka4bpef"
+    },
+    "Bediho\u0161\u0165": {
+        "address": {
+            "street": "Prost\u011bjovsk\u00e1 13",
+            "zip": "798 21",
+            "city": "Bediho\u0161\u0165",
+            "district": "Bediho\u0161\u0165"
+        },
+        "ds_id": "ap8b2fe"
+    },
+    "Bedn\u00e1rec": {
+        "address": {
+            "street": "47",
+            "zip": "378 42",
+            "city": "Bedn\u00e1rec",
+            "district": "Bedn\u00e1rec"
+        },
+        "ds_id": "kxpedyg"
+    },
+    "Bedn\u00e1re\u010dek": {
+        "address": {
+            "street": "100",
+            "zip": "378 42",
+            "city": "Bedn\u00e1re\u010dek",
+            "district": "Bedn\u00e1re\u010dek"
+        },
+        "ds_id": "igbb7ga"
+    },
+    "Bed\u0159ichov": {
+        "address": {
+            "street": "50",
+            "zip": "679 71",
+            "city": "Bed\u0159ichov",
+            "district": "Bed\u0159ichov"
+        },
+        "ds_id": "z52azta"
+    },
+    "B\u011bha\u0159ov": {
+        "address": {
+            "street": "68",
+            "zip": "340 21",
+            "city": "B\u011bha\u0159ov",
+            "district": "B\u011bha\u0159ov"
+        },
+        "ds_id": "rawbhq2"
+    },
+    "B\u011bchary": {
+        "address": {
+            "street": "5",
+            "zip": "507 32",
+            "city": "B\u011bchary",
+            "district": "B\u011bchary"
+        },
+        "ds_id": "cm8b6an"
+    },
+    "Bechl\u00edn": {
+        "address": {
+            "street": "85",
+            "zip": "411 86",
+            "city": "Bechl\u00edn",
+            "district": "Bechl\u00edn"
+        },
+        "ds_id": "zwfatth"
+    },
+    "B\u011bl\u00e1": {
+        "address": {
+            "street": "34",
+            "zip": "393 01",
+            "city": "B\u011bl\u00e1",
+            "district": "B\u011bl\u00e1"
+        },
+        "ds_id": "j2qa9uw"
+    },
+    "B\u011bl\u00e1 nad Svitavou": {
+        "address": {
+            "street": "215",
+            "zip": "569 05",
+            "city": "B\u011bl\u00e1 nad Svitavou",
+            "district": "B\u011bl\u00e1 nad Svitavou"
+        },
+        "ds_id": "ibia4fk"
+    },
+    "B\u011bl\u00e1 pod Prad\u011bdem": {
+        "address": {
+            "street": "381",
+            "zip": "790 01",
+            "city": "B\u011bl\u00e1 pod Prad\u011bdem",
+            "district": "Doma\u0161ov"
+        },
+        "ds_id": "8cpbpc8"
+    },
+    "B\u011bl\u00e1 u Jev\u00ed\u010dka": {
+        "address": {
+            "street": "7",
+            "zip": "569 43",
+            "city": "B\u011bl\u00e1 u Jev\u00ed\u010dka",
+            "district": "B\u011bl\u00e1 u Jev\u00ed\u010dka"
+        },
+        "ds_id": "z8ja3th"
+    },
+    "B\u011ble\u010d": {
+        "address": {
+            "street": "22",
+            "zip": "391 43",
+            "city": "B\u011ble\u010d",
+            "district": "B\u011ble\u010d"
+        },
+        "ds_id": "7wjajvb"
+    },
+    "B\u011ble\u010d nad Orlic\u00ed": {
+        "address": {
+            "street": "10",
+            "zip": "503 46",
+            "city": "B\u011ble\u010d nad Orlic\u00ed",
+            "district": "B\u011ble\u010d nad Orlic\u00ed"
+        },
+        "ds_id": "8cyaqb2"
+    },
+    "B\u011blkovice-La\u0161\u0165any": {
+        "address": {
+            "street": "139",
+            "zip": "783 16",
+            "city": "B\u011blkovice-La\u0161\u0165any",
+            "district": "B\u011blkovice-La\u0161\u0165any"
+        },
+        "ds_id": "z6mbv37"
+    },
+    "B\u011bloky": {
+        "address": {
+            "street": "19",
+            "zip": "273 53",
+            "city": "B\u011bloky",
+            "district": "B\u011bloky"
+        },
+        "ds_id": "mtuakzh"
+    },
+    "B\u011blot\u00edn": {
+        "address": {
+            "street": "151",
+            "zip": "753 64",
+            "city": "B\u011blot\u00edn",
+            "district": "B\u011blot\u00edn"
+        },
+        "ds_id": "unrbsif"
+    },
+    "B\u011blov": {
+        "address": {
+            "street": "77",
+            "zip": "768 21",
+            "city": "B\u011blov",
+            "district": "B\u011blov"
+        },
+        "ds_id": "5jqasq3"
+    },
+    "B\u011blu\u0161ice": {
+        "address": {
+            "street": "64",
+            "zip": "434 01",
+            "city": "B\u011blu\u0161ice",
+            "district": "B\u011blu\u0161ice"
+        },
+        "ds_id": "nqja78x"
+    },
+    "Ben\u00e1tky": {
+        "address": {
+            "street": "19",
+            "zip": "570 01",
+            "city": "Ben\u00e1tky",
+            "district": "Ben\u00e1tky"
+        },
+        "ds_id": "s4ta4fg"
+    },
+    "Benecko": {
+        "address": {
+            "street": "190",
+            "zip": "512 37",
+            "city": "Benecko",
+            "district": "Benecko"
+        },
+        "ds_id": "s5sapb4"
+    },
+    "Bene\u0161ovice": {
+        "address": {
+            "street": "109",
+            "zip": "349 01",
+            "city": "Bene\u0161ovice",
+            "district": "Bene\u0161ovice"
+        },
+        "ds_id": "x7xa8b5"
+    },
+    "Bene\u0161ov nad \u010cernou": {
+        "address": {
+            "street": "126",
+            "zip": "382 82",
+            "city": "Bene\u0161ov nad \u010cernou",
+            "district": "Bene\u0161ov nad \u010cernou"
+        },
+        "ds_id": "9erbfiv"
+    },
+    "Bene\u0161ov u Semil": {
+        "address": {
+            "street": "125",
+            "zip": "512 06",
+            "city": "Bene\u0161ov u Semil",
+            "district": "Bene\u0161ov u Semil"
+        },
+        "ds_id": "shxbp99"
+    },
+    "Benetice": {
+        "address": {
+            "street": "46",
+            "zip": "675 06",
+            "city": "Benetice",
+            "district": "Benetice"
+        },
+        "ds_id": "cxxavch"
+    },
+    "Be\u0148ov": {
+        "address": {
+            "street": "3",
+            "zip": "750 02",
+            "city": "Be\u0148ov",
+            "district": "Be\u0148ov"
+        },
+        "ds_id": "isib456"
+    },
+    "Bernardov": {
+        "address": {
+            "street": "13",
+            "zip": "284 01",
+            "city": "Bernardov",
+            "district": "Bernardov"
+        },
+        "ds_id": "gkfakp7"
+    },
+    "Bernartice nad Odrou": {
+        "address": {
+            "street": "200",
+            "zip": "741 01",
+            "city": "Bernartice nad Odrou",
+            "district": "Bernartice nad Odrou"
+        },
+        "ds_id": "k62b232"
+    },
+    "B\u011brunice": {
+        "address": {
+            "street": "Hlavn\u00ed 176",
+            "zip": "289 08",
+            "city": "B\u011brunice",
+            "district": "B\u011brunice"
+        },
+        "ds_id": "z6waw2z"
+    },
+    "Be\u0159ovice": {
+        "address": {
+            "street": "60",
+            "zip": "273 71",
+            "city": "Be\u0159ovice",
+            "district": "Be\u0159ovice"
+        },
+        "ds_id": "6heayt3"
+    },
+    "B\u011bstovice": {
+        "address": {
+            "street": "55",
+            "zip": "565 01",
+            "city": "B\u011bstovice",
+            "district": "B\u011bstovice"
+        },
+        "ds_id": "mj3a3pz"
+    },
+    "B\u011bstvina": {
+        "address": {
+            "street": "29",
+            "zip": "538 45",
+            "city": "B\u011bstvina",
+            "district": "B\u011bstvina"
+        },
+        "ds_id": "u4dbpe9"
+    },
+    "B\u011b\u0161iny": {
+        "address": {
+            "street": "150",
+            "zip": "339 01",
+            "city": "B\u011b\u0161iny",
+            "district": "B\u011b\u0161iny"
+        },
+        "ds_id": "59mbfhg"
+    },
+    "B\u011b\u0161t\u00edn": {
+        "address": {
+            "street": "28",
+            "zip": "267 24",
+            "city": "B\u011b\u0161t\u00edn",
+            "district": "B\u011b\u0161t\u00edn"
+        },
+        "ds_id": "fzrajtt"
+    },
+    "Bezd\u011b\u010d\u00ed u Trn\u00e1vky": {
+        "address": {
+            "street": "19",
+            "zip": "569 43",
+            "city": "Bezd\u011b\u010d\u00ed u Trn\u00e1vky",
+            "district": "Bezd\u011b\u010d\u00ed u Trn\u00e1vky"
+        },
+        "ds_id": "e6ea4e7"
+    },
+    "Bezd\u011bdovice": {
+        "address": {
+            "street": "109",
+            "zip": "388 01",
+            "city": "Bezd\u011bdovice",
+            "district": "Bezd\u011bdovice"
+        },
+        "ds_id": "pmjaue4"
+    },
+    "Bezd\u011bkov": {
+        "address": {
+            "street": "60",
+            "zip": "535 01",
+            "city": "Bezd\u011bkov",
+            "district": "Bezd\u011bkov"
+        },
+        "ds_id": "jq7bv4w"
+    },
+    "Bezd\u011bkov nad Metuj\u00ed": {
+        "address": {
+            "street": "164",
+            "zip": "549 64",
+            "city": "Bezd\u011bkov nad Metuj\u00ed",
+            "district": "Bezd\u011bkov nad Metuj\u00ed"
+        },
+        "ds_id": "vgcbfhk"
+    },
+    "Bezd\u011bkov pod T\u0159em\u0161\u00ednem": {
+        "address": {
+            "street": "3",
+            "zip": "262 42",
+            "city": "Bezd\u011bkov pod T\u0159em\u0161\u00ednem",
+            "district": "Bezd\u011bkov pod T\u0159em\u0161\u00ednem"
+        },
+        "ds_id": "a8dbzbf"
+    },
+    "Bezd\u011bz": {
+        "address": {
+            "street": "102",
+            "zip": "472 01",
+            "city": "Bezd\u011bz",
+            "district": "Bezd\u011bz"
+        },
+        "ds_id": "yrxapak"
+    },
+    "Bezkov": {
+        "address": {
+            "street": "100",
+            "zip": "669 02",
+            "city": "Bezkov",
+            "district": "Bezkov"
+        },
+        "ds_id": "dwbbmcc"
+    },
+    "Bezm\u011brov": {
+        "address": {
+            "street": "155",
+            "zip": "767 01",
+            "city": "Bezm\u011brov",
+            "district": "Bezm\u011brov"
+        },
+        "ds_id": "442bmbk"
+    },
+    "Bezuchov": {
+        "address": {
+            "street": "14",
+            "zip": "753 54",
+            "city": "Bezuchov",
+            "district": "Bezuchov"
+        },
+        "ds_id": "jkzbpb5"
+    },
+    "Bezv\u011brov": {
+        "address": {
+            "street": "101",
+            "zip": "330 41",
+            "city": "Bezv\u011brov",
+            "district": "Bezv\u011brov"
+        },
+        "ds_id": "7j3bk9p"
+    },
+    "B\u00edl\u00e1": {
+        "address": {
+            "street": "76",
+            "zip": "463 43",
+            "city": "B\u00edl\u00e1",
+            "district": "B\u00edl\u00e1"
+        },
+        "ds_id": "f98an2b"
+    },
+    "B\u00edl\u00e1 Hl\u00edna": {
+        "address": {
+            "street": "55",
+            "zip": "295 01",
+            "city": "B\u00edl\u00e1 Hl\u00edna",
+            "district": "B\u00edl\u00e1 Hl\u00edna"
+        },
+        "ds_id": "q4ybght"
+    },
+    "B\u00edl\u00e1 Lhota": {
+        "address": {
+            "street": "1",
+            "zip": "783 21",
+            "city": "B\u00edl\u00e1 Lhota",
+            "district": "B\u00edl\u00e1 Lhota"
+        },
+        "ds_id": "ey6bk4u"
+    },
+    "B\u00edl\u00e1 T\u0159eme\u0161n\u00e1": {
+        "address": {
+            "street": "315",
+            "zip": "544 72",
+            "city": "B\u00edl\u00e1 T\u0159eme\u0161n\u00e1",
+            "district": "B\u00edl\u00e1 T\u0159eme\u0161n\u00e1"
+        },
+        "ds_id": "ef5bqz2"
+    },
+    "B\u00edl\u00e1 Voda": {
+        "address": {
+            "street": "37",
+            "zip": "790 69",
+            "city": "B\u00edl\u00e1 Voda",
+            "district": "Kameni\u010dka"
+        },
+        "ds_id": "v92ar5s"
+    },
+    "B\u00edl\u010dice": {
+        "address": {
+            "street": "61",
+            "zip": "793 68",
+            "city": "B\u00edl\u010dice",
+            "district": "B\u00edl\u010dice"
+        },
+        "ds_id": "h9kbwpa"
+    },
+    "B\u00edlence": {
+        "address": {
+            "street": "45",
+            "zip": "430 01",
+            "city": "B\u00edlence",
+            "district": "B\u00edlence"
+        },
+        "ds_id": "3rmbups"
+    },
+    "B\u00edlichov": {
+        "address": {
+            "street": "18",
+            "zip": "273 74",
+            "city": "B\u00edlichov",
+            "district": "B\u00edlichov"
+        },
+        "ds_id": "4fzavrw"
+    },
+    "B\u00edlkovice": {
+        "address": {
+            "street": "57",
+            "zip": "257 26",
+            "city": "B\u00edlkovice",
+            "district": "B\u00edlkovice"
+        },
+        "ds_id": "qevbgeh"
+    },
+    "B\u00edlov": {
+        "address": {
+            "street": "39",
+            "zip": "331 41",
+            "city": "B\u00edlov",
+            "district": "B\u00edlov"
+        },
+        "ds_id": "tvcbgvz"
+    },
+    "B\u00edlovice": {
+        "address": {
+            "street": "70",
+            "zip": "687 12",
+            "city": "B\u00edlovice",
+            "district": "B\u00edlovice"
+        },
+        "ds_id": "kn3bfhs"
+    },
+    "B\u00edlovice-Lutot\u00edn": {
+        "address": {
+            "street": "39",
+            "zip": "798 41",
+            "city": "B\u00edlovice-Lutot\u00edn",
+            "district": "B\u00edlovice"
+        },
+        "ds_id": "63bar5k"
+    },
+    "B\u00edlovice nad Svitavou": {
+        "address": {
+            "street": "T\u011bsnohl\u00eddkovo n\u00e1m\u011bst\u00ed 1000",
+            "zip": "664 01",
+            "city": "B\u00edlovice nad Svitavou",
+            "district": "B\u00edlovice nad Svitavou"
+        },
+        "ds_id": "mh2b8ar"
+    },
+    "B\u00edlsko": {
+        "address": {
+            "street": "34",
+            "zip": "387 73",
+            "city": "B\u00edlsko",
+            "district": "B\u00edlsko"
+        },
+        "ds_id": "tmxam78"
+    },
+    "B\u00edl\u00fd K\u00e1men": {
+        "address": {
+            "street": "12",
+            "zip": "588 41",
+            "city": "B\u00edl\u00fd K\u00e1men",
+            "district": "B\u00edl\u00fd K\u00e1men"
+        },
+        "ds_id": "ihdbfzt"
+    },
+    "B\u00edl\u00fd Kostel nad Nisou": {
+        "address": {
+            "street": "206",
+            "zip": "463 31",
+            "city": "B\u00edl\u00fd Kostel nad Nisou",
+            "district": "B\u00edl\u00fd Kostel nad Nisou"
+        },
+        "ds_id": "ic4bjj7"
+    },
+    "B\u00edl\u00fd Potok": {
+        "address": {
+            "street": "337",
+            "zip": "463 62",
+            "city": "B\u00edl\u00fd Potok",
+            "district": "B\u00edl\u00fd Potok"
+        },
+        "ds_id": "4nfb5j4"
+    },
+    "B\u00edl\u00fd \u00dajezd": {
+        "address": {
+            "street": "42",
+            "zip": "518 01",
+            "city": "B\u00edl\u00fd \u00dajezd",
+            "district": "B\u00edl\u00fd \u00dajezd"
+        },
+        "ds_id": "k6iaugz"
+    },
+    "Bi\u0159kov": {
+        "address": {
+            "street": "7",
+            "zip": "334 01",
+            "city": "Bi\u0159kov",
+            "district": "Bi\u0159kov"
+        },
+        "ds_id": "n6sbzcq"
+    },
+    "Biskoupky": {
+        "address": {
+            "street": "40",
+            "zip": "664 91",
+            "city": "Biskoupky",
+            "district": "Biskoupky"
+        },
+        "ds_id": "c96asze"
+    },
+    "Biskupice": {
+        "address": {
+            "street": "120",
+            "zip": "763 41",
+            "city": "Biskupice",
+            "district": "Biskupice"
+        },
+        "ds_id": "x6daq7g"
+    },
+    "Biskupice-Pulkov": {
+        "address": {
+            "street": "4",
+            "zip": "675 57",
+            "city": "Biskupice-Pulkov",
+            "district": "Biskupice"
+        },
+        "ds_id": "tanbfzp"
+    },
+    "B\u00edtouchov": {
+        "address": {
+            "street": "10",
+            "zip": "294 01",
+            "city": "B\u00edtouchov",
+            "district": "B\u00edtouchov"
+        },
+        "ds_id": "nbzajvm"
+    },
+    "B\u00edtov": {
+        "address": {
+            "street": "117",
+            "zip": "743 01",
+            "city": "B\u00edtov",
+            "district": "B\u00edtov"
+        },
+        "ds_id": "54nay6x"
+    },
+    "B\u00edtovany": {
+        "address": {
+            "street": "19",
+            "zip": "538 51",
+            "city": "B\u00edtovany",
+            "district": "B\u00edtovany"
+        },
+        "ds_id": "e73a87r"
+    },
+    "B\u00edtov\u010dice": {
+        "address": {
+            "street": "109",
+            "zip": "588 22",
+            "city": "B\u00edtov\u010dice",
+            "district": "B\u00edtov\u010dice"
+        },
+        "ds_id": "nzzawb2"
+    },
+    "Bitozeves": {
+        "address": {
+            "street": "50",
+            "zip": "440 01",
+            "city": "Bitozeves",
+            "district": "Bitozeves"
+        },
+        "ds_id": "q6mbmab"
+    },
+    "Blann\u00e9": {
+        "address": {
+            "street": "27",
+            "zip": "671 54",
+            "city": "Blann\u00e9",
+            "district": "Blann\u00e9"
+        },
+        "ds_id": "jqkazux"
+    },
+    "Blatce": {
+        "address": {
+            "street": "79",
+            "zip": "472 01",
+            "city": "Blatce",
+            "district": "Houska"
+        },
+        "ds_id": "vfab6y2"
+    },
+    "Blatec": {
+        "address": {
+            "street": "81",
+            "zip": "783 75",
+            "city": "Blatec",
+            "district": "Blatec"
+        },
+        "ds_id": "nd9bkw4"
+    },
+    "Blatnice": {
+        "address": {
+            "street": "132",
+            "zip": "675 51",
+            "city": "Blatnice",
+            "district": "Blatnice"
+        },
+        "ds_id": "tfta9n7"
+    },
+    "Blatnice pod Svat\u00fdm Anton\u00ednkem": {
+        "address": {
+            "street": "28",
+            "zip": "696 71",
+            "city": "Blatnice pod Svat\u00fdm Anton\u00ednkem",
+            "district": "Blatnice pod Svat\u00fdm Anton\u00ednkem"
+        },
+        "ds_id": "gq8bpqx"
+    },
+    "Blatni\u010dka": {
+        "address": {
+            "street": "163",
+            "zip": "696 71",
+            "city": "Blatni\u010dka",
+            "district": "Blatni\u010dka"
+        },
+        "ds_id": "4qabmnf"
+    },
+    "Blatno": {
+        "address": {
+            "street": "1",
+            "zip": "430 01",
+            "city": "Blatno",
+            "district": "Blatno"
+        },
+        "ds_id": "92haqxs"
+    },
+    "Blazice": {
+        "address": {
+            "street": "70",
+            "zip": "768 61",
+            "city": "Blazice",
+            "district": "Blazice"
+        },
+        "ds_id": "bnsb5r6"
+    },
+    "Bla\u017eejov": {
+        "address": {
+            "street": "38",
+            "zip": "378 52",
+            "city": "Bla\u017eejov",
+            "district": "Bla\u017eejov"
+        },
+        "ds_id": "jgmb48h"
+    },
+    "Bla\u017eejovice": {
+        "address": {
+            "street": "38",
+            "zip": "257 68",
+            "city": "Bla\u017eejovice",
+            "district": "Bla\u017eejovice"
+        },
+        "ds_id": "kqqbkaa"
+    },
+    "Bla\u017eim": {
+        "address": {
+            "street": "32",
+            "zip": "330 38",
+            "city": "Bla\u017eim",
+            "district": "Bla\u017eim"
+        },
+        "ds_id": "z37bhqw"
+    },
+    "Bla\u017ekov": {
+        "address": {
+            "street": "68",
+            "zip": "592 51",
+            "city": "Bla\u017ekov",
+            "district": "Bla\u017ekov"
+        },
+        "ds_id": "yxvaqhs"
+    },
+    "Bla\u017eovice": {
+        "address": {
+            "street": "N\u00e1dra\u017en\u00ed 165",
+            "zip": "664 08",
+            "city": "Bla\u017eovice",
+            "district": "Bla\u017eovice"
+        },
+        "ds_id": "fiybqrh"
+    },
+    "Ble\u0161no": {
+        "address": {
+            "street": "73",
+            "zip": "503 46",
+            "city": "Ble\u0161no",
+            "district": "Ble\u0161no"
+        },
+        "ds_id": "g8eb3qc"
+    },
+    "Blevice": {
+        "address": {
+            "street": "13",
+            "zip": "273 28",
+            "city": "Blevice",
+            "district": "Blevice"
+        },
+        "ds_id": "4hgbn8h"
+    },
+    "Bl\u00edzkov": {
+        "address": {
+            "street": "79",
+            "zip": "594 42",
+            "city": "Bl\u00edzkov",
+            "district": "Bl\u00edzkov"
+        },
+        "ds_id": "x8ib4j2"
+    },
+    "Bl\u00ed\u017eejov": {
+        "address": {
+            "street": "151",
+            "zip": "345 45",
+            "city": "Bl\u00ed\u017eejov",
+            "district": "Bl\u00ed\u017eejov"
+        },
+        "ds_id": "u8nbjux"
+    },
+    "Bl\u00ed\u017eevedly": {
+        "address": {
+            "street": "10",
+            "zip": "471 04",
+            "city": "Bl\u00ed\u017eevedly",
+            "district": "Bl\u00ed\u017eevedly"
+        },
+        "ds_id": "g35b7ap"
+    },
+    "Bl\u0161any u Loun": {
+        "address": {
+            "street": "2",
+            "zip": "440 01",
+            "city": "Bl\u0161any u Loun",
+            "district": "Bl\u0161any u Loun"
+        },
+        "ds_id": "mvharsz"
+    },
+    "Blu\u010dina": {
+        "address": {
+            "street": "n\u00e1m. Svobody 119",
+            "zip": "664 56",
+            "city": "Blu\u010dina",
+            "district": "Blu\u010dina"
+        },
+        "ds_id": "24hbfg3"
+    },
+    "Bludov": {
+        "address": {
+            "street": "Jana \u017di\u017eky 195",
+            "zip": "789 61",
+            "city": "Bludov",
+            "district": "Bludov"
+        },
+        "ds_id": "sa8bfg9"
+    },
+    "Bobnice": {
+        "address": {
+            "street": "Pr\u016fb\u011b\u017en\u00e1 31",
+            "zip": "289 31",
+            "city": "Bobnice",
+            "district": "Bobnice"
+        },
+        "ds_id": "fwxbgus"
+    },
+    "Bobr\u016fvka": {
+        "address": {
+            "street": "100",
+            "zip": "592 55",
+            "city": "Bobr\u016fvka",
+            "district": "Bobr\u016fvka"
+        },
+        "ds_id": "326a8fu"
+    },
+    "Bocanovice": {
+        "address": {
+            "street": "21",
+            "zip": "739 91",
+            "city": "Bocanovice",
+            "district": "Bocanovice"
+        },
+        "ds_id": "zi6bmm4"
+    },
+    "Bohat\u00e9 M\u00e1lkovice": {
+        "address": {
+            "street": "56",
+            "zip": "685 01",
+            "city": "Bohat\u00e9 M\u00e1lkovice",
+            "district": "Bohat\u00e9 M\u00e1lkovice"
+        },
+        "ds_id": "uhvazut"
+    },
+    "Bohatice": {
+        "address": {
+            "street": "79",
+            "zip": "470 02",
+            "city": "Bohatice",
+            "district": "Bohatice"
+        },
+        "ds_id": "2ivan5c"
+    },
+    "Bohdalec": {
+        "address": {
+            "street": "101",
+            "zip": "592 55",
+            "city": "Bohdalec",
+            "district": "Bohdalec"
+        },
+        "ds_id": "fsra933"
+    },
+    "Bohdalice - Pavlovice": {
+        "address": {
+            "street": "125",
+            "zip": "683 41",
+            "city": "Bohdalice-Pavlovice",
+            "district": "Bohdalice"
+        },
+        "ds_id": "v8ybhk7"
+    },
+    "Bohdal\u00edn": {
+        "address": {
+            "street": "83",
+            "zip": "394 91",
+            "city": "Bohdal\u00edn",
+            "district": "Bohdal\u00edn"
+        },
+        "ds_id": "iifaqif"
+    },
+    "Bohdalovice": {
+        "address": {
+            "street": "33",
+            "zip": "381 01",
+            "city": "Bohdalovice",
+            "district": "Bohdalovice"
+        },
+        "ds_id": "vq2j2k5"
+    },
+    "Bohdane\u010d": {
+        "address": {
+            "street": "97",
+            "zip": "285 25",
+            "city": "Bohdane\u010d",
+            "district": "Bohdane\u010d"
+        },
+        "ds_id": "xxdbffn"
+    },
+    "Bohd\u00edkov": {
+        "address": {
+            "street": "163",
+            "zip": "789 64",
+            "city": "Bohd\u00edkov",
+            "district": "Bohd\u00edkov"
+        },
+        "ds_id": "iswatrw"
+    },
+    "Bohostice": {
+        "address": {
+            "street": "55",
+            "zip": "262 31",
+            "city": "Bohostice",
+            "district": "Bohostice"
+        },
+        "ds_id": "h3ua8sx"
+    },
+    "Bohumilice": {
+        "address": {
+            "street": "111",
+            "zip": "384 81",
+            "city": "Bohumilice",
+            "district": "Bohumilice"
+        },
+        "ds_id": "23fb6xh"
+    },
+    "Bohunice": {
+        "address": {
+            "street": "36",
+            "zip": "384 22",
+            "city": "Bohunice",
+            "district": "Bohunice"
+        },
+        "ds_id": "ctnayws"
+    },
+    "Bohu\u0148ov": {
+        "address": {
+            "street": "49",
+            "zip": "569 04",
+            "city": "Bohu\u0148ov",
+            "district": "Bohu\u0148ov"
+        },
+        "ds_id": "s78a3ng"
+    },
+    "Bohu\u0148ovice": {
+        "address": {
+            "street": "13",
+            "zip": "570 01",
+            "city": "Bohu\u0148ovice",
+            "district": "Bohu\u0148ovice"
+        },
+        "ds_id": "ha2btdi"
+    },
+    "Bohuslavice": {
+        "address": {
+            "street": "Po\u0161tovn\u00ed 119",
+            "zip": "747 19",
+            "city": "Bohuslavice",
+            "district": "Bohuslavice"
+        },
+        "ds_id": "qrvbmm8"
+    },
+    "Bohuslavice nad Vl\u00e1\u0159\u00ed": {
+        "address": {
+            "street": "62",
+            "zip": "763 21",
+            "city": "Bohuslavice nad Vl\u00e1\u0159\u00ed",
+            "district": "Bohuslavice nad Vl\u00e1\u0159\u00ed"
+        },
+        "ds_id": "ysibjig"
+    },
+    "Bohuslavice u Zl\u00edna": {
+        "address": {
+            "street": "185",
+            "zip": "763 51",
+            "city": "Bohuslavice u Zl\u00edna",
+            "district": "Bohuslavice u Zl\u00edna"
+        },
+        "ds_id": "kzybw3i"
+    },
+    "Bohusl\u00e1vky": {
+        "address": {
+            "street": "114",
+            "zip": "751 31",
+            "city": "Bohusl\u00e1vky",
+            "district": "Bohusl\u00e1vky"
+        },
+        "ds_id": "gvpaxgf"
+    },
+    "Bohu\u0161ice": {
+        "address": {
+            "street": "37",
+            "zip": "675 51",
+            "city": "Bohu\u0161ice",
+            "district": "Bohu\u0161ice"
+        },
+        "ds_id": "jcqaxei"
+    },
+    "Bohu\u0161ov": {
+        "address": {
+            "street": "15",
+            "zip": "793 99",
+            "city": "Bohu\u0161ov",
+            "district": "Bohu\u0161ov"
+        },
+        "ds_id": "8n4ayb2"
+    },
+    "Bohutice": {
+        "address": {
+            "street": "8",
+            "zip": "671 76",
+            "city": "Bohutice",
+            "district": "Bohutice"
+        },
+        "ds_id": "2t5azwk"
+    },
+    "Bohut\u00edn": {
+        "address": {
+            "street": "140",
+            "zip": "262 41",
+            "city": "Bohut\u00edn",
+            "district": "Vysok\u00e1 Pec"
+        },
+        "ds_id": "qr6ank2"
+    },
+    "Bohy": {
+        "address": {
+            "street": "31",
+            "zip": "331 41",
+            "city": "Bohy",
+            "district": "Bohy"
+        },
+        "ds_id": "2abav9x"
+    },
+    "Bocho\u0159": {
+        "address": {
+            "street": "N\u00e1ves 202",
+            "zip": "750 02",
+            "city": "Bocho\u0159",
+            "district": "Bocho\u0159"
+        },
+        "ds_id": "tyjb4s6"
+    },
+    "Bochovice": {
+        "address": {
+            "street": "14",
+            "zip": "675 05",
+            "city": "Bochovice",
+            "district": "Bochovice"
+        },
+        "ds_id": "8ntbxc8"
+    },
+    "Bojanovice": {
+        "address": {
+            "street": "12",
+            "zip": "252 06",
+            "city": "Bojanovice",
+            "district": "Bojanovice"
+        },
+        "ds_id": "bxqak97"
+    },
+    "Boji\u0161t\u011b": {
+        "address": {
+            "street": "27",
+            "zip": "584 01",
+            "city": "Boji\u0161t\u011b",
+            "district": "Boji\u0161t\u011b"
+        },
+        "ds_id": "brqj2x8"
+    },
+    "Bolatice": {
+        "address": {
+            "street": "Hlu\u010d\u00ednsk\u00e1 95",
+            "zip": "747 23",
+            "city": "Bolatice",
+            "district": "Bolatice"
+        },
+        "ds_id": "idsb5g3"
+    },
+    "Bolebo\u0159": {
+        "address": {
+            "street": "57",
+            "zip": "431 21",
+            "city": "Bolebo\u0159",
+            "district": "Bolebo\u0159"
+        },
+        "ds_id": "y88aqxy"
+    },
+    "Bole\u0161iny": {
+        "address": {
+            "street": "10",
+            "zip": "339 01",
+            "city": "Bole\u0161iny",
+            "district": "Bole\u0161iny"
+        },
+        "ds_id": "jsxbqib"
+    },
+    "Bolkov": {
+        "address": {
+            "street": "26",
+            "zip": "334 01",
+            "city": "Bolkov",
+            "district": "Bolkov"
+        },
+        "ds_id": "7jda3ct"
+    },
+    "Bo\u0148kov": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "Bo\u0148kov 38, Bo\u0148kov, 58255 Bo\u0148kov",
+            "district": ""
+        },
+        "ds_id": "n3gbpsm"
+    },
+    "Bora\u010d": {
+        "address": {
+            "street": "51",
+            "zip": "592 61",
+            "city": "Bora\u010d",
+            "district": "Bora\u010d"
+        },
+        "ds_id": "de5a9cz"
+    },
+    "Bordovice": {
+        "address": {
+            "street": "130",
+            "zip": "744 01",
+            "city": "Bordovice",
+            "district": "Bordovice"
+        },
+        "ds_id": "pv2axmj"
+    },
+    "Bore\u010d": {
+        "address": {
+            "street": "51",
+            "zip": "294 26",
+            "city": "Bore\u010d",
+            "district": "Bore\u010d"
+        },
+        "ds_id": "6w2avpy"
+    },
+    "Borek": {
+        "address": {
+            "street": "13",
+            "zip": "534 01",
+            "city": "Borek",
+            "district": "Borek"
+        },
+        "ds_id": "z4vb3ms"
+    },
+    "Borkovany": {
+        "address": {
+            "street": "279",
+            "zip": "691 75",
+            "city": "Borkovany",
+            "district": "Borkovany"
+        },
+        "ds_id": "qe3atqe"
+    },
+    "Borkovice": {
+        "address": {
+            "street": "31",
+            "zip": "391 81",
+            "city": "Borkovice",
+            "district": "Borkovice"
+        },
+        "ds_id": "7wfed6t"
+    },
+    "Borotice": {
+        "address": {
+            "street": "27",
+            "zip": "262 15",
+            "city": "Borotice",
+            "district": "Borotice"
+        },
+        "ds_id": "vq8jdwx"
+    },
+    "Borov\u00e1": {
+        "address": {
+            "street": "100",
+            "zip": "569 82",
+            "city": "Borov\u00e1",
+            "district": "Borov\u00e1"
+        },
+        "ds_id": "z89bmqe"
+    },
+    "Borov\u00e1 Lada": {
+        "address": {
+            "street": "38",
+            "zip": "384 92",
+            "city": "Borov\u00e1 Lada",
+            "district": "Borov\u00e1 Lada"
+        },
+        "ds_id": "87xbg4x"
+    },
+    "Borovn\u00e1": {
+        "address": {
+            "street": "30",
+            "zip": "588 56",
+            "city": "Borovn\u00e1",
+            "district": "Borovn\u00e1"
+        },
+        "ds_id": "ykvaja4"
+    },
+    "Borovnice": {
+        "address": {
+            "street": "30",
+            "zip": "257 65",
+            "city": "Borovnice",
+            "district": "Borovnice"
+        },
+        "ds_id": "qpmakkr"
+    },
+    "Borovni\u010dka": {
+        "address": {
+            "street": "93",
+            "zip": "544 75",
+            "city": "Borovni\u010dka",
+            "district": "Borovni\u010dka"
+        },
+        "ds_id": "rfybmqi"
+    },
+    "Borovn\u00edk": {
+        "address": {
+            "street": "23",
+            "zip": "594 51",
+            "city": "Borovn\u00edk",
+            "district": "Borovn\u00edk"
+        },
+        "ds_id": "gawa8x7"
+    },
+    "Borovno": {
+        "address": {
+            "street": "62",
+            "zip": "335 61",
+            "city": "Borovno",
+            "district": "Borovno"
+        },
+        "ds_id": "8s4btsv"
+    },
+    "Borovy": {
+        "address": {
+            "street": "21",
+            "zip": "334 01",
+            "city": "Borovy",
+            "district": "Borovy"
+        },
+        "ds_id": "m87bgwk"
+    },
+    "Bor\u0161ice": {
+        "address": {
+            "street": "7",
+            "zip": "687 09",
+            "city": "Bor\u0161ice",
+            "district": "Bor\u0161ice"
+        },
+        "ds_id": "mafb2ay"
+    },
+    "Bor\u0161ice u Blatnice": {
+        "address": {
+            "street": "157",
+            "zip": "687 63",
+            "city": "Bor\u0161ice u Blatnice",
+            "district": "Bor\u0161ice u Blatnice"
+        },
+        "ds_id": "2eebfdr"
+    },
+    "Bor\u0161ov": {
+        "address": {
+            "street": "17",
+            "zip": "588 05",
+            "city": "Bor\u0161ov",
+            "district": "Bor\u0161ov"
+        },
+        "ds_id": "3fpaxzn"
+    },
+    "Bor\u0161ov nad Vltavou": {
+        "address": {
+            "street": "Obecn\u00ed 52",
+            "zip": "373 82",
+            "city": "Bor\u0161ov nad Vltavou",
+            "district": "Bor\u0161ov nad Vltavou"
+        },
+        "ds_id": "rk5bfdx"
+    },
+    "Bor u Skut\u010de": {
+        "address": {
+            "street": "35",
+            "zip": "539 44",
+            "city": "Bor u Skut\u010de",
+            "district": "Bor u Skut\u010de"
+        },
+        "ds_id": "vwua9k9"
+    },
+    "Boru\u0161ov": {
+        "address": {
+            "street": "60",
+            "zip": "571 01",
+            "city": "Boru\u0161ov",
+            "district": "Boru\u0161ov"
+        },
+        "ds_id": "ehya84f"
+    },
+    "Bory": {
+        "address": {
+            "street": "232",
+            "zip": "594 61",
+            "city": "Bory",
+            "district": "Doln\u00ed Bory"
+        },
+        "ds_id": "z2fbpae"
+    },
+    "Bo\u0159enovice": {
+        "address": {
+            "street": "36",
+            "zip": "769 01",
+            "city": "Bo\u0159enovice",
+            "district": "Bo\u0159enovice"
+        },
+        "ds_id": "yg4bvff"
+    },
+    "Bo\u0159etice": {
+        "address": {
+            "street": "33",
+            "zip": "395 01",
+            "city": "Bo\u0159etice",
+            "district": "Bo\u0159etice"
+        },
+        "ds_id": "83uaxy5"
+    },
+    "Bo\u0159et\u00edn": {
+        "address": {
+            "street": "69",
+            "zip": "394 70",
+            "city": "Bo\u0159et\u00edn",
+            "district": "Bo\u0159et\u00edn"
+        },
+        "ds_id": "33xbfzj"
+    },
+    "Bo\u0159ice": {
+        "address": {
+            "street": "93",
+            "zip": "538 62",
+            "city": "Bo\u0159ice",
+            "district": "Bo\u0159ice"
+        },
+        "ds_id": "vdmbz7i"
+    },
+    "Bo\u0159islav": {
+        "address": {
+            "street": "20",
+            "zip": "415 01",
+            "city": "Bo\u0159islav",
+            "district": "Bo\u0159islav"
+        },
+        "ds_id": "expatm7"
+    },
+    "Bo\u0159itov": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed U V\u00e1clava 11",
+            "zip": "679 21",
+            "city": "Bo\u0159itov",
+            "district": "Bo\u0159itov"
+        },
+        "ds_id": "7q5bq97"
+    },
+    "Bose\u0148": {
+        "address": {
+            "street": "45",
+            "zip": "295 01",
+            "city": "Bose\u0148",
+            "district": "Bose\u0148"
+        },
+        "ds_id": "2jrakc3"
+    },
+    "Boskov\u0161tejn": {
+        "address": {
+            "street": "1",
+            "zip": "671 54",
+            "city": "Boskov\u0161tejn",
+            "district": "Boskov\u0161tejn"
+        },
+        "ds_id": "5y9azxz"
+    },
+    "Bo\u0161ice": {
+        "address": {
+            "street": "11",
+            "zip": "384 81",
+            "city": "Bo\u0161ice",
+            "district": "Bo\u0161ice"
+        },
+        "ds_id": "9n2b7fi"
+    },
+    "Bo\u0161ilec": {
+        "address": {
+            "street": "24",
+            "zip": "373 65",
+            "city": "Bo\u0161ilec",
+            "district": "Bo\u0161ilec"
+        },
+        "ds_id": "vzyb7ue"
+    },
+    "Bo\u0161\u00edn": {
+        "address": {
+            "street": "8",
+            "zip": "565 01",
+            "city": "Bo\u0161\u00edn",
+            "district": "Bo\u0161\u00edn"
+        },
+        "ds_id": "3paa5zd"
+    },
+    "Bo\u0161ovice": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "N\u00e1ves 395, Bo\u0161ovice, 68354 Bo\u0161ovice",
+            "district": ""
+        },
+        "ds_id": "fc2bpia"
+    },
+    "Boudy": {
+        "address": {
+            "street": "122",
+            "zip": "398 04",
+            "city": "Boudy",
+            "district": "Boudy"
+        },
+        "ds_id": "3yibgsj"
+    },
+    "Bous\u00edn": {
+        "address": {
+            "street": "47",
+            "zip": "798 61",
+            "city": "Bous\u00edn",
+            "district": "Bous\u00edn"
+        },
+        "ds_id": "kiva8q3"
+    },
+    "Bousov": {
+        "address": {
+            "street": "49",
+            "zip": "538 43",
+            "city": "Bousov",
+            "district": "Bousov"
+        },
+        "ds_id": "56wbz7e"
+    },
+    "Bouzov": {
+        "address": {
+            "street": "2",
+            "zip": "783 25",
+            "city": "Bouzov",
+            "district": "Bouzov"
+        },
+        "ds_id": "gtubfd2"
+    },
+    "Bozkov": {
+        "address": {
+            "street": "270",
+            "zip": "512 13",
+            "city": "Bozkov",
+            "district": "Bozkov"
+        },
+        "ds_id": "bz9an9g"
+    },
+    "Bo\u017eetice": {
+        "address": {
+            "street": "17",
+            "zip": "399 01",
+            "city": "Bo\u017eetice",
+            "district": "Bo\u017eetice"
+        },
+        "ds_id": "65uat5v"
+    },
+    "Bo\u017eice": {
+        "address": {
+            "street": "380",
+            "zip": "671 64",
+            "city": "Bo\u017eice",
+            "district": "Bo\u017eice"
+        },
+        "ds_id": "72jbfc8"
+    },
+    "Brad\u00e1\u010dov": {
+        "address": {
+            "street": "27",
+            "zip": "391 43",
+            "city": "Brad\u00e1\u010dov",
+            "district": "Brad\u00e1\u010dov"
+        },
+        "ds_id": "6ibj2kx"
+    },
+    "Brada-Rybn\u00ed\u010dek": {
+        "address": {
+            "street": "30",
+            "zip": "506 01",
+            "city": "Brada-Rybn\u00ed\u010dek",
+            "district": "Rybn\u00ed\u010dek"
+        },
+        "ds_id": "ista54y"
+    },
+    "Bradlec": {
+        "address": {
+            "street": "Bezd\u011bzsk\u00e1 9",
+            "zip": "293 06",
+            "city": "Bradlec",
+            "district": "Bradlec"
+        },
+        "ds_id": "fsxamdw"
+    },
+    "Brambory": {
+        "address": {
+            "street": "27",
+            "zip": "286 01",
+            "city": "Brambory",
+            "district": "Brambory"
+        },
+        "ds_id": "3cdanfk"
+    },
+    "Bra\u0148any": {
+        "address": {
+            "street": "B\u00edlinsk\u00e1 76",
+            "zip": "435 22",
+            "city": "Bra\u0148any",
+            "district": "Bra\u0148any"
+        },
+        "ds_id": "4i2b6c6"
+    },
+    "Brandov": {
+        "address": {
+            "street": "Rud\u00e9 arm\u00e1dy 251",
+            "zip": "435 47",
+            "city": "Brandov",
+            "district": "Brandov"
+        },
+        "ds_id": "qpiawxt"
+    },
+    "Brand\u00fdsek": {
+        "address": {
+            "street": "Sl\u00e1nsk\u00e1 62",
+            "zip": "273 41",
+            "city": "Brand\u00fdsek",
+            "district": "Ol\u0161any"
+        },
+        "ds_id": "nfzbfci"
+    },
+    "Branice": {
+        "address": {
+            "street": "77",
+            "zip": "398 43",
+            "city": "Branice",
+            "district": "Branice"
+        },
+        "ds_id": "itpa3bp"
+    },
+    "Bran\u00ed\u0161kov": {
+        "address": {
+            "street": "41",
+            "zip": "664 71",
+            "city": "Bran\u00ed\u0161kov",
+            "district": "Bran\u00ed\u0161kov"
+        },
+        "ds_id": "rpuaup3"
+    },
+    "Brani\u0161ov": {
+        "address": {
+            "street": "5",
+            "zip": "373 84",
+            "city": "Brani\u0161ov",
+            "district": "Brani\u0161ov"
+        },
+        "ds_id": "9kvat3y"
+    },
+    "Brani\u0161ovice": {
+        "address": {
+            "street": "57",
+            "zip": "671 77",
+            "city": "Brani\u0161ovice",
+            "district": "Brani\u0161ovice"
+        },
+        "ds_id": "acmayyq"
+    },
+    "Branka u Opavy": {
+        "address": {
+            "street": "Bezru\u010dovo n\u00e1b\u0159e\u017e\u00ed 54",
+            "zip": "747 41",
+            "city": "Branka u Opavy",
+            "district": "Branka u Opavy"
+        },
+        "ds_id": "vzgay9d"
+    },
+    "Branky": {
+        "address": {
+            "street": "6",
+            "zip": "756 45",
+            "city": "Branky",
+            "district": "Branky"
+        },
+        "ds_id": "8quasrg"
+    },
+    "Brann\u00e1": {
+        "address": {
+            "street": "23",
+            "zip": "788 25",
+            "city": "Brann\u00e1",
+            "district": "Brann\u00e1"
+        },
+        "ds_id": "4vfbfbt"
+    },
+    "Branov": {
+        "address": {
+            "street": "34",
+            "zip": "270 23",
+            "city": "Branov",
+            "district": "Branov"
+        },
+        "ds_id": "bk5byym"
+    },
+    "Bransouze": {
+        "address": {
+            "street": "40",
+            "zip": "675 21",
+            "city": "Bransouze",
+            "district": "Bransouze"
+        },
+        "ds_id": "scaapzs"
+    },
+    "Brantice": {
+        "address": {
+            "street": "121",
+            "zip": "793 93",
+            "city": "Brantice",
+            "district": "Brantice"
+        },
+        "ds_id": "5igb6vk"
+    },
+    "Bran\u017ee\u017e": {
+        "address": {
+            "street": "33",
+            "zip": "294 02",
+            "city": "Bran\u017ee\u017e",
+            "district": "Bran\u017ee\u017e"
+        },
+        "ds_id": "ps5b6zk"
+    },
+    "Bra\u0161kov": {
+        "address": {
+            "street": "Dukelsk\u00e1 11",
+            "zip": "273 51",
+            "city": "Bra\u0161kov",
+            "district": "Bra\u0161kov"
+        },
+        "ds_id": "zj5a8hs"
+    },
+    "Brat\u010dice": {
+        "address": {
+            "street": "36",
+            "zip": "664 67",
+            "city": "Brat\u010dice",
+            "district": "Brat\u010dice"
+        },
+        "ds_id": "zr9ak2t"
+    },
+    "Bratkovice": {
+        "address": {
+            "street": "62",
+            "zip": "262 23",
+            "city": "Bratkovice",
+            "district": "Dominik\u00e1ln\u00ed Paseky"
+        },
+        "ds_id": "zv9bghp"
+    },
+    "Bratronice": {
+        "address": {
+            "street": "35",
+            "zip": "273 63",
+            "city": "Bratronice",
+            "district": "Bratronice"
+        },
+        "ds_id": "nyubx5h"
+    },
+    "Bratru\u0161ov": {
+        "address": {
+            "street": "176",
+            "zip": "787 01",
+            "city": "Bratru\u0161ov",
+            "district": "Bratru\u0161ov"
+        },
+        "ds_id": "wmwauj8"
+    },
+    "Brat\u0159ejov": {
+        "address": {
+            "street": "226",
+            "zip": "763 12",
+            "city": "Brat\u0159ejov",
+            "district": "Brat\u0159ejov"
+        },
+        "ds_id": "yqsbq43"
+    },
+    "Brat\u0159ice": {
+        "address": {
+            "street": "11",
+            "zip": "395 01",
+            "city": "Brat\u0159ice",
+            "district": "Brat\u0159ice"
+        },
+        "ds_id": "qupaqk8"
+    },
+    "Brat\u0159\u00edkovice": {
+        "address": {
+            "street": "33",
+            "zip": "747 52",
+            "city": "Brat\u0159\u00edkovice",
+            "district": "Brat\u0159\u00edkovice"
+        },
+        "ds_id": "3i4aw8n"
+    },
+    "Brat\u0159\u00ednov": {
+        "address": {
+            "street": "12",
+            "zip": "252 05",
+            "city": "Brat\u0159\u00ednov",
+            "district": "Brat\u0159\u00ednov"
+        },
+        "ds_id": "dxgajiv"
+    },
+    "Bravantice": {
+        "address": {
+            "street": "223",
+            "zip": "742 81",
+            "city": "Bravantice",
+            "district": "Bravantice"
+        },
+        "ds_id": "8t9arye"
+    },
+    "Br\u00e1zdim": {
+        "address": {
+            "street": "30",
+            "zip": "250 63",
+            "city": "Br\u00e1zdim",
+            "district": "Nov\u00fd Br\u00e1zdim"
+        },
+        "ds_id": "qw8askh"
+    },
+    "Bra\u017eec": {
+        "address": {
+            "street": "37",
+            "zip": "364 71",
+            "city": "Bra\u017eec",
+            "district": "Bra\u017eec"
+        },
+        "ds_id": "x7yfetj"
+    },
+    "Brloh": {
+        "address": {
+            "street": "69",
+            "zip": "535 01",
+            "city": "Brloh",
+            "district": "Brloh"
+        },
+        "ds_id": "yruazmp"
+    },
+    "Br\u0148any": {
+        "address": {
+            "street": "93",
+            "zip": "412 01",
+            "city": "Br\u0148any",
+            "district": "Br\u0148any"
+        },
+        "ds_id": "iqaa34q"
+    },
+    "Brn\u011bnec": {
+        "address": {
+            "street": "77",
+            "zip": "569 04",
+            "city": "Brn\u011bnec",
+            "district": "Moravsk\u00e1 Chrastov\u00e1"
+        },
+        "ds_id": "wi7be94"
+    },
+    "Brn\u00ed\u010dko": {
+        "address": {
+            "street": "120",
+            "zip": "789 75",
+            "city": "Brn\u00ed\u010dko",
+            "district": "Brn\u00ed\u010dko"
+        },
+        "ds_id": "mrwbe98"
+    },
+    "Brn\u00ed\u0159ov": {
+        "address": {
+            "street": "41",
+            "zip": "345 06",
+            "city": "Brn\u00ed\u0159ov",
+            "district": "Brn\u00ed\u0159ov"
+        },
+        "ds_id": "5avbyvv"
+    },
+    "Brni\u0161t\u011b": {
+        "address": {
+            "street": "102",
+            "zip": "471 29",
+            "city": "Brni\u0161t\u011b",
+            "district": "Brni\u0161t\u011b"
+        },
+        "ds_id": "8pyavir"
+    },
+    "Brodec": {
+        "address": {
+            "street": "36",
+            "zip": "440 01",
+            "city": "Brodec",
+            "district": "Brodec"
+        },
+        "ds_id": "risaqpj"
+    },
+    "Brodek u Konice": {
+        "address": {
+            "street": "187",
+            "zip": "798 46",
+            "city": "Brodek u Konice",
+            "district": "Brodek u Konice"
+        },
+        "ds_id": "cymbe9b"
+    },
+    "Brodeslavy": {
+        "address": {
+            "street": "13",
+            "zip": "331 41",
+            "city": "Brodeslavy",
+            "district": "Brodeslavy"
+        },
+        "ds_id": "avgbhrn"
+    },
+    "Brod nad Dyj\u00ed": {
+        "address": {
+            "street": "45",
+            "zip": "691 81",
+            "city": "Brod nad Dyj\u00ed",
+            "district": "Brod nad Dyj\u00ed"
+        },
+        "ds_id": "yc4azyi"
+    },
+    "Brod nad Tichou": {
+        "address": {
+            "street": "96",
+            "zip": "348 15",
+            "city": "Brod nad Tichou",
+            "district": "Brod nad Tichou"
+        },
+        "ds_id": "zd7a7aj"
+    },
+    "Broumov": {
+        "address": {
+            "street": "75",
+            "zip": "348 15",
+            "city": "Broumov",
+            "district": "Broumov"
+        },
+        "ds_id": "iv2brz3"
+    },
+    "Broumy": {
+        "address": {
+            "street": "U radnice 73",
+            "zip": "267 42",
+            "city": "Broumy",
+            "district": "Broumy"
+        },
+        "ds_id": "i5wayyk"
+    },
+    "Brtni\u010dka": {
+        "address": {
+            "street": "10",
+            "zip": "675 27",
+            "city": "Brtni\u010dka",
+            "district": "Brtni\u010dka"
+        },
+        "ds_id": "b8yax2g"
+    },
+    "Br\u0165ov - Jene\u010d": {
+        "address": {
+            "street": "Ti\u0161novsk\u00e1 80",
+            "zip": "679 21",
+            "city": "Br\u0165ov-Jene\u010d",
+            "district": "Br\u0165ov u \u010cern\u00e9 Hory"
+        },
+        "ds_id": "jf2a8yk"
+    },
+    "Brumov": {
+        "address": {
+            "street": "98",
+            "zip": "679 23",
+            "city": "Brumov",
+            "district": "Brumov"
+        },
+        "ds_id": "86dazyc"
+    },
+    "Brumovice": {
+        "address": {
+            "street": "155",
+            "zip": "691 11",
+            "city": "Brumovice",
+            "district": "Brumovice"
+        },
+        "ds_id": "hxnazz6"
+    },
+    "Brusn\u00e9": {
+        "address": {
+            "street": "93",
+            "zip": "768 61",
+            "city": "Brusn\u00e9",
+            "district": "Brusn\u00e9"
+        },
+        "ds_id": "s6dbjjz"
+    },
+    "Bruzovice": {
+        "address": {
+            "street": "214",
+            "zip": "739 36",
+            "city": "Bruzovice",
+            "district": "Bruzovice"
+        },
+        "ds_id": "naubmp5"
+    },
+    "Brz\u00e1nky": {
+        "address": {
+            "street": "6",
+            "zip": "413 01",
+            "city": "Brz\u00e1nky",
+            "district": "Brz\u00e1nky"
+        },
+        "ds_id": "r8vaqsu"
+    },
+    "Brzkov": {
+        "address": {
+            "street": "68",
+            "zip": "588 13",
+            "city": "Brzkov",
+            "district": "Brzkov"
+        },
+        "ds_id": "cu8bf2d"
+    },
+    "B\u0159asy": {
+        "address": {
+            "street": "350",
+            "zip": "338 24",
+            "city": "B\u0159asy",
+            "district": "B\u0159asy"
+        },
+        "ds_id": "p8ubrid"
+    },
+    "B\u0159ehov": {
+        "address": {
+            "street": "20",
+            "zip": "373 41",
+            "city": "B\u0159ehov",
+            "district": "B\u0159ehov"
+        },
+        "ds_id": "a4gathg"
+    },
+    "B\u0159ehy": {
+        "address": {
+            "street": "Bahn\u00edkova 8",
+            "zip": "535 01",
+            "city": "B\u0159ehy",
+            "district": "B\u0159ehy"
+        },
+        "ds_id": "yqya4ey"
+    },
+    "B\u0159est": {
+        "address": {
+            "street": "87",
+            "zip": "768 23",
+            "city": "B\u0159est",
+            "district": "B\u0159est"
+        },
+        "ds_id": "t36bfbz"
+    },
+    "B\u0159estek": {
+        "address": {
+            "street": "14",
+            "zip": "687 08",
+            "city": "B\u0159estek",
+            "district": "B\u0159estek"
+        },
+        "ds_id": "u52bt7t"
+    },
+    "B\u0159evnice": {
+        "address": {
+            "street": "10",
+            "zip": "580 01",
+            "city": "B\u0159evnice",
+            "district": "B\u0159evnice"
+        },
+        "ds_id": "znrax6w"
+    },
+    "B\u0159ezejc": {
+        "address": {
+            "street": "6",
+            "zip": "594 01",
+            "city": "B\u0159ezejc",
+            "district": "B\u0159ezejc"
+        },
+        "ds_id": "esiazyr"
+    },
+    "B\u0159ez\u00ed": {
+        "address": {
+            "street": "57",
+            "zip": "594 53",
+            "city": "B\u0159ez\u00ed",
+            "district": "B\u0159ez\u00ed"
+        },
+        "ds_id": "crqbs6h"
+    },
+    "B\u0159ezina": {
+        "address": {
+            "street": "88",
+            "zip": "338 24",
+            "city": "B\u0159ezina",
+            "district": "B\u0159ezina"
+        },
+        "ds_id": "jnrbhrj"
+    },
+    "B\u0159ez\u00ed nad Oslavou": {
+        "address": {
+            "street": "47",
+            "zip": "592 14",
+            "city": "B\u0159ez\u00ed nad Oslavou",
+            "district": "B\u0159ez\u00ed nad Oslavou"
+        },
+        "ds_id": "dbqa95z"
+    },
+    "B\u0159ezinky": {
+        "address": {
+            "street": "42",
+            "zip": "569 43",
+            "city": "B\u0159ezinky",
+            "district": "B\u0159ezinky"
+        },
+        "ds_id": "9h9a4eu"
+    },
+    "B\u0159eziny": {
+        "address": {
+            "street": "32",
+            "zip": "572 01",
+            "city": "B\u0159eziny",
+            "district": "B\u0159eziny"
+        },
+        "ds_id": "cpda4g5"
+    },
+    "B\u0159ezn\u00edk": {
+        "address": {
+            "street": "247",
+            "zip": "675 74",
+            "city": "B\u0159ezn\u00edk",
+            "district": "B\u0159ezn\u00edk"
+        },
+        "ds_id": "pqyatm4"
+    },
+    "B\u0159ezolupy": {
+        "address": {
+            "street": "90",
+            "zip": "687 13",
+            "city": "B\u0159ezolupy",
+            "district": "B\u0159ezolupy"
+        },
+        "ds_id": "c69b2dg"
+    },
+    "B\u0159ezov\u00e1-Ole\u0161ko": {
+        "address": {
+            "street": "Hlavn\u00ed 1143",
+            "zip": "252 45",
+            "city": "B\u0159ezov\u00e1-Ole\u0161ko",
+            "district": "Ole\u0161ko"
+        },
+        "ds_id": "88qbqnr"
+    },
+    "B\u0159ezovice": {
+        "address": {
+            "street": "84",
+            "zip": "294 24",
+            "city": "B\u0159ezovice",
+            "district": "B\u0159ezovice"
+        },
+        "ds_id": "wcjat5z"
+    },
+    "B\u0159ezsk\u00e9": {
+        "address": {
+            "street": "55",
+            "zip": "594 53",
+            "city": "B\u0159ezsk\u00e9",
+            "district": "B\u0159ezsk\u00e9"
+        },
+        "ds_id": "mnhbf28"
+    },
+    "B\u0159ezsko": {
+        "address": {
+            "street": "12",
+            "zip": "798 52",
+            "city": "B\u0159ezsko",
+            "district": "B\u0159ezsko"
+        },
+        "ds_id": "h5paqva"
+    },
+    "B\u0159ez\u016fvky": {
+        "address": {
+            "street": "1",
+            "zip": "763 45",
+            "city": "B\u0159ez\u016fvky",
+            "district": "B\u0159ez\u016fvky"
+        },
+        "ds_id": "c8zbutv"
+    },
+    "B\u0159e\u017eany": {
+        "address": {
+            "street": "103",
+            "zip": "671 65",
+            "city": "B\u0159e\u017eany",
+            "district": "B\u0159e\u017eany"
+        },
+        "ds_id": "gnpbmqn"
+    },
+    "B\u0159e\u017eany I.": {
+        "address": {
+            "street": "67",
+            "zip": "280 02",
+            "city": "B\u0159e\u017eany I",
+            "district": "B\u0159e\u017eany I"
+        },
+        "ds_id": "9u9a9mi"
+    },
+    "B\u0159e\u017eany II": {
+        "address": {
+            "street": "63",
+            "zip": "282 01",
+            "city": "B\u0159e\u017eany II",
+            "district": "B\u0159e\u017eany II"
+        },
+        "ds_id": "vrvas9p"
+    },
+    "B\u0159\u00edstv\u00ed": {
+        "address": {
+            "street": "75",
+            "zip": "289 15",
+            "city": "B\u0159\u00edstv\u00ed",
+            "district": "B\u0159\u00edstv\u00ed"
+        },
+        "ds_id": "c6jbggi"
+    },
+    "B\u0159\u00edza": {
+        "address": {
+            "street": "110",
+            "zip": "413 01",
+            "city": "B\u0159\u00edza",
+            "district": "B\u0159\u00edza"
+        },
+        "ds_id": "nmubswt"
+    },
+    "B\u0159vany": {
+        "address": {
+            "street": "Dlouh\u00e1 41",
+            "zip": "440 01",
+            "city": "B\u0159vany",
+            "district": "B\u0159vany"
+        },
+        "ds_id": "6a7bwm5"
+    },
+    "Bublava": {
+        "address": {
+            "street": "389",
+            "zip": "358 01",
+            "city": "Bublava",
+            "district": "Bublava"
+        },
+        "ds_id": "iwbasyt"
+    },
+    "Bubovice": {
+        "address": {
+            "street": "Bubovick\u00e1 27",
+            "zip": "267 18",
+            "city": "Bubovice",
+            "district": "Bubovice"
+        },
+        "ds_id": "dnwasnj"
+    },
+    "Bu\u010d\u00ed": {
+        "address": {
+            "street": "57",
+            "zip": "331 52",
+            "city": "Bu\u010d\u00ed",
+            "district": "Bu\u010d\u00ed"
+        },
+        "ds_id": "gpna8kc"
+    },
+    "Bu\u010dina": {
+        "address": {
+            "street": "36",
+            "zip": "566 01",
+            "city": "Bu\u010dina",
+            "district": "Bu\u010dina"
+        },
+        "ds_id": "mgna4gz"
+    },
+    "Bude\u010d": {
+        "address": {
+            "street": "44",
+            "zip": "592 14",
+            "city": "Bude\u010d",
+            "district": "Bude\u010d"
+        },
+        "ds_id": "quebpme"
+    },
+    "Bud\u011btice": {
+        "address": {
+            "street": "47",
+            "zip": "342 01",
+            "city": "Bud\u011btice",
+            "district": "Bud\u011btice"
+        },
+        "ds_id": "p3pbxvx"
+    },
+    "Bud\u011btsko": {
+        "address": {
+            "street": "146",
+            "zip": "798 52",
+            "city": "Bud\u011btsko",
+            "district": "Bud\u011btsko"
+        },
+        "ds_id": "ti5bi87"
+    },
+    "Bud\u00edkov": {
+        "address": {
+            "street": "4",
+            "zip": "396 01",
+            "city": "Bud\u00edkov",
+            "district": "Bud\u00edkov"
+        },
+        "ds_id": "dnmbrpr"
+    },
+    "Budim\u011b\u0159ice": {
+        "address": {
+            "street": "7",
+            "zip": "288 02",
+            "city": "Budim\u011b\u0159ice",
+            "district": "Budim\u011b\u0159ice"
+        },
+        "ds_id": "zusan2z"
+    },
+    "Budislav": {
+        "address": {
+            "street": "9",
+            "zip": "392 01",
+            "city": "Budislav",
+            "district": "Budislav"
+        },
+        "ds_id": "vqyedyd"
+    },
+    "Bud\u00ed\u0161kovice": {
+        "address": {
+            "street": "127",
+            "zip": "378 91",
+            "city": "Bud\u00ed\u0161kovice",
+            "district": "Bud\u00ed\u0161kovice"
+        },
+        "ds_id": "sf4b76w"
+    },
+    "Budi\u0161ovice": {
+        "address": {
+            "street": "Opavsk\u00e1 112",
+            "zip": "747 64",
+            "city": "Budi\u0161ovice",
+            "district": "Budi\u0161ovice"
+        },
+        "ds_id": "evxay7r"
+    },
+    "Budkov": {
+        "address": {
+            "street": "33",
+            "zip": "384 22",
+            "city": "Budkov",
+            "district": "Budkov"
+        },
+        "ds_id": "bdqa6ar"
+    },
+    "Budyn\u011b": {
+        "address": {
+            "street": "5",
+            "zip": "387 73",
+            "city": "Budyn\u011b",
+            "district": "Budyn\u011b"
+        },
+        "ds_id": "s29ambv"
+    },
+    "Bujanov": {
+        "address": {
+            "street": "26",
+            "zip": "382 41",
+            "city": "Bujanov",
+            "district": "Bujanov"
+        },
+        "ds_id": "9khb5f9"
+    },
+    "Bujesily": {
+        "address": {
+            "street": "1",
+            "zip": "331 41",
+            "city": "Bujesily",
+            "district": "Bujesily"
+        },
+        "ds_id": "uf2bhrf"
+    },
+    "Buk": {
+        "address": {
+            "street": "21",
+            "zip": "751 21",
+            "city": "Buk",
+            "district": "Buk"
+        },
+        "ds_id": "fahbmiz"
+    },
+    "Bukov": {
+        "address": {
+            "street": "88",
+            "zip": "592 51",
+            "city": "Bukov",
+            "district": "Bukov"
+        },
+        "ds_id": "f25bpmk"
+    },
+    "Bukov\u00e1": {
+        "address": {
+            "street": "9",
+            "zip": "798 48",
+            "city": "Bukov\u00e1",
+            "district": "Bukov\u00e1"
+        },
+        "ds_id": "ax7aw3t"
+    },
+    "Bukovany": {
+        "address": {
+            "street": "47",
+            "zip": "357 55",
+            "city": "Bukovany",
+            "district": "Bukovany"
+        },
+        "ds_id": "j6qb5bt"
+    },
+    "Bukov\u00e1 u P\u0159\u00edbram\u011b": {
+        "address": {
+            "street": "109",
+            "zip": "262 23",
+            "city": "Bukov\u00e1 u P\u0159\u00edbram\u011b",
+            "district": "Bukov\u00e1 u P\u0159\u00edbram\u011b"
+        },
+        "ds_id": "iana68v"
+    },
+    "Bukovec": {
+        "address": {
+            "street": "33",
+            "zip": "345 62",
+            "city": "Bukovec",
+            "district": "Bukovec"
+        },
+        "ds_id": "yqpb3f6"
+    },
+    "Bukovice": {
+        "address": {
+            "street": "36",
+            "zip": "679 23",
+            "city": "Bukovice",
+            "district": "Bukovice"
+        },
+        "ds_id": "cbhaz2p"
+    },
+    "Bukovina": {
+        "address": {
+            "street": "31",
+            "zip": "679 05",
+            "city": "Bukovina",
+            "district": "Bukovina"
+        },
+        "ds_id": "bmeazxd"
+    },
+    "Bukovina nad Labem": {
+        "address": {
+            "street": "11",
+            "zip": "533 52",
+            "city": "Bukovina nad Labem",
+            "district": "Bukovina nad Labem"
+        },
+        "ds_id": "v9xa4gv"
+    },
+    "Bukovina u \u010cist\u00e9": {
+        "address": {
+            "street": "19",
+            "zip": "514 01",
+            "city": "Bukovina u \u010cist\u00e9",
+            "district": "Bukovina u \u010cist\u00e9"
+        },
+        "ds_id": "3w3apby"
+    },
+    "Bukovina u P\u0159elou\u010de": {
+        "address": {
+            "street": "16",
+            "zip": "535 01",
+            "city": "Bukovina u P\u0159elou\u010de",
+            "district": "Bukovina u P\u0159elou\u010de"
+        },
+        "ds_id": "628a4gr"
+    },
+    "Bukovka": {
+        "address": {
+            "street": "28",
+            "zip": "533 41",
+            "city": "Bukovka",
+            "district": "Bukovka"
+        },
+        "ds_id": "fuha4hh"
+    },
+    "Bukovn\u00edk": {
+        "address": {
+            "street": "60",
+            "zip": "342 01",
+            "city": "Bukovn\u00edk",
+            "district": "Bukovn\u00edk"
+        },
+        "ds_id": "yuybxvt"
+    },
+    "Bukovno": {
+        "address": {
+            "street": "63",
+            "zip": "293 01",
+            "city": "Bukovno",
+            "district": "Bukovno"
+        },
+        "ds_id": "q2marte"
+    },
+    "Bukvice": {
+        "address": {
+            "street": "28",
+            "zip": "506 01",
+            "city": "Bukvice",
+            "district": "Bukvice"
+        },
+        "ds_id": "5z2a9ht"
+    },
+    "Bulhary": {
+        "address": {
+            "street": "88",
+            "zip": "691 89",
+            "city": "Bulhary",
+            "district": "Bulhary"
+        },
+        "ds_id": "ifmbmje"
+    },
+    "Bulovka": {
+        "address": {
+            "street": "101",
+            "zip": "464 01",
+            "city": "Bulovka",
+            "district": "Bulovka"
+        },
+        "ds_id": "3mfbmwy"
+    },
+    "Bu\u0159enice": {
+        "address": {
+            "street": "22",
+            "zip": "395 01",
+            "city": "Bu\u0159enice",
+            "district": "Bu\u0159enice"
+        },
+        "ds_id": "vbybve2"
+    },
+    "Bu\u0161": {
+        "address": {
+            "street": "8",
+            "zip": "252 08",
+            "city": "Bu\u0161",
+            "district": "Bu\u0161"
+        },
+        "ds_id": "eg7azin"
+    },
+    "Bu\u0161anovice": {
+        "address": {
+            "street": "47",
+            "zip": "384 22",
+            "city": "Bu\u0161anovice",
+            "district": "Bu\u0161anovice"
+        },
+        "ds_id": "arvb68w"
+    },
+    "Bu\u0161\u00edn": {
+        "address": {
+            "street": "84",
+            "zip": "789 62",
+            "city": "Bu\u0161\u00edn",
+            "district": "Bu\u0161\u00edn"
+        },
+        "ds_id": "9ncbmik"
+    },
+    "Bu\u0161ovice": {
+        "address": {
+            "street": "7",
+            "zip": "338 24",
+            "city": "Bu\u0161ovice",
+            "district": "Bu\u0161ovice"
+        },
+        "ds_id": "yu3bmir"
+    },
+    "Butoves": {
+        "address": {
+            "street": "47",
+            "zip": "506 01",
+            "city": "Butoves",
+            "district": "Butoves"
+        },
+        "ds_id": "r2jbyxw"
+    },
+    "Buzice": {
+        "address": {
+            "street": "79",
+            "zip": "388 01",
+            "city": "Buzice",
+            "district": "Buzice"
+        },
+        "ds_id": "peuajm4"
+    },
+    "B\u00fd\u010dkovice": {
+        "address": {
+            "street": "57",
+            "zip": "412 01",
+            "city": "B\u00fd\u010dkovice",
+            "district": "B\u00fd\u010dkovice"
+        },
+        "ds_id": "c6ratse"
+    },
+    "B\u00fdchory": {
+        "address": {
+            "street": "57",
+            "zip": "280 02",
+            "city": "B\u00fdchory",
+            "district": "B\u00fdchory"
+        },
+        "ds_id": "b5dbmhk"
+    },
+    "B\u00fdkev": {
+        "address": {
+            "street": "50",
+            "zip": "276 01",
+            "city": "B\u00fdkev",
+            "district": "B\u00fdkev"
+        },
+        "ds_id": "qkwa7ap"
+    },
+    "Byko\u0161": {
+        "address": {
+            "street": "97",
+            "zip": "267 01",
+            "city": "Byko\u0161",
+            "district": "Byko\u0161"
+        },
+        "ds_id": "jz2apx2"
+    },
+    "B\u00fdkovice": {
+        "address": {
+            "street": "34",
+            "zip": "679 71",
+            "city": "B\u00fdkovice",
+            "district": "B\u00fdkovice"
+        },
+        "ds_id": "k4saz2j"
+    },
+    "B\u00fdkov-L\u00e1ry\u0161ov": {
+        "address": {
+            "street": "68",
+            "zip": "794 01",
+            "city": "B\u00fdkov-L\u00e1ry\u0161ov",
+            "district": "B\u00fdkov"
+        },
+        "ds_id": "sc3axjn"
+    },
+    "Bylany": {
+        "address": {
+            "street": "77",
+            "zip": "538 01",
+            "city": "Bylany",
+            "district": "Bylany"
+        },
+        "ds_id": "qmsa4he"
+    },
+    "Bynovec": {
+        "address": {
+            "street": "29",
+            "zip": "405 02",
+            "city": "Bynovec",
+            "district": "Bynovec"
+        },
+        "ds_id": "zhbb5ip"
+    },
+    "Bystr\u00e1": {
+        "address": {
+            "street": "50",
+            "zip": "396 01",
+            "city": "Bystr\u00e1",
+            "district": "Bystr\u00e1"
+        },
+        "ds_id": "3nea8sn"
+    },
+    "Bystr\u00e1 nad Jizerou": {
+        "address": {
+            "street": "14",
+            "zip": "513 01",
+            "city": "Bystr\u00e1 nad Jizerou",
+            "district": "Bystr\u00e1 nad Jizerou"
+        },
+        "ds_id": "2pajds2"
+    },
+    "Bystro\u010dice": {
+        "address": {
+            "street": "6",
+            "zip": "779 00",
+            "city": "Bystro\u010dice",
+            "district": "Bystro\u010dice"
+        },
+        "ds_id": "7c9bntr"
+    },
+    "Bystrovany": {
+        "address": {
+            "street": "\u0160r\u00e1mkova 115",
+            "zip": "779 00",
+            "city": "Bystrovany",
+            "district": "Bystrovany"
+        },
+        "ds_id": "wpjazcq"
+    },
+    "Byst\u0159any": {
+        "address": {
+            "street": "Pra\u017esk\u00e1 32",
+            "zip": "417 61",
+            "city": "Byst\u0159any",
+            "district": "Byst\u0159any"
+        },
+        "ds_id": "3gga7jg"
+    },
+    "Byst\u0159ec": {
+        "address": {
+            "street": "182",
+            "zip": "561 54",
+            "city": "Byst\u0159ec",
+            "district": "Byst\u0159ec"
+        },
+        "ds_id": "29db76q"
+    },
+    "Byst\u0159ice pod Lopen\u00edkem": {
+        "address": {
+            "street": "262",
+            "zip": "687 55",
+            "city": "Byst\u0159ice pod Lopen\u00edkem",
+            "district": "Byst\u0159ice pod Lopen\u00edkem"
+        },
+        "ds_id": "sitbmgy"
+    },
+    "Byst\u0159i\u010dka": {
+        "address": {
+            "street": "82",
+            "zip": "756 24",
+            "city": "Byst\u0159i\u010dka",
+            "district": "Byst\u0159i\u010dka"
+        },
+        "ds_id": "hribmg4"
+    },
+    "By\u0161ice": {
+        "address": {
+            "street": "Tyr\u0161ovo n\u00e1m\u011bst\u00ed 153",
+            "zip": "277 32",
+            "city": "By\u0161ice",
+            "district": "By\u0161ice"
+        },
+        "ds_id": "yz8be76"
+    },
+    "B\u00fd\u0161kovice": {
+        "address": {
+            "street": "71",
+            "zip": "753 53",
+            "city": "B\u00fd\u0161kovice",
+            "district": "B\u00fd\u0161kovice"
+        },
+        "ds_id": "cb7bjxj"
+    },
+    "B\u00fd\u0161ovec": {
+        "address": {
+            "street": "20",
+            "zip": "593 01",
+            "city": "B\u00fd\u0161ovec",
+            "district": "B\u00fd\u0161ovec"
+        },
+        "ds_id": "kxqav23"
+    },
+    "B\u00fd\u0161\u0165": {
+        "address": {
+            "street": "133",
+            "zip": "533 22",
+            "city": "B\u00fd\u0161\u0165",
+            "district": "B\u00fd\u0161\u0165"
+        },
+        "ds_id": "twzbmnk"
+    },
+    "Bzov\u00e1": {
+        "address": {
+            "street": "52",
+            "zip": "267 43",
+            "city": "Bzov\u00e1",
+            "district": "Bzov\u00e1"
+        },
+        "ds_id": "kwnbmhg"
+    },
+    "B\u017eany": {
+        "address": {
+            "street": "50",
+            "zip": "415 01",
+            "city": "B\u017eany",
+            "district": "B\u017eany"
+        },
+        "ds_id": "tztaqmm"
+    },
+    "Cebiv": {
+        "address": {
+            "street": "64",
+            "zip": "349 52",
+            "city": "Cebiv",
+            "district": "Cebiv"
+        },
+        "ds_id": "49bbhr9"
+    },
+    "Cehnice": {
+        "address": {
+            "street": "76",
+            "zip": "387 52",
+            "city": "Cehnice",
+            "district": "Cehnice"
+        },
+        "ds_id": "8z7as7m"
+    },
+    "Cejle": {
+        "address": {
+            "street": "100",
+            "zip": "588 51",
+            "city": "Cejle",
+            "district": "Cejle"
+        },
+        "ds_id": "v6cbrxy"
+    },
+    "Cekov": {
+        "address": {
+            "street": "23",
+            "zip": "338 08",
+            "city": "Cekov",
+            "district": "Cekov"
+        },
+        "ds_id": "7k5avsa"
+    },
+    "Cep": {
+        "address": {
+            "street": "66",
+            "zip": "379 01",
+            "city": "Cep",
+            "district": "Cep"
+        },
+        "ds_id": "3uiambp"
+    },
+    "Cerekvice nad Byst\u0159ic\u00ed": {
+        "address": {
+            "street": "53",
+            "zip": "507 77",
+            "city": "Cerekvice nad Byst\u0159ic\u00ed",
+            "district": "Cerekvice nad Byst\u0159ic\u00ed"
+        },
+        "ds_id": "67bbmkh"
+    },
+    "Cerekvice nad Lou\u010dnou": {
+        "address": {
+            "street": "132",
+            "zip": "569 53",
+            "city": "Cerekvice nad Lou\u010dnou",
+            "district": "Cerekvice nad Lou\u010dnou"
+        },
+        "ds_id": "vcubsmr"
+    },
+    "Cerekvi\u010dka-Rosice": {
+        "address": {
+            "street": "30",
+            "zip": "588 33",
+            "city": "Cerekvi\u010dka-Rosice",
+            "district": "Cerekvi\u010dka"
+        },
+        "ds_id": "vdqbpuf"
+    },
+    "Cerhonice": {
+        "address": {
+            "street": "9",
+            "zip": "398 04",
+            "city": "Cerhonice",
+            "district": "Cerhonice"
+        },
+        "ds_id": "4e8am74"
+    },
+    "Cetechovice": {
+        "address": {
+            "street": "45",
+            "zip": "768 02",
+            "city": "Cetechovice",
+            "district": "Cetechovice"
+        },
+        "ds_id": "r38b5qh"
+    },
+    "Cetenov": {
+        "address": {
+            "street": "44",
+            "zip": "463 48",
+            "city": "Cetenov",
+            "district": "Hrub\u00fd Lesnov"
+        },
+        "ds_id": "4f4ajet"
+    },
+    "Cetkovice": {
+        "address": {
+            "street": "N\u00e1ves 168",
+            "zip": "679 38",
+            "city": "Cetkovice",
+            "district": "Cetkovice"
+        },
+        "ds_id": "g8kbe26"
+    },
+    "Cetoraz": {
+        "address": {
+            "street": "206",
+            "zip": "394 11",
+            "city": "Cetoraz",
+            "district": "Cetoraz"
+        },
+        "ds_id": "kp5ap2d"
+    },
+    "Cetyn\u011b": {
+        "address": {
+            "street": "33",
+            "zip": "262 31",
+            "city": "Cetyn\u011b",
+            "district": "Cetyn\u011b"
+        },
+        "ds_id": "2a7atgq"
+    },
+    "Cidlina": {
+        "address": {
+            "street": "16",
+            "zip": "675 44",
+            "city": "Cidlina",
+            "district": "Cidlina"
+        },
+        "ds_id": "tjbawi2"
+    },
+    "Cikh\u00e1j": {
+        "address": {
+            "street": "19",
+            "zip": "591 02",
+            "city": "Cikh\u00e1j",
+            "district": "Cikh\u00e1j"
+        },
+        "ds_id": "g3maypn"
+    },
+    "C\u00edrkvice": {
+        "address": {
+            "street": "6",
+            "zip": "285 33",
+            "city": "C\u00edrkvice",
+            "district": "C\u00edrkvice"
+        },
+        "ds_id": "puybn4x"
+    },
+    "C\u00edsa\u0159ov": {
+        "address": {
+            "street": "106",
+            "zip": "751 03",
+            "city": "C\u00edsa\u0159ov",
+            "district": "C\u00edsa\u0159ov"
+        },
+        "ds_id": "988azqv"
+    },
+    "Citice": {
+        "address": {
+            "street": "13",
+            "zip": "356 01",
+            "city": "Citice",
+            "district": "Citice"
+        },
+        "ds_id": "qx4apt7"
+    },
+    "Citonice": {
+        "address": {
+            "street": "82",
+            "zip": "671 01",
+            "city": "Citonice",
+            "district": "Citonice"
+        },
+        "ds_id": "5vnbpe5"
+    },
+    "Citov": {
+        "address": {
+            "street": "14",
+            "zip": "751 03",
+            "city": "Citov",
+            "district": "Citov"
+        },
+        "ds_id": "bn6audv"
+    },
+    "C\u00edtov": {
+        "address": {
+            "street": "203",
+            "zip": "277 04",
+            "city": "C\u00edtov",
+            "district": "C\u00edtov"
+        },
+        "ds_id": "dexbv24"
+    },
+    "Cizkrajov": {
+        "address": {
+            "street": "55",
+            "zip": "378 81",
+            "city": "Cizkrajov",
+            "district": "Cizkrajov"
+        },
+        "ds_id": "c8ham8u"
+    },
+    "Cotkytle": {
+        "address": {
+            "street": "3",
+            "zip": "561 32",
+            "city": "Cotkytle",
+            "district": "Cotkytle"
+        },
+        "ds_id": "ze3a4ha"
+    },
+    "Crhov": {
+        "address": {
+            "street": "42",
+            "zip": "679 74",
+            "city": "Crhov",
+            "district": "Crhov"
+        },
+        "ds_id": "vv3az2f"
+    },
+    "Ct\u011bt\u00edn": {
+        "address": {
+            "street": "55",
+            "zip": "538 25",
+            "city": "Ct\u011bt\u00edn",
+            "district": "Ct\u011bt\u00edn"
+        },
+        "ds_id": "prgbz83"
+    },
+    "Ctibo\u0159": {
+        "address": {
+            "street": "37",
+            "zip": "258 01",
+            "city": "Ctibo\u0159",
+            "district": "Ctibo\u0159"
+        },
+        "ds_id": "933a73f"
+    },
+    "Ctidru\u017eice": {
+        "address": {
+            "street": "66",
+            "zip": "671 54",
+            "city": "Ctidru\u017eice",
+            "district": "Ctidru\u017eice"
+        },
+        "ds_id": "9n8bird"
+    },
+    "Ctim\u011b\u0159ice": {
+        "address": {
+            "street": "4",
+            "zip": "294 46",
+            "city": "Ctim\u011b\u0159ice",
+            "district": "Ctim\u011b\u0159ice"
+        },
+        "ds_id": "96samdh"
+    },
+    "Ctin\u011bves": {
+        "address": {
+            "street": "61",
+            "zip": "413 01",
+            "city": "Ctin\u011bves",
+            "district": "Ctin\u011bves"
+        },
+        "ds_id": "zypbuuy"
+    },
+    "Cvr\u010dovice": {
+        "address": {
+            "street": "t\u0159\u00edda Rud\u00e9 arm\u00e1dy 142",
+            "zip": "273 41",
+            "city": "Cvr\u010dovice",
+            "district": "Cvr\u010dovice"
+        },
+        "ds_id": "54rantu"
+    },
+    "\u010cachot\u00edn": {
+        "address": {
+            "street": "77",
+            "zip": "583 01",
+            "city": "\u010cachot\u00edn",
+            "district": "\u010cachot\u00edn"
+        },
+        "ds_id": "8sea9vz"
+    },
+    "\u010cachovice": {
+        "address": {
+            "street": "Poln\u00ed 48",
+            "zip": "294 43",
+            "city": "\u010cachovice",
+            "district": "\u010cachovice"
+        },
+        "ds_id": "apcb48m"
+    },
+    "\u010cakov": {
+        "address": {
+            "street": "20",
+            "zip": "373 84",
+            "city": "\u010cakov",
+            "district": "\u010cakov"
+        },
+        "ds_id": "iadb593"
+    },
+    "\u010cakov\u00e1": {
+        "address": {
+            "street": "101",
+            "zip": "793 16",
+            "city": "\u010cakov\u00e1",
+            "district": "\u010cakov\u00e1"
+        },
+        "ds_id": "26caxjg"
+    },
+    "\u010cakovi\u010dky": {
+        "address": {
+            "street": "Kojetick\u00e1 32",
+            "zip": "250 63",
+            "city": "\u010cakovi\u010dky",
+            "district": "\u010cakovi\u010dky"
+        },
+        "ds_id": "hy2b5tw"
+    },
+    "\u010cankovice": {
+        "address": {
+            "street": "89",
+            "zip": "538 62",
+            "city": "\u010cankovice",
+            "district": "\u010cankovice"
+        },
+        "ds_id": "98ca4h4"
+    },
+    "\u010c\u00e1slavice": {
+        "address": {
+            "street": "23",
+            "zip": "675 24",
+            "city": "\u010c\u00e1slavice",
+            "district": "\u010c\u00e1slavice"
+        },
+        "ds_id": "fqwbryp"
+    },
+    "\u010c\u00e1slavsko": {
+        "address": {
+            "street": "21",
+            "zip": "395 01",
+            "city": "\u010c\u00e1slavsko",
+            "district": "\u010c\u00e1slavsko"
+        },
+        "ds_id": "jxwb6vv"
+    },
+    "\u010c\u00e1stkov": {
+        "address": {
+            "street": "78",
+            "zip": "348 01",
+            "city": "\u010c\u00e1stkov",
+            "district": "\u010c\u00e1stkov"
+        },
+        "ds_id": "2nya798"
+    },
+    "\u010castohostice": {
+        "address": {
+            "street": "3",
+            "zip": "676 02",
+            "city": "\u010castohostice",
+            "district": "\u010castohostice"
+        },
+        "ds_id": "iqdarrn"
+    },
+    "\u010castrov": {
+        "address": {
+            "street": "105",
+            "zip": "394 63",
+            "city": "\u010castrov",
+            "district": "\u010castrov"
+        },
+        "ds_id": "ctgbmkw"
+    },
+    "\u010casy": {
+        "address": {
+            "street": "31",
+            "zip": "534 01",
+            "city": "\u010casy",
+            "district": "\u010casy"
+        },
+        "ds_id": "pnca3yv"
+    },
+    "\u010cavisov": {
+        "address": {
+            "street": "Osvobozen\u00ed 91",
+            "zip": "747 64",
+            "city": "\u010cavisov",
+            "district": "\u010cavisov"
+        },
+        "ds_id": "rwgbft2"
+    },
+    "\u010ceb\u00edn": {
+        "address": {
+            "street": "21",
+            "zip": "664 23",
+            "city": "\u010ceb\u00edn",
+            "district": "\u010ceb\u00edn"
+        },
+        "ds_id": "3z7bmj6"
+    },
+    "\u010ce\u010delice": {
+        "address": {
+            "street": "V\u0161etatsk\u00e1 41",
+            "zip": "277 32",
+            "city": "\u010ce\u010delice",
+            "district": "\u010ce\u010delice"
+        },
+        "ds_id": "mh8bjkk"
+    },
+    "\u010ce\u010delovice": {
+        "address": {
+            "street": "32",
+            "zip": "388 01",
+            "city": "\u010ce\u010delovice",
+            "district": "\u010ce\u010delovice"
+        },
+        "ds_id": "safa7wf"
+    },
+    "\u010ce\u010dkovice": {
+        "address": {
+            "street": "40",
+            "zip": "583 01",
+            "city": "\u010ce\u010dkovice",
+            "district": "\u010ce\u010dkovice"
+        },
+        "ds_id": "v8vbtx9"
+    },
+    "\u010ce\u010dovice": {
+        "address": {
+            "street": "3",
+            "zip": "345 62",
+            "city": "\u010ce\u010dovice",
+            "district": "\u010ce\u010dovice"
+        },
+        "ds_id": "ntvbhsw"
+    },
+    "\u010cehovice": {
+        "address": {
+            "street": "93",
+            "zip": "798 21",
+            "city": "\u010cehovice",
+            "district": "\u010cehovice"
+        },
+        "ds_id": "kdmbren"
+    },
+    "\u010cecho\u010dovice": {
+        "address": {
+            "street": "79",
+            "zip": "675 22",
+            "city": "\u010cecho\u010dovice",
+            "district": "\u010cecho\u010dovice"
+        },
+        "ds_id": "y5tarqz"
+    },
+    "\u010cecht\u00edn": {
+        "address": {
+            "street": "55",
+            "zip": "675 07",
+            "city": "\u010cecht\u00edn",
+            "district": "\u010cecht\u00edn"
+        },
+        "ds_id": "xqraubn"
+    },
+    "\u010cechy": {
+        "address": {
+            "street": "30",
+            "zip": "751 15",
+            "city": "\u010cechy",
+            "district": "\u010cechy"
+        },
+        "ds_id": "6uhatpp"
+    },
+    "\u010cechy pod Kos\u00ed\u0159em": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 289",
+            "zip": "798 58",
+            "city": "\u010cechy pod Kos\u00ed\u0159em",
+            "district": "\u010cechy pod Kos\u00ed\u0159em"
+        },
+        "ds_id": "6ndbe6k"
+    },
+    "\u010cej\u010d": {
+        "address": {
+            "street": "430",
+            "zip": "696 14",
+            "city": "\u010cej\u010d",
+            "district": "\u010cej\u010d"
+        },
+        "ds_id": "vu4be6r"
+    },
+    "\u010cejetice": {
+        "address": {
+            "street": "106",
+            "zip": "386 01",
+            "city": "\u010cejetice",
+            "district": "\u010cejetice"
+        },
+        "ds_id": "7e7auj4"
+    },
+    "\u010cejkovice": {
+        "address": {
+            "street": "64",
+            "zip": "373 41",
+            "city": "\u010cejkovice",
+            "district": "\u010cejkovice"
+        },
+        "ds_id": "ac5b7js"
+    },
+    "\u010cejov": {
+        "address": {
+            "street": "191",
+            "zip": "396 01",
+            "city": "\u010cejov",
+            "district": "\u010cejov"
+        },
+        "ds_id": "qdeanxt"
+    },
+    "\u010celadn\u00e1": {
+        "address": {
+            "street": "1",
+            "zip": "739 12",
+            "city": "\u010celadn\u00e1",
+            "district": "\u010celadn\u00e1"
+        },
+        "ds_id": "2hmb3aw"
+    },
+    "\u010cel\u010dice": {
+        "address": {
+            "street": "86",
+            "zip": "798 23",
+            "city": "\u010cel\u010dice",
+            "district": "\u010cel\u010dice"
+        },
+        "ds_id": "kehbnmd"
+    },
+    "\u010celechovice": {
+        "address": {
+            "street": "38",
+            "zip": "751 03",
+            "city": "\u010celechovice",
+            "district": "\u010celechovice"
+        },
+        "ds_id": "wd2bmkp"
+    },
+    "\u010celechovice Na Han\u00e9": {
+        "address": {
+            "street": "Hlavn\u00ed 9",
+            "zip": "798 16",
+            "city": "\u010celechovice na Han\u00e9",
+            "district": "\u010celechovice na Han\u00e9"
+        },
+        "ds_id": "vh4a9x5"
+    },
+    "\u010celistn\u00e1": {
+        "address": {
+            "street": "14",
+            "zip": "393 01",
+            "city": "\u010celistn\u00e1",
+            "district": "\u010celistn\u00e1"
+        },
+        "ds_id": "kmhayd7"
+    },
+    "\u010celo\u017enice": {
+        "address": {
+            "street": "3",
+            "zip": "696 51",
+            "city": "\u010celo\u017enice",
+            "district": "\u010celo\u017enice"
+        },
+        "ds_id": "729by96"
+    },
+    "\u010ceminy": {
+        "address": {
+            "street": "37",
+            "zip": "330 33",
+            "city": "\u010ceminy",
+            "district": "\u010ceminy"
+        },
+        "ds_id": "weza8gd"
+    },
+    "\u010cenkov": {
+        "address": {
+            "street": "66",
+            "zip": "262 23",
+            "city": "\u010cenkov",
+            "district": "\u010cenkov"
+        },
+        "ds_id": "7k8ajf8"
+    },
+    "\u010cenkovice": {
+        "address": {
+            "street": "168",
+            "zip": "561 64",
+            "city": "\u010cenkovice",
+            "district": "\u010cenkovice"
+        },
+        "ds_id": "izma4iw"
+    },
+    "\u010cenkov u Bechyn\u011b": {
+        "address": {
+            "street": "7",
+            "zip": "391 65",
+            "city": "\u010cenkov u Bechyn\u011b",
+            "district": "\u010cenkov u Bechyn\u011b"
+        },
+        "ds_id": "yeuauey"
+    },
+    "\u010ceperka": {
+        "address": {
+            "street": "B. N\u011bmcov\u00e9 1",
+            "zip": "533 45",
+            "city": "\u010ceperka",
+            "district": "\u010ceperka"
+        },
+        "ds_id": "khtbx7f"
+    },
+    "\u010cep\u00ed": {
+        "address": {
+            "street": "79",
+            "zip": "533 32",
+            "city": "\u010cep\u00ed",
+            "district": "\u010cep\u00ed"
+        },
+        "ds_id": "tswa4is"
+    },
+    "\u010cep\u0159ovice": {
+        "address": {
+            "street": "58",
+            "zip": "387 56",
+            "city": "\u010cep\u0159ovice",
+            "district": "\u010cep\u0159ovice"
+        },
+        "ds_id": "mzsam8q"
+    },
+    "\u010ceradice": {
+        "address": {
+            "street": "25",
+            "zip": "438 01",
+            "city": "\u010ceradice",
+            "district": "\u010ceradice"
+        },
+        "ds_id": "grhaqpp"
+    },
+    "\u010cer\u010dany": {
+        "address": {
+            "street": "V\u00e1clavsk\u00e1 36",
+            "zip": "257 22",
+            "city": "\u010cer\u010dany",
+            "district": "\u010cer\u010dany"
+        },
+        "ds_id": "k3tbe6v"
+    },
+    "\u010cerm\u00e1kovice": {
+        "address": {
+            "street": "52",
+            "zip": "671 73",
+            "city": "\u010cerm\u00e1kovice",
+            "district": "\u010cerm\u00e1kovice"
+        },
+        "ds_id": "msvaz5v"
+    },
+    "\u010cermn\u00e1": {
+        "address": {
+            "street": "40",
+            "zip": "543 77",
+            "city": "\u010cermn\u00e1",
+            "district": "\u010cermn\u00e1"
+        },
+        "ds_id": "3g9be59"
+    },
+    "\u010cermn\u00e1 nad Orlic\u00ed": {
+        "address": {
+            "street": "6",
+            "zip": "517 25",
+            "city": "\u010cermn\u00e1 nad Orlic\u00ed",
+            "district": "Velk\u00e1 \u010cermn\u00e1"
+        },
+        "ds_id": "spybe5d"
+    },
+    "\u010cermn\u00e1 Ve Slezsku": {
+        "address": {
+            "street": "81",
+            "zip": "749 01",
+            "city": "\u010cermn\u00e1 ve Slezsku",
+            "district": "\u010cermn\u00e1 ve Slezsku"
+        },
+        "ds_id": "dhjbmp9"
+    },
+    "\u010cern\u00e1": {
+        "address": {
+            "street": "87",
+            "zip": "594 42",
+            "city": "\u010cern\u00e1",
+            "district": "\u010cern\u00e1"
+        },
+        "ds_id": "rebbgxx"
+    },
+    "\u010cern\u00e1 u Bohdan\u010de": {
+        "address": {
+            "street": "156",
+            "zip": "533 41",
+            "city": "\u010cern\u00e1 u Bohdan\u010de",
+            "district": "\u010cern\u00e1 u Bohdan\u010de"
+        },
+        "ds_id": "4j7a4ip"
+    },
+    "\u010cernava": {
+        "address": {
+            "street": "80",
+            "zip": "362 21",
+            "city": "\u010cernava",
+            "district": "\u010cernava"
+        },
+        "ds_id": "4jeauyt"
+    },
+    "\u010cern\u00e1 Voda": {
+        "address": {
+            "street": "57",
+            "zip": "790 54",
+            "city": "\u010cern\u00e1 Voda",
+            "district": "\u010cern\u00e1 Voda"
+        },
+        "ds_id": "mkrbmkt"
+    },
+    "\u010cern\u00e1 v Po\u0161umav\u00ed": {
+        "address": {
+            "street": "46",
+            "zip": "382 23",
+            "city": "\u010cern\u00e1 v Po\u0161umav\u00ed",
+            "district": "\u010cern\u00e1 v Po\u0161umav\u00ed"
+        },
+        "ds_id": "k7wbyar"
+    },
+    "\u010cern\u010dice": {
+        "address": {
+            "street": "Jir\u00e1skova 223",
+            "zip": "439 01",
+            "city": "\u010cern\u010dice",
+            "district": "\u010cern\u010dice"
+        },
+        "ds_id": "tcbbks7"
+    },
+    "\u010cern\u011bves": {
+        "address": {
+            "street": "42",
+            "zip": "413 01",
+            "city": "\u010cern\u011bves",
+            "district": "\u010cern\u011bves"
+        },
+        "ds_id": "ct9bu6r"
+    },
+    "\u010cern\u00e9 Vod\u011brady": {
+        "address": {
+            "street": "n\u00e1m. l\u00edpy svobody 47",
+            "zip": "281 63",
+            "city": "\u010cern\u00e9 Vod\u011brady",
+            "district": "\u010cern\u00e9 Vod\u011brady"
+        },
+        "ds_id": "ccgakwb"
+    },
+    "\u010cern\u00ed\u010d": {
+        "address": {
+            "street": "10",
+            "zip": "588 56",
+            "city": "\u010cern\u00ed\u010d",
+            "district": "\u010cern\u00ed\u010d"
+        },
+        "ds_id": "mbkaygh"
+    },
+    "\u010cern\u00edkov": {
+        "address": {
+            "street": "20",
+            "zip": "345 06",
+            "city": "\u010cern\u00edkov",
+            "district": "\u010cern\u00edkov"
+        },
+        "ds_id": "uxkakdj"
+    },
+    "\u010cern\u00edkovice": {
+        "address": {
+            "street": "55",
+            "zip": "517 04",
+            "city": "\u010cern\u00edkovice",
+            "district": "\u010cern\u00edkovice"
+        },
+        "ds_id": "zhka6hh"
+    },
+    "\u010cern\u00edky": {
+        "address": {
+            "street": "43",
+            "zip": "289 15",
+            "city": "\u010cern\u00edky",
+            "district": "\u010cern\u00edky"
+        },
+        "ds_id": "um7j2un"
+    },
+    "\u010cern\u00edn": {
+        "address": {
+            "street": "49",
+            "zip": "671 53",
+            "city": "\u010cern\u00edn",
+            "district": "\u010cern\u00edn"
+        },
+        "ds_id": "3gabt9j"
+    },
+    "\u010cern\u00edny": {
+        "address": {
+            "street": "44",
+            "zip": "284 01",
+            "city": "\u010cern\u00edny",
+            "district": "\u010cern\u00edny"
+        },
+        "ds_id": "7iebgg5"
+    },
+    "\u010cerniv": {
+        "address": {
+            "street": "21",
+            "zip": "410 02",
+            "city": "\u010cerniv",
+            "district": "\u010cerniv"
+        },
+        "ds_id": "dimav8u"
+    },
+    "\u010cernot\u00edn": {
+        "address": {
+            "street": "1",
+            "zip": "753 68",
+            "city": "\u010cernot\u00edn",
+            "district": "\u010cernot\u00edn"
+        },
+        "ds_id": "99wbjmp"
+    },
+    "\u010cernou\u010dek": {
+        "address": {
+            "street": "50",
+            "zip": "413 01",
+            "city": "\u010cernou\u010dek",
+            "district": "\u010cernou\u010dek"
+        },
+        "ds_id": "2z6aqsq"
+    },
+    "\u010cernousy": {
+        "address": {
+            "street": "72",
+            "zip": "463 73",
+            "city": "\u010cernousy",
+            "district": "\u010cernousy"
+        },
+        "ds_id": "cjpb4ad"
+    },
+    "\u010cernov": {
+        "address": {
+            "street": "41",
+            "zip": "393 01",
+            "city": "\u010cernov",
+            "district": "\u010cernov"
+        },
+        "ds_id": "9w4arqv"
+    },
+    "\u010cer\u0148ovice": {
+        "address": {
+            "street": "72",
+            "zip": "330 36",
+            "city": "\u010cer\u0148ovice",
+            "district": "\u010cer\u0148ovice"
+        },
+        "ds_id": "es2b8jt"
+    },
+    "\u010cerno\u017eice": {
+        "address": {
+            "street": "Gen. Svobody 268",
+            "zip": "503 04",
+            "city": "\u010cerno\u017eice",
+            "district": "\u010cerno\u017eice"
+        },
+        "ds_id": "jnua7ei"
+    },
+    "\u010cernuc": {
+        "address": {
+            "street": "17",
+            "zip": "273 23",
+            "city": "\u010cernuc",
+            "district": "\u010cernuc"
+        },
+        "ds_id": "5fiajx9"
+    },
+    "\u010cernv\u00edr": {
+        "address": {
+            "street": "50",
+            "zip": "592 62",
+            "city": "\u010cernv\u00edr",
+            "district": "\u010cernv\u00edr"
+        },
+        "ds_id": "6pcaz2a"
+    },
+    "\u010cern\u00fd\u0161ovice": {
+        "address": {
+            "street": "57",
+            "zip": "391 65",
+            "city": "\u010cern\u00fd\u0161ovice",
+            "district": "\u010cern\u00fd\u0161ovice"
+        },
+        "ds_id": "mmsed3t"
+    },
+    "\u010cerven\u00e1 Lhota": {
+        "address": {
+            "street": "30",
+            "zip": "675 07",
+            "city": "\u010cerven\u00e1 Lhota",
+            "district": "\u010cerven\u00e1 Lhota"
+        },
+        "ds_id": "r7wa5w8"
+    },
+    "\u010cerven\u00e1 T\u0159eme\u0161n\u00e1": {
+        "address": {
+            "street": "47",
+            "zip": "508 01",
+            "city": "\u010cerven\u00e1 T\u0159eme\u0161n\u00e1",
+            "district": "\u010cerven\u00e1 T\u0159eme\u0161n\u00e1"
+        },
+        "ds_id": "pmga6r7"
+    },
+    "\u010cerven\u00e1 Voda": {
+        "address": {
+            "street": "268",
+            "zip": "561 61",
+            "city": "\u010cerven\u00e1 Voda",
+            "district": "\u010cerven\u00e1 Voda"
+        },
+        "ds_id": "kdqbe3j"
+    },
+    "\u010cerven\u00e9 Janovice": {
+        "address": {
+            "street": "102",
+            "zip": "285 42",
+            "city": "\u010cerven\u00e9 Janovice",
+            "district": "\u010cerven\u00e9 Janovice"
+        },
+        "ds_id": "3hxby25"
+    },
+    "\u010cerven\u00e9 Po\u0159\u00ed\u010d\u00ed": {
+        "address": {
+            "street": "27",
+            "zip": "340 12",
+            "city": "\u010cerven\u00e9 Po\u0159\u00ed\u010d\u00ed",
+            "district": "\u010cerven\u00e9 Po\u0159\u00ed\u010d\u00ed"
+        },
+        "ds_id": "6suanw6"
+    },
+    "\u010cervenka": {
+        "address": {
+            "street": "Svatoplukova 16",
+            "zip": "784 01",
+            "city": "\u010cervenka",
+            "district": "\u010cervenka"
+        },
+        "ds_id": "58nbumu"
+    },
+    "\u010cerven\u00fd Hr\u00e1dek": {
+        "address": {
+            "street": "14",
+            "zip": "380 01",
+            "city": "\u010cerven\u00fd Hr\u00e1dek",
+            "district": "\u010cerven\u00fd Hr\u00e1dek"
+        },
+        "ds_id": "3csb7dq"
+    },
+    "\u010cerven\u00fd \u00dajezd": {
+        "address": {
+            "street": "6",
+            "zip": "257 88",
+            "city": "\u010cerven\u00fd \u00dajezd",
+            "district": "\u010cerven\u00fd \u00dajezd"
+        },
+        "ds_id": "e8ubgrh"
+    },
+    "\u010cesk\u00e1": {
+        "address": {
+            "street": "26",
+            "zip": "664 31",
+            "city": "\u010cesk\u00e1",
+            "district": "\u010cesk\u00e1"
+        },
+        "ds_id": "fgmaz34"
+    },
+    "\u010cesk\u00e1 B\u0159\u00edza": {
+        "address": {
+            "street": "160",
+            "zip": "330 11",
+            "city": "\u010cesk\u00e1 B\u0159\u00edza",
+            "district": "\u010cesk\u00e1 B\u0159\u00edza"
+        },
+        "ds_id": "heqatja"
+    },
+    "\u010cesk\u00e1 Kubice": {
+        "address": {
+            "street": "82",
+            "zip": "345 32",
+            "city": "\u010cesk\u00e1 Kubice",
+            "district": "\u010cesk\u00e1 Kubice"
+        },
+        "ds_id": "acqanmn"
+    },
+    "\u010cesk\u00e1 Rybn\u00e1": {
+        "address": {
+            "street": "78",
+            "zip": "561 85",
+            "city": "\u010cesk\u00e1 Rybn\u00e1",
+            "district": "\u010cesk\u00e1 Rybn\u00e1"
+        },
+        "ds_id": "2g2a62z"
+    },
+    "\u010cesk\u00e1 Ves": {
+        "address": {
+            "street": "J\u00e1nsk\u00e9ho 341",
+            "zip": "790 81",
+            "city": "\u010cesk\u00e1 Ves",
+            "district": "\u010cesk\u00e1 Ves"
+        },
+        "ds_id": "dy5aqbf"
+    },
+    "\u010cesk\u00e9 Lhotice": {
+        "address": {
+            "street": "35",
+            "zip": "538 25",
+            "city": "\u010cesk\u00e9 Lhotice",
+            "district": "\u010cesk\u00e9 Lhotice"
+        },
+        "ds_id": "vnyb2mr"
+    },
+    "\u010cesk\u00e9 Libchavy": {
+        "address": {
+            "street": "210",
+            "zip": "561 14",
+            "city": "\u010cesk\u00e9 Libchavy",
+            "district": "\u010cesk\u00e9 Libchavy"
+        },
+        "ds_id": "ddga4jf"
+    },
+    "\u010cesk\u00e9 Petrovice": {
+        "address": {
+            "street": "27",
+            "zip": "564 01",
+            "city": "\u010cesk\u00e9 Petrovice",
+            "district": "\u010cesk\u00e9 Petrovice"
+        },
+        "ds_id": "m6ra4jb"
+    },
+    "\u010cesk\u00fd Ji\u0159et\u00edn": {
+        "address": {
+            "street": "171",
+            "zip": "436 01",
+            "city": "\u010cesk\u00fd Ji\u0159et\u00edn",
+            "district": "\u010cesk\u00fd Ji\u0159et\u00edn"
+        },
+        "ds_id": "uusbhei"
+    },
+    "\u010cesk\u00fd Rudolec": {
+        "address": {
+            "street": "123",
+            "zip": "378 83",
+            "city": "\u010cesk\u00fd Rudolec",
+            "district": "\u010cesk\u00fd Rudolec"
+        },
+        "ds_id": "upibz48"
+    },
+    "\u010cest\u00edn": {
+        "address": {
+            "street": "3",
+            "zip": "285 10",
+            "city": "\u010cest\u00edn",
+            "district": "\u010cest\u00edn"
+        },
+        "ds_id": "rdqakp3"
+    },
+    "\u010cestlice": {
+        "address": {
+            "street": "Pitkovick\u00e1 290",
+            "zip": "251 01",
+            "city": "\u010cestlice",
+            "district": "\u010cestlice"
+        },
+        "ds_id": "rmtbzat"
+    },
+    "\u010ce\u0161ov": {
+        "address": {
+            "street": "49",
+            "zip": "506 01",
+            "city": "\u010ce\u0161ov",
+            "district": "\u010ce\u0161ov"
+        },
+        "ds_id": "m7qapfx"
+    },
+    "\u010c\u00ed\u010denice": {
+        "address": {
+            "street": "79",
+            "zip": "387 71",
+            "city": "\u010c\u00ed\u010denice",
+            "district": "\u010c\u00ed\u010denice"
+        },
+        "ds_id": "pwib58i"
+    },
+    "\u010c\u00ed\u010dovice": {
+        "address": {
+            "street": "16",
+            "zip": "252 68",
+            "city": "\u010c\u00ed\u010dovice",
+            "district": "\u010c\u00ed\u010dovice"
+        },
+        "ds_id": "kqzak94"
+    },
+    "\u010c\u00edhal\u00edn": {
+        "address": {
+            "street": "68",
+            "zip": "675 07",
+            "city": "\u010c\u00edhal\u00edn",
+            "district": "\u010c\u00edhal\u00edn"
+        },
+        "ds_id": "vrhb4my"
+    },
+    "\u010c\u00edha\u0148": {
+        "address": {
+            "street": "26",
+            "zip": "341 42",
+            "city": "\u010c\u00edha\u0148",
+            "district": "\u010c\u00edha\u0148"
+        },
+        "ds_id": "gtnb337"
+    },
+    "\u010c\u00edho\u0161\u0165": {
+        "address": {
+            "street": "44",
+            "zip": "582 87",
+            "city": "\u010c\u00edho\u0161\u0165",
+            "district": "\u010c\u00edho\u0161\u0165"
+        },
+        "ds_id": "avab6ft"
+    },
+    "\u010cichalov": {
+        "address": {
+            "street": "55",
+            "zip": "364 52",
+            "city": "\u010cichalov",
+            "district": "\u010cichalov"
+        },
+        "ds_id": "buza7x5"
+    },
+    "\u010c\u00edchov": {
+        "address": {
+            "street": "60",
+            "zip": "675 21",
+            "city": "\u010c\u00edchov",
+            "district": "\u010c\u00edchov"
+        },
+        "ds_id": "euaaue7"
+    },
+    "\u010cikov": {
+        "address": {
+            "street": "68",
+            "zip": "675 78",
+            "city": "\u010cikov",
+            "district": "\u010cikov"
+        },
+        "ds_id": "cmma92p"
+    },
+    "\u010cil\u00e1": {
+        "address": {
+            "street": "6",
+            "zip": "338 08",
+            "city": "\u010cil\u00e1",
+            "district": "\u010cil\u00e1"
+        },
+        "ds_id": "xseay45"
+    },
+    "\u010cilec": {
+        "address": {
+            "street": "11",
+            "zip": "289 25",
+            "city": "\u010cilec",
+            "district": "\u010cilec"
+        },
+        "ds_id": "ww6a7cg"
+    },
+    "\u010c\u00edm": {
+        "address": {
+            "street": "16",
+            "zip": "262 03",
+            "city": "\u010c\u00edm",
+            "district": "\u010c\u00edm"
+        },
+        "ds_id": "xszbvc4"
+    },
+    "\u010cimelice": {
+        "address": {
+            "street": "51",
+            "zip": "398 04",
+            "city": "\u010cimelice",
+            "district": "\u010cimelice"
+        },
+        "ds_id": "jyvbrri"
+    },
+    "\u010c\u00edm\u011b\u0159": {
+        "address": {
+            "street": "12",
+            "zip": "378 32",
+            "city": "\u010c\u00edm\u011b\u0159",
+            "district": "\u010c\u00edm\u011b\u0159"
+        },
+        "ds_id": "328ed26"
+    },
+    "\u010c\u00edmice": {
+        "address": {
+            "street": "63",
+            "zip": "342 01",
+            "city": "\u010c\u00edmice",
+            "district": "\u010c\u00edmice"
+        },
+        "ds_id": "9m9bxvq"
+    },
+    "\u010cin\u011bves": {
+        "address": {
+            "street": "250",
+            "zip": "289 01",
+            "city": "\u010cin\u011bves",
+            "district": "\u010cin\u011bves"
+        },
+        "ds_id": "8g6aw4t"
+    },
+    "\u010cisovice": {
+        "address": {
+            "street": "4",
+            "zip": "252 04",
+            "city": "\u010cisovice",
+            "district": "\u010cisovice"
+        },
+        "ds_id": "fsjbwr7"
+    },
+    "\u010cist\u00e1": {
+        "address": {
+            "street": "376",
+            "zip": "569 56",
+            "city": "\u010cist\u00e1",
+            "district": "\u010cist\u00e1"
+        },
+        "ds_id": "wx2a4j7"
+    },
+    "\u010cist\u00e1 u Horek": {
+        "address": {
+            "street": "152",
+            "zip": "512 35",
+            "city": "\u010cist\u00e1 u Horek",
+            "district": "\u010cist\u00e1 u Horek"
+        },
+        "ds_id": "zvabvmz"
+    },
+    "\u010ci\u017eice": {
+        "address": {
+            "street": "128",
+            "zip": "332 09",
+            "city": "\u010ci\u017eice",
+            "district": "\u010ci\u017eice"
+        },
+        "ds_id": "8y8a8bz"
+    },
+    "\u010c\u00ed\u017ekov": {
+        "address": {
+            "street": "53",
+            "zip": "393 01",
+            "city": "\u010c\u00ed\u017ekov",
+            "district": "\u010c\u00ed\u017ekov"
+        },
+        "ds_id": "4btany4"
+    },
+    "\u010c\u00ed\u017ekovice": {
+        "address": {
+            "street": "Jir\u00e1skova 143",
+            "zip": "411 12",
+            "city": "\u010c\u00ed\u017ekovice",
+            "district": "\u010c\u00ed\u017ekovice"
+        },
+        "ds_id": "8axbuws"
+    },
+    "\u010c\u00ed\u017ekrajice": {
+        "address": {
+            "street": "13",
+            "zip": "374 01",
+            "city": "\u010c\u00ed\u017ekrajice",
+            "district": "\u010c\u00ed\u017ekrajice"
+        },
+        "ds_id": "k8pb7ui"
+    },
+    "\u010c\u00ed\u017eov": {
+        "address": {
+            "street": "3",
+            "zip": "586 01",
+            "city": "\u010c\u00ed\u017eov",
+            "district": "\u010c\u00ed\u017eov"
+        },
+        "ds_id": "wfsbf24"
+    },
+    "\u010c\u00ed\u017eov\u00e1": {
+        "address": {
+            "street": "75",
+            "zip": "398 31",
+            "city": "\u010c\u00ed\u017eov\u00e1",
+            "district": "\u010c\u00ed\u017eov\u00e1"
+        },
+        "ds_id": "3tdbn56"
+    },
+    "\u010ckyn\u011b": {
+        "address": {
+            "street": "2",
+            "zip": "384 81",
+            "city": "\u010ckyn\u011b",
+            "district": "\u010ckyn\u011b"
+        },
+        "ds_id": "dddbewf"
+    },
+    "\u010clunek": {
+        "address": {
+            "street": "21",
+            "zip": "378 61",
+            "city": "\u010clunek",
+            "district": "\u010clunek"
+        },
+        "ds_id": "9sfb6nf"
+    },
+    "\u010cmel\u00edny": {
+        "address": {
+            "street": "32",
+            "zip": "335 01",
+            "city": "\u010cmel\u00edny",
+            "district": "\u010cmel\u00edny"
+        },
+        "ds_id": "8emau4i"
+    },
+    "\u010ctve\u0159\u00edn": {
+        "address": {
+            "street": "95",
+            "zip": "463 45",
+            "city": "\u010ctve\u0159\u00edn",
+            "district": "\u010ctve\u0159\u00edn"
+        },
+        "ds_id": "32ybu5x"
+    },
+    "\u010cty\u0159koly": {
+        "address": {
+            "street": "70",
+            "zip": "257 22",
+            "city": "\u010cty\u0159koly",
+            "district": "\u010cty\u0159koly"
+        },
+        "ds_id": "49hau35"
+    },
+    "\u010cu\u010dice": {
+        "address": {
+            "street": "131",
+            "zip": "664 91",
+            "city": "\u010cu\u010dice",
+            "district": "\u010cu\u010dice"
+        },
+        "ds_id": "p9waz3y"
+    },
+    "Dale\u010d\u00edn": {
+        "address": {
+            "street": "30",
+            "zip": "592 41",
+            "city": "Dale\u010d\u00edn",
+            "district": "Dale\u010d\u00edn"
+        },
+        "ds_id": "9rrbkrk"
+    },
+    "Dalek\u00e9 Du\u0161n\u00edky": {
+        "address": {
+            "street": "25",
+            "zip": "263 01",
+            "city": "Dalek\u00e9 Du\u0161n\u00edky",
+            "district": "Dalek\u00e9 Du\u0161n\u00edky"
+        },
+        "ds_id": "igwjdyy"
+    },
+    "Dalovice": {
+        "address": {
+            "street": "94",
+            "zip": "293 01",
+            "city": "Dalovice",
+            "district": "Dalovice"
+        },
+        "ds_id": "d7jbx5m"
+    },
+    "Dambo\u0159ice": {
+        "address": {
+            "street": "Pod Kostelem 69",
+            "zip": "696 35",
+            "city": "Dambo\u0159ice",
+            "district": "Dambo\u0159ice"
+        },
+        "ds_id": "tstbevs"
+    },
+    "Damnice": {
+        "address": {
+            "street": "141",
+            "zip": "671 78",
+            "city": "Damnice",
+            "district": "Damnice"
+        },
+        "ds_id": "nceb4tp"
+    },
+    "Damn\u00edkov": {
+        "address": {
+            "street": "9",
+            "zip": "561 23",
+            "city": "Damn\u00edkov",
+            "district": "Damn\u00edkov"
+        },
+        "ds_id": "ivxb4c6"
+    },
+    "Da\u0148kovice": {
+        "address": {
+            "street": "9",
+            "zip": "592 03",
+            "city": "Da\u0148kovice",
+            "district": "Da\u0148kovice"
+        },
+        "ds_id": "h7cavnt"
+    },
+    "Darkovice": {
+        "address": {
+            "street": "Dlouh\u00e1 112",
+            "zip": "747 17",
+            "city": "Darkovice",
+            "district": "Darkovice"
+        },
+        "ds_id": "6sray99"
+    },
+    "Daskab\u00e1t": {
+        "address": {
+            "street": "35",
+            "zip": "779 00",
+            "city": "Daskab\u00e1t",
+            "district": "Daskab\u00e1t"
+        },
+        "ds_id": "7aqbktg"
+    },
+    "Dasnice": {
+        "address": {
+            "street": "42",
+            "zip": "357 09",
+            "city": "Dasnice",
+            "district": "Dasnice"
+        },
+        "ds_id": "4b8b7w8"
+    },
+    "Dasn\u00fd": {
+        "address": {
+            "street": "17",
+            "zip": "373 41",
+            "city": "Dasn\u00fd",
+            "district": "Dasn\u00fd"
+        },
+        "ds_id": "zkfjd2k"
+    },
+    "D\u011b\u010dany": {
+        "address": {
+            "street": "29",
+            "zip": "411 15",
+            "city": "D\u011b\u010dany",
+            "district": "D\u011b\u010dany"
+        },
+        "ds_id": "jhvaq3x"
+    },
+    "D\u011bdice": {
+        "address": {
+            "street": "40",
+            "zip": "675 41",
+            "city": "D\u011bdice",
+            "district": "D\u011bdice"
+        },
+        "ds_id": "xe5bswp"
+    },
+    "D\u011bdov\u00e1": {
+        "address": {
+            "street": "38",
+            "zip": "539 01",
+            "city": "D\u011bdov\u00e1",
+            "district": "D\u011bdov\u00e1"
+        },
+        "ds_id": "7rba4j2"
+    },
+    "Deht\u00e1\u0159e": {
+        "address": {
+            "street": "4",
+            "zip": "393 01",
+            "city": "Deht\u00e1\u0159e",
+            "district": "Deht\u00e1\u0159e"
+        },
+        "ds_id": "xjebpcc"
+    },
+    "D\u011bhylov": {
+        "address": {
+            "street": "V\u00fdstavn\u00ed 179",
+            "zip": "747 94",
+            "city": "D\u011bhylov",
+            "district": "D\u011bhylov"
+        },
+        "ds_id": "aq7bmb2"
+    },
+    "D\u011bkanovice": {
+        "address": {
+            "street": "17",
+            "zip": "257 68",
+            "city": "D\u011bkanovice",
+            "district": "D\u011bkanovice"
+        },
+        "ds_id": "kb6axx2"
+    },
+    "D\u011bkov": {
+        "address": {
+            "street": "91",
+            "zip": "270 04",
+            "city": "D\u011bkov",
+            "district": "D\u011bkov"
+        },
+        "ds_id": "bjgbt73"
+    },
+    "D\u011bpoltovice": {
+        "address": {
+            "street": "44",
+            "zip": "362 25",
+            "city": "D\u011bpoltovice",
+            "district": "D\u011bpoltovice"
+        },
+        "ds_id": "znjbkuz"
+    },
+    "De\u0161n\u00e1": {
+        "address": {
+            "street": "88",
+            "zip": "763 15",
+            "city": "De\u0161n\u00e1",
+            "district": "De\u0161n\u00e1"
+        },
+        "ds_id": "46yas3w"
+    },
+    "De\u0161ov": {
+        "address": {
+            "street": "147",
+            "zip": "675 33",
+            "city": "De\u0161ov",
+            "district": "De\u0161ov"
+        },
+        "ds_id": "vb9awdu"
+    },
+    "De\u0161tn\u00e9 v Orlick\u00fdch Hor\u00e1ch": {
+        "address": {
+            "street": "61",
+            "zip": "517 91",
+            "city": "De\u0161tn\u00e9 v Orlick\u00fdch hor\u00e1ch",
+            "district": "De\u0161tn\u00e9 v Orlick\u00fdch hor\u00e1ch"
+        },
+        "ds_id": "e6zbyn6"
+    },
+    "De\u0161tnice": {
+        "address": {
+            "street": "112",
+            "zip": "438 01",
+            "city": "De\u0161tnice",
+            "district": "De\u0161tnice"
+        },
+        "ds_id": "k8sbvhg"
+    },
+    "D\u011btenice": {
+        "address": {
+            "street": "141",
+            "zip": "507 24",
+            "city": "D\u011btenice",
+            "district": "D\u011btenice"
+        },
+        "ds_id": "6gcbqag"
+    },
+    "D\u011btkovice": {
+        "address": {
+            "street": "73",
+            "zip": "798 04",
+            "city": "D\u011btkovice",
+            "district": "D\u011btkovice"
+        },
+        "ds_id": "hafaw5j"
+    },
+    "D\u011btmarovice": {
+        "address": {
+            "street": "27",
+            "zip": "735 71",
+            "city": "D\u011btmarovice",
+            "district": "D\u011btmarovice"
+        },
+        "ds_id": "2hqbqxt"
+    },
+    "D\u011bt\u0159ichov": {
+        "address": {
+            "street": "2",
+            "zip": "464 01",
+            "city": "D\u011bt\u0159ichov",
+            "district": "D\u011bt\u0159ichov"
+        },
+        "ds_id": "rr7bjdf"
+    },
+    "D\u011bt\u0159ichov nad Byst\u0159ic\u00ed": {
+        "address": {
+            "street": "58",
+            "zip": "793 03",
+            "city": "D\u011bt\u0159ichov nad Byst\u0159ic\u00ed",
+            "district": "D\u011bt\u0159ichov nad Byst\u0159ic\u00ed"
+        },
+        "ds_id": "q4aawkx"
+    },
+    "D\u011bt\u0159ichov u Moravsk\u00e9 T\u0159ebov\u00e9": {
+        "address": {
+            "street": "82",
+            "zip": "571 01",
+            "city": "D\u011bt\u0159ichov u Moravsk\u00e9 T\u0159ebov\u00e9",
+            "district": "D\u011bt\u0159ichov u Moravsk\u00e9 T\u0159ebov\u00e9"
+        },
+        "ds_id": "z46a4kk"
+    },
+    "D\u00edly": {
+        "address": {
+            "street": "75",
+            "zip": "344 01",
+            "city": "D\u00edly",
+            "district": "D\u00edly"
+        },
+        "ds_id": "5xkau6f"
+    },
+    "D\u00edrn\u00e1": {
+        "address": {
+            "street": "38",
+            "zip": "391 27",
+            "city": "D\u00edrn\u00e1",
+            "district": "D\u00edrn\u00e1"
+        },
+        "ds_id": "zeybeua"
+    },
+    "Div\u00e1ky": {
+        "address": {
+            "street": "110",
+            "zip": "691 71",
+            "city": "Div\u00e1ky",
+            "district": "Div\u00e1ky"
+        },
+        "ds_id": "4weaz7h"
+    },
+    "D\u00edv\u010dice": {
+        "address": {
+            "street": "41",
+            "zip": "373 48",
+            "city": "D\u00edv\u010dice",
+            "district": "D\u00edv\u010dice"
+        },
+        "ds_id": "pbub5c8"
+    },
+    "D\u00edv\u010d\u00ed Hrad": {
+        "address": {
+            "street": "64",
+            "zip": "793 99",
+            "city": "D\u00edv\u010d\u00ed Hrad",
+            "district": "D\u00edv\u010d\u00ed Hrad"
+        },
+        "ds_id": "9xkbybu"
+    },
+    "D\u00edv\u010d\u00ed Kopy": {
+        "address": {
+            "street": "8",
+            "zip": "378 42",
+            "city": "D\u00edv\u010d\u00ed Kopy",
+            "district": "D\u00edv\u010d\u00ed Kopy"
+        },
+        "ds_id": "8a7edtz"
+    },
+    "Divec": {
+        "address": {
+            "street": "41",
+            "zip": "500 03",
+            "city": "Divec",
+            "district": "Divec"
+        },
+        "ds_id": "w2ja6je"
+    },
+    "Dla\u017ekovice": {
+        "address": {
+            "street": "62",
+            "zip": "411 15",
+            "city": "Dla\u017ekovice",
+            "district": "Dla\u017ekovice"
+        },
+        "ds_id": "dsbarvf"
+    },
+    "Dla\u017eov": {
+        "address": {
+            "street": "27",
+            "zip": "340 21",
+            "city": "Dla\u017eov",
+            "district": "Dla\u017eov"
+        },
+        "ds_id": "hvqbt9u"
+    },
+    "Dlouh\u00e1 Brtnice": {
+        "address": {
+            "street": "57",
+            "zip": "588 34",
+            "city": "Dlouh\u00e1 Brtnice",
+            "district": "Dlouh\u00e1 Brtnice"
+        },
+        "ds_id": "7wda8jh"
+    },
+    "Dlouh\u00e1 Lhota": {
+        "address": {
+            "street": "29",
+            "zip": "294 05",
+            "city": "Dlouh\u00e1 Lhota",
+            "district": "Dlouh\u00e1 Lhota"
+        },
+        "ds_id": "gnyanpg"
+    },
+    "Dlouh\u00e1 Lou\u010dka": {
+        "address": {
+            "street": "97",
+            "zip": "569 43",
+            "city": "Dlouh\u00e1 Lou\u010dka",
+            "district": "Dlouh\u00e1 Lou\u010dka"
+        },
+        "ds_id": "awfa4mc"
+    },
+    "Dlouh\u00e1 Str\u00e1\u0148": {
+        "address": {
+            "street": "47",
+            "zip": "792 01",
+            "city": "Dlouh\u00e1 Str\u00e1\u0148",
+            "district": "Dlouh\u00e1 Str\u00e1\u0148"
+        },
+        "ds_id": "t2bbw8k"
+    },
+    "Dlouh\u00e1 T\u0159ebov\u00e1": {
+        "address": {
+            "street": "\u00dasteck\u00e1 235",
+            "zip": "561 17",
+            "city": "Dlouh\u00e1 T\u0159ebov\u00e1",
+            "district": "Dlouh\u00e1 T\u0159ebov\u00e1"
+        },
+        "ds_id": "4h9bwsc"
+    },
+    "Dlouh\u00e1 Ves": {
+        "address": {
+            "street": "155",
+            "zip": "342 01",
+            "city": "Dlouh\u00e1 Ves",
+            "district": "Dlouh\u00e1 Ves"
+        },
+        "ds_id": "5rab5bi"
+    },
+    "Dlouh\u00e9": {
+        "address": {
+            "street": "10",
+            "zip": "592 55",
+            "city": "Dlouh\u00e9",
+            "district": "Dlouh\u00e9"
+        },
+        "ds_id": "rqfbqxx"
+    },
+    "Dlouhomilov": {
+        "address": {
+            "street": "138",
+            "zip": "789 01",
+            "city": "Dlouhomilov",
+            "district": "Dlouhomilov"
+        },
+        "ds_id": "c5pbi9t"
+    },
+    "Dlouho\u0148ovice": {
+        "address": {
+            "street": "Hlavn\u00ed 29",
+            "zip": "564 01",
+            "city": "Dlouho\u0148ovice",
+            "district": "Dlouho\u0148ovice"
+        },
+        "ds_id": "jpqa4m9"
+    },
+    "Dlouhopolsko": {
+        "address": {
+            "street": "Pod\u011bbradsk\u00e1 24",
+            "zip": "289 03",
+            "city": "Dlouhopolsko",
+            "district": "Dlouhopolsko"
+        },
+        "ds_id": "pdyaned"
+    },
+    "Dlouh\u00fd Most": {
+        "address": {
+            "street": "95",
+            "zip": "463 12",
+            "city": "Dlouh\u00fd Most",
+            "district": "Dlouh\u00fd Most"
+        },
+        "ds_id": "8fzbywa"
+    },
+    "Dlouh\u00fd \u00dajezd": {
+        "address": {
+            "street": "170",
+            "zip": "347 01",
+            "city": "Dlouh\u00fd \u00dajezd",
+            "district": "Dlouh\u00fd \u00dajezd"
+        },
+        "ds_id": "yp7auu6"
+    },
+    "Dne\u0161ice": {
+        "address": {
+            "street": "53",
+            "zip": "334 43",
+            "city": "Dne\u0161ice",
+            "district": "Dne\u0161ice"
+        },
+        "ds_id": "8efbhsm"
+    },
+    "Dobelice": {
+        "address": {
+            "street": "77",
+            "zip": "672 01",
+            "city": "Dobelice",
+            "district": "Dobelice"
+        },
+        "ds_id": "s9va8fy"
+    },
+    "Dobev": {
+        "address": {
+            "street": "32",
+            "zip": "397 01",
+            "city": "Dobev",
+            "district": "Star\u00e1 Dobev"
+        },
+        "ds_id": "6b6bhhr"
+    },
+    "Dobkovice": {
+        "address": {
+            "street": "101",
+            "zip": "407 03",
+            "city": "Dobkovice",
+            "district": "Dobkovice"
+        },
+        "ds_id": "2r4b6he"
+    },
+    "Dobr\u00e1": {
+        "address": {
+            "street": "230",
+            "zip": "739 51",
+            "city": "Dobr\u00e1",
+            "district": "Dobr\u00e1"
+        },
+        "ds_id": "625betr"
+    },
+    "Dobratice": {
+        "address": {
+            "street": "49",
+            "zip": "739 51",
+            "city": "Dobratice",
+            "district": "Dobratice"
+        },
+        "ds_id": "9pzbsb6"
+    },
+    "Dobr\u00e1 Voda": {
+        "address": {
+            "street": "45",
+            "zip": "393 01",
+            "city": "Dobr\u00e1 Voda",
+            "district": "Dobr\u00e1 Voda"
+        },
+        "ds_id": "c44anzw"
+    },
+    "Dobr\u00e1 Voda u \u010cesk\u00fdch Bud\u011bjovic": {
+        "address": {
+            "street": "U Domova d\u016fchodc\u016f 1356",
+            "zip": "373 16",
+            "city": "Dobr\u00e1 Voda u \u010cesk\u00fdch Bud\u011bjovic",
+            "district": "Dobr\u00e1 Voda u \u010cesk\u00fdch Bud\u011bjovic"
+        },
+        "ds_id": "nphbxpc"
+    },
+    "Dobr\u00e1 Voda u Ho\u0159ic": {
+        "address": {
+            "street": "131",
+            "zip": "507 73",
+            "city": "Dobr\u00e1 Voda u Ho\u0159ic",
+            "district": "Dobr\u00e1 Voda u Ho\u0159ic"
+        },
+        "ds_id": "whfbktk"
+    },
+    "Dobr\u00e1 Voda u Pacova": {
+        "address": {
+            "street": "31",
+            "zip": "395 01",
+            "city": "Dobr\u00e1 Voda u Pacova",
+            "district": "Dobr\u00e1 Voda u Pacova"
+        },
+        "ds_id": "y3sbwbr"
+    },
+    "Dobr\u010dice": {
+        "address": {
+            "street": "4",
+            "zip": "750 02",
+            "city": "Dobr\u010dice",
+            "district": "Dobr\u010dice"
+        },
+        "ds_id": "mwsb7xu"
+    },
+    "Dobr\u00e9 Pole": {
+        "address": {
+            "street": "79",
+            "zip": "691 81",
+            "city": "Dobr\u00e9 Pole",
+            "district": "Dobr\u00e9 Pole"
+        },
+        "ds_id": "iteb2cv"
+    },
+    "Dobrkovice": {
+        "address": {
+            "street": "61",
+            "zip": "763 07",
+            "city": "Dobrkovice",
+            "district": "Dobrkovice"
+        },
+        "ds_id": "83xamm3"
+    },
+    "Dobrn\u00e1": {
+        "address": {
+            "street": "26",
+            "zip": "407 41",
+            "city": "Dobrn\u00e1",
+            "district": "Dobrn\u00e1"
+        },
+        "ds_id": "im9b8pj"
+    },
+    "Dobro\u010dkovice": {
+        "address": {
+            "street": "92",
+            "zip": "683 33",
+            "city": "Dobro\u010dkovice",
+            "district": "Dobro\u010dkovice"
+        },
+        "ds_id": "rw9bpdw"
+    },
+    "Dobro\u010dovice": {
+        "address": {
+            "street": "38",
+            "zip": "250 82",
+            "city": "Dobro\u010dovice",
+            "district": "Dobro\u010dovice"
+        },
+        "ds_id": "4rdj2r7"
+    },
+    "Dobroho\u0161\u0165": {
+        "address": {
+            "street": "18",
+            "zip": "380 01",
+            "city": "Dobroho\u0161\u0165",
+            "district": "Dobroho\u0161\u0165"
+        },
+        "ds_id": "nbib7kz"
+    },
+    "Dobrochov": {
+        "address": {
+            "street": "43",
+            "zip": "798 07",
+            "city": "Dobrochov",
+            "district": "Dobrochov"
+        },
+        "ds_id": "9jzawu9"
+    },
+    "Dobrom\u011b\u0159ice": {
+        "address": {
+            "street": "Pra\u017esk\u00e1 53",
+            "zip": "440 01",
+            "city": "Dobrom\u011b\u0159ice",
+            "district": "Dobrom\u011b\u0159ice"
+        },
+        "ds_id": "hknausg"
+    },
+    "Dobromilice": {
+        "address": {
+            "street": "6",
+            "zip": "798 25",
+            "city": "Dobromilice",
+            "district": "Dobromilice"
+        },
+        "ds_id": "xa5axft"
+    },
+    "Dobronice u Bechyn\u011b": {
+        "address": {
+            "street": "90",
+            "zip": "391 65",
+            "city": "Dobronice u Bechyn\u011b",
+            "district": "Dobronice u Bechyn\u011b"
+        },
+        "ds_id": "nicb52w"
+    },
+    "Dobron\u00edn": {
+        "address": {
+            "street": "Polensk\u00e1 221",
+            "zip": "588 12",
+            "city": "Dobron\u00edn",
+            "district": "Dobron\u00edn"
+        },
+        "ds_id": "ip4bqsv"
+    },
+    "Dobroslavice": {
+        "address": {
+            "street": "Slezsk\u00e1 260",
+            "zip": "747 94",
+            "city": "Dobroslavice",
+            "district": "Dobroslavice"
+        },
+        "ds_id": "fj2aza4"
+    },
+    "Dobroutov": {
+        "address": {
+            "street": "78",
+            "zip": "588 13",
+            "city": "Dobroutov",
+            "district": "Dobroutov"
+        },
+        "ds_id": "7txat87"
+    },
+    "Dobrov\u00edtov": {
+        "address": {
+            "street": "2",
+            "zip": "286 01",
+            "city": "Dobrov\u00edtov",
+            "district": "Dobrov\u00edtov"
+        },
+        "ds_id": "8vzakeu"
+    },
+    "Dobrov\u00edz": {
+        "address": {
+            "street": "Pra\u017esk\u00e1 13",
+            "zip": "252 61",
+            "city": "Dobrov\u00edz",
+            "district": "Dobrov\u00edz"
+        },
+        "ds_id": "viaak9w"
+    },
+    "Dobr\u0161\u00edn": {
+        "address": {
+            "street": "36",
+            "zip": "342 01",
+            "city": "Dobr\u0161\u00edn",
+            "district": "Dobr\u0161\u00edn"
+        },
+        "ds_id": "ifibxwg"
+    },
+    "Dob\u0159ejovice": {
+        "address": {
+            "street": "Na N\u00e1vsi 26",
+            "zip": "251 01",
+            "city": "Dob\u0159ejovice",
+            "district": "Dob\u0159ejovice"
+        },
+        "ds_id": "n7ua9vb"
+    },
+    "Dob\u0159e\u0148": {
+        "address": {
+            "street": "30",
+            "zip": "277 23",
+            "city": "Dob\u0159e\u0148",
+            "district": "Jest\u0159ebice"
+        },
+        "ds_id": "gf6ap9i"
+    },
+    "Dob\u0159\u00ed\u010d": {
+        "address": {
+            "street": "29",
+            "zip": "330 05",
+            "city": "Dob\u0159\u00ed\u010d",
+            "district": "Dob\u0159\u00ed\u010d"
+        },
+        "ds_id": "g7qbhtf"
+    },
+    "Dob\u0159ichov": {
+        "address": {
+            "street": "206",
+            "zip": "289 11",
+            "city": "Dob\u0159ichov",
+            "district": "Dob\u0159ichov"
+        },
+        "ds_id": "b77aqgp"
+    },
+    "Dob\u0159\u00edkov": {
+        "address": {
+            "street": "29",
+            "zip": "566 01",
+            "city": "Dob\u0159\u00edkov",
+            "district": "Dob\u0159\u00edkov"
+        },
+        "ds_id": "5wibkmu"
+    },
+    "Dob\u0159\u00ed\u0148": {
+        "address": {
+            "street": "K P\u0159\u00edvozu 55",
+            "zip": "413 01",
+            "city": "Dob\u0159\u00ed\u0148",
+            "district": "Dob\u0159\u00ed\u0148"
+        },
+        "ds_id": "mvea354"
+    },
+    "Dob\u0159\u00ednsko": {
+        "address": {
+            "street": "60",
+            "zip": "672 01",
+            "city": "Dob\u0159\u00ednsko",
+            "district": "Dob\u0159\u00ednsko"
+        },
+        "ds_id": "anra8yq"
+    },
+    "Dob\u0159\u00edv": {
+        "address": {
+            "street": "305",
+            "zip": "338 44",
+            "city": "Dob\u0159\u00edv",
+            "district": "Dob\u0159\u00edv"
+        },
+        "ds_id": "8jpay42"
+    },
+    "Dob\u0161ice": {
+        "address": {
+            "street": "Brn\u011bnsk\u00e1 70",
+            "zip": "671 82",
+            "city": "Dob\u0161ice",
+            "district": "Dob\u0161ice"
+        },
+        "ds_id": "ngyaz88"
+    },
+    "Dob\u0161\u00edn": {
+        "address": {
+            "street": "51",
+            "zip": "294 04",
+            "city": "Dob\u0161\u00edn",
+            "district": "Dob\u0161\u00edn"
+        },
+        "ds_id": "8a8avvk"
+    },
+    "Doksany": {
+        "address": {
+            "street": "108",
+            "zip": "411 82",
+            "city": "Doksany",
+            "district": "Doksany"
+        },
+        "ds_id": "btfaqtg"
+    },
+    "Dol\u00e1nky nad Oh\u0159\u00ed": {
+        "address": {
+            "street": "31",
+            "zip": "413 01",
+            "city": "Dol\u00e1nky nad Oh\u0159\u00ed",
+            "district": "Dol\u00e1nky nad Oh\u0159\u00ed"
+        },
+        "ds_id": "36ja7ns"
+    },
+    "Dolany": {
+        "address": {
+            "street": "188",
+            "zip": "339 01",
+            "city": "Dolany",
+            "district": "Dolany"
+        },
+        "ds_id": "agib6sp"
+    },
+    "Dolany nad Vltavou": {
+        "address": {
+            "street": "Vltavsk\u00e1 95",
+            "zip": "278 01",
+            "city": "Dolany nad Vltavou",
+            "district": "Dolany nad Vltavou"
+        },
+        "ds_id": "h32aj4s"
+    },
+    "Dolce": {
+        "address": {
+            "street": "100",
+            "zip": "334 01",
+            "city": "Dolce",
+            "district": "Dolce"
+        },
+        "ds_id": "3u2btwq"
+    },
+    "Dolenice": {
+        "address": {
+            "street": "1",
+            "zip": "671 78",
+            "city": "Dolenice",
+            "district": "Dolenice"
+        },
+        "ds_id": "w99az84"
+    },
+    "Doln\u00ed Be\u010dva": {
+        "address": {
+            "street": "340",
+            "zip": "756 55",
+            "city": "Doln\u00ed Be\u010dva",
+            "district": "Doln\u00ed Be\u010dva"
+        },
+        "ds_id": "rnsbj6f"
+    },
+    "Doln\u00ed B\u011bl\u00e1": {
+        "address": {
+            "street": "31",
+            "zip": "331 52",
+            "city": "Doln\u00ed B\u011bl\u00e1",
+            "district": "Doln\u00ed B\u011bl\u00e1"
+        },
+        "ds_id": "p7ybubn"
+    },
+    "Doln\u00ed Be\u0159kovice": {
+        "address": {
+            "street": "Kl\u00e1\u0161tern\u00ed 110",
+            "zip": "277 01",
+            "city": "Doln\u00ed Be\u0159kovice",
+            "district": "Doln\u00ed Be\u0159kovice"
+        },
+        "ds_id": "a3bbvbx"
+    },
+    "Doln\u00ed Bezd\u011bkov": {
+        "address": {
+            "street": "9",
+            "zip": "538 62",
+            "city": "Doln\u00ed Bezd\u011bkov",
+            "district": "Doln\u00ed Bezd\u011bkov"
+        },
+        "ds_id": "3kra3z6"
+    },
+    "Doln\u00ed Bojanovice": {
+        "address": {
+            "street": "Hlavn\u00ed 383",
+            "zip": "696 17",
+            "city": "Doln\u00ed Bojanovice",
+            "district": "Doln\u00ed Bojanovice"
+        },
+        "ds_id": "tc4buc3"
+    },
+    "Doln\u00ed Brann\u00e1": {
+        "address": {
+            "street": "256",
+            "zip": "543 62",
+            "city": "Doln\u00ed Brann\u00e1",
+            "district": "Doln\u00ed Brann\u00e1"
+        },
+        "ds_id": "8hxa6nm"
+    },
+    "Doln\u00ed Brusnice": {
+        "address": {
+            "street": "17",
+            "zip": "544 72",
+            "city": "Doln\u00ed Brusnice",
+            "district": "Doln\u00ed Brusnice"
+        },
+        "ds_id": "pg4bknj"
+    },
+    "Doln\u00ed B\u0159e\u017eany": {
+        "address": {
+            "street": "5. Kv\u011btna 78",
+            "zip": "252 41",
+            "city": "Doln\u00ed B\u0159e\u017eany",
+            "district": "Doln\u00ed B\u0159e\u017eany"
+        },
+        "ds_id": "9h6berv"
+    },
+    "Doln\u00ed Dobrou\u010d": {
+        "address": {
+            "street": "380",
+            "zip": "561 02",
+            "city": "Doln\u00ed Dobrou\u010d",
+            "district": "Doln\u00ed Dobrou\u010d"
+        },
+        "ds_id": "yz2b3vb"
+    },
+    "Doln\u00ed Domaslavice": {
+        "address": {
+            "street": "4",
+            "zip": "739 38",
+            "city": "Doln\u00ed Domaslavice",
+            "district": "Doln\u00ed Domaslavice"
+        },
+        "ds_id": "rx2bwxp"
+    },
+    "Doln\u00ed Dub\u0148any": {
+        "address": {
+            "street": "40",
+            "zip": "671 73",
+            "city": "Doln\u00ed Dub\u0148any",
+            "district": "Doln\u00ed Dub\u0148any"
+        },
+        "ds_id": "t5qbwfk"
+    },
+    "Doln\u00ed Dunajovice": {
+        "address": {
+            "street": "Zahradn\u00ed 613",
+            "zip": "691 85",
+            "city": "Doln\u00ed Dunajovice",
+            "district": "Doln\u00ed Dunajovice"
+        },
+        "ds_id": "e6bber8"
+    },
+    "Doln\u00ed Dvo\u0159i\u0161t\u011b": {
+        "address": {
+            "street": "62",
+            "zip": "382 72",
+            "city": "Doln\u00ed Dvo\u0159i\u0161t\u011b",
+            "district": "Doln\u00ed Dvo\u0159i\u0161t\u011b"
+        },
+        "ds_id": "6c2beqg"
+    },
+    "Doln\u00ed Habartice": {
+        "address": {
+            "street": "178",
+            "zip": "405 02",
+            "city": "Doln\u00ed Habartice",
+            "district": "Doln\u00ed Habartice"
+        },
+        "ds_id": "aqbbp49"
+    },
+    "Doln\u00ed Hbity": {
+        "address": {
+            "street": "55",
+            "zip": "262 62",
+            "city": "Doln\u00ed Hbity",
+            "district": "Doln\u00ed Hbity"
+        },
+        "ds_id": "5usbr7e"
+    },
+    "Doln\u00ed He\u0159manice": {
+        "address": {
+            "street": "100",
+            "zip": "594 01",
+            "city": "Doln\u00ed He\u0159manice",
+            "district": "Doln\u00ed He\u0159manice"
+        },
+        "ds_id": "igpav4z"
+    },
+    "Doln\u00ed Ho\u0159ice": {
+        "address": {
+            "street": "50",
+            "zip": "391 55",
+            "city": "Doln\u00ed Ho\u0159ice",
+            "district": "Doln\u00ed Ho\u0159ice"
+        },
+        "ds_id": "rx5bkkm"
+    },
+    "Doln\u00ed Hradi\u0161t\u011b": {
+        "address": {
+            "street": "28",
+            "zip": "331 51",
+            "city": "Doln\u00ed Hradi\u0161t\u011b",
+            "district": "Doln\u00ed Hradi\u0161t\u011b"
+        },
+        "ds_id": "q3zbvm7"
+    },
+    "Doln\u00ed Hrachovice": {
+        "address": {
+            "street": "20",
+            "zip": "391 43",
+            "city": "Doln\u00ed Hrachovice",
+            "district": "Doln\u00ed Hrachovice"
+        },
+        "ds_id": "6hhangz"
+    },
+    "Doln\u00ed Chvatliny": {
+        "address": {
+            "street": "4",
+            "zip": "281 44",
+            "city": "Doln\u00ed Chvatliny",
+            "district": "Doln\u00ed Chvatliny"
+        },
+        "ds_id": "n72ak76"
+    },
+    "Doln\u00ed Kralovice": {
+        "address": {
+            "street": "n\u00e1m. L. Svobody 6",
+            "zip": "257 68",
+            "city": "Doln\u00ed Kralovice",
+            "district": "Doln\u00ed Kralovice"
+        },
+        "ds_id": "vjrbeqk"
+    },
+    "Doln\u00ed Krup\u00e1": {
+        "address": {
+            "street": "55",
+            "zip": "295 01",
+            "city": "Doln\u00ed Krup\u00e1",
+            "district": "Doln\u00ed Krup\u00e1"
+        },
+        "ds_id": "4nibs8z"
+    },
+    "Doln\u00ed La\u017eany": {
+        "address": {
+            "street": "1",
+            "zip": "675 51",
+            "city": "Doln\u00ed La\u017eany",
+            "district": "Doln\u00ed La\u017eany"
+        },
+        "ds_id": "683bf2y"
+    },
+    "Doln\u00ed Lhota": {
+        "address": {
+            "street": "Po\u0161tovn\u00ed 250",
+            "zip": "747 66",
+            "city": "Doln\u00ed Lhota",
+            "district": "Doln\u00ed Lhota"
+        },
+        "ds_id": "c4qbyd7"
+    },
+    "Doln\u00ed Libochov\u00e1": {
+        "address": {
+            "street": "30",
+            "zip": "592 53",
+            "city": "Doln\u00ed Libochov\u00e1",
+            "district": "Doln\u00ed Libochov\u00e1"
+        },
+        "ds_id": "8djbkjx"
+    },
+    "Doln\u00ed Lomn\u00e1": {
+        "address": {
+            "street": "164",
+            "zip": "739 91",
+            "city": "Doln\u00ed Lomn\u00e1",
+            "district": "Doln\u00ed Lomn\u00e1"
+        },
+        "ds_id": "3nbbi5p"
+    },
+    "Doln\u00ed Lou\u010dky": {
+        "address": {
+            "street": "208",
+            "zip": "594 55",
+            "city": "Doln\u00ed Lou\u010dky",
+            "district": "Doln\u00ed Lou\u010dky"
+        },
+        "ds_id": "ksgbeqp"
+    },
+    "Doln\u00ed Lukavice": {
+        "address": {
+            "street": "134",
+            "zip": "334 44",
+            "city": "Doln\u00ed Lukavice",
+            "district": "Doln\u00ed Lukavice"
+        },
+        "ds_id": "vmha863"
+    },
+    "Doln\u00ed Lutyn\u011b": {
+        "address": {
+            "street": "T\u0159anovsk\u00e9ho 10",
+            "zip": "735 53",
+            "city": "Doln\u00ed Lutyn\u011b",
+            "district": "Doln\u00ed Lutyn\u011b"
+        },
+        "ds_id": "pptbvfj"
+    },
+    "Doln\u00ed M\u011bsto": {
+        "address": {
+            "street": "93",
+            "zip": "582 33",
+            "city": "Doln\u00ed M\u011bsto",
+            "district": "Doln\u00ed M\u011bsto"
+        },
+        "ds_id": "v7hap5h"
+    },
+    "Doln\u00ed Morava": {
+        "address": {
+            "street": "35",
+            "zip": "561 69",
+            "city": "Doln\u00ed Morava",
+            "district": "Doln\u00ed Morava"
+        },
+        "ds_id": "5aaa4mx"
+    },
+    "Doln\u00ed Moravice": {
+        "address": {
+            "street": "40",
+            "zip": "795 01",
+            "city": "Doln\u00ed Moravice",
+            "district": "Doln\u00ed Moravice"
+        },
+        "ds_id": "hmiarz7"
+    },
+    "Doln\u00ed N\u011bm\u010d\u00ed": {
+        "address": {
+            "street": "Nivnick\u00e1 82",
+            "zip": "687 62",
+            "city": "Doln\u00ed N\u011bm\u010d\u00ed",
+            "district": "Doln\u00ed N\u011bm\u010d\u00ed"
+        },
+        "ds_id": "by7beqv"
+    },
+    "Doln\u00ed N\u011bt\u010dice": {
+        "address": {
+            "street": "49",
+            "zip": "753 54",
+            "city": "Doln\u00ed N\u011bt\u010dice",
+            "district": "Doln\u00ed N\u011bt\u010dice"
+        },
+        "ds_id": "98far6z"
+    },
+    "Doln\u00ed Nivy": {
+        "address": {
+            "street": "75",
+            "zip": "356 01",
+            "city": "Doln\u00ed Nivy",
+            "district": "Doln\u00ed Nivy"
+        },
+        "ds_id": "d57aubx"
+    },
+    "Doln\u00ed Novosedly": {
+        "address": {
+            "street": "55",
+            "zip": "397 01",
+            "city": "Doln\u00ed Novosedly",
+            "district": "Doln\u00ed Novosedly"
+        },
+        "ds_id": "kndavkw"
+    },
+    "Doln\u00ed P\u011bna": {
+        "address": {
+            "street": "27",
+            "zip": "377 01",
+            "city": "Doln\u00ed P\u011bna",
+            "district": "Doln\u00ed P\u011bna"
+        },
+        "ds_id": "8aub69v"
+    },
+    "Doln\u00ed Podlu\u017e\u00ed": {
+        "address": {
+            "street": "6",
+            "zip": "407 55",
+            "city": "Doln\u00ed Podlu\u017e\u00ed",
+            "district": "Doln\u00ed Podlu\u017e\u00ed"
+        },
+        "ds_id": "8t6a4bh"
+    },
+    "Doln\u00ed Pohle\u010f": {
+        "address": {
+            "street": "11",
+            "zip": "285 22",
+            "city": "Doln\u00ed Pohle\u010f",
+            "district": "Doln\u00ed Pohle\u010f"
+        },
+        "ds_id": "pjibyzu"
+    },
+    "Doln\u00ed Rove\u0148": {
+        "address": {
+            "street": "1",
+            "zip": "533 71",
+            "city": "Doln\u00ed Rove\u0148",
+            "district": "Doln\u00ed Rove\u0148"
+        },
+        "ds_id": "bz6azkj"
+    },
+    "Doln\u00ed Ro\u017e\u00ednka": {
+        "address": {
+            "street": "3",
+            "zip": "592 51",
+            "city": "Doln\u00ed Ro\u017e\u00ednka",
+            "district": "Doln\u00ed Ro\u017e\u00ednka"
+        },
+        "ds_id": "ikkb3wy"
+    },
+    "Doln\u00ed Rychnov": {
+        "address": {
+            "street": "Revolu\u010dn\u00ed 303",
+            "zip": "356 04",
+            "city": "Doln\u00ed Rychnov",
+            "district": "Doln\u00ed Rychnov"
+        },
+        "ds_id": "v3tbpxr"
+    },
+    "Doln\u00ed \u0158asnice": {
+        "address": {
+            "street": "153",
+            "zip": "464 01",
+            "city": "Doln\u00ed \u0158asnice",
+            "district": "Doln\u00ed \u0158asnice"
+        },
+        "ds_id": "c9dajfj"
+    },
+    "Doln\u00ed \u0158edice": {
+        "address": {
+            "street": "Holick\u00e1 210",
+            "zip": "533 75",
+            "city": "Doln\u00ed \u0158edice",
+            "district": "Doln\u00ed \u0158edice"
+        },
+        "ds_id": "d3ja4nr"
+    },
+    "Doln\u00ed Slivno": {
+        "address": {
+            "street": "40",
+            "zip": "294 78",
+            "city": "Doln\u00ed Slivno",
+            "district": "Doln\u00ed Slivno"
+        },
+        "ds_id": "3amatz6"
+    },
+    "Doln\u00ed Sokolovec": {
+        "address": {
+            "street": "4",
+            "zip": "583 01",
+            "city": "Doln\u00ed Sokolovec",
+            "district": "Doln\u00ed Sokolovec"
+        },
+        "ds_id": "f2cbf3q"
+    },
+    "Doln\u00ed Stakory": {
+        "address": {
+            "street": "48",
+            "zip": "293 01",
+            "city": "Doln\u00ed Stakory",
+            "district": "Doln\u00ed Stakory"
+        },
+        "ds_id": "f9carti"
+    },
+    "Doln\u00ed Stud\u00e9nky": {
+        "address": {
+            "street": "99",
+            "zip": "788 20",
+            "city": "Doln\u00ed Stud\u00e9nky",
+            "district": "Doln\u00ed Stud\u00e9nky"
+        },
+        "ds_id": "rrzb73k"
+    },
+    "Doln\u00ed T\u011b\u0161ice": {
+        "address": {
+            "street": "11",
+            "zip": "753 53",
+            "city": "Doln\u00ed T\u011b\u0161ice",
+            "district": "Doln\u00ed T\u011b\u0161ice"
+        },
+        "ds_id": "kfjaw6y"
+    },
+    "Doln\u00ed To\u0161anovice": {
+        "address": {
+            "street": "121",
+            "zip": "739 53",
+            "city": "Doln\u00ed To\u0161anovice",
+            "district": "Doln\u00ed To\u0161anovice"
+        },
+        "ds_id": "ypbaxme"
+    },
+    "Doln\u00ed T\u0159ebon\u00edn": {
+        "address": {
+            "street": "6",
+            "zip": "382 01",
+            "city": "Doln\u00ed T\u0159ebon\u00edn",
+            "district": "Doln\u00ed T\u0159ebon\u00edn"
+        },
+        "ds_id": "bipbkma"
+    },
+    "Doln\u00ed \u00dajezd": {
+        "address": {
+            "street": "281",
+            "zip": "569 61",
+            "city": "Doln\u00ed \u00dajezd",
+            "district": "Doln\u00ed \u00dajezd"
+        },
+        "ds_id": "j4abqyf"
+    },
+    "Doln\u00ed V\u011bstonice": {
+        "address": {
+            "street": "Hlavn\u00ed 67",
+            "zip": "691 29",
+            "city": "Doln\u00ed V\u011bstonice",
+            "district": "Doln\u00ed V\u011bstonice"
+        },
+        "ds_id": "27wbep3"
+    },
+    "Doln\u00ed Vil\u00e9movice": {
+        "address": {
+            "street": "142",
+            "zip": "675 52",
+            "city": "Doln\u00ed Vil\u00e9movice",
+            "district": "Doln\u00ed Vil\u00e9movice"
+        },
+        "ds_id": "kz3bkqg"
+    },
+    "Doln\u00ed Vil\u00edme\u010d": {
+        "address": {
+            "street": "47",
+            "zip": "588 56",
+            "city": "Doln\u00ed Vil\u00edme\u010d",
+            "district": "Doln\u00ed Vil\u00edme\u010d"
+        },
+        "ds_id": "wzsawzk"
+    },
+    "Doln\u00ed Z\u00e1lezly": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 8",
+            "zip": "403 01",
+            "city": "Doln\u00ed Z\u00e1lezly",
+            "district": "Doln\u00ed Z\u00e1lezly"
+        },
+        "ds_id": "ztta36d"
+    },
+    "Doln\u00ed Zimo\u0159": {
+        "address": {
+            "street": "38",
+            "zip": "277 21",
+            "city": "Doln\u00ed Zimo\u0159",
+            "district": "Doln\u00ed Zimo\u0159"
+        },
+        "ds_id": "5fgj2ug"
+    },
+    "Doln\u00ed \u017dandov": {
+        "address": {
+            "street": "36",
+            "zip": "354 93",
+            "city": "Doln\u00ed \u017dandov",
+            "district": "Doln\u00ed \u017dandov"
+        },
+        "ds_id": "sembep7"
+    },
+    "Doln\u00ed \u017d\u010f\u00e1r": {
+        "address": {
+            "street": "32",
+            "zip": "378 02",
+            "city": "Doln\u00ed \u017d\u010f\u00e1r",
+            "district": "Doln\u00ed \u017d\u010f\u00e1r"
+        },
+        "ds_id": "26ub56h"
+    },
+    "Doln\u00ed \u017divotice": {
+        "address": {
+            "street": "\u0160t\u00e1blovsk\u00e1 35",
+            "zip": "747 56",
+            "city": "Doln\u00ed \u017divotice",
+            "district": "Doln\u00ed \u017divotice"
+        },
+        "ds_id": "3b4bmgu"
+    },
+    "Doloplazy": {
+        "address": {
+            "street": "82",
+            "zip": "783 56",
+            "city": "Doloplazy",
+            "district": "Doloplazy"
+        },
+        "ds_id": "hmcbepb"
+    },
+    "Domamil": {
+        "address": {
+            "street": "135",
+            "zip": "675 43",
+            "city": "Domamil",
+            "district": "Domamil"
+        },
+        "ds_id": "2hwa39q"
+    },
+    "Doman\u00edn": {
+        "address": {
+            "street": "33",
+            "zip": "379 01",
+            "city": "Doman\u00edn",
+            "district": "Doman\u00edn"
+        },
+        "ds_id": "fu4byrg"
+    },
+    "Dom\u00e1novice": {
+        "address": {
+            "street": "9",
+            "zip": "280 02",
+            "city": "Dom\u00e1novice",
+            "district": "Dom\u00e1novice"
+        },
+        "ds_id": "mjaat55"
+    },
+    "Doma\u0161\u00edn": {
+        "address": {
+            "street": "20",
+            "zip": "431 51",
+            "city": "Doma\u0161\u00edn",
+            "district": "Louchov"
+        },
+        "ds_id": "kmzb6y8"
+    },
+    "Doma\u0161ov": {
+        "address": {
+            "street": "Brn\u011bnsk\u00e1 94",
+            "zip": "664 83",
+            "city": "Doma\u0161ov",
+            "district": "Doma\u0161ov"
+        },
+        "ds_id": "3fhbkps"
+    },
+    "Doma\u0161ov nad Byst\u0159ic\u00ed": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 35",
+            "zip": "783 06",
+            "city": "Doma\u0161ov nad Byst\u0159ic\u00ed",
+            "district": "Doma\u0161ov nad Byst\u0159ic\u00ed"
+        },
+        "ds_id": "fdwbkrz"
+    },
+    "Doma\u0161ov u \u0160ternberka": {
+        "address": {
+            "street": "61",
+            "zip": "785 01",
+            "city": "Doma\u0161ov u \u0160ternberka",
+            "district": "Doma\u0161ov u \u0160ternberka"
+        },
+        "ds_id": "jrgaw3n"
+    },
+    "Doma\u017eelice": {
+        "address": {
+            "street": "123",
+            "zip": "751 15",
+            "city": "Doma\u017eelice",
+            "district": "Doma\u017eelice"
+        },
+        "ds_id": "x2sbenn"
+    },
+    "Domoraz": {
+        "address": {
+            "street": "35",
+            "zip": "342 01",
+            "city": "Domoraz",
+            "district": "Domoraz"
+        },
+        "ds_id": "s8tbxwc"
+    },
+    "Domousnice": {
+        "address": {
+            "street": "19",
+            "zip": "294 48",
+            "city": "Domousnice",
+            "district": "Domousnice"
+        },
+        "ds_id": "nqmedt9"
+    },
+    "Domou\u0161ice": {
+        "address": {
+            "street": "107",
+            "zip": "439 68",
+            "city": "Domou\u0161ice",
+            "district": "Domou\u0161ice"
+        },
+        "ds_id": "htybzte"
+    },
+    "Do\u0148ov": {
+        "address": {
+            "street": "38",
+            "zip": "378 21",
+            "city": "Do\u0148ov",
+            "district": "Do\u0148ov"
+        },
+        "ds_id": "9ffbzfr"
+    },
+    "Doubek": {
+        "address": {
+            "street": "77",
+            "zip": "251 01",
+            "city": "Doubek",
+            "district": "Doubek"
+        },
+        "ds_id": "ihjatbq"
+    },
+    "Doubice": {
+        "address": {
+            "street": "50",
+            "zip": "407 47",
+            "city": "Doubice",
+            "district": "Doubice"
+        },
+        "ds_id": "tixb7wc"
+    },
+    "Doubrava": {
+        "address": {
+            "street": "599",
+            "zip": "735 33",
+            "city": "Doubrava",
+            "district": "Doubrava"
+        },
+        "ds_id": "n9hbens"
+    },
+    "Doubrav\u010dice": {
+        "address": {
+            "street": "Obecn\u00ed 94",
+            "zip": "282 01",
+            "city": "Doubrav\u010dice",
+            "district": "Doubrav\u010dice"
+        },
+        "ds_id": "q4daj9u"
+    },
+    "Doubravice": {
+        "address": {
+            "street": "155",
+            "zip": "544 51",
+            "city": "Doubravice",
+            "district": "Doubravice"
+        },
+        "ds_id": "ef8beny"
+    },
+    "DOUBRAVICE": {
+        "address": {
+            "street": "10",
+            "zip": "370 06",
+            "city": "Doubravice",
+            "district": "Doubravice"
+        },
+        "ds_id": "hc3ansr"
+    },
+    "Doubravi\u010dka": {
+        "address": {
+            "street": "44",
+            "zip": "294 30",
+            "city": "Doubravi\u010dka",
+            "district": "Doubravi\u010dka"
+        },
+        "ds_id": "vsraqgd"
+    },
+    "Doubravy": {
+        "address": {
+            "street": "45",
+            "zip": "763 45",
+            "city": "Doubravy",
+            "district": "Doubravy"
+        },
+        "ds_id": "jvgbsii"
+    },
+    "Doudleby": {
+        "address": {
+            "street": "6",
+            "zip": "370 07",
+            "city": "Doudleby",
+            "district": "Doudleby"
+        },
+        "ds_id": "kutb5e5"
+    },
+    "Doup\u011b": {
+        "address": {
+            "street": "19",
+            "zip": "588 56",
+            "city": "Doup\u011b",
+            "district": "Doup\u011b"
+        },
+        "ds_id": "b4saq9p"
+    },
+    "Doupovsk\u00e9 Hradi\u0161t\u011b": {
+        "address": {
+            "street": "1",
+            "zip": "362 72",
+            "city": "Doupovsk\u00e9 Hradi\u0161t\u011b",
+            "district": "Lu\u010diny"
+        },
+        "ds_id": "sjtfeu4"
+    },
+    "Drahanovice": {
+        "address": {
+            "street": "144",
+            "zip": "783 44",
+            "city": "Drahanovice",
+            "district": "Drahanovice"
+        },
+        "ds_id": "ba4bemj"
+    },
+    "Drahel\u010dice": {
+        "address": {
+            "street": "Na N\u00e1vsi 25",
+            "zip": "252 19",
+            "city": "Drahel\u010dice",
+            "district": "Drahel\u010dice"
+        },
+        "ds_id": "gs6avg8"
+    },
+    "Drahenice": {
+        "address": {
+            "street": "87",
+            "zip": "262 85",
+            "city": "Drahenice",
+            "district": "Drahenice"
+        },
+        "ds_id": "4xdak35"
+    },
+    "Drahkov": {
+        "address": {
+            "street": "12",
+            "zip": "336 01",
+            "city": "Drahkov",
+            "district": "Drahkov"
+        },
+        "ds_id": "ky7bphr"
+    },
+    "Drahl\u00edn": {
+        "address": {
+            "street": "92",
+            "zip": "261 01",
+            "city": "Drahl\u00edn",
+            "district": "Drahl\u00edn"
+        },
+        "ds_id": "r96b6xp"
+    },
+    "Drah\u0148ovice": {
+        "address": {
+            "street": "40",
+            "zip": "257 26",
+            "city": "Drah\u0148ovice",
+            "district": "Drah\u0148ovice"
+        },
+        "ds_id": "zjfanku"
+    },
+    "Drahobudice": {
+        "address": {
+            "street": "51",
+            "zip": "281 44",
+            "city": "Drahobudice",
+            "district": "Drahobudice"
+        },
+        "ds_id": "g4ea79f"
+    },
+    "Drahobuz": {
+        "address": {
+            "street": "35",
+            "zip": "411 45",
+            "city": "Drahobuz",
+            "district": "Drahobuz"
+        },
+        "ds_id": "tnxjdmz"
+    },
+    "Drahonice": {
+        "address": {
+            "street": "100",
+            "zip": "389 01",
+            "city": "Drahonice",
+            "district": "Drahonice"
+        },
+        "ds_id": "b83ampe"
+    },
+    "Drahon\u00edn": {
+        "address": {
+            "street": "10",
+            "zip": "592 61",
+            "city": "Drahon\u00edn",
+            "district": "Drahon\u00edn"
+        },
+        "ds_id": "6kmbkq7"
+    },
+    "Draho\u0148\u016fv \u00dajezd": {
+        "address": {
+            "street": "20",
+            "zip": "338 08",
+            "city": "Draho\u0148\u016fv \u00dajezd",
+            "district": "Draho\u0148\u016fv \u00dajezd"
+        },
+        "ds_id": "vbday63"
+    },
+    "Drahot\u011b\u0161ice": {
+        "address": {
+            "street": "36",
+            "zip": "373 41",
+            "city": "Drahot\u011b\u0161ice",
+            "district": "Drahot\u011b\u0161ice"
+        },
+        "ds_id": "ns6efth"
+    },
+    "Drahot\u00edn": {
+        "address": {
+            "street": "72",
+            "zip": "345 22",
+            "city": "Drahot\u00edn",
+            "district": "Drahot\u00edn"
+        },
+        "ds_id": "eqvau7a"
+    },
+    "Drahou\u0161": {
+        "address": {
+            "street": "40",
+            "zip": "270 33",
+            "city": "Drahou\u0161",
+            "district": "Drahou\u0161"
+        },
+        "ds_id": "rwnas5x"
+    },
+    "Drahov": {
+        "address": {
+            "street": "15",
+            "zip": "391 81",
+            "city": "Drahov",
+            "district": "Drahov"
+        },
+        "ds_id": "ws3am8k"
+    },
+    "Drachkov": {
+        "address": {
+            "street": "34",
+            "zip": "386 01",
+            "city": "Drachkov",
+            "district": "Drachkov"
+        },
+        "ds_id": "tx6aju4"
+    },
+    "Dr\u00e1chov": {
+        "address": {
+            "street": "38",
+            "zip": "392 01",
+            "city": "Dr\u00e1chov",
+            "district": "Dr\u00e1chov"
+        },
+        "ds_id": "6i6as9j"
+    },
+    "Dra\u017ee\u0148": {
+        "address": {
+            "street": "26",
+            "zip": "331 01",
+            "city": "Dra\u017ee\u0148",
+            "district": "Dra\u017ee\u0148"
+        },
+        "ds_id": "sjkbu2r"
+    },
+    "Dra\u017eenov": {
+        "address": {
+            "street": "70",
+            "zip": "344 01",
+            "city": "Dra\u017eenov",
+            "district": "Dra\u017eenov"
+        },
+        "ds_id": "3embpg3"
+    },
+    "Dra\u017eice": {
+        "address": {
+            "street": "166",
+            "zip": "391 31",
+            "city": "Dra\u017eice",
+            "district": "Dra\u017eice"
+        },
+        "ds_id": "sg3bs2i"
+    },
+    "Dra\u017e\u00ed\u010d": {
+        "address": {
+            "street": "57",
+            "zip": "375 01",
+            "city": "Dra\u017e\u00ed\u010d",
+            "district": "Dra\u017e\u00ed\u010d"
+        },
+        "ds_id": "ijqb6pa"
+    },
+    "Dra\u017ei\u010dky": {
+        "address": {
+            "street": "69",
+            "zip": "391 75",
+            "city": "Dra\u017ei\u010dky",
+            "district": "Dra\u017ei\u010dky"
+        },
+        "ds_id": "hx6b8k8"
+    },
+    "Dr\u00e1\u017eov": {
+        "address": {
+            "street": "41",
+            "zip": "387 19",
+            "city": "Dr\u00e1\u017eov",
+            "district": "Dr\u00e1\u017eov"
+        },
+        "ds_id": "7kcam8f"
+    },
+    "Dra\u017eovice": {
+        "address": {
+            "street": "4",
+            "zip": "342 01",
+            "city": "Dra\u017eovice",
+            "district": "Dra\u017eovice"
+        },
+        "ds_id": "3z4bxw8"
+    },
+    "Dra\u017e\u016fvky": {
+        "address": {
+            "street": "114",
+            "zip": "696 33",
+            "city": "Dra\u017e\u016fvky",
+            "district": "Dra\u017e\u016fvky"
+        },
+        "ds_id": "83nbkn9"
+    },
+    "Drevn\u00edky": {
+        "address": {
+            "street": "50",
+            "zip": "263 01",
+            "city": "Drevn\u00edky",
+            "district": "Drevn\u00edky"
+        },
+        "ds_id": "t9haka9"
+    },
+    "Drhovice": {
+        "address": {
+            "street": "65",
+            "zip": "391 31",
+            "city": "Drhovice",
+            "district": "Drhovice"
+        },
+        "ds_id": "45za77a"
+    },
+    "Drhovle": {
+        "address": {
+            "street": "34",
+            "zip": "397 01",
+            "city": "Drhovle",
+            "district": "Drhovle Ves"
+        },
+        "ds_id": "32ganiw"
+    },
+    "Drhovy": {
+        "address": {
+            "street": "65",
+            "zip": "263 01",
+            "city": "Drhovy",
+            "district": "Drhovy"
+        },
+        "ds_id": "w6xaqn2"
+    },
+    "Drmoul": {
+        "address": {
+            "street": "Plze\u0148sk\u00e1 237",
+            "zip": "353 01",
+            "city": "Drmoul",
+            "district": "Drmoul"
+        },
+        "ds_id": "7vebmpt"
+    },
+    "Drnek": {
+        "address": {
+            "street": "65",
+            "zip": "273 77",
+            "city": "Drnek",
+            "district": "Drnek"
+        },
+        "ds_id": "5fca8mf"
+    },
+    "Drnovice": {
+        "address": {
+            "street": "102",
+            "zip": "679 76",
+            "city": "Drnovice",
+            "district": "Drnovice"
+        },
+        "ds_id": "2rebkkg"
+    },
+    "Drobovice": {
+        "address": {
+            "street": "64",
+            "zip": "286 01",
+            "city": "Drobovice",
+            "district": "Drobovice"
+        },
+        "ds_id": "hpaakfm"
+    },
+    "Drou\u017eetice": {
+        "address": {
+            "street": "13",
+            "zip": "386 01",
+            "city": "Drou\u017eetice",
+            "district": "Drou\u017eetice"
+        },
+        "ds_id": "v4vaygd"
+    },
+    "Drou\u017ekovice": {
+        "address": {
+            "street": "Rud\u00e9 arm\u00e1dy 80",
+            "zip": "431 44",
+            "city": "Drou\u017ekovice",
+            "district": "Drou\u017ekovice"
+        },
+        "ds_id": "7jgaqzq"
+    },
+    "Drozdov": {
+        "address": {
+            "street": "104",
+            "zip": "267 61",
+            "city": "Drozdov",
+            "district": "Drozdov"
+        },
+        "ds_id": "w4eannr"
+    },
+    "Drslavice": {
+        "address": {
+            "street": "25",
+            "zip": "383 01",
+            "city": "Drslavice",
+            "district": "Drslavice"
+        },
+        "ds_id": "xtsb4wv"
+    },
+    "Druhanov": {
+        "address": {
+            "street": "11",
+            "zip": "582 91",
+            "city": "Druhanov",
+            "district": "Druhanov"
+        },
+        "ds_id": "ar6a77q"
+    },
+    "Drun\u010de": {
+        "address": {
+            "street": "13",
+            "zip": "378 21",
+            "city": "Drun\u010de",
+            "district": "Drun\u010de"
+        },
+        "ds_id": "4v7e6t5"
+    },
+    "Druztov\u00e1": {
+        "address": {
+            "street": "1",
+            "zip": "330 07",
+            "city": "Druztov\u00e1",
+            "district": "Druztov\u00e1"
+        },
+        "ds_id": "2e7bnxk"
+    },
+    "Dru\u017eec": {
+        "address": {
+            "street": "Hlavn\u00ed 42",
+            "zip": "273 62",
+            "city": "Dru\u017eec",
+            "district": "Dru\u017eec"
+        },
+        "ds_id": "sm8bkpy"
+    },
+    "Drysice": {
+        "address": {
+            "street": "120",
+            "zip": "683 21",
+            "city": "Drysice",
+            "district": "Drysice"
+        },
+        "ds_id": "73iaz8w"
+    },
+    "Dr\u017ekov": {
+        "address": {
+            "street": "9",
+            "zip": "468 24",
+            "city": "Dr\u017ekov",
+            "district": "Dr\u017ekov"
+        },
+        "ds_id": "hnean8w"
+    },
+    "Dr\u017ekov\u00e1": {
+        "address": {
+            "street": "106",
+            "zip": "763 19",
+            "city": "Dr\u017ekov\u00e1",
+            "district": "Dr\u017ekov\u00e1"
+        },
+        "ds_id": "nzwa8n5"
+    },
+    "Dr\u017eovice": {
+        "address": {
+            "street": "SNP 71",
+            "zip": "796 07",
+            "city": "Dr\u017eovice",
+            "district": "Dr\u017eovice"
+        },
+        "ds_id": "83jbwzb"
+    },
+    "D\u0159enice": {
+        "address": {
+            "street": "14",
+            "zip": "537 01",
+            "city": "D\u0159enice",
+            "district": "D\u0159enice"
+        },
+        "ds_id": "6f9b2mm"
+    },
+    "D\u0159e\u0161\u00edn": {
+        "address": {
+            "street": "24",
+            "zip": "387 19",
+            "city": "D\u0159e\u0161\u00edn",
+            "district": "D\u0159e\u0161\u00edn"
+        },
+        "ds_id": "gdmam99"
+    },
+    "D\u0159etovice": {
+        "address": {
+            "street": "2",
+            "zip": "273 42",
+            "city": "D\u0159etovice",
+            "district": "D\u0159etovice"
+        },
+        "ds_id": "tp7bn8p"
+    },
+    "D\u0159ev\u010dice": {
+        "address": {
+            "street": "73",
+            "zip": "250 01",
+            "city": "D\u0159ev\u010dice",
+            "district": "D\u0159ev\u010dice"
+        },
+        "ds_id": "b9ra7ka"
+    },
+    "D\u0159ev\u011bnice": {
+        "address": {
+            "street": "56",
+            "zip": "507 13",
+            "city": "D\u0159ev\u011bnice",
+            "district": "D\u0159ev\u011bnice"
+        },
+        "ds_id": "sska6si"
+    },
+    "D\u0159evnovice": {
+        "address": {
+            "street": "44",
+            "zip": "798 26",
+            "city": "D\u0159evnovice",
+            "district": "D\u0159evnovice"
+        },
+        "ds_id": "2f9axg8"
+    },
+    "D\u0159\u00ednov": {
+        "address": {
+            "street": "28",
+            "zip": "273 71",
+            "city": "D\u0159\u00ednov",
+            "district": "D\u0159\u00ednov"
+        },
+        "ds_id": "55jj2xs"
+    },
+    "D\u0159\u00edsy": {
+        "address": {
+            "street": "Po\u0161tovn\u00ed 12",
+            "zip": "277 14",
+            "city": "D\u0159\u00edsy",
+            "district": "D\u0159\u00edsy"
+        },
+        "ds_id": "485b6fg"
+    },
+    "D\u0159\u00edte\u010d": {
+        "address": {
+            "street": "116",
+            "zip": "533 05",
+            "city": "D\u0159\u00edte\u010d",
+            "district": "D\u0159\u00edte\u010d"
+        },
+        "ds_id": "pa9a84b"
+    },
+    "D\u0159\u00edte\u0148": {
+        "address": {
+            "street": "1",
+            "zip": "373 51",
+            "city": "D\u0159\u00edte\u0148",
+            "district": "D\u0159\u00edte\u0148"
+        },
+        "ds_id": "rqibekv"
+    },
+    "Dubany": {
+        "address": {
+            "street": "23",
+            "zip": "530 02",
+            "city": "Dubany",
+            "district": "Dubany"
+        },
+        "ds_id": "vekbk36"
+    },
+    "Dub\u010dany": {
+        "address": {
+            "street": "24",
+            "zip": "783 22",
+            "city": "Dub\u010dany",
+            "district": "Dub\u010dany"
+        },
+        "ds_id": "rpra625"
+    },
+    "Dubenec": {
+        "address": {
+            "street": "48",
+            "zip": "261 01",
+            "city": "Dubenec",
+            "district": "Dubenec"
+        },
+        "ds_id": "4udb6s9"
+    },
+    "Dubicko": {
+        "address": {
+            "street": "Velk\u00e1 Strana 56",
+            "zip": "789 72",
+            "city": "Dubicko",
+            "district": "Dubicko"
+        },
+        "ds_id": "xcpbejc"
+    },
+    "Dubi\u010dn\u00e9": {
+        "address": {
+            "street": "15",
+            "zip": "373 71",
+            "city": "Dubi\u010dn\u00e9",
+            "district": "Dubi\u010dn\u00e9"
+        },
+        "ds_id": "fd4ax3v"
+    },
+    "Dublovice": {
+        "address": {
+            "street": "33",
+            "zip": "262 51",
+            "city": "Dublovice",
+            "district": "Dublovice"
+        },
+        "ds_id": "njebejg"
+    },
+    "Dubn\u00e9": {
+        "address": {
+            "street": "60",
+            "zip": "373 84",
+            "city": "Dubn\u00e9",
+            "district": "Dubn\u00e9"
+        },
+        "ds_id": "t7jbeix"
+    },
+    "Dubno": {
+        "address": {
+            "street": "51",
+            "zip": "261 01",
+            "city": "Dubno",
+            "district": "Dubno"
+        },
+        "ds_id": "w78b6tu"
+    },
+    "Dubovice": {
+        "address": {
+            "street": "22",
+            "zip": "393 01",
+            "city": "Dubovice",
+            "district": "Dubovice"
+        },
+        "ds_id": "kv3aq9j"
+    },
+    "Dud\u00edn": {
+        "address": {
+            "street": "26",
+            "zip": "588 05",
+            "city": "Dud\u00edn",
+            "district": "Dud\u00edn"
+        },
+        "ds_id": "dxkjdrx"
+    },
+    "Dukovany": {
+        "address": {
+            "street": "99",
+            "zip": "675 56",
+            "city": "Dukovany",
+            "district": "Dukovany"
+        },
+        "ds_id": "u6tb3rm"
+    },
+    "D\u016fl": {
+        "address": {
+            "street": "31",
+            "zip": "395 01",
+            "city": "D\u016fl",
+            "district": "D\u016fl"
+        },
+        "ds_id": "n4iayb9"
+    },
+    "Dunajovice": {
+        "address": {
+            "street": "4",
+            "zip": "379 01",
+            "city": "Dunajovice",
+            "district": "Dunajovice"
+        },
+        "ds_id": "7ewbtka"
+    },
+    "Dunice": {
+        "address": {
+            "street": "12",
+            "zip": "257 68",
+            "city": "Dunice",
+            "district": "Dunice"
+        },
+        "ds_id": "zgwakkm"
+    },
+    "Du\u0161ejov": {
+        "address": {
+            "street": "109",
+            "zip": "588 05",
+            "city": "Du\u0161ejov",
+            "district": "Du\u0161ejov"
+        },
+        "ds_id": "akzbei9"
+    },
+    "Du\u0161n\u00edky": {
+        "address": {
+            "street": "65",
+            "zip": "413 01",
+            "city": "Du\u0161n\u00edky",
+            "district": "Du\u0161n\u00edky"
+        },
+        "ds_id": "kmbbk3a"
+    },
+    "Dvaka\u010dovice": {
+        "address": {
+            "street": "73",
+            "zip": "538 62",
+            "city": "Dvaka\u010dovice",
+            "district": "Dvaka\u010dovice"
+        },
+        "ds_id": "e9ib2nd"
+    },
+    "Dvorce": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 13",
+            "zip": "793 68",
+            "city": "Dvorce",
+            "district": "Dvorce"
+        },
+        "ds_id": "ztqbehe"
+    },
+    "Dvory": {
+        "address": {
+            "street": "24",
+            "zip": "383 01",
+            "city": "Dvory",
+            "district": "Dvory"
+        },
+        "ds_id": "umsb7nt"
+    },
+    "Dvory nad Lu\u017enic\u00ed": {
+        "address": {
+            "street": "63",
+            "zip": "378 08",
+            "city": "Dvory nad Lu\u017enic\u00ed",
+            "district": "Dvory nad Lu\u017enic\u00ed"
+        },
+        "ds_id": "uz2ayqx"
+    },
+    "Dyj\u00e1kovice": {
+        "address": {
+            "street": "235",
+            "zip": "671 26",
+            "city": "Dyj\u00e1kovice",
+            "district": "Dyj\u00e1kovice"
+        },
+        "ds_id": "gutaz9q"
+    },
+    "Dyj\u00e1kovi\u010dky": {
+        "address": {
+            "street": "1",
+            "zip": "669 02",
+            "city": "Dyj\u00e1kovi\u010dky",
+            "district": "Dyj\u00e1kovi\u010dky"
+        },
+        "ds_id": "rm4az9m"
+    },
+    "Dyje": {
+        "address": {
+            "street": "128",
+            "zip": "669 02",
+            "city": "Dyje",
+            "district": "Dyje"
+        },
+        "ds_id": "h4qa5zn"
+    },
+    "Dyjice": {
+        "address": {
+            "street": "20",
+            "zip": "588 56",
+            "city": "Dyjice",
+            "district": "Dyjice"
+        },
+        "ds_id": "6v6ayg9"
+    },
+    "Dymokury": {
+        "address": {
+            "street": "Revolu\u010dn\u00ed 97",
+            "zip": "289 01",
+            "city": "Dymokury",
+            "district": "Dymokury"
+        },
+        "ds_id": "q2fbehi"
+    },
+    "Dyn\u00edn": {
+        "address": {
+            "street": "48",
+            "zip": "373 64",
+            "city": "Dyn\u00edn",
+            "district": "Dyn\u00edn"
+        },
+        "ds_id": "i3vb5jd"
+    },
+    "D\u00fd\u0161ina": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed M\u00edru 30",
+            "zip": "330 02",
+            "city": "D\u00fd\u0161ina",
+            "district": "D\u00fd\u0161ina"
+        },
+        "ds_id": "v7zbwqj"
+    },
+    "Dzbel": {
+        "address": {
+            "street": "23",
+            "zip": "798 53",
+            "city": "Dzbel",
+            "district": "Dzbel"
+        },
+        "ds_id": "v22bgdy"
+    },
+    "D\u017eb\u00e1nice": {
+        "address": {
+            "street": "50",
+            "zip": "671 71",
+            "city": "D\u017eb\u00e1nice",
+            "district": "D\u017eb\u00e1nice"
+        },
+        "ds_id": "22rbk2m"
+    },
+    "D\u017eb\u00e1nov": {
+        "address": {
+            "street": "15",
+            "zip": "566 01",
+            "city": "D\u017eb\u00e1nov",
+            "district": "D\u017eb\u00e1nov"
+        },
+        "ds_id": "kikb7r9"
+    },
+    "Ejpovice": {
+        "address": {
+            "street": "Hlavn\u00ed 24",
+            "zip": "337 01",
+            "city": "Ejpovice",
+            "district": "Ejpovice"
+        },
+        "ds_id": "yjqbk4j"
+    },
+    "Erpu\u017eice": {
+        "address": {
+            "street": "1",
+            "zip": "349 01",
+            "city": "Erpu\u017eice",
+            "district": "Erpu\u017eice"
+        },
+        "ds_id": "g8hbrd9"
+    },
+    "E\u0161": {
+        "address": {
+            "street": "41",
+            "zip": "395 01",
+            "city": "E\u0161",
+            "district": "E\u0161"
+        },
+        "ds_id": "9v8auh6"
+    },
+    "Eva\u0148": {
+        "address": {
+            "street": "27",
+            "zip": "410 02",
+            "city": "Eva\u0148",
+            "district": "Eva\u0148"
+        },
+        "ds_id": "k7earpq"
+    },
+    "Felbabka": {
+        "address": {
+            "street": "79",
+            "zip": "268 01",
+            "city": "Felbabka",
+            "district": "Felbabka"
+        },
+        "ds_id": "fwrb5iy"
+    },
+    "Frahel\u017e": {
+        "address": {
+            "street": "13",
+            "zip": "379 01",
+            "city": "Frahel\u017e",
+            "district": "Frahel\u017e"
+        },
+        "ds_id": "8k3b4ws"
+    },
+    "Francova Lhota": {
+        "address": {
+            "street": "325",
+            "zip": "756 14",
+            "city": "Francova Lhota",
+            "district": "Francova Lhota"
+        },
+        "ds_id": "rmwbnxq"
+    },
+    "Franti\u0161kov nad Plou\u010dnic\u00ed": {
+        "address": {
+            "street": "79",
+            "zip": "407 23",
+            "city": "Franti\u0161kov nad Plou\u010dnic\u00ed",
+            "district": "Franti\u0161kov nad Plou\u010dnic\u00ed"
+        },
+        "ds_id": "ae9aqmx"
+    },
+    "Fry\u010dovice": {
+        "address": {
+            "street": "83",
+            "zip": "739 45",
+            "city": "Fry\u010dovice",
+            "district": "Fry\u010dovice"
+        },
+        "ds_id": "f86behq"
+    },
+    "Fr\u00fdd\u0161tejn": {
+        "address": {
+            "street": "80",
+            "zip": "463 42",
+            "city": "Fr\u00fdd\u0161tejn",
+            "district": "Fr\u00fdd\u0161tejn"
+        },
+        "ds_id": "psfbk4n"
+    },
+    "Fry\u0161ava pod \u017d\u00e1kovou Horou": {
+        "address": {
+            "street": "9",
+            "zip": "592 04",
+            "city": "Fry\u0161ava pod \u017d\u00e1kovou horou",
+            "district": "Fry\u0161ava pod \u017d\u00e1kovou horou"
+        },
+        "ds_id": "ccdaw9e"
+    },
+    "Gre\u0161lov\u00e9 M\u00fdto": {
+        "address": {
+            "street": "22",
+            "zip": "671 56",
+            "city": "Gre\u0161lov\u00e9 M\u00fdto",
+            "district": "Gre\u0161lov\u00e9 M\u00fdto"
+        },
+        "ds_id": "jnnbt4m"
+    },
+    "Gruna": {
+        "address": {
+            "street": "66",
+            "zip": "571 01",
+            "city": "Gruna",
+            "district": "Gruna"
+        },
+        "ds_id": "fkib7v3"
+    },
+    "Grunta": {
+        "address": {
+            "street": "42",
+            "zip": "280 02",
+            "city": "Grunta",
+            "district": "Grunta"
+        },
+        "ds_id": "ndabz2e"
+    },
+    "Grygov": {
+        "address": {
+            "street": "\u0160r\u00e1mkova 19",
+            "zip": "783 73",
+            "city": "Grygov",
+            "district": "Grygov"
+        },
+        "ds_id": "m2najff"
+    },
+    "Grymov": {
+        "address": {
+            "street": "27",
+            "zip": "751 21",
+            "city": "Grymov",
+            "district": "Grymov"
+        },
+        "ds_id": "izqar7t"
+    },
+    "Habartice": {
+        "address": {
+            "street": "191",
+            "zip": "463 73",
+            "city": "Habartice",
+            "district": "Habartice"
+        },
+        "ds_id": "57vbk32"
+    },
+    "Habrovany": {
+        "address": {
+            "street": "345",
+            "zip": "683 01",
+            "city": "Habrovany",
+            "district": "Habrovany"
+        },
+        "ds_id": "xyca2bc"
+    },
+    "Habr\u016fvka": {
+        "address": {
+            "street": "99",
+            "zip": "679 05",
+            "city": "Habr\u016fvka",
+            "district": "Habr\u016fvka"
+        },
+        "ds_id": "8rma2b9"
+    },
+    "Hab\u0159\u00ed": {
+        "address": {
+            "street": "32",
+            "zip": "373 84",
+            "city": "Hab\u0159\u00ed",
+            "district": "Hab\u0159\u00ed"
+        },
+        "ds_id": "nnmb2gm"
+    },
+    "Ha\u010dky": {
+        "address": {
+            "street": "25",
+            "zip": "798 55",
+            "city": "Ha\u010dky",
+            "district": "Ha\u010dky"
+        },
+        "ds_id": "tghbtjz"
+    },
+    "Hadravova Rosi\u010dka": {
+        "address": {
+            "street": "9",
+            "zip": "378 42",
+            "city": "Hadravova Rosi\u010dka",
+            "district": "Hadravova Rosi\u010dka"
+        },
+        "ds_id": "2aaed7c"
+    },
+    "Hajany": {
+        "address": {
+            "street": "73",
+            "zip": "388 01",
+            "city": "Hajany",
+            "district": "Hajany"
+        },
+        "ds_id": "urjavhg"
+    },
+    "H\u00e1jek": {
+        "address": {
+            "street": "68",
+            "zip": "363 01",
+            "city": "H\u00e1jek",
+            "district": "H\u00e1jek"
+        },
+        "ds_id": "hf7bk2x"
+    },
+    "H\u00e1je nad Jizerou": {
+        "address": {
+            "street": "61",
+            "zip": "513 01",
+            "city": "H\u00e1je nad Jizerou",
+            "district": "Loukov"
+        },
+        "ds_id": "butbum9"
+    },
+    "H\u00e1j u Duchcova": {
+        "address": {
+            "street": "Kub\u00e1tova 155",
+            "zip": "417 22",
+            "city": "H\u00e1j u Duchcova",
+            "district": "H\u00e1j u Duchcova"
+        },
+        "ds_id": "x7rbuz8"
+    },
+    "H\u00e1j Ve Slezsku": {
+        "address": {
+            "street": "Anton\u00edna Va\u0161ka 86",
+            "zip": "747 92",
+            "city": "H\u00e1j ve Slezsku",
+            "district": "Chabi\u010dov"
+        },
+        "ds_id": "cskbqd7"
+    },
+    "Hal\u00e1mky": {
+        "address": {
+            "street": "63",
+            "zip": "378 06",
+            "city": "Hal\u00e1mky",
+            "district": "Hal\u00e1mky"
+        },
+        "ds_id": "6kwampz"
+    },
+    "Halenkov": {
+        "address": {
+            "street": "655",
+            "zip": "756 03",
+            "city": "Halenkov",
+            "district": "Halenkov"
+        },
+        "ds_id": "thgbefm"
+    },
+    "Halenkovice": {
+        "address": {
+            "street": "76",
+            "zip": "763 63",
+            "city": "Halenkovice",
+            "district": "Halenkovice"
+        },
+        "ds_id": "ip7beft"
+    },
+    "Haluzice": {
+        "address": {
+            "street": "19",
+            "zip": "763 24",
+            "city": "Haluzice",
+            "district": "Haluzice"
+        },
+        "ds_id": "r4bbtdc"
+    },
+    "Hal\u017ee": {
+        "address": {
+            "street": "\u017d\u010f\u00e1rsk\u00e1 187",
+            "zip": "347 01",
+            "city": "Hal\u017ee",
+            "district": "Hal\u017ee"
+        },
+        "ds_id": "9hgauuy"
+    },
+    "Hamr": {
+        "address": {
+            "street": "47",
+            "zip": "378 06",
+            "city": "Hamr",
+            "district": "Hamr"
+        },
+        "ds_id": "5nrb3bb"
+    },
+    "Hamr Na Jeze\u0159e": {
+        "address": {
+            "street": "D\u011bv\u00ednsk\u00e1 1",
+            "zip": "471 28",
+            "city": "Hamr na Jeze\u0159e",
+            "district": "Hamr na Jeze\u0159e"
+        },
+        "ds_id": "wbhbjke"
+    },
+    "Hamry": {
+        "address": {
+            "street": "30",
+            "zip": "340 22",
+            "city": "Hamry",
+            "district": "Hamry"
+        },
+        "ds_id": "7ytbkws"
+    },
+    "Hamry nad S\u00e1zavou": {
+        "address": {
+            "street": "322",
+            "zip": "591 01",
+            "city": "Hamry nad S\u00e1zavou",
+            "district": "Hamry nad S\u00e1zavou"
+        },
+        "ds_id": "w47av8k"
+    },
+    "Ha\u0148ovice": {
+        "address": {
+            "street": "62",
+            "zip": "783 21",
+            "city": "Ha\u0148ovice",
+            "district": "Ha\u0148ovice"
+        },
+        "ds_id": "vfnavks"
+    },
+    "Hartinkov": {
+        "address": {
+            "street": "63",
+            "zip": "569 43",
+            "city": "Hartinkov",
+            "district": "Hartinkov"
+        },
+        "ds_id": "ak4a378"
+    },
+    "Hartv\u00edkovice": {
+        "address": {
+            "street": "31",
+            "zip": "675 76",
+            "city": "Hartv\u00edkovice",
+            "district": "Hartv\u00edkovice"
+        },
+        "ds_id": "p4jbu4n"
+    },
+    "Ha\u0161kovcova Lhota": {
+        "address": {
+            "street": "5",
+            "zip": "391 65",
+            "city": "Ha\u0161kovcova Lhota",
+            "district": "Ha\u0161kovcova Lhota"
+        },
+        "ds_id": "gyqb73p"
+    },
+    "Ha\u0165": {
+        "address": {
+            "street": "Lipov\u00e1 357",
+            "zip": "747 16",
+            "city": "Ha\u0165",
+            "district": "Ha\u0165"
+        },
+        "ds_id": "qdbazaw"
+    },
+    "Hat\u00edn": {
+        "address": {
+            "street": "13",
+            "zip": "377 01",
+            "city": "Hat\u00edn",
+            "district": "Hat\u00edn"
+        },
+        "ds_id": "nqnavvu"
+    },
+    "Havra\u0148": {
+        "address": {
+            "street": "11",
+            "zip": "435 01",
+            "city": "Havra\u0148",
+            "district": "Havra\u0148"
+        },
+        "ds_id": "5xha7hi"
+    },
+    "Havran\u00edky": {
+        "address": {
+            "street": "133",
+            "zip": "669 02",
+            "city": "Havran\u00edky",
+            "district": "Havran\u00edky"
+        },
+        "ds_id": "r9gbk2r"
+    },
+    "Hazlov": {
+        "address": {
+            "street": "310",
+            "zip": "351 32",
+            "city": "Hazlov",
+            "district": "Hazlov"
+        },
+        "ds_id": "fi3beee"
+    },
+    "Hejn\u00e1": {
+        "address": {
+            "street": "70",
+            "zip": "341 01",
+            "city": "Hejn\u00e1",
+            "district": "Hejn\u00e1"
+        },
+        "ds_id": "ryzbhtb"
+    },
+    "Helv\u00edkovice": {
+        "address": {
+            "street": "3",
+            "zip": "564 01",
+            "city": "Helv\u00edkovice",
+            "district": "Helv\u00edkovice"
+        },
+        "ds_id": "xm5a4ni"
+    },
+    "Her\u00e1lec": {
+        "address": {
+            "street": "257",
+            "zip": "582 55",
+            "city": "Her\u00e1lec",
+            "district": "Her\u00e1lec"
+        },
+        "ds_id": "i9bax7i"
+    },
+    "Herink": {
+        "address": {
+            "street": "Do Vi\u0161\u0148ovky 28",
+            "zip": "251 01",
+            "city": "Herink",
+            "district": "Herink"
+        },
+        "ds_id": "di5b4tv"
+    },
+    "Heroltice": {
+        "address": {
+            "street": "18",
+            "zip": "666 01",
+            "city": "Heroltice",
+            "district": "Heroltice"
+        },
+        "ds_id": "y27az3u"
+    },
+    "Her\u0161pice": {
+        "address": {
+            "street": "91",
+            "zip": "684 01",
+            "city": "Her\u0161pice",
+            "district": "Her\u0161pice"
+        },
+        "ds_id": "k68bedv"
+    },
+    "He\u0159ma\u0148": {
+        "address": {
+            "street": "101",
+            "zip": "398 11",
+            "city": "He\u0159ma\u0148",
+            "district": "He\u0159ma\u0148"
+        },
+        "ds_id": "w2dbs9h"
+    },
+    "He\u0159mane\u010d": {
+        "address": {
+            "street": "20",
+            "zip": "378 53",
+            "city": "He\u0159mane\u010d",
+            "district": "He\u0159mane\u010d"
+        },
+        "ds_id": "cbzb8mr"
+    },
+    "He\u0159manice": {
+        "address": {
+            "street": "2",
+            "zip": "464 01",
+            "city": "He\u0159manice",
+            "district": "He\u0159manice"
+        },
+        "ds_id": "swkbz9f"
+    },
+    "He\u0159manice u Oder": {
+        "address": {
+            "street": "47",
+            "zip": "742 35",
+            "city": "He\u0159manice u Oder",
+            "district": "He\u0159manice u Oder"
+        },
+        "ds_id": "a2ibmr6"
+    },
+    "He\u0159mani\u010dky": {
+        "address": {
+            "street": "28",
+            "zip": "257 89",
+            "city": "He\u0159mani\u010dky",
+            "district": "He\u0159mani\u010dky"
+        },
+        "ds_id": "p33anhp"
+    },
+    "He\u0159m\u00e1nky": {
+        "address": {
+            "street": "282",
+            "zip": "742 35",
+            "city": "He\u0159m\u00e1nky",
+            "district": "He\u0159m\u00e1nky"
+        },
+        "ds_id": "9gkaxma"
+    },
+    "He\u0159manov": {
+        "address": {
+            "street": "13",
+            "zip": "405 02",
+            "city": "He\u0159manov",
+            "district": "He\u0159manov"
+        },
+        "ds_id": "yejbtf6"
+    },
+    "He\u0159manova Hu\u0165": {
+        "address": {
+            "street": "Revolu\u010dn\u00ed 49",
+            "zip": "330 24",
+            "city": "He\u0159manova Hu\u0165",
+            "district": "Horn\u00ed Seky\u0159any"
+        },
+        "ds_id": "ueabpbx"
+    },
+    "He\u0159manovice": {
+        "address": {
+            "street": "136",
+            "zip": "793 74",
+            "city": "He\u0159manovice",
+            "district": "He\u0159manovice"
+        },
+        "ds_id": "gpsj2td"
+    },
+    "Hevl\u00edn": {
+        "address": {
+            "street": "224",
+            "zip": "671 69",
+            "city": "Hevl\u00edn",
+            "district": "Hevl\u00edn"
+        },
+        "ds_id": "i8iaqmr"
+    },
+    "Hladk\u00e9 \u017divotice": {
+        "address": {
+            "street": "Hlavn\u00ed 208",
+            "zip": "742 47",
+            "city": "Hladk\u00e9 \u017divotice",
+            "district": "Hladk\u00e9 \u017divotice"
+        },
+        "ds_id": "h9vaxn4"
+    },
+    "Hladov": {
+        "address": {
+            "street": "71",
+            "zip": "588 33",
+            "city": "Hladov",
+            "district": "Hladov"
+        },
+        "ds_id": "qtmbf3k"
+    },
+    "Hlasivo": {
+        "address": {
+            "street": "62",
+            "zip": "391 43",
+            "city": "Hlasivo",
+            "district": "Hlasivo"
+        },
+        "ds_id": "crzat5b"
+    },
+    "Hl\u00e1sn\u00e1 T\u0159eba\u0148": {
+        "address": {
+            "street": "Karl\u0161tejnsk\u00e1 150",
+            "zip": "267 18",
+            "city": "Hl\u00e1sn\u00e1 T\u0159eba\u0148",
+            "district": "Hl\u00e1sn\u00e1 T\u0159eba\u0148"
+        },
+        "ds_id": "m5va7ck"
+    },
+    "Hl\u00e1snice": {
+        "address": {
+            "street": "28",
+            "zip": "785 01",
+            "city": "Hl\u00e1snice",
+            "district": "Hl\u00e1snice"
+        },
+        "ds_id": "tszar7p"
+    },
+    "Hlavatce": {
+        "address": {
+            "street": "53",
+            "zip": "391 73",
+            "city": "Hlavatce",
+            "district": "Hlavatce"
+        },
+        "ds_id": "fd7amqt"
+    },
+    "Hlave\u010dn\u00edk": {
+        "address": {
+            "street": "28",
+            "zip": "533 15",
+            "city": "Hlave\u010dn\u00edk",
+            "district": "Hlave\u010dn\u00edk"
+        },
+        "ds_id": "8fea4nc"
+    },
+    "Hlavenec": {
+        "address": {
+            "street": "82",
+            "zip": "294 74",
+            "city": "Hlavenec",
+            "district": "Hlavenec"
+        },
+        "ds_id": "uvuarx5"
+    },
+    "Hlavice": {
+        "address": {
+            "street": "54",
+            "zip": "463 48",
+            "city": "Hlavice",
+            "district": "Hlavice"
+        },
+        "ds_id": "v4pbk6g"
+    },
+    "Hlavnice": {
+        "address": {
+            "street": "103",
+            "zip": "747 52",
+            "city": "Hlavnice",
+            "district": "Hlavnice"
+        },
+        "ds_id": "dvcb2gq"
+    },
+    "Hlav\u0148ovice": {
+        "address": {
+            "street": "7",
+            "zip": "341 42",
+            "city": "Hlav\u0148ovice",
+            "district": "Hlav\u0148ovice"
+        },
+        "ds_id": "wdxbxxr"
+    },
+    "Hl\u00edna": {
+        "address": {
+            "street": "19",
+            "zip": "664 91",
+            "city": "Hl\u00edna",
+            "district": "Hl\u00edna"
+        },
+        "ds_id": "7spb8dr"
+    },
+    "Hlince": {
+        "address": {
+            "street": "44",
+            "zip": "331 41",
+            "city": "Hlince",
+            "district": "Hlince"
+        },
+        "ds_id": "um6awai"
+    },
+    "Hlincov\u00e1 Hora": {
+        "address": {
+            "street": "5",
+            "zip": "373 71",
+            "city": "Hlincov\u00e1 Hora",
+            "district": "Hlincov\u00e1 Hora"
+        },
+        "ds_id": "qysa9q4"
+    },
+    "Hlinka": {
+        "address": {
+            "street": "25",
+            "zip": "793 99",
+            "city": "Hlinka",
+            "district": "Hlinka"
+        },
+        "ds_id": "setarz3"
+    },
+    "Hlinn\u00e1": {
+        "address": {
+            "street": "53",
+            "zip": "412 01",
+            "city": "Hlinn\u00e1",
+            "district": "Hlinn\u00e1"
+        },
+        "ds_id": "kkqaqtd"
+    },
+    "Hl\u00edzov": {
+        "address": {
+            "street": "164",
+            "zip": "285 32",
+            "city": "Hl\u00edzov",
+            "district": "Hl\u00edzov"
+        },
+        "ds_id": "f6taptb"
+    },
+    "Hlohov\u00e1": {
+        "address": {
+            "street": "58",
+            "zip": "345 61",
+            "city": "Hlohov\u00e1",
+            "district": "Hlohov\u00e1"
+        },
+        "ds_id": "w8kavfi"
+    },
+    "Hlohov\u010dice": {
+        "address": {
+            "street": "80",
+            "zip": "345 61",
+            "city": "Hlohov\u010dice",
+            "district": "Hlohov\u010dice"
+        },
+        "ds_id": "2sabht5"
+    },
+    "Hlohovec": {
+        "address": {
+            "street": "Hlavn\u00ed 75",
+            "zip": "691 43",
+            "city": "Hlohovec",
+            "district": "Hlohovec"
+        },
+        "ds_id": "mbebk6k"
+    },
+    "Hlohovice": {
+        "address": {
+            "street": "80",
+            "zip": "338 08",
+            "city": "Hlohovice",
+            "district": "Hlohovice"
+        },
+        "ds_id": "sa5brtb"
+    },
+    "Hlubo\u010dany": {
+        "address": {
+            "street": "22",
+            "zip": "682 01",
+            "city": "Hlubo\u010dany",
+            "district": "Hlubo\u010dany"
+        },
+        "ds_id": "ifwani8"
+    },
+    "Hlubo\u010dec": {
+        "address": {
+            "street": "95",
+            "zip": "747 69",
+            "city": "Hlubo\u010dec",
+            "district": "Hlubo\u010dec"
+        },
+        "ds_id": "wrtb2d7"
+    },
+    "Hlubo\u010dky": {
+        "address": {
+            "street": "Olomouck\u00e1 17",
+            "zip": "783 61",
+            "city": "Hlubo\u010dky",
+            "district": "Hlubo\u010dky"
+        },
+        "ds_id": "ne2bugw"
+    },
+    "Hlubok\u00e1": {
+        "address": {
+            "street": "36",
+            "zip": "539 73",
+            "city": "Hlubok\u00e1",
+            "district": "Hlubok\u00e1"
+        },
+        "ds_id": "p2tb2n9"
+    },
+    "Hlubok\u00e9": {
+        "address": {
+            "street": "31",
+            "zip": "675 71",
+            "city": "Hlubok\u00e9",
+            "district": "Hlubok\u00e9"
+        },
+        "ds_id": "i2zb8cn"
+    },
+    "Hlubok\u00e9 Dvory": {
+        "address": {
+            "street": "40",
+            "zip": "679 23",
+            "city": "Hlubok\u00e9 Dvory",
+            "district": "Hlubok\u00e9 Dvory"
+        },
+        "ds_id": "9ugaz3n"
+    },
+    "Hlubok\u00e9 Ma\u0161\u016fvky": {
+        "address": {
+            "street": "10",
+            "zip": "671 52",
+            "city": "Hlubok\u00e9 Ma\u0161\u016fvky",
+            "district": "Hlubok\u00e9 Ma\u0161\u016fvky"
+        },
+        "ds_id": "qgibk7z"
+    },
+    "Hlubo\u0161": {
+        "address": {
+            "street": "3",
+            "zip": "262 22",
+            "city": "Hlubo\u0161",
+            "district": "Hlubo\u0161"
+        },
+        "ds_id": "3knbec7"
+    },
+    "Hlubyn\u011b": {
+        "address": {
+            "street": "10",
+            "zip": "262 72",
+            "city": "Hlubyn\u011b",
+            "district": "Hlubyn\u011b"
+        },
+        "ds_id": "j3hbhen"
+    },
+    "Hluchov": {
+        "address": {
+            "street": "2",
+            "zip": "798 41",
+            "city": "Hluchov",
+            "district": "Hluchov"
+        },
+        "ds_id": "y7abi7k"
+    },
+    "Hlup\u00edn": {
+        "address": {
+            "street": "54",
+            "zip": "386 01",
+            "city": "Hlup\u00edn",
+            "district": "Hlup\u00edn"
+        },
+        "ds_id": "hecb4xi"
+    },
+    "Hlu\u0161ovice": {
+        "address": {
+            "street": "Hlavn\u00ed 89",
+            "zip": "783 14",
+            "city": "Hlu\u0161ovice",
+            "district": "Hlu\u0161ovice"
+        },
+        "ds_id": "fn9bk77"
+    },
+    "Hna\u010dov": {
+        "address": {
+            "street": "46",
+            "zip": "340 34",
+            "city": "Hna\u010dov",
+            "district": "Hna\u010dov"
+        },
+        "ds_id": "bjjbhuy"
+    },
+    "Hnanice": {
+        "address": {
+            "street": "Znojemsk\u00e1 113",
+            "zip": "669 02",
+            "city": "Hnanice",
+            "district": "Hnanice"
+        },
+        "ds_id": "7k4edqq"
+    },
+    "Hn\u00e1tnice": {
+        "address": {
+            "street": "87",
+            "zip": "561 01",
+            "city": "Hn\u00e1tnice",
+            "district": "Hn\u00e1tnice"
+        },
+        "ds_id": "g8pa4p6"
+    },
+    "Hn\u011bvkovice": {
+        "address": {
+            "street": "116",
+            "zip": "582 94",
+            "city": "Hn\u011bvkovice",
+            "district": "Hn\u011bvkovice"
+        },
+        "ds_id": "j9mavxr"
+    },
+    "Hn\u011bvnice": {
+        "address": {
+            "street": "1",
+            "zip": "330 23",
+            "city": "Hn\u011bvnice",
+            "district": "Hn\u011bvnice"
+        },
+        "ds_id": "j3bb54t"
+    },
+    "Hn\u011bvo\u0161ice": {
+        "address": {
+            "street": "Opavsk\u00e1 170",
+            "zip": "747 35",
+            "city": "Hn\u011bvo\u0161ice",
+            "district": "Hn\u011bvo\u0161ice"
+        },
+        "ds_id": "s26axny"
+    },
+    "Hn\u011bvot\u00edn": {
+        "address": {
+            "street": "47",
+            "zip": "783 47",
+            "city": "Hn\u011bvot\u00edn",
+            "district": "Hn\u011bvot\u00edn"
+        },
+        "ds_id": "5b2aw3e"
+    },
+    "Hnojice": {
+        "address": {
+            "street": "117",
+            "zip": "785 01",
+            "city": "Hnojice",
+            "district": "Hnojice"
+        },
+        "ds_id": "d8rj2va"
+    },
+    "Hnojn\u00edk": {
+        "address": {
+            "street": "222",
+            "zip": "739 53",
+            "city": "Hnojn\u00edk",
+            "district": "Hnojn\u00edk"
+        },
+        "ds_id": "stdbeca"
+    },
+    "Hob\u0161ovice": {
+        "address": {
+            "street": "38",
+            "zip": "273 21",
+            "city": "Hob\u0161ovice",
+            "district": "Hob\u0161ovice"
+        },
+        "ds_id": "zdhamdm"
+    },
+    "Hod\u011bjice": {
+        "address": {
+            "street": "41",
+            "zip": "684 01",
+            "city": "Hod\u011bjice",
+            "district": "Hod\u011bjice"
+        },
+        "ds_id": "xs4bizz"
+    },
+    "Hod\u011bt\u00edn": {
+        "address": {
+            "street": "21",
+            "zip": "391 65",
+            "city": "Hod\u011bt\u00edn",
+            "district": "Hod\u011bt\u00edn"
+        },
+        "ds_id": "sx9b62z"
+    },
+    "Hodice": {
+        "address": {
+            "street": "48",
+            "zip": "589 01",
+            "city": "Hodice",
+            "district": "Hodice"
+        },
+        "ds_id": "fbga8ep"
+    },
+    "Hod\u00ed\u0161kov": {
+        "address": {
+            "street": "52",
+            "zip": "591 01",
+            "city": "Hod\u00ed\u0161kov",
+            "district": "Hod\u00ed\u0161kov"
+        },
+        "ds_id": "a6zavhr"
+    },
+    "Hodonice": {
+        "address": {
+            "street": "Obecn\u00ed 287",
+            "zip": "671 25",
+            "city": "Hodonice",
+            "district": "Hodonice"
+        },
+        "ds_id": "hz4becg"
+    },
+    "Hodov": {
+        "address": {
+            "street": "54",
+            "zip": "675 04",
+            "city": "Hodov",
+            "district": "Hodov"
+        },
+        "ds_id": "tfwaxb4"
+    },
+    "Hodslavice": {
+        "address": {
+            "street": "211",
+            "zip": "742 71",
+            "city": "Hodslavice",
+            "district": "Hodslavice"
+        },
+        "ds_id": "88tbebn"
+    },
+    "Hojanovice": {
+        "address": {
+            "street": "50",
+            "zip": "396 01",
+            "city": "Hojanovice",
+            "district": "Hojanovice"
+        },
+        "ds_id": "mymbp27"
+    },
+    "Hojkov": {
+        "address": {
+            "street": "64",
+            "zip": "588 05",
+            "city": "Hojkov",
+            "district": "Hojkov"
+        },
+        "ds_id": "kubawt3"
+    },
+    "Hojovice": {
+        "address": {
+            "street": "80",
+            "zip": "395 01",
+            "city": "Hojovice",
+            "district": "Hojovice"
+        },
+        "ds_id": "zkwbf3h"
+    },
+    "Holasice": {
+        "address": {
+            "street": "V\u00e1clavsk\u00e1 29",
+            "zip": "664 61",
+            "city": "Holasice",
+            "district": "Holasice"
+        },
+        "ds_id": "ivca747"
+    },
+    "Holasovice": {
+        "address": {
+            "street": "130",
+            "zip": "747 74",
+            "city": "Holasovice",
+            "district": "Holasovice"
+        },
+        "ds_id": "274arzx"
+    },
+    "Hol\u010dovice": {
+        "address": {
+            "street": "44",
+            "zip": "793 71",
+            "city": "Hol\u010dovice",
+            "district": "Hol\u010dovice"
+        },
+        "ds_id": "9czbk4f"
+    },
+    "Holede\u010d": {
+        "address": {
+            "street": "30",
+            "zip": "438 01",
+            "city": "Holede\u010d",
+            "district": "Holede\u010d"
+        },
+        "ds_id": "eqsa7id"
+    },
+    "Holenice": {
+        "address": {
+            "street": "71",
+            "zip": "506 01",
+            "city": "Holenice",
+            "district": "Holenice"
+        },
+        "ds_id": "3iqb8kx"
+    },
+    "Holet\u00edn": {
+        "address": {
+            "street": "105",
+            "zip": "539 71",
+            "city": "Holet\u00edn",
+            "district": "Horn\u00ed Holet\u00edn"
+        },
+        "ds_id": "cmfbwqt"
+    },
+    "Hol\u00edn": {
+        "address": {
+            "street": "10",
+            "zip": "506 01",
+            "city": "Hol\u00edn",
+            "district": "Hol\u00edn"
+        },
+        "ds_id": "5pwazhu"
+    },
+    "Holot\u00edn": {
+        "address": {
+            "street": "32",
+            "zip": "535 01",
+            "city": "Holot\u00edn",
+            "district": "Holot\u00edn"
+        },
+        "ds_id": "rzya4p2"
+    },
+    "Holoubkov": {
+        "address": {
+            "street": "48",
+            "zip": "338 01",
+            "city": "Holoubkov",
+            "district": "Holoubkov"
+        },
+        "ds_id": "r59ay5q"
+    },
+    "Holovousy": {
+        "address": {
+            "street": "44",
+            "zip": "331 41",
+            "city": "Holovousy",
+            "district": "Holovousy"
+        },
+        "ds_id": "kcubhuu"
+    },
+    "Hol\u0161tejn": {
+        "address": {
+            "street": "59",
+            "zip": "679 13",
+            "city": "Hol\u0161tejn",
+            "district": "Hol\u0161tejn"
+        },
+        "ds_id": "w5pb4tj"
+    },
+    "Holubice": {
+        "address": {
+            "street": "61",
+            "zip": "683 51",
+            "city": "Holubice",
+            "district": "Holubice"
+        },
+        "ds_id": "3qubk5y"
+    },
+    "Holubov": {
+        "address": {
+            "street": "242",
+            "zip": "382 03",
+            "city": "Holubov",
+            "district": "Holubov"
+        },
+        "ds_id": "p7gamqm"
+    },
+    "Homole": {
+        "address": {
+            "street": "Bud\u011bjovick\u00e1 72",
+            "zip": "370 01",
+            "city": "Homole",
+            "district": "Homole"
+        },
+        "ds_id": "wq2bstd"
+    },
+    "Homole u Panny": {
+        "address": {
+            "street": "1",
+            "zip": "400 02",
+            "city": "Homole u Panny",
+            "district": "Homole u Panny"
+        },
+        "ds_id": "29na85i"
+    },
+    "Honbice": {
+        "address": {
+            "street": "49",
+            "zip": "538 62",
+            "city": "Honbice",
+            "district": "Honbice"
+        },
+        "ds_id": "yt4b2n5"
+    },
+    "Hon\u011btice": {
+        "address": {
+            "street": "73",
+            "zip": "768 13",
+            "city": "Hon\u011btice",
+            "district": "Hon\u011btice"
+        },
+        "ds_id": "6gmaq9a"
+    },
+    "Honezovice": {
+        "address": {
+            "street": "64",
+            "zip": "333 01",
+            "city": "Honezovice",
+            "district": "Honezovice"
+        },
+        "ds_id": "t24b6sf"
+    },
+    "Hora Svat\u00e9ho \u0160ebesti\u00e1na": {
+        "address": {
+            "street": "3",
+            "zip": "431 82",
+            "city": "Hora Svat\u00e9ho \u0160ebesti\u00e1na",
+            "district": "Hora Svat\u00e9ho \u0160ebesti\u00e1na"
+        },
+        "ds_id": "ua6aq3t"
+    },
+    "Hora Svat\u00e9ho V\u00e1clava": {
+        "address": {
+            "street": "6",
+            "zip": "345 22",
+            "city": "Hora Svat\u00e9ho V\u00e1clava",
+            "district": "Hora Svat\u00e9ho V\u00e1clava"
+        },
+        "ds_id": "ph6au76"
+    },
+    "Hor\u010d\u00e1psko": {
+        "address": {
+            "street": "9",
+            "zip": "262 72",
+            "city": "Hor\u010d\u00e1psko",
+            "district": "Hor\u010d\u00e1psko"
+        },
+        "ds_id": "dqnak4y"
+    },
+    "Horka": {
+        "address": {
+            "street": "53",
+            "zip": "538 51",
+            "city": "Horka",
+            "district": "Horka"
+        },
+        "ds_id": "9mdb2ny"
+    },
+    "Horka i": {
+        "address": {
+            "street": "48",
+            "zip": "286 01",
+            "city": "Horka I",
+            "district": "Horka I"
+        },
+        "ds_id": "3tabzg9"
+    },
+    "Horka II": {
+        "address": {
+            "street": "1",
+            "zip": "285 22",
+            "city": "Horka II",
+            "district": "Horka II"
+        },
+        "ds_id": "9pwb4n9"
+    },
+    "Horka nad Moravou": {
+        "address": {
+            "street": "n\u00e1m. Osvobozen\u00ed 16",
+            "zip": "783 35",
+            "city": "Horka nad Moravou",
+            "district": "Horka nad Moravou"
+        },
+        "ds_id": "bpubeap"
+    },
+    "Horka u Star\u00e9 Paky": {
+        "address": {
+            "street": "41",
+            "zip": "512 34",
+            "city": "Horka u Star\u00e9 Paky",
+            "district": "Horka u Star\u00e9 Paky"
+        },
+        "ds_id": "nkdazf6"
+    },
+    "Horky": {
+        "address": {
+            "street": "55",
+            "zip": "570 01",
+            "city": "Horky",
+            "district": "Horky"
+        },
+        "ds_id": "pzca87j"
+    },
+    "Horky nad Jizerou": {
+        "address": {
+            "street": "93",
+            "zip": "294 73",
+            "city": "Horky nad Jizerou",
+            "district": "Horky nad Jizerou"
+        },
+        "ds_id": "xhua78t"
+    },
+    "Horn\u00ed Be\u010dva": {
+        "address": {
+            "street": "550",
+            "zip": "756 57",
+            "city": "Horn\u00ed Be\u010dva",
+            "district": "Horn\u00ed Be\u010dva"
+        },
+        "ds_id": "2wjbd9u"
+    },
+    "Horn\u00ed B\u011bl\u00e1": {
+        "address": {
+            "street": "124",
+            "zip": "331 52",
+            "city": "Horn\u00ed B\u011bl\u00e1",
+            "district": "Horn\u00ed B\u011bl\u00e1"
+        },
+        "ds_id": "n39bxch"
+    },
+    "Horn\u00ed Be\u0159kovice": {
+        "address": {
+            "street": "Pod\u0159ipsk\u00e1 ",
+            "zip": "411 85",
+            "city": "Horn\u00ed Be\u0159kovice",
+            "district": "Horn\u00ed Be\u0159kovice"
+        },
+        "ds_id": "ur6brrf"
+    },
+    "Horn\u00ed Bezd\u011bkov": {
+        "address": {
+            "street": "Hlavn\u00ed 41",
+            "zip": "273 51",
+            "city": "Horn\u00ed Bezd\u011bkov",
+            "district": "Horn\u00ed Bezd\u011bkov"
+        },
+        "ds_id": "ccvb5uf"
+    },
+    "Horn\u00ed Bludovice": {
+        "address": {
+            "street": "434",
+            "zip": "739 37",
+            "city": "Horn\u00ed Bludovice",
+            "district": "Horn\u00ed Bludovice"
+        },
+        "ds_id": "r5abd9y"
+    },
+    "Horn\u00ed Bojanovice": {
+        "address": {
+            "street": "96",
+            "zip": "693 01",
+            "city": "Horn\u00ed Bojanovice",
+            "district": "Horn\u00ed Bojanovice"
+        },
+        "ds_id": "n63a2bi"
+    },
+    "Horn\u00ed Bradlo": {
+        "address": {
+            "street": "7",
+            "zip": "539 53",
+            "city": "Horn\u00ed Bradlo",
+            "district": "Doln\u00ed Bradlo"
+        },
+        "ds_id": "ienb2ps"
+    },
+    "Horn\u00ed Brann\u00e1": {
+        "address": {
+            "street": "262",
+            "zip": "512 36",
+            "city": "Horn\u00ed Brann\u00e1",
+            "district": "Horn\u00ed Brann\u00e1"
+        },
+        "ds_id": "52zaudf"
+    },
+    "Horn\u00ed B\u0159e\u010dkov": {
+        "address": {
+            "street": "70",
+            "zip": "671 02",
+            "city": "Horn\u00ed B\u0159e\u010dkov",
+            "district": "Horn\u00ed B\u0159e\u010dkov"
+        },
+        "ds_id": "gdcbmaf"
+    },
+    "Horn\u00ed Bukovina": {
+        "address": {
+            "street": "56",
+            "zip": "295 01",
+            "city": "Horn\u00ed Bukovina",
+            "district": "Horn\u00ed Bukovina"
+        },
+        "ds_id": "kreb576"
+    },
+    "Hornice": {
+        "address": {
+            "street": "13",
+            "zip": "675 32",
+            "city": "Hornice",
+            "district": "Hornice"
+        },
+        "ds_id": "t5zaxee"
+    },
+    "Horn\u00ed \u010cermn\u00e1": {
+        "address": {
+            "street": "1",
+            "zip": "561 56",
+            "city": "Horn\u00ed \u010cermn\u00e1",
+            "district": "Horn\u00ed \u010cermn\u00e1"
+        },
+        "ds_id": "y6ebmyv"
+    },
+    "Horn\u00ed Domaslavice": {
+        "address": {
+            "street": "212",
+            "zip": "739 51",
+            "city": "Horn\u00ed Domaslavice",
+            "district": "Horn\u00ed Domaslavice"
+        },
+        "ds_id": "gr4bkxm"
+    },
+    "Horn\u00ed Dubenky": {
+        "address": {
+            "street": "31",
+            "zip": "588 52",
+            "city": "Horn\u00ed Dubenky",
+            "district": "Horn\u00ed Dubenky"
+        },
+        "ds_id": "nx6bd8m"
+    },
+    "Horn\u00ed Dub\u0148any": {
+        "address": {
+            "street": "41",
+            "zip": "671 73",
+            "city": "Horn\u00ed Dub\u0148any",
+            "district": "Horn\u00ed Dub\u0148any"
+        },
+        "ds_id": "zp5b3yn"
+    },
+    "Horn\u00ed Dunajovice": {
+        "address": {
+            "street": "102",
+            "zip": "671 34",
+            "city": "Horn\u00ed Dunajovice",
+            "district": "Horn\u00ed Dunajovice"
+        },
+        "ds_id": "hiwa2c3"
+    },
+    "Horn\u00ed Dvo\u0159i\u0161t\u011b": {
+        "address": {
+            "street": "26",
+            "zip": "382 93",
+            "city": "Horn\u00ed Dvo\u0159i\u0161t\u011b",
+            "district": "Horn\u00ed Dvo\u0159i\u0161t\u011b"
+        },
+        "ds_id": "d6vbd8r"
+    },
+    "Horn\u00ed Habartice": {
+        "address": {
+            "street": "187",
+            "zip": "405 02",
+            "city": "Horn\u00ed Habartice",
+            "district": "Horn\u00ed Habartice"
+        },
+        "ds_id": "2j9bsx4"
+    },
+    "Horn\u00ed He\u0159manice": {
+        "address": {
+            "street": "18",
+            "zip": "675 05",
+            "city": "Horn\u00ed He\u0159manice",
+            "district": "Horn\u00ed He\u0159manice"
+        },
+        "ds_id": "ad7bf4b"
+    },
+    "Horn\u00ed Kaln\u00e1": {
+        "address": {
+            "street": "122",
+            "zip": "543 71",
+            "city": "Horn\u00ed Kaln\u00e1",
+            "district": "Horn\u00ed Kaln\u00e1"
+        },
+        "ds_id": "7tua6ja"
+    },
+    "Horn\u00ed Kamenice": {
+        "address": {
+            "street": "65",
+            "zip": "345 62",
+            "city": "Horn\u00ed Kamenice",
+            "district": "Horn\u00ed Kamenice"
+        },
+        "ds_id": "fqeajdn"
+    },
+    "Horn\u00ed Kn\u011b\u017eeklady": {
+        "address": {
+            "street": "25",
+            "zip": "375 01",
+            "city": "Horn\u00ed Kn\u011b\u017eeklady",
+            "district": "Horn\u00ed Kn\u011b\u017eeklady"
+        },
+        "ds_id": "jkwbzn8"
+    },
+    "Horn\u00ed Kounice": {
+        "address": {
+            "street": "117",
+            "zip": "671 40",
+            "city": "Horn\u00ed Kounice",
+            "district": "Horn\u00ed Kounice"
+        },
+        "ds_id": "sb7a2cx"
+    },
+    "Horn\u00ed Kozolupy": {
+        "address": {
+            "street": "67",
+            "zip": "349 52",
+            "city": "Horn\u00ed Kozolupy",
+            "district": "Horn\u00ed Kozolupy"
+        },
+        "ds_id": "5hyayam"
+    },
+    "Horn\u00ed Krup\u00e1": {
+        "address": {
+            "street": "49",
+            "zip": "580 01",
+            "city": "Horn\u00ed Krup\u00e1",
+            "district": "Horn\u00ed Krup\u00e1"
+        },
+        "ds_id": "xy5a9v7"
+    },
+    "Horn\u00ed Kruty": {
+        "address": {
+            "street": "76",
+            "zip": "281 46",
+            "city": "Horn\u00ed Kruty",
+            "district": "Horn\u00ed Kruty"
+        },
+        "ds_id": "hzeaufk"
+    },
+    "Horn\u00ed Lapa\u010d": {
+        "address": {
+            "street": "22",
+            "zip": "769 01",
+            "city": "Horn\u00ed Lapa\u010d",
+            "district": "Horn\u00ed Lapa\u010d"
+        },
+        "ds_id": "8ecbt5q"
+    },
+    "Horn\u00ed Lhota": {
+        "address": {
+            "street": "Z\u00e1humen\u00ed 44",
+            "zip": "747 64",
+            "city": "Horn\u00ed Lhota",
+            "district": "Horn\u00ed Lhota"
+        },
+        "ds_id": "y6kazas"
+    },
+    "Horn\u00ed Libchava": {
+        "address": {
+            "street": "60",
+            "zip": "471 11",
+            "city": "Horn\u00ed Libchava",
+            "district": "Horn\u00ed Libchava"
+        },
+        "ds_id": "vwrbjx9"
+    },
+    "Horn\u00ed Libochov\u00e1": {
+        "address": {
+            "street": "53",
+            "zip": "594 51",
+            "city": "Horn\u00ed Libochov\u00e1",
+            "district": "Horn\u00ed Libochov\u00e1"
+        },
+        "ds_id": "dqga9s5"
+    },
+    "Horn\u00ed Lide\u010d": {
+        "address": {
+            "street": "292",
+            "zip": "756 12",
+            "city": "Horn\u00ed Lide\u010d",
+            "district": "Horn\u00ed Lide\u010d"
+        },
+        "ds_id": "ukbbd73"
+    },
+    "Horn\u00ed Lod\u011bnice": {
+        "address": {
+            "street": "114",
+            "zip": "783 05",
+            "city": "Horn\u00ed Lod\u011bnice",
+            "district": "Horn\u00ed Lod\u011bnice"
+        },
+        "ds_id": "hdjbvdr"
+    },
+    "Horn\u00ed Lomn\u00e1": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "Horn\u00ed Lomn\u00e1 151, 73991 Horn\u00ed Lomn\u00e1",
+            "district": ""
+        },
+        "ds_id": "bzdar2p"
+    },
+    "Horn\u00ed Lou\u010dky": {
+        "address": {
+            "street": "30",
+            "zip": "594 55",
+            "city": "Horn\u00ed Lou\u010dky",
+            "district": "Horn\u00ed Lou\u010dky"
+        },
+        "ds_id": "k4kbnqp"
+    },
+    "Horn\u00ed Lukavice": {
+        "address": {
+            "street": "40",
+            "zip": "334 01",
+            "city": "Horn\u00ed Lukavice",
+            "district": "Horn\u00ed Lukavice"
+        },
+        "ds_id": "ymdbrv3"
+    },
+    "Horn\u00ed M\u011bsto": {
+        "address": {
+            "street": "97",
+            "zip": "793 44",
+            "city": "Horn\u00ed M\u011bsto",
+            "district": "Horn\u00ed M\u011bsto"
+        },
+        "ds_id": "azrbd7c"
+    },
+    "Horn\u00ed Mezi\u0159\u00ed\u010dko": {
+        "address": {
+            "street": "41",
+            "zip": "378 53",
+            "city": "Horn\u00ed Mezi\u0159\u00ed\u010dko",
+            "district": "Horn\u00ed Mezi\u0159\u00ed\u010dko"
+        },
+        "ds_id": "yyramqh"
+    },
+    "Horn\u00ed Mo\u0161t\u011bnice": {
+        "address": {
+            "street": "Dr. A. Stojana 120",
+            "zip": "751 17",
+            "city": "Horn\u00ed Mo\u0161t\u011bnice",
+            "district": "Horn\u00ed Mo\u0161t\u011bnice"
+        },
+        "ds_id": "z8gbd6i"
+    },
+    "Horn\u00ed Myslov\u00e1": {
+        "address": {
+            "street": "11",
+            "zip": "588 56",
+            "city": "Horn\u00ed Myslov\u00e1",
+            "district": "Horn\u00ed Myslov\u00e1"
+        },
+        "ds_id": "nbxj2su"
+    },
+    "Horn\u00ed N\u011bm\u010d\u00ed": {
+        "address": {
+            "street": "113",
+            "zip": "687 64",
+            "city": "Horn\u00ed N\u011bm\u010d\u00ed",
+            "district": "Horn\u00ed N\u011bm\u010d\u00ed"
+        },
+        "ds_id": "ksdbq3r"
+    },
+    "Horn\u00ed N\u011bm\u010dice": {
+        "address": {
+            "street": "29",
+            "zip": "378 53",
+            "city": "Horn\u00ed N\u011bm\u010dice",
+            "district": "Horn\u00ed N\u011bm\u010dice"
+        },
+        "ds_id": "gpqed7n"
+    },
+    "Horn\u00ed N\u011bt\u010dice": {
+        "address": {
+            "street": "67",
+            "zip": "753 54",
+            "city": "Horn\u00ed N\u011bt\u010dice",
+            "district": "Horn\u00ed N\u011bt\u010dice"
+        },
+        "ds_id": "myta3c4"
+    },
+    "Horn\u00ed Paseka": {
+        "address": {
+            "street": "46",
+            "zip": "584 01",
+            "city": "Horn\u00ed Paseka",
+            "district": "Horn\u00ed Paseka"
+        },
+        "ds_id": "f8gauku"
+    },
+    "Horn\u00ed P\u011bna": {
+        "address": {
+            "street": "93",
+            "zip": "378 31",
+            "city": "Horn\u00ed P\u011bna",
+            "district": "Horn\u00ed P\u011bna"
+        },
+        "ds_id": "wymbyt3"
+    },
+    "Horn\u00ed Po\u010daply": {
+        "address": {
+            "street": "247",
+            "zip": "277 03",
+            "city": "Horn\u00ed Po\u010daply",
+            "district": "Horn\u00ed Po\u010daply"
+        },
+        "ds_id": "iddakix"
+    },
+    "Horn\u00ed Podlu\u017e\u00ed": {
+        "address": {
+            "street": "2",
+            "zip": "407 57",
+            "city": "Horn\u00ed Podlu\u017e\u00ed",
+            "district": "\u017dof\u00edn"
+        },
+        "ds_id": "wggbzxy"
+    },
+    "Horn\u00ed Po\u0159\u00ed\u010d\u00ed": {
+        "address": {
+            "street": "100",
+            "zip": "386 01",
+            "city": "Horn\u00ed Po\u0159\u00ed\u010d\u00ed",
+            "district": "Doln\u00ed Po\u0159\u00ed\u010d\u00ed"
+        },
+        "ds_id": "mb4b63i"
+    },
+    "Horn\u00ed Radou\u0148": {
+        "address": {
+            "street": "109",
+            "zip": "378 43",
+            "city": "Horn\u00ed Radou\u0148",
+            "district": "Horn\u00ed Radou\u0148"
+        },
+        "ds_id": "pena8b9"
+    },
+    "Horn\u00ed Radslavice": {
+        "address": {
+            "street": "45",
+            "zip": "594 01",
+            "city": "Horn\u00ed Radslavice",
+            "district": "Horn\u00ed Radslavice"
+        },
+        "ds_id": "rwab4h8"
+    },
+    "Horn\u00ed R\u00e1potice": {
+        "address": {
+            "street": "51",
+            "zip": "396 01",
+            "city": "Horn\u00ed R\u00e1potice",
+            "district": "Horn\u00ed R\u00e1potice"
+        },
+        "ds_id": "5qsawqj"
+    },
+    "Horn\u00ed Ro\u017e\u00ednka": {
+        "address": {
+            "street": "1",
+            "zip": "592 51",
+            "city": "Horn\u00ed Ro\u017e\u00ednka",
+            "district": "Horn\u00ed Ro\u017e\u00ednka"
+        },
+        "ds_id": "whmax5h"
+    },
+    "Horn\u00ed \u0158asnice": {
+        "address": {
+            "street": "230",
+            "zip": "464 01",
+            "city": "Horn\u00ed \u0158asnice",
+            "district": "Horn\u00ed \u0158asnice"
+        },
+        "ds_id": "4tpbkvd"
+    },
+    "Horn\u00ed \u0158edice": {
+        "address": {
+            "street": "101",
+            "zip": "533 75",
+            "city": "Horn\u00ed \u0158edice",
+            "district": "Horn\u00ed \u0158edice"
+        },
+        "ds_id": "t2ebkvh"
+    },
+    "Horn\u00ed \u0158ep\u010dice": {
+        "address": {
+            "street": "61",
+            "zip": "411 45",
+            "city": "Horn\u00ed \u0158ep\u010dice",
+            "district": "Horn\u00ed \u0158ep\u010dice"
+        },
+        "ds_id": "9mgbqbv"
+    },
+    "Horn\u00ed Skr\u00fdchov": {
+        "address": {
+            "street": "5",
+            "zip": "377 01",
+            "city": "Horn\u00ed Skr\u00fdchov",
+            "district": "Horn\u00ed Skr\u00fdchov"
+        },
+        "ds_id": "gibidvr"
+    },
+    "Horn\u00ed Slatina": {
+        "address": {
+            "street": "39",
+            "zip": "380 01",
+            "city": "Horn\u00ed Slatina",
+            "district": "Horn\u00ed Slatina"
+        },
+        "ds_id": "ykeb6zf"
+    },
+    "Horn\u00ed Slivno": {
+        "address": {
+            "street": "107",
+            "zip": "294 79",
+            "city": "Horn\u00ed Slivno",
+            "district": "Horn\u00ed Slivno"
+        },
+        "ds_id": "f7pak22"
+    },
+    "Horn\u00ed Smr\u010dn\u00e9": {
+        "address": {
+            "street": "",
+            "zip": "675 07",
+            "city": "Horn\u00ed Smr\u010dn\u00e9",
+            "district": "Horn\u00ed Smr\u010dn\u00e9"
+        },
+        "ds_id": "wsyayjp"
+    },
+    "Horn\u00ed Smr\u017eov": {
+        "address": {
+            "street": "139",
+            "zip": "679 61",
+            "city": "Horn\u00ed Smr\u017eov",
+            "district": "Horn\u00ed Smr\u017eov"
+        },
+        "ds_id": "ee9btsb"
+    },
+    "Horn\u00ed Stropnice": {
+        "address": {
+            "street": "68",
+            "zip": "373 35",
+            "city": "Horn\u00ed Stropnice",
+            "district": "Horn\u00ed Stropnice"
+        },
+        "ds_id": "7umbd5z"
+    },
+    "Horn\u00ed Stud\u00e9nky": {
+        "address": {
+            "street": "44",
+            "zip": "789 01",
+            "city": "Horn\u00ed Stud\u00e9nky",
+            "district": "Horn\u00ed Stud\u00e9nky"
+        },
+        "ds_id": "4kaar7i"
+    },
+    "Horn\u00ed Such\u00e1": {
+        "address": {
+            "street": "Sportovn\u00ed 2",
+            "zip": "735 35",
+            "city": "Horn\u00ed Such\u00e1",
+            "district": "Horn\u00ed Such\u00e1"
+        },
+        "ds_id": "w3cbd55"
+    },
+    "Horn\u00ed \u0160t\u011bp\u00e1nov": {
+        "address": {
+            "street": "326",
+            "zip": "798 47",
+            "city": "Horn\u00ed \u0160t\u011bp\u00e1nov",
+            "district": "Horn\u00ed \u0160t\u011bp\u00e1nov"
+        },
+        "ds_id": "gmwbd6u"
+    },
+    "Horn\u00ed T\u011b\u0161ice": {
+        "address": {
+            "street": "31",
+            "zip": "753 53",
+            "city": "Horn\u00ed T\u011b\u0161ice",
+            "district": "Horn\u00ed T\u011b\u0161ice"
+        },
+        "ds_id": "xy8axi5"
+    },
+    "Horn\u00ed To\u0161anovice": {
+        "address": {
+            "street": "129",
+            "zip": "739 53",
+            "city": "Horn\u00ed To\u0161anovice",
+            "district": "Horn\u00ed To\u0161anovice"
+        },
+        "ds_id": "3ufaxns"
+    },
+    "Horn\u00ed T\u0159e\u0161\u0148ovec": {
+        "address": {
+            "street": "225",
+            "zip": "563 01",
+            "city": "Horn\u00ed T\u0159e\u0161\u0148ovec",
+            "district": "Horn\u00ed T\u0159e\u0161\u0148ovec"
+        },
+        "ds_id": "zccbn74"
+    },
+    "Horn\u00ed \u00dajezd": {
+        "address": {
+            "street": "1",
+            "zip": "570 01",
+            "city": "Horn\u00ed \u00dajezd",
+            "district": "Horn\u00ed \u00dajezd"
+        },
+        "ds_id": "wkxa9pk"
+    },
+    "Horn\u00ed Ves": {
+        "address": {
+            "street": "88",
+            "zip": "393 01",
+            "city": "Horn\u00ed Ves",
+            "district": "Horn\u00ed Ves"
+        },
+        "ds_id": "rihbpqr"
+    },
+    "Horn\u00ed V\u011bstonice": {
+        "address": {
+            "street": "L\u00edpov\u00e1 131",
+            "zip": "691 81",
+            "city": "Horn\u00ed V\u011bstonice",
+            "district": "Horn\u00ed V\u011bstonice"
+        },
+        "ds_id": "bwra2dj"
+    },
+    "Horn\u00ed Vil\u00e9movice": {
+        "address": {
+            "street": "13",
+            "zip": "675 07",
+            "city": "Horn\u00ed Vil\u00e9movice",
+            "district": "Horn\u00ed Vil\u00e9movice"
+        },
+        "ds_id": "i7gbf45"
+    },
+    "Horn\u00ed Vltavice": {
+        "address": {
+            "street": "80",
+            "zip": "384 91",
+            "city": "Horn\u00ed Vltavice",
+            "district": "Horn\u00ed Vltavice"
+        },
+        "ds_id": "3a5b2k8"
+    },
+    "Horn\u00ed \u017divotice": {
+        "address": {
+            "street": "126",
+            "zip": "793 12",
+            "city": "Horn\u00ed \u017divotice",
+            "district": "Horn\u00ed \u017divotice"
+        },
+        "ds_id": "753a387"
+    },
+    "Hornos\u00edn": {
+        "address": {
+            "street": "43",
+            "zip": "387 42",
+            "city": "Hornos\u00edn",
+            "district": "Hornos\u00edn"
+        },
+        "ds_id": "jq4b8fz"
+    },
+    "Horom\u011b\u0159ice": {
+        "address": {
+            "street": "Velvarsk\u00e1 100",
+            "zip": "252 62",
+            "city": "Horom\u011b\u0159ice",
+            "district": "Horom\u011b\u0159ice"
+        },
+        "ds_id": "m93bd5b"
+    },
+    "Horosedly": {
+        "address": {
+            "street": "21",
+            "zip": "398 04",
+            "city": "Horosedly",
+            "district": "Horosedly"
+        },
+        "ds_id": "r7mb4xe"
+    },
+    "Horou\u0161any": {
+        "address": {
+            "street": "Baumanova 12",
+            "zip": "250 82",
+            "city": "Horou\u0161any",
+            "district": "Horou\u0161any"
+        },
+        "ds_id": "y94am6p"
+    },
+    "Horsk\u00e1 Kvilda": {
+        "address": {
+            "street": "40",
+            "zip": "385 01",
+            "city": "Horsk\u00e1 Kvilda",
+            "district": "Horsk\u00e1 Kvilda"
+        },
+        "ds_id": "b5abxun"
+    },
+    "Hor\u0161ice": {
+        "address": {
+            "street": "7",
+            "zip": "334 55",
+            "city": "Hor\u0161ice",
+            "district": "Hor\u0161ice"
+        },
+        "ds_id": "d8qawb6"
+    },
+    "Horu\u0161ice": {
+        "address": {
+            "street": "23",
+            "zip": "285 73",
+            "city": "Horu\u0161ice",
+            "district": "Horu\u0161ice"
+        },
+        "ds_id": "nrias4j"
+    },
+    "Hory": {
+        "address": {
+            "street": "47",
+            "zip": "360 01",
+            "city": "Hory",
+            "district": "Hory"
+        },
+        "ds_id": "nw4b5p4"
+    },
+    "Ho\u0159any": {
+        "address": {
+            "street": "52",
+            "zip": "289 14",
+            "city": "Ho\u0159any",
+            "district": "Ho\u0159any"
+        },
+        "ds_id": "mihakjc"
+    },
+    "Ho\u0159\u00e1tev": {
+        "address": {
+            "street": "17",
+            "zip": "289 13",
+            "city": "Ho\u0159\u00e1tev",
+            "district": "Ho\u0159\u00e1tev"
+        },
+        "ds_id": "jw8bkyz"
+    },
+    "Ho\u0159epn\u00edk": {
+        "address": {
+            "street": "N\u00e1m. Prof. Bechyn\u011b 79",
+            "zip": "394 21",
+            "city": "Ho\u0159epn\u00edk",
+            "district": "Ho\u0159epn\u00edk"
+        },
+        "ds_id": "euybeb3"
+    },
+    "Ho\u0159esedly": {
+        "address": {
+            "street": "92",
+            "zip": "270 04",
+            "city": "Ho\u0159esedly",
+            "district": "Ho\u0159esedly"
+        },
+        "ds_id": "ny8anr9"
+    },
+    "Ho\u0159e\u0161ovice": {
+        "address": {
+            "street": "23",
+            "zip": "273 74",
+            "city": "Ho\u0159e\u0161ovice",
+            "district": "Ho\u0159e\u0161ovice"
+        },
+        "ds_id": "b6gj2kc"
+    },
+    "Ho\u0159e\u0161ovi\u010dky": {
+        "address": {
+            "street": "39",
+            "zip": "273 74",
+            "city": "Ho\u0159e\u0161ovi\u010dky",
+            "district": "Ho\u0159e\u0161ovi\u010dky"
+        },
+        "ds_id": "36navbp"
+    },
+    "Ho\u0159ovi\u010dky": {
+        "address": {
+            "street": "111",
+            "zip": "270 04",
+            "city": "Ho\u0159ovi\u010dky",
+            "district": "Ho\u0159ovi\u010dky"
+        },
+        "ds_id": "a2tanqy"
+    },
+    "Hos\u00edn": {
+        "address": {
+            "street": "116",
+            "zip": "373 41",
+            "city": "Hos\u00edn",
+            "district": "Hos\u00edn"
+        },
+        "ds_id": "yscb78m"
+    },
+    "Hoslovice": {
+        "address": {
+            "street": "71",
+            "zip": "387 19",
+            "city": "Hoslovice",
+            "district": "Hoslovice"
+        },
+        "ds_id": "9r2amqe"
+    },
+    "Hospoz\u00edn": {
+        "address": {
+            "street": "176",
+            "zip": "273 22",
+            "city": "Hospoz\u00edn",
+            "district": "Hospoz\u00edn"
+        },
+        "ds_id": "ygkanud"
+    },
+    "Hosp\u0159\u00edz": {
+        "address": {
+            "street": "28",
+            "zip": "377 01",
+            "city": "Hosp\u0159\u00edz",
+            "district": "Hosp\u0159\u00edz"
+        },
+        "ds_id": "jryb5nq"
+    },
+    "Hosta\u0161ovice": {
+        "address": {
+            "street": "44",
+            "zip": "741 01",
+            "city": "Hosta\u0161ovice",
+            "district": "Hosta\u0161ovice"
+        },
+        "ds_id": "cmqaxpm"
+    },
+    "Host\u011bjov": {
+        "address": {
+            "street": "3",
+            "zip": "687 41",
+            "city": "Host\u011bjov",
+            "district": "Host\u011bjov"
+        },
+        "ds_id": "p27aray"
+    },
+    "Host\u011bnice": {
+        "address": {
+            "street": "57",
+            "zip": "664 04",
+            "city": "Host\u011bnice",
+            "district": "Host\u011bnice"
+        },
+        "ds_id": "msyapss"
+    },
+    "Host\u011bradice": {
+        "address": {
+            "street": "57",
+            "zip": "671 71",
+            "city": "Host\u011bradice",
+            "district": "Host\u011bradice"
+        },
+        "ds_id": "kp2a2dg"
+    },
+    "Host\u011br\u00e1dky - Re\u0161ov": {
+        "address": {
+            "street": "212",
+            "zip": "683 52",
+            "city": "Host\u011br\u00e1dky-Re\u0161ov",
+            "district": "Host\u011br\u00e1dky-Re\u0161ov"
+        },
+        "ds_id": "9bfa5yu"
+    },
+    "Host\u011btice": {
+        "address": {
+            "street": "13",
+            "zip": "588 56",
+            "city": "Host\u011btice",
+            "district": "\u010c\u00e1stkovice"
+        },
+        "ds_id": "jinaymr"
+    },
+    "Host\u011bt\u00edn": {
+        "address": {
+            "street": "75",
+            "zip": "687 71",
+            "city": "Host\u011bt\u00edn",
+            "district": "Host\u011bt\u00edn"
+        },
+        "ds_id": "9xpbmyr"
+    },
+    "Hostim": {
+        "address": {
+            "street": "165",
+            "zip": "671 54",
+            "city": "Hostim",
+            "district": "Hostim"
+        },
+        "ds_id": "mwybi9p"
+    },
+    "Host\u00edn": {
+        "address": {
+            "street": "56",
+            "zip": "277 32",
+            "city": "Host\u00edn",
+            "district": "Host\u00edn"
+        },
+        "ds_id": "xqgbtcu"
+    },
+    "Host\u00edn u Vojkovic": {
+        "address": {
+            "street": "80",
+            "zip": "277 44",
+            "city": "Host\u00edn u Vojkovic",
+            "district": "Host\u00edn u Vojkovic"
+        },
+        "ds_id": "ea3bkzi"
+    },
+    "Hosti\u0161ov\u00e1": {
+        "address": {
+            "street": "100",
+            "zip": "763 01",
+            "city": "Hosti\u0161ov\u00e1",
+            "district": "Hosti\u0161ov\u00e1 - Hor\u0148\u00e1k"
+        },
+        "ds_id": "5hsbkyq"
+    },
+    "Hostovlice": {
+        "address": {
+            "street": "25",
+            "zip": "285 62",
+            "city": "Hostovlice",
+            "district": "Hostovlice"
+        },
+        "ds_id": "iunam7b"
+    },
+    "Hosty": {
+        "address": {
+            "street": "84",
+            "zip": "375 01",
+            "city": "Hosty",
+            "district": "Hosty"
+        },
+        "ds_id": "ijbamr6"
+    },
+    "Ho\u0161\u0165\u00e1lkov\u00e1": {
+        "address": {
+            "street": "3",
+            "zip": "756 22",
+            "city": "Ho\u0161\u0165\u00e1lkov\u00e1",
+            "district": "Ho\u0161\u0165\u00e1lkov\u00e1"
+        },
+        "ds_id": "ue9a97p"
+    },
+    "Ho\u0161\u0165\u00e1lkovy": {
+        "address": {
+            "street": "77",
+            "zip": "794 01",
+            "city": "Ho\u0161\u0165\u00e1lkovy",
+            "district": "Ho\u0161\u0165\u00e1lkovy"
+        },
+        "ds_id": "2cnbkxb"
+    },
+    "Ho\u0161\u0165alovice": {
+        "address": {
+            "street": "18",
+            "zip": "538 03",
+            "city": "Ho\u0161\u0165alovice",
+            "district": "Ho\u0161\u0165alovice"
+        },
+        "ds_id": "s7xb2pn"
+    },
+    "Ho\u0161tejn": {
+        "address": {
+            "street": "20",
+            "zip": "789 01",
+            "city": "Ho\u0161tejn",
+            "district": "Ho\u0161tejn"
+        },
+        "ds_id": "ddjar8c"
+    },
+    "Ho\u0161tice": {
+        "address": {
+            "street": "29",
+            "zip": "387 01",
+            "city": "Ho\u0161tice",
+            "district": "Ho\u0161tice"
+        },
+        "ds_id": "mtraxck"
+    },
+    "Ho\u0161tice - Heroltice": {
+        "address": {
+            "street": "78",
+            "zip": "682 01",
+            "city": "Ho\u0161tice-Heroltice",
+            "district": "Ho\u0161tice"
+        },
+        "ds_id": "e64bnb3"
+    },
+    "Ho\u0161\u0165ka": {
+        "address": {
+            "street": "75",
+            "zip": "348 06",
+            "city": "Ho\u0161\u0165ka",
+            "district": "Ho\u0161\u0165ka"
+        },
+        "ds_id": "u55bhuq"
+    },
+    "Hov\u011bz\u00ed": {
+        "address": {
+            "street": "2",
+            "zip": "756 01",
+            "city": "Hov\u011bz\u00ed",
+            "district": "Hov\u011bz\u00ed"
+        },
+        "ds_id": "abnbd42"
+    },
+    "Hovorany": {
+        "address": {
+            "street": "45",
+            "zip": "696 12",
+            "city": "Hovorany",
+            "district": "Hovorany"
+        },
+        "ds_id": "jd7bqv7"
+    },
+    "Hovor\u010dovice": {
+        "address": {
+            "street": "Revolu\u010dn\u00ed 33",
+            "zip": "250 64",
+            "city": "Hovor\u010dovice",
+            "district": "Hovor\u010dovice"
+        },
+        "ds_id": "rjdbkxf"
+    },
+    "Hrab\u011b\u0161ice": {
+        "address": {
+            "street": "50",
+            "zip": "788 15",
+            "city": "Hrab\u011b\u0161ice",
+            "district": "Hrab\u011b\u0161ice"
+        },
+        "ds_id": "zupazd4"
+    },
+    "Hrab\u011b\u0161\u00edn": {
+        "address": {
+            "street": "14",
+            "zip": "286 01",
+            "city": "Hrab\u011b\u0161\u00edn",
+            "district": "Hrab\u011b\u0161\u00edn"
+        },
+        "ds_id": "fpiam6x"
+    },
+    "Hrab\u011btice": {
+        "address": {
+            "street": "Kosteln\u00ed 230",
+            "zip": "671 68",
+            "city": "Hrab\u011btice",
+            "district": "Hrab\u011btice"
+        },
+        "ds_id": "vhba2da"
+    },
+    "Hrabi\u0161\u00edn": {
+        "address": {
+            "street": "65",
+            "zip": "788 04",
+            "city": "Hrabi\u0161\u00edn",
+            "district": "Hrabi\u0161\u00edn"
+        },
+        "ds_id": "i85bkvp"
+    },
+    "Hrabov\u00e1": {
+        "address": {
+            "street": "113",
+            "zip": "789 01",
+            "city": "Hrabov\u00e1",
+            "district": "Hrabov\u00e1"
+        },
+        "ds_id": "dvfbp5m"
+    },
+    "Hrab\u016fvka": {
+        "address": {
+            "street": "61",
+            "zip": "753 01",
+            "city": "Hrab\u016fvka",
+            "district": "Hrab\u016fvka"
+        },
+        "ds_id": "2k5bp6t"
+    },
+    "Hrabyn\u011b": {
+        "address": {
+            "street": "70",
+            "zip": "747 63",
+            "city": "Hrabyn\u011b",
+            "district": "Hrabyn\u011b"
+        },
+        "ds_id": "zidbd38"
+    },
+    "Hradce": {
+        "address": {
+            "street": "34",
+            "zip": "370 01",
+            "city": "Hradce",
+            "district": "Hradce"
+        },
+        "ds_id": "cxjb6qs"
+    },
+    "Hrad\u010dany": {
+        "address": {
+            "street": "74",
+            "zip": "289 05",
+            "city": "Hrad\u010dany",
+            "district": "Hrad\u010dany"
+        },
+        "ds_id": "xj7bww7"
+    },
+    "Hrad\u010dany-Kobe\u0159ice": {
+        "address": {
+            "street": "14",
+            "zip": "798 07",
+            "city": "Hrad\u010dany-Kobe\u0159ice",
+            "district": "Hrad\u010dany"
+        },
+        "ds_id": "hyiaw8v"
+    },
+    "Hrad\u010dovice": {
+        "address": {
+            "street": "168",
+            "zip": "687 33",
+            "city": "Hrad\u010dovice",
+            "district": "Hrad\u010dovice"
+        },
+        "ds_id": "qq4bd3e"
+    },
+    "Hradec": {
+        "address": {
+            "street": "45",
+            "zip": "332 11",
+            "city": "Hradec",
+            "district": "Hradec"
+        },
+        "ds_id": "5xebhui"
+    },
+    "Hradec nad Svitavou": {
+        "address": {
+            "street": "230",
+            "zip": "569 01",
+            "city": "Hradec nad Svitavou",
+            "district": "Hradec nad Svitavou"
+        },
+        "ds_id": "bkia4qp"
+    },
+    "Hradec-Nov\u00e1 Ves": {
+        "address": {
+            "street": "12",
+            "zip": "790 84",
+            "city": "Hradec-Nov\u00e1 Ves",
+            "district": "Hradec-Nov\u00e1 Ves"
+        },
+        "ds_id": "a5xbky5"
+    },
+    "Hrade\u010dno": {
+        "address": {
+            "street": "35",
+            "zip": "273 04",
+            "city": "Hrade\u010dno",
+            "district": "Hrade\u010dno"
+        },
+        "ds_id": "2n6ajj3"
+    },
+    "Hrade\u0161ice": {
+        "address": {
+            "street": "1",
+            "zip": "341 01",
+            "city": "Hrade\u0161ice",
+            "district": "Hrade\u0161ice"
+        },
+        "ds_id": "p4ra8ej"
+    },
+    "Hrade\u0161\u00edn": {
+        "address": {
+            "street": "114",
+            "zip": "282 01",
+            "city": "Hrade\u0161\u00edn",
+            "district": "Hrade\u0161\u00edn"
+        },
+        "ds_id": "nswbwwa"
+    },
+    "Hradi\u0161t\u011b": {
+        "address": {
+            "street": "36",
+            "zip": "338 08",
+            "city": "Hradi\u0161t\u011b",
+            "district": "Hradi\u0161t\u011b"
+        },
+        "ds_id": "xt3a5vp"
+    },
+    "Hradi\u0161tko": {
+        "address": {
+            "street": "642",
+            "zip": "289 12",
+            "city": "Hradi\u0161tko",
+            "district": "Hradi\u0161tko"
+        },
+        "ds_id": "fxzarde"
+    },
+    "Hracholusky": {
+        "address": {
+            "street": "42",
+            "zip": "270 41",
+            "city": "Hracholusky",
+            "district": "Hracholusky"
+        },
+        "ds_id": "6ubbgds"
+    },
+    "Hrachovi\u0161t\u011b": {
+        "address": {
+            "street": "38",
+            "zip": "379 01",
+            "city": "Hrachovi\u0161t\u011b",
+            "district": "Hrachovi\u0161t\u011b"
+        },
+        "ds_id": "u2ib7bw"
+    },
+    "Hrani\u010dn\u00e9 Petrovice": {
+        "address": {
+            "street": "75",
+            "zip": "783 06",
+            "city": "Hrani\u010dn\u00e9 Petrovice",
+            "district": "Hrani\u010dn\u00e9 Petrovice"
+        },
+        "ds_id": "p76a7mj"
+    },
+    "Hrazany": {
+        "address": {
+            "street": "7",
+            "zip": "399 01",
+            "city": "Hrazany",
+            "district": "Hraz\u00e1nky"
+        },
+        "ds_id": "rsybsx7"
+    },
+    "Hr\u010dava": {
+        "address": {
+            "street": "53",
+            "zip": "739 98",
+            "city": "Hr\u010dava",
+            "district": "Hr\u010dava"
+        },
+        "ds_id": "mezaxph"
+    },
+    "Hrd\u011bjovice": {
+        "address": {
+            "street": "Dlouh\u00e1 221",
+            "zip": "373 61",
+            "city": "Hrd\u011bjovice",
+            "district": "Hrd\u011bjovice"
+        },
+        "ds_id": "5j8bzb4"
+    },
+    "Hrdibo\u0159ice": {
+        "address": {
+            "street": "6",
+            "zip": "798 12",
+            "city": "Hrdibo\u0159ice",
+            "district": "Hrdibo\u0159ice"
+        },
+        "ds_id": "m6uar88"
+    },
+    "Hrdl\u00edv": {
+        "address": {
+            "street": "79",
+            "zip": "273 06",
+            "city": "Hrdl\u00edv",
+            "district": "Hrdl\u00edv"
+        },
+        "ds_id": "w2nat8b"
+    },
+    "Hrdlo\u0159ezy": {
+        "address": {
+            "street": "155",
+            "zip": "293 07",
+            "city": "Hrdlo\u0159ezy",
+            "district": "Hrdlo\u0159ezy"
+        },
+        "ds_id": "5m9auqc"
+    },
+    "Hrejkovice": {
+        "address": {
+            "street": "60",
+            "zip": "398 59",
+            "city": "Hrejkovice",
+            "district": "Hrejkovice"
+        },
+        "ds_id": "9a9bsn2"
+    },
+    "Hrobce": {
+        "address": {
+            "street": "Ke H\u0159i\u0161ti 14",
+            "zip": "411 83",
+            "city": "Hrobce",
+            "district": "Hrobce"
+        },
+        "ds_id": "fxqbqek"
+    },
+    "Hrob\u010dice": {
+        "address": {
+            "street": "41",
+            "zip": "417 57",
+            "city": "Hrob\u010dice",
+            "district": "Hrob\u010dice"
+        },
+        "ds_id": "xntbnjc"
+    },
+    "Hrobice": {
+        "address": {
+            "street": "92",
+            "zip": "763 15",
+            "city": "Hrobice",
+            "district": "Hrobice"
+        },
+        "ds_id": "snhamnq"
+    },
+    "Hromnice": {
+        "address": {
+            "street": "60",
+            "zip": "330 11",
+            "city": "Hromnice",
+            "district": "Hromnice"
+        },
+        "ds_id": "n9ka4br"
+    },
+    "Hroubovice": {
+        "address": {
+            "street": "51",
+            "zip": "538 54",
+            "city": "Hroubovice",
+            "district": "Hroubovice"
+        },
+        "ds_id": "u64a4qf"
+    },
+    "Hroznat\u00edn": {
+        "address": {
+            "street": "4",
+            "zip": "675 05",
+            "city": "Hroznat\u00edn",
+            "district": "Hroznat\u00edn"
+        },
+        "ds_id": "aysbtbq"
+    },
+    "Hroznov\u00e1 Lhota": {
+        "address": {
+            "street": "170",
+            "zip": "696 63",
+            "city": "Hroznov\u00e1 Lhota",
+            "district": "Hroznov\u00e1 Lhota"
+        },
+        "ds_id": "mdxbn6v"
+    },
+    "Hrub\u00e1 Sk\u00e1la": {
+        "address": {
+            "street": "37",
+            "zip": "511 01",
+            "city": "Hrub\u00e1 Sk\u00e1la",
+            "district": "Doubravice"
+        },
+        "ds_id": "ieubdzk"
+    },
+    "Hrub\u00e1 Vrbka": {
+        "address": {
+            "street": "133",
+            "zip": "696 73",
+            "city": "Hrub\u00e1 Vrbka",
+            "district": "Hrub\u00e1 Vrbka"
+        },
+        "ds_id": "9mjbdys"
+    },
+    "Hrub\u010dice": {
+        "address": {
+            "street": "10",
+            "zip": "798 21",
+            "city": "Hrub\u010dice",
+            "district": "Hrub\u010dice"
+        },
+        "ds_id": "4icbkf8"
+    },
+    "Hrub\u00fd Jesen\u00edk": {
+        "address": {
+            "street": "30",
+            "zip": "289 32",
+            "city": "Hrub\u00fd Jesen\u00edk",
+            "district": "Hrub\u00fd Jesen\u00edk"
+        },
+        "ds_id": "9cwbxfi"
+    },
+    "Hrusice": {
+        "address": {
+            "street": "Ke H\u0159i\u0161ti 142",
+            "zip": "251 66",
+            "city": "Hrusice",
+            "district": "Hrusice"
+        },
+        "ds_id": "k5rakw7"
+    },
+    "Hru\u0161ka": {
+        "address": {
+            "street": "30",
+            "zip": "798 27",
+            "city": "Hru\u0161ka",
+            "district": "Hru\u0161ka"
+        },
+        "ds_id": "wx5ar84"
+    },
+    "Hru\u0161ky": {
+        "address": {
+            "street": "166",
+            "zip": "683 52",
+            "city": "Hru\u0161ky",
+            "district": "Hru\u0161ky"
+        },
+        "ds_id": "bhza2qg"
+    },
+    "Hru\u0161ov": {
+        "address": {
+            "street": "65",
+            "zip": "294 73",
+            "city": "Hru\u0161ov",
+            "district": "Hru\u0161ov"
+        },
+        "ds_id": "eh6akea"
+    },
+    "Hru\u0161ov\u00e1": {
+        "address": {
+            "street": "94",
+            "zip": "565 55",
+            "city": "Hru\u0161ov\u00e1",
+            "district": "Hru\u0161ov\u00e1"
+        },
+        "ds_id": "66ma3pp"
+    },
+    "Hru\u0161ovany": {
+        "address": {
+            "street": "15",
+            "zip": "431 43",
+            "city": "Hru\u0161ovany",
+            "district": "Hru\u0161ovany"
+        },
+        "ds_id": "p2zbdy3"
+    },
+    "Hru\u0161ovany u Brna": {
+        "address": {
+            "street": "Masarykova 17",
+            "zip": "664 62",
+            "city": "Hru\u0161ovany u Brna",
+            "district": "Hru\u0161ovany u Brna"
+        },
+        "ds_id": "f6fby7k"
+    },
+    "Hrutov": {
+        "address": {
+            "street": "11",
+            "zip": "675 27",
+            "city": "Hrutov",
+            "district": "Hrutov"
+        },
+        "ds_id": "6cub3em"
+    },
+    "H\u0159ebe\u010d": {
+        "address": {
+            "street": "n\u00e1m. Draha 75",
+            "zip": "273 45",
+            "city": "H\u0159ebe\u010d",
+            "district": "H\u0159ebe\u010d"
+        },
+        "ds_id": "kcnb6i2"
+    },
+    "H\u0159ebe\u010dn\u00edky": {
+        "address": {
+            "street": "36",
+            "zip": "270 41",
+            "city": "H\u0159ebe\u010dn\u00edky",
+            "district": "H\u0159ebe\u010dn\u00edky"
+        },
+        "ds_id": "2dqavgx"
+    },
+    "H\u0159edle": {
+        "address": {
+            "street": "25",
+            "zip": "267 51",
+            "city": "H\u0159edle",
+            "district": "H\u0159edle"
+        },
+        "ds_id": "pz2bs4f"
+    },
+    "H\u0159ensko": {
+        "address": {
+            "street": "71",
+            "zip": "407 17",
+            "city": "H\u0159ensko",
+            "district": "H\u0159ensko"
+        },
+        "ds_id": "y4rbg7d"
+    },
+    "H\u0159im\u011b\u017edice": {
+        "address": {
+            "street": "46",
+            "zip": "262 14",
+            "city": "H\u0159im\u011b\u017edice",
+            "district": "H\u0159im\u011b\u017edice"
+        },
+        "ds_id": "y2wby42"
+    },
+    "H\u0159\u00ed\u0161ice": {
+        "address": {
+            "street": "66",
+            "zip": "380 01",
+            "city": "H\u0159\u00ed\u0161ice",
+            "district": "H\u0159\u00ed\u0161ice"
+        },
+        "ds_id": "2qfbzqu"
+    },
+    "H\u0159\u00ed\u0161kov": {
+        "address": {
+            "street": "50",
+            "zip": "439 04",
+            "city": "H\u0159\u00ed\u0161kov",
+            "district": "H\u0159\u00ed\u0161kov"
+        },
+        "ds_id": "xw7b35v"
+    },
+    "H\u0159ivice": {
+        "address": {
+            "street": "24",
+            "zip": "439 65",
+            "city": "H\u0159ivice",
+            "district": "H\u0159ivice"
+        },
+        "ds_id": "wc9bd2v"
+    },
+    "H\u0159iv\u00edn\u016fv \u00dajezd": {
+        "address": {
+            "street": "50",
+            "zip": "763 07",
+            "city": "H\u0159iv\u00edn\u016fv \u00dajezd",
+            "district": "H\u0159iv\u00edn\u016fv \u00dajezd"
+        },
+        "ds_id": "cd2a32y"
+    },
+    "Hubenov": {
+        "address": {
+            "street": "8",
+            "zip": "588 05",
+            "city": "Hubenov",
+            "district": "Hubenov"
+        },
+        "ds_id": "pdvayrg"
+    },
+    "Hud\u010dice": {
+        "address": {
+            "street": "89",
+            "zip": "262 72",
+            "city": "Hud\u010dice",
+            "district": "Hud\u010dice"
+        },
+        "ds_id": "a3pajxn"
+    },
+    "Hudlice": {
+        "address": {
+            "street": "Jungmannova 355",
+            "zip": "267 03",
+            "city": "Hudlice",
+            "district": "Hudlice"
+        },
+        "ds_id": "m84bs9p"
+    },
+    "Hukvaldy": {
+        "address": {
+            "street": "3",
+            "zip": "739 46",
+            "city": "Hukvaldy",
+            "district": "Hukvaldy"
+        },
+        "ds_id": "e9qbdy7"
+    },
+    "Hulice": {
+        "address": {
+            "street": "33",
+            "zip": "257 63",
+            "city": "Hulice",
+            "district": "Hulice"
+        },
+        "ds_id": "fp8a73v"
+    },
+    "Hunt\u00ed\u0159ov": {
+        "address": {
+            "street": "126",
+            "zip": "405 02",
+            "city": "Hunt\u00ed\u0159ov",
+            "district": "Hunt\u00ed\u0159ov"
+        },
+        "ds_id": "zj8av6p"
+    },
+    "H\u016frky": {
+        "address": {
+            "street": "50",
+            "zip": "337 01",
+            "city": "H\u016frky",
+            "district": "H\u016frky"
+        },
+        "ds_id": "pirbrf3"
+    },
+    "Hurtova Lhota": {
+        "address": {
+            "street": "45",
+            "zip": "580 01",
+            "city": "Hurtova Lhota",
+            "district": "Hurtova Lhota"
+        },
+        "ds_id": "i6zjd3a"
+    },
+    "H\u016fry": {
+        "address": {
+            "street": "Na sadech 155",
+            "zip": "373 71",
+            "city": "H\u016fry",
+            "district": "H\u016fry"
+        },
+        "ds_id": "zfnbyr7"
+    },
+    "Hus\u00ed Lhota": {
+        "address": {
+            "street": "31",
+            "zip": "294 06",
+            "city": "Hus\u00ed Lhota",
+            "district": "Hus\u00ed Lhota"
+        },
+        "ds_id": "dwhayn9"
+    },
+    "Huslenky": {
+        "address": {
+            "street": "494",
+            "zip": "756 02",
+            "city": "Huslenky",
+            "district": "Huslenky"
+        },
+        "ds_id": "bawb3bq"
+    },
+    "Hu\u0161t\u011bnovice": {
+        "address": {
+            "street": "92",
+            "zip": "687 03",
+            "city": "Hu\u0161t\u011bnovice",
+            "district": "Hu\u0161t\u011bnovice"
+        },
+        "ds_id": "escbnnv"
+    },
+    "Hutisko - Solanec": {
+        "address": {
+            "street": "512",
+            "zip": "756 62",
+            "city": "Hutisko-Solanec",
+            "district": "Hutisko"
+        },
+        "ds_id": "kvvbdxn"
+    },
+    "Huzov\u00e1": {
+        "address": {
+            "street": "131",
+            "zip": "793 51",
+            "city": "Huzov\u00e1",
+            "district": "Huzov\u00e1"
+        },
+        "ds_id": "d8fbvcc"
+    },
+    "Hv\u011bzdonice": {
+        "address": {
+            "street": "56",
+            "zip": "257 24",
+            "city": "Hv\u011bzdonice",
+            "district": "Hv\u011bzdonice"
+        },
+        "ds_id": "9araj3y"
+    },
+    "Hv\u011bzdo\u0148ovice": {
+        "address": {
+            "street": "8",
+            "zip": "675 21",
+            "city": "Hv\u011bzdo\u0148ovice",
+            "district": "Hv\u011bzdo\u0148ovice"
+        },
+        "ds_id": "6byb57w"
+    },
+    "Hvozd": {
+        "address": {
+            "street": "90",
+            "zip": "798 55",
+            "city": "Hvozd",
+            "district": "Hvozd"
+        },
+        "ds_id": "qvgax6z"
+    },
+    "Hvozdec": {
+        "address": {
+            "street": "45",
+            "zip": "373 72",
+            "city": "Hvozdec",
+            "district": "Hvozdec"
+        },
+        "ds_id": "6hwb7e5"
+    },
+    "Hvozdn\u00e1": {
+        "address": {
+            "street": "Hlavn\u00ed 210",
+            "zip": "763 10",
+            "city": "Hvozdn\u00e1",
+            "district": "Hvozdn\u00e1"
+        },
+        "ds_id": "b4kbdxs"
+    },
+    "Hvozdnice": {
+        "address": {
+            "street": "160",
+            "zip": "252 05",
+            "city": "Hvozdnice",
+            "district": "Hvozdnice"
+        },
+        "ds_id": "mnpatc5"
+    },
+    "Hvo\u017e\u010fany": {
+        "address": {
+            "street": "80",
+            "zip": "262 44",
+            "city": "Hvo\u017e\u010fany",
+            "district": "Hvo\u017e\u010fany"
+        },
+        "ds_id": "4xvbtn7"
+    },
+    "Hybr\u00e1lec": {
+        "address": {
+            "street": "69",
+            "zip": "586 01",
+            "city": "Hybr\u00e1lec",
+            "district": "Hybr\u00e1lec"
+        },
+        "ds_id": "s9yav4v"
+    },
+    "Hyn\u010dina": {
+        "address": {
+            "street": "125",
+            "zip": "789 01",
+            "city": "Hyn\u010dina",
+            "district": "Hyn\u010dina"
+        },
+        "ds_id": "x8mbr8x"
+    },
+    "H\u00fdskov": {
+        "address": {
+            "street": "Na B\u0159as\u00edch 206",
+            "zip": "267 06",
+            "city": "H\u00fdskov",
+            "district": "H\u00fdskov"
+        },
+        "ds_id": "nvibnjf"
+    },
+    "H\u00fdsly": {
+        "address": {
+            "street": "100",
+            "zip": "696 50",
+            "city": "H\u00fdsly",
+            "district": "H\u00fdsly"
+        },
+        "ds_id": "kbaa2qa"
+    },
+    "Chabe\u0159ice": {
+        "address": {
+            "street": "9",
+            "zip": "285 22",
+            "city": "Chabe\u0159ice",
+            "district": "Chabe\u0159ice"
+        },
+        "ds_id": "3bzbxtw"
+    },
+    "Chaloupky": {
+        "address": {
+            "street": "117",
+            "zip": "267 62",
+            "city": "Chaloupky",
+            "district": "Chaloupky"
+        },
+        "ds_id": "6eyakgs"
+    },
+    "Chanovice": {
+        "address": {
+            "street": "36",
+            "zip": "341 01",
+            "city": "Chanovice",
+            "district": "Chanovice"
+        },
+        "ds_id": "x3razic"
+    },
+    "Charvatce": {
+        "address": {
+            "street": "78",
+            "zip": "294 45",
+            "city": "Charvatce",
+            "district": "Charvatce"
+        },
+        "ds_id": "ti8a8v6"
+    },
+    "Charv\u00e1ty": {
+        "address": {
+            "street": "98",
+            "zip": "783 75",
+            "city": "Charv\u00e1ty",
+            "district": "Charv\u00e1ty"
+        },
+        "ds_id": "u3hbr7i"
+    },
+    "Ch\u00e1\u0159ovice": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "Ch\u00e1\u0159ovice 4, 25741 Ch\u00e1\u0159ovice",
+            "district": ""
+        },
+        "ds_id": "pzxb5fi"
+    },
+    "Chbany": {
+        "address": {
+            "street": "19",
+            "zip": "431 57",
+            "city": "Chbany",
+            "district": "Chbany"
+        },
+        "ds_id": "m2abutp"
+    },
+    "Chel\u010dice": {
+        "address": {
+            "street": "123",
+            "zip": "389 01",
+            "city": "Chel\u010dice",
+            "district": "Chel\u010dice"
+        },
+        "ds_id": "d39bnjm"
+    },
+    "Cheznovice": {
+        "address": {
+            "street": "16",
+            "zip": "338 06",
+            "city": "Cheznovice",
+            "district": "Cheznovice"
+        },
+        "ds_id": "bk8bnmj"
+    },
+    "Chlebi\u010dov": {
+        "address": {
+            "street": "Hlavn\u00ed 65",
+            "zip": "747 31",
+            "city": "Chlebi\u010dov",
+            "district": "Chlebi\u010dov"
+        },
+        "ds_id": "9xvazan"
+    },
+    "Chleby": {
+        "address": {
+            "street": "4",
+            "zip": "257 41",
+            "city": "Chleby",
+            "district": "Chleby"
+        },
+        "ds_id": "zhhbguh"
+    },
+    "Chleny": {
+        "address": {
+            "street": "68",
+            "zip": "517 45",
+            "city": "Chleny",
+            "district": "Chleny"
+        },
+        "ds_id": "uhyaphr"
+    },
+    "Chlistov": {
+        "address": {
+            "street": "54",
+            "zip": "339 01",
+            "city": "Chlistov",
+            "district": "Chlistov"
+        },
+        "ds_id": "hycbjwy"
+    },
+    "Chl\u00edstov": {
+        "address": {
+            "street": "9",
+            "zip": "256 01",
+            "city": "Chl\u00edstov",
+            "district": "Chl\u00edstov"
+        },
+        "ds_id": "wqiaj8c"
+    },
+    "Chl\u00edstovice": {
+        "address": {
+            "street": "66",
+            "zip": "284 01",
+            "city": "Chl\u00edstovice",
+            "district": "Chl\u00edstovice"
+        },
+        "ds_id": "pdkbxsm"
+    },
+    "Chlum": {
+        "address": {
+            "street": "55",
+            "zip": "338 08",
+            "city": "Chlum",
+            "district": "Chlum"
+        },
+        "ds_id": "geeavt2"
+    },
+    "Chlumany": {
+        "address": {
+            "street": "60",
+            "zip": "384 22",
+            "city": "Chlumany",
+            "district": "Chlumany"
+        },
+        "ds_id": "y6bbyby"
+    },
+    "Chlum\u010dany": {
+        "address": {
+            "street": "Komensk\u00e9ho 377",
+            "zip": "334 42",
+            "city": "Chlum\u010dany",
+            "district": "Chlum\u010dany"
+        },
+        "ds_id": "izfbq8z"
+    },
+    "Chlumek": {
+        "address": {
+            "street": "61",
+            "zip": "594 42",
+            "city": "Chlumek",
+            "district": "Chlumek"
+        },
+        "ds_id": "gehajgy"
+    },
+    "Chlum\u011bt\u00edn": {
+        "address": {
+            "street": "56",
+            "zip": "592 02",
+            "city": "Chlum\u011bt\u00edn",
+            "district": "Chlum\u011bt\u00edn"
+        },
+        "ds_id": "3c5edxu"
+    },
+    "Chlum\u00edn": {
+        "address": {
+            "street": "44",
+            "zip": "277 43",
+            "city": "Chlum\u00edn",
+            "district": "Chlum\u00edn"
+        },
+        "ds_id": "8fbbezc"
+    },
+    "Chlum-Korouhvice": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "Chlum-Korouhvice 21, 59265 Chlum-Korouhvice",
+            "district": ""
+        },
+        "ds_id": "rjjax9c"
+    },
+    "Chlum Svat\u00e9 Ma\u0159\u00ed": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed J. W. Goetheho 26",
+            "zip": "357 09",
+            "city": "Chlum Svat\u00e9 Ma\u0159\u00ed",
+            "district": "Chlum Svat\u00e9 Ma\u0159\u00ed"
+        },
+        "ds_id": "wk5akze"
+    },
+    "Chlumy": {
+        "address": {
+            "street": "56",
+            "zip": "335 01",
+            "city": "Chlumy",
+            "district": "Chlumy"
+        },
+        "ds_id": "9enbrvx"
+    },
+    "Chlustina": {
+        "address": {
+            "street": "32",
+            "zip": "267 51",
+            "city": "Chlustina",
+            "district": "Chlustina"
+        },
+        "ds_id": "62ca69y"
+    },
+    "Chmel\u00edk": {
+        "address": {
+            "street": "76",
+            "zip": "570 01",
+            "city": "Chmel\u00edk",
+            "district": "Chmel\u00edk"
+        },
+        "ds_id": "5yda4q9"
+    },
+    "Chmeln\u00e1": {
+        "address": {
+            "street": "13",
+            "zip": "257 65",
+            "city": "Chmeln\u00e1",
+            "district": "Chmeln\u00e1"
+        },
+        "ds_id": "kahas6g"
+    },
+    "Chobot": {
+        "address": {
+            "street": "50",
+            "zip": "388 01",
+            "city": "Chobot",
+            "district": "Chobot"
+        },
+        "ds_id": "t6hb5zd"
+    },
+    "Chocenice": {
+        "address": {
+            "street": "67",
+            "zip": "336 01",
+            "city": "Chocenice",
+            "district": "Chocenice"
+        },
+        "ds_id": "vf9bruq"
+    },
+    "Chocerady": {
+        "address": {
+            "street": "267",
+            "zip": "257 24",
+            "city": "Chocerady",
+            "district": "Chocerady"
+        },
+        "ds_id": "j3ka63m"
+    },
+    "Chocn\u011bjovice": {
+        "address": {
+            "street": "43",
+            "zip": "294 13",
+            "city": "Chocn\u011bjovice",
+            "district": "Chocn\u011bjovice"
+        },
+        "ds_id": "bc2akdv"
+    },
+    "Chocomy\u0161l": {
+        "address": {
+            "street": "40",
+            "zip": "345 43",
+            "city": "Chocomy\u0161l",
+            "district": "Chocomy\u0161l"
+        },
+        "ds_id": "eqpbhvd"
+    },
+    "Chodou\u0148": {
+        "address": {
+            "street": "56",
+            "zip": "267 51",
+            "city": "Chodou\u0148",
+            "district": "Chodou\u0148"
+        },
+        "ds_id": "y7jaj6e"
+    },
+    "Chodouny": {
+        "address": {
+            "street": "20",
+            "zip": "411 71",
+            "city": "Chodouny",
+            "district": "Chodouny"
+        },
+        "ds_id": "5y3bnm5"
+    },
+    "Chodovlice": {
+        "address": {
+            "street": "84",
+            "zip": "411 15",
+            "city": "Chodovlice",
+            "district": "Chodovlice"
+        },
+        "ds_id": "bdtatxn"
+    },
+    "Chodsk\u00e1 Lhota": {
+        "address": {
+            "street": "83",
+            "zip": "345 06",
+            "city": "Chodsk\u00e1 Lhota",
+            "district": "Chodsk\u00e1 Lhota"
+        },
+        "ds_id": "xaubwgz"
+    },
+    "Chodsk\u00fd \u00dajezd": {
+        "address": {
+            "street": "71",
+            "zip": "348 15",
+            "city": "Chodsk\u00fd \u00dajezd",
+            "district": "Chodsk\u00fd \u00dajezd"
+        },
+        "ds_id": "vabbqmg"
+    },
+    "Cholina": {
+        "address": {
+            "street": "52",
+            "zip": "783 22",
+            "city": "Cholina",
+            "district": "Cholina"
+        },
+        "ds_id": "nurbezm"
+    },
+    "Chomle": {
+        "address": {
+            "street": "19",
+            "zip": "338 28",
+            "city": "Chomle",
+            "district": "Chomle"
+        },
+        "ds_id": "bqtay6d"
+    },
+    "Chomutice": {
+        "address": {
+            "street": "4",
+            "zip": "507 53",
+            "city": "Chomutice",
+            "district": "Chomutice"
+        },
+        "ds_id": "bzvbymr"
+    },
+    "Chom\u00fd\u017e": {
+        "address": {
+            "street": "52",
+            "zip": "768 61",
+            "city": "Chom\u00fd\u017e",
+            "district": "Chom\u00fd\u017e"
+        },
+        "ds_id": "6w5ajcv"
+    },
+    "Choratice": {
+        "address": {
+            "street": "31",
+            "zip": "285 06",
+            "city": "Choratice",
+            "district": "Choratice"
+        },
+        "ds_id": "iarauvs"
+    },
+    "Chornice": {
+        "address": {
+            "street": "Jev\u00ed\u010dsk\u00e1 41",
+            "zip": "569 42",
+            "city": "Chornice",
+            "district": "Chornice"
+        },
+        "ds_id": "azua3ub"
+    },
+    "Choru\u0161ice": {
+        "address": {
+            "street": "89",
+            "zip": "277 37",
+            "city": "Choru\u0161ice",
+            "district": "Choru\u0161ice"
+        },
+        "ds_id": "s6nakit"
+    },
+    "Choryn\u011b": {
+        "address": {
+            "street": "200",
+            "zip": "756 42",
+            "city": "Choryn\u011b",
+            "district": "Choryn\u011b"
+        },
+        "ds_id": "t5wa9rh"
+    },
+    "Cho\u0165\u00e1nky": {
+        "address": {
+            "street": "24",
+            "zip": "290 01",
+            "city": "Cho\u0165\u00e1nky",
+            "district": "Cho\u0165\u00e1nky"
+        },
+        "ds_id": "z9ianp6"
+    },
+    "Chot\u011bbudice": {
+        "address": {
+            "street": "34",
+            "zip": "675 31",
+            "city": "Chot\u011bbudice",
+            "district": "Chot\u011bbudice"
+        },
+        "ds_id": "wguaqjq"
+    },
+    "Chot\u011bbuz": {
+        "address": {
+            "street": "Chot\u011bbuzsk\u00e1 250",
+            "zip": "735 61",
+            "city": "Chot\u011bbuz",
+            "district": "Chot\u011bbuz"
+        },
+        "ds_id": "iq6azbh"
+    },
+    "Chote\u010d": {
+        "address": {
+            "street": "40",
+            "zip": "252 26",
+            "city": "Chote\u010d",
+            "district": "Chote\u010d"
+        },
+        "ds_id": "mi4bgta"
+    },
+    "Chot\u011bmice": {
+        "address": {
+            "street": "45",
+            "zip": "392 01",
+            "city": "Chot\u011bmice",
+            "district": "Chot\u011bmice"
+        },
+        "ds_id": "yv4edzr"
+    },
+    "Chot\u011bnov": {
+        "address": {
+            "street": "23",
+            "zip": "570 01",
+            "city": "Chot\u011bnov",
+            "district": "Chot\u011bnov"
+        },
+        "ds_id": "6gia3kd"
+    },
+    "Chot\u011b\u0161ice": {
+        "address": {
+            "street": "29",
+            "zip": "289 01",
+            "city": "Chot\u011b\u0161ice",
+            "district": "Chot\u011b\u0161ice"
+        },
+        "ds_id": "vxfb5u5"
+    },
+    "Chot\u011b\u0161ov": {
+        "address": {
+            "street": "Plze\u0148sk\u00e1 88",
+            "zip": "332 14",
+            "city": "Chot\u011b\u0161ov",
+            "district": "Chot\u011b\u0161ov"
+        },
+        "ds_id": "i9tb6sj"
+    },
+    "Chot\u00edkov": {
+        "address": {
+            "street": "118",
+            "zip": "330 17",
+            "city": "Chot\u00edkov",
+            "district": "Chot\u00edkov"
+        },
+        "ds_id": "ugwbey5"
+    },
+    "Chotilsko": {
+        "address": {
+            "street": "7",
+            "zip": "262 03",
+            "city": "Chotilsko",
+            "district": "Chotilsko"
+        },
+        "ds_id": "42saka5"
+    },
+    "Chotim\u011b\u0159": {
+        "address": {
+            "street": "66",
+            "zip": "410 02",
+            "city": "Chotim\u011b\u0159",
+            "district": "Chotim\u011b\u0159"
+        },
+        "ds_id": "vdzaqt9"
+    },
+    "Chotin\u011bves": {
+        "address": {
+            "street": "6",
+            "zip": "411 45",
+            "city": "Chotin\u011bves",
+            "district": "Chotin\u011bves"
+        },
+        "ds_id": "r2nbnku"
+    },
+    "Chotovice": {
+        "address": {
+            "street": "8",
+            "zip": "473 01",
+            "city": "Chotovice",
+            "district": "Chotovice"
+        },
+        "ds_id": "ar8eds2"
+    },
+    "Cho\u0165ovice": {
+        "address": {
+            "street": "1",
+            "zip": "289 05",
+            "city": "Cho\u0165ovice",
+            "district": "Cho\u0165ovice"
+        },
+        "ds_id": "kh7ant6"
+    },
+    "Chotoviny": {
+        "address": {
+            "street": "Hlinick\u00e1 250",
+            "zip": "391 37",
+            "city": "Chotoviny",
+            "district": "Chotoviny"
+        },
+        "ds_id": "svqb42q"
+    },
+    "Chotusice": {
+        "address": {
+            "street": "61",
+            "zip": "285 76",
+            "city": "Chotusice",
+            "district": "Chotusice"
+        },
+        "ds_id": "smmaqfz"
+    },
+    "Chotutice": {
+        "address": {
+            "street": "Pr\u016fb\u011b\u017en\u00e1 107",
+            "zip": "281 03",
+            "city": "Chotutice",
+            "district": "Chotutice"
+        },
+        "ds_id": "arybuvt"
+    },
+    "Chot\u00fd\u010dany": {
+        "address": {
+            "street": "20",
+            "zip": "373 62",
+            "city": "Chot\u00fd\u010dany",
+            "district": "Chot\u00fd\u010dany"
+        },
+        "ds_id": "g4gedur"
+    },
+    "Chotyn\u011b": {
+        "address": {
+            "street": "163",
+            "zip": "463 34",
+            "city": "Chotyn\u011b",
+            "district": "Chotyn\u011b"
+        },
+        "ds_id": "jpmbey9"
+    },
+    "Chot\u00fd\u0161any": {
+        "address": {
+            "street": "54",
+            "zip": "257 28",
+            "city": "Chot\u00fd\u0161any",
+            "district": "Chot\u00fd\u0161any"
+        },
+        "ds_id": "fmkbgem"
+    },
+    "Choustn\u00edk": {
+        "address": {
+            "street": "16",
+            "zip": "391 18",
+            "city": "Choustn\u00edk",
+            "district": "Choustn\u00edk"
+        },
+        "ds_id": "rsvb5aa"
+    },
+    "Cho\u017eov": {
+        "address": {
+            "street": "154",
+            "zip": "439 22",
+            "city": "Cho\u017eov",
+            "district": "Cho\u017eov"
+        },
+        "ds_id": "s9pbu53"
+    },
+    "Chraberce": {
+        "address": {
+            "street": "11",
+            "zip": "440 01",
+            "city": "Chraberce",
+            "district": "Chraberce"
+        },
+        "ds_id": "44faq3m"
+    },
+    "Chr\u00e1st": {
+        "address": {
+            "street": "150",
+            "zip": "289 14",
+            "city": "Chr\u00e1st",
+            "district": "Chr\u00e1st"
+        },
+        "ds_id": "jgtbgic"
+    },
+    "Chrastavec": {
+        "address": {
+            "street": "55",
+            "zip": "569 04",
+            "city": "Chrastavec",
+            "district": "Chrastavec"
+        },
+        "ds_id": "yb8a4ru"
+    },
+    "Chrastavice": {
+        "address": {
+            "street": "28",
+            "zip": "344 01",
+            "city": "Chrastavice",
+            "district": "Chrastavice"
+        },
+        "ds_id": "84qau7u"
+    },
+    "Chr\u00e1\u0161\u0165any": {
+        "address": {
+            "street": "20",
+            "zip": "282 01",
+            "city": "Chr\u00e1\u0161\u0165any",
+            "district": "Chr\u00e1\u0161\u0165any"
+        },
+        "ds_id": "guwapwm"
+    },
+    "Chra\u0161tice": {
+        "address": {
+            "street": "2",
+            "zip": "262 72",
+            "city": "Chra\u0161tice",
+            "district": "Chra\u0161tice"
+        },
+        "ds_id": "nhxak4u"
+    },
+    "Chr\u00e1\u0161\u0165ovice": {
+        "address": {
+            "street": "75",
+            "zip": "386 01",
+            "city": "Chr\u00e1\u0161\u0165ovice",
+            "district": "Chr\u00e1\u0161\u0165ovice"
+        },
+        "ds_id": "35vamrw"
+    },
+    "Chrbon\u00edn": {
+        "address": {
+            "street": "37",
+            "zip": "391 55",
+            "city": "Chrbon\u00edn",
+            "district": "Chrbon\u00edn"
+        },
+        "ds_id": "q6wam95"
+    },
+    "Chroboly": {
+        "address": {
+            "street": "91",
+            "zip": "384 04",
+            "city": "Chroboly",
+            "district": "Chroboly"
+        },
+        "ds_id": "rpjbtq9"
+    },
+    "Chrome\u010d": {
+        "address": {
+            "street": "71",
+            "zip": "789 01",
+            "city": "Chrome\u010d",
+            "district": "Chrome\u010d"
+        },
+        "ds_id": "bgjjdtu"
+    },
+    "Chroustov": {
+        "address": {
+            "street": "81",
+            "zip": "289 02",
+            "city": "Chroustov",
+            "district": "Chroustov"
+        },
+        "ds_id": "b6fav27"
+    },
+    "Chrtn\u00ed\u010d": {
+        "address": {
+            "street": "52",
+            "zip": "582 82",
+            "city": "Chrtn\u00ed\u010d",
+            "district": "Chrtn\u00ed\u010d"
+        },
+        "ds_id": "2a4a5ts"
+    },
+    "Chrtn\u00edky": {
+        "address": {
+            "street": "24",
+            "zip": "535 01",
+            "city": "Chrtn\u00edky",
+            "district": "Chrtn\u00edky"
+        },
+        "ds_id": "nqvjdru"
+    },
+    "Chrudichromy": {
+        "address": {
+            "street": "48",
+            "zip": "680 01",
+            "city": "Chrudichromy",
+            "district": "Chrudichromy"
+        },
+        "ds_id": "dtva8z4"
+    },
+    "Chrustenice": {
+        "address": {
+            "street": "69",
+            "zip": "267 12",
+            "city": "Chrustenice",
+            "district": "Chrustenice"
+        },
+        "ds_id": "4una7r4"
+    },
+    "Chr\u017e\u00edn": {
+        "address": {
+            "street": "7",
+            "zip": "273 24",
+            "city": "Chr\u017e\u00edn",
+            "district": "Chr\u017e\u00edn"
+        },
+        "ds_id": "hsha8cr"
+    },
+    "Ch\u0159enovice": {
+        "address": {
+            "street": "1",
+            "zip": "584 01",
+            "city": "Ch\u0159enovice",
+            "district": "Ch\u0159enovice"
+        },
+        "ds_id": "rg3j2t9"
+    },
+    "Ch\u0159\u00ed\u010d": {
+        "address": {
+            "street": "26",
+            "zip": "331 41",
+            "city": "Ch\u0159\u00ed\u010d",
+            "district": "Ch\u0159\u00ed\u010d"
+        },
+        "ds_id": "z43bexk"
+    },
+    "Chud\u010dice": {
+        "address": {
+            "street": "220",
+            "zip": "664 71",
+            "city": "Chud\u010dice",
+            "district": "Chud\u010dice"
+        },
+        "ds_id": "wnhbqt4"
+    },
+    "Chuden\u00edn": {
+        "address": {
+            "street": "68",
+            "zip": "340 22",
+            "city": "Chuden\u00edn",
+            "district": "Chuden\u00edn"
+        },
+        "ds_id": "phybhv9"
+    },
+    "Chuderov": {
+        "address": {
+            "street": "63",
+            "zip": "400 02",
+            "city": "Chuderov",
+            "district": "Chuderov"
+        },
+        "ds_id": "w2gbgwe"
+    },
+    "Chud\u00ed\u0159": {
+        "address": {
+            "street": "16",
+            "zip": "294 45",
+            "city": "Chud\u00ed\u0159",
+            "district": "Chud\u00ed\u0159"
+        },
+        "ds_id": "zrdapt2"
+    },
+    "Chudoslavice": {
+        "address": {
+            "street": "18",
+            "zip": "412 01",
+            "city": "Chudoslavice",
+            "district": "Chudoslavice"
+        },
+        "ds_id": "s6jawvv"
+    },
+    "Chuchelna": {
+        "address": {
+            "street": "296",
+            "zip": "513 01",
+            "city": "Chuchelna",
+            "district": "Chuchelna"
+        },
+        "ds_id": "ib5bypj"
+    },
+    "Chucheln\u00e1": {
+        "address": {
+            "street": "K. M. Lichnovsk\u00e9ho 10",
+            "zip": "747 24",
+            "city": "Chucheln\u00e1",
+            "district": "Chucheln\u00e1"
+        },
+        "ds_id": "gihbexu"
+    },
+    "Chvalatice": {
+        "address": {
+            "street": "72",
+            "zip": "671 02",
+            "city": "Chvalatice",
+            "district": "Chvalatice"
+        },
+        "ds_id": "6b3btut"
+    },
+    "Chval\u010dov": {
+        "address": {
+            "street": "Ob\u0159ansk\u00e1 145",
+            "zip": "768 72",
+            "city": "Chval\u010dov",
+            "district": "Chval\u010dov"
+        },
+        "ds_id": "7q8bew4"
+    },
+    "Chv\u00e1lenice": {
+        "address": {
+            "street": "21",
+            "zip": "332 05",
+            "city": "Chv\u00e1lenice",
+            "district": "Chv\u00e1lenice"
+        },
+        "ds_id": "meqbwqp"
+    },
+    "Chval\u00edkovice": {
+        "address": {
+            "street": "\u010cesk\u00e9 \u0161koly 63",
+            "zip": "747 06",
+            "city": "Chval\u00edkovice",
+            "district": "Chval\u00edkovice"
+        },
+        "ds_id": "s66bs5u"
+    },
+    "Chvalkovice": {
+        "address": {
+            "street": "61",
+            "zip": "683 41",
+            "city": "Chvalkovice",
+            "district": "Chvalkovice"
+        },
+        "ds_id": "u4ja2q6"
+    },
+    "Chvalovice": {
+        "address": {
+            "street": "47",
+            "zip": "384 11",
+            "city": "Chvalovice",
+            "district": "Chvalovice"
+        },
+        "ds_id": "fvgapd5"
+    },
+    "Chval\u0161iny": {
+        "address": {
+            "street": "38",
+            "zip": "382 08",
+            "city": "Chval\u0161iny",
+            "district": "Chval\u0161iny"
+        },
+        "ds_id": "rezb2uv"
+    },
+    "Chvojenec": {
+        "address": {
+            "street": "30",
+            "zip": "534 01",
+            "city": "Chvojenec",
+            "district": "Chvojenec"
+        },
+        "ds_id": "hjpa9wu"
+    },
+    "Chy\u0148ava": {
+        "address": {
+            "street": "Velk\u00e1 Strana 39",
+            "zip": "267 07",
+            "city": "Chy\u0148ava",
+            "district": "Chy\u0148ava"
+        },
+        "ds_id": "mk2anjm"
+    },
+    "Ch\u00fdstovice": {
+        "address": {
+            "street": "41",
+            "zip": "395 01",
+            "city": "Ch\u00fdstovice",
+            "district": "Ch\u00fdstovice"
+        },
+        "ds_id": "a9fa9u2"
+    },
+    "Chy\u0161ky": {
+        "address": {
+            "street": "27",
+            "zip": "398 53",
+            "city": "Chy\u0161ky",
+            "district": "Chy\u0161ky"
+        },
+        "ds_id": "nvfbywh"
+    },
+    "Chy\u0161n\u00e1": {
+        "address": {
+            "street": "33",
+            "zip": "395 01",
+            "city": "Chy\u0161n\u00e1",
+            "district": "Chy\u0161n\u00e1"
+        },
+        "ds_id": "dujbsww"
+    },
+    "Ch\u00fd\u0161\u0165": {
+        "address": {
+            "street": "57",
+            "zip": "533 16",
+            "city": "Ch\u00fd\u0161\u0165",
+            "district": "Ch\u00fd\u0161\u0165"
+        },
+        "ds_id": "sfkazjv"
+    },
+    "Iva\u0148": {
+        "address": {
+            "street": "197",
+            "zip": "798 23",
+            "city": "Iva\u0148",
+            "district": "Iva\u0148"
+        },
+        "ds_id": "huxbkp3"
+    },
+    "Jabkenice": {
+        "address": {
+            "street": "136",
+            "zip": "294 45",
+            "city": "Jabkenice",
+            "district": "Jabkenice"
+        },
+        "ds_id": "suub7tz"
+    },
+    "Jablo\u0148any": {
+        "address": {
+            "street": "88",
+            "zip": "679 01",
+            "city": "Jablo\u0148any",
+            "district": "Jablo\u0148any"
+        },
+        "ds_id": "cqrb8av"
+    },
+    "Jablonn\u00e1": {
+        "address": {
+            "street": "96",
+            "zip": "262 63",
+            "city": "Jablonn\u00e1",
+            "district": "Jablonn\u00e1"
+        },
+        "ds_id": "ju4jd6k"
+    },
+    "Jablo\u0148ov": {
+        "address": {
+            "street": "52",
+            "zip": "594 01",
+            "city": "Jablo\u0148ov",
+            "district": "Jablo\u0148ov"
+        },
+        "ds_id": "brebvea"
+    },
+    "Jabl\u016fnka": {
+        "address": {
+            "street": "365",
+            "zip": "756 23",
+            "city": "Jabl\u016fnka",
+            "district": "Jabl\u016fnka"
+        },
+        "ds_id": "8xgbdvf"
+    },
+    "Jakartovice": {
+        "address": {
+            "street": "89",
+            "zip": "747 53",
+            "city": "Jakartovice",
+            "district": "Jakartovice"
+        },
+        "ds_id": "jj2b4fh"
+    },
+    "Jakub\u010dovice nad Odrou": {
+        "address": {
+            "street": "Odersk\u00e1 100",
+            "zip": "742 36",
+            "city": "Jakub\u010dovice nad Odrou",
+            "district": "Jakub\u010dovice nad Odrou"
+        },
+        "ds_id": "49zb3n7"
+    },
+    "Jakubovice": {
+        "address": {
+            "street": "25",
+            "zip": "789 91",
+            "city": "Jakubovice",
+            "district": "Jakubovice"
+        },
+        "ds_id": "2vvauc2"
+    },
+    "Jakubov u Moravsk\u00fdch Bud\u011bjovic": {
+        "address": {
+            "street": "155",
+            "zip": "675 44",
+            "city": "Jakubov u Moravsk\u00fdch Bud\u011bjovic",
+            "district": "Jakubov u Moravsk\u00fdch Bud\u011bjovic"
+        },
+        "ds_id": "9gha9yc"
+    },
+    "Jalub\u00ed": {
+        "address": {
+            "street": "135",
+            "zip": "687 05",
+            "city": "Jalub\u00ed",
+            "district": "Jalub\u00ed"
+        },
+        "ds_id": "x57bdvm"
+    },
+    "Jamn\u00e9": {
+        "address": {
+            "street": "166",
+            "zip": "588 27",
+            "city": "Jamn\u00e9",
+            "district": "Jamn\u00e9"
+        },
+        "ds_id": "cyibrke"
+    },
+    "Jamn\u00e9 nad Orlic\u00ed": {
+        "address": {
+            "street": "280",
+            "zip": "561 65",
+            "city": "Jamn\u00e9 nad Orlic\u00ed",
+            "district": "Jamn\u00e9 nad Orlic\u00ed"
+        },
+        "ds_id": "85ha4rn"
+    },
+    "Jamolice": {
+        "address": {
+            "street": "8",
+            "zip": "672 01",
+            "city": "Jamolice",
+            "district": "Jamolice"
+        },
+        "ds_id": "ttsazrh"
+    },
+    "J\u00e1my": {
+        "address": {
+            "street": "47",
+            "zip": "592 32",
+            "city": "J\u00e1my",
+            "district": "J\u00e1my"
+        },
+        "ds_id": "m3xbzka"
+    },
+    "Jankov": {
+        "address": {
+            "street": "Na n\u00e1m\u011bst\u00ed 14",
+            "zip": "257 03",
+            "city": "Jankov",
+            "district": "Jankov"
+        },
+        "ds_id": "yp4a679"
+    },
+    "Jankovice": {
+        "address": {
+            "street": "101",
+            "zip": "769 01",
+            "city": "Jankovice",
+            "district": "Jankovice"
+        },
+        "ds_id": "uq7b6vs"
+    },
+    "Janou\u0161ov": {
+        "address": {
+            "street": "65",
+            "zip": "789 91",
+            "city": "Janou\u0161ov",
+            "district": "Janou\u0161ov"
+        },
+        "ds_id": "7rear8x"
+    },
+    "Janov\u00e1": {
+        "address": {
+            "street": "200",
+            "zip": "755 01",
+            "city": "Janov\u00e1",
+            "district": "Janov\u00e1"
+        },
+        "ds_id": "wh5b6qj"
+    },
+    "Janovice": {
+        "address": {
+            "street": "83",
+            "zip": "739 11",
+            "city": "Janovice",
+            "district": "Janovice"
+        },
+        "ds_id": "ruwaypi"
+    },
+    "Janovice v Podje\u0161t\u011bd\u00ed": {
+        "address": {
+            "street": "90",
+            "zip": "463 53",
+            "city": "Janovice v Podje\u0161t\u011bd\u00ed",
+            "district": "Janovice v Podje\u0161t\u011bd\u00ed"
+        },
+        "ds_id": "vk8b77b"
+    },
+    "Janov nad Nisou": {
+        "address": {
+            "street": "520",
+            "zip": "468 11",
+            "city": "Janov nad Nisou",
+            "district": "Janov nad Nisou"
+        },
+        "ds_id": "q46attp"
+    },
+    "Jansk\u00e1": {
+        "address": {
+            "street": "83",
+            "zip": "405 02",
+            "city": "Jansk\u00e1",
+            "district": "Jansk\u00e1"
+        },
+        "ds_id": "qngbne8"
+    },
+    "Jan\u016fv D\u016fl": {
+        "address": {
+            "street": "75",
+            "zip": "463 52",
+            "city": "Jan\u016fv D\u016fl",
+            "district": "Jan\u016fv D\u016fl"
+        },
+        "ds_id": "qhkavqm"
+    },
+    "Jan\u016fvky": {
+        "address": {
+            "street": "15",
+            "zip": "569 43",
+            "city": "Jan\u016fvky",
+            "district": "Jan\u016fvky"
+        },
+        "ds_id": "sp3a4sc"
+    },
+    "Jarcov\u00e1": {
+        "address": {
+            "street": "200",
+            "zip": "757 01",
+            "city": "Jarcov\u00e1",
+            "district": "Jarcov\u00e1"
+        },
+        "ds_id": "yanamm7"
+    },
+    "Jarohn\u011bvice": {
+        "address": {
+            "street": "83",
+            "zip": "768 01",
+            "city": "Jarohn\u011bvice",
+            "district": "Jarohn\u011bvice"
+        },
+        "ds_id": "4w4bj4d"
+    },
+    "Jarom\u011b\u0159ice": {
+        "address": {
+            "street": "1",
+            "zip": "569 44",
+            "city": "Jarom\u011b\u0159ice",
+            "district": "Jarom\u011b\u0159ice"
+        },
+        "ds_id": "3hca4s6"
+    },
+    "Jaroslav": {
+        "address": {
+            "street": "6",
+            "zip": "534 01",
+            "city": "Jaroslav",
+            "district": "Jaroslav"
+        },
+        "ds_id": "stga3z9"
+    },
+    "Jaroslavice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 93",
+            "zip": "671 28",
+            "city": "Jaroslavice",
+            "district": "Jaroslavice"
+        },
+        "ds_id": "pcwbdvr"
+    },
+    "Jaro\u0161ov": {
+        "address": {
+            "street": "96",
+            "zip": "569 66",
+            "city": "Jaro\u0161ov",
+            "district": "Jaro\u0161ov"
+        },
+        "ds_id": "cama4ty"
+    },
+    "Jaro\u0161ov nad Ne\u017e\u00e1rkou": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "Jaro\u0161ov nad Ne\u017e\u00e1rkou 84, Jaro\u0161ov nad Ne\u017e\u00e1rkou, 37841 Jaro\u0161ov nad Ne\u017e\u00e1rkou",
+            "district": ""
+        },
+        "ds_id": "2rjefur"
+    },
+    "Jarov": {
+        "address": {
+            "street": "24",
+            "zip": "331 51",
+            "city": "Jarov",
+            "district": "Jarov"
+        },
+        "ds_id": "ez8avmg"
+    },
+    "Jarpice": {
+        "address": {
+            "street": "5",
+            "zip": "273 72",
+            "city": "Jarpice",
+            "district": "Jarpice"
+        },
+        "ds_id": "9aja8r6"
+    },
+    "Jasenice": {
+        "address": {
+            "street": "50",
+            "zip": "675 71",
+            "city": "Jasenice",
+            "district": "Jasenice"
+        },
+        "ds_id": "ebrb6we"
+    },
+    "Jasenn\u00e1": {
+        "address": {
+            "street": "190",
+            "zip": "763 13",
+            "city": "Jasenn\u00e1",
+            "district": "Jasenn\u00e1"
+        },
+        "ds_id": "9mrarap"
+    },
+    "Javor": {
+        "address": {
+            "street": "38",
+            "zip": "340 21",
+            "city": "Javor",
+            "district": "Javor"
+        },
+        "ds_id": "zp8brmk"
+    },
+    "Javorek": {
+        "address": {
+            "street": "57",
+            "zip": "592 03",
+            "city": "Javorek",
+            "district": "Javorek"
+        },
+        "ds_id": "5bnb8fp"
+    },
+    "Jav\u016frek": {
+        "address": {
+            "street": "11",
+            "zip": "664 83",
+            "city": "Jav\u016frek",
+            "district": "Jav\u016frek"
+        },
+        "ds_id": "qbgbg7h"
+    },
+    "Jedl\u00e1": {
+        "address": {
+            "street": "25",
+            "zip": "584 01",
+            "city": "Jedl\u00e1",
+            "district": "Jedl\u00e1"
+        },
+        "ds_id": "g2uaq5u"
+    },
+    "Jedlany": {
+        "address": {
+            "street": "48",
+            "zip": "391 37",
+            "city": "Jedlany",
+            "district": "Jedlany"
+        },
+        "ds_id": "zj7ed44"
+    },
+    "Jedl\u00ed": {
+        "address": {
+            "street": "16",
+            "zip": "789 01",
+            "city": "Jedl\u00ed",
+            "district": "Jedl\u00ed"
+        },
+        "ds_id": "gipar9r"
+    },
+    "Jedlov\u00e1": {
+        "address": {
+            "street": "321",
+            "zip": "569 91",
+            "city": "Jedlov\u00e1",
+            "district": "Jedlov\u00e1"
+        },
+        "ds_id": "6nga4tj"
+    },
+    "Jedom\u011blice": {
+        "address": {
+            "street": "16",
+            "zip": "273 78",
+            "city": "Jedom\u011blice",
+            "district": "Jedom\u011blice"
+        },
+        "ds_id": "56eatkd"
+    },
+    "Jedousov": {
+        "address": {
+            "street": "34",
+            "zip": "535 01",
+            "city": "Jedousov",
+            "district": "Jedousov"
+        },
+        "ds_id": "2wna3wt"
+    },
+    "Jehn\u011bd\u00ed": {
+        "address": {
+            "street": "3",
+            "zip": "562 01",
+            "city": "Jehn\u011bd\u00ed",
+            "district": "Jehn\u011bd\u00ed"
+        },
+        "ds_id": "ffra4ud"
+    },
+    "Jemn\u00edky": {
+        "address": {
+            "street": "97",
+            "zip": "274 01",
+            "city": "Jemn\u00edky",
+            "district": "Jemn\u00edky"
+        },
+        "ds_id": "89vanu9"
+    },
+    "Jen\u010dice": {
+        "address": {
+            "street": "58",
+            "zip": "411 15",
+            "city": "Jen\u010dice",
+            "district": "Jen\u010dice"
+        },
+        "ds_id": "4mua9b7"
+    },
+    "Jene\u010d": {
+        "address": {
+            "street": "Lidick\u00e1 82",
+            "zip": "252 61",
+            "city": "Jene\u010d",
+            "district": "Jene\u010d"
+        },
+        "ds_id": "n8fb558"
+    },
+    "Jen\u00edkov": {
+        "address": {
+            "street": "52",
+            "zip": "417 24",
+            "city": "Jen\u00edkov",
+            "district": "Old\u0159ichov"
+        },
+        "ds_id": "zfrbne4"
+    },
+    "Jen\u00edkovice": {
+        "address": {
+            "street": "66",
+            "zip": "535 01",
+            "city": "Jen\u00edkovice",
+            "district": "Jen\u00edkovice"
+        },
+        "ds_id": "iceaznb"
+    },
+    "Jeni\u0161ov": {
+        "address": {
+            "street": "88",
+            "zip": "360 01",
+            "city": "Jeni\u0161ov",
+            "district": "Jeni\u0161ov"
+        },
+        "ds_id": "gytbvqm"
+    },
+    "Jeni\u0161ovice": {
+        "address": {
+            "street": "42",
+            "zip": "538 64",
+            "city": "Jeni\u0161ovice",
+            "district": "Jeni\u0161ovice"
+        },
+        "ds_id": "cshb2qa"
+    },
+    "Jers\u00edn": {
+        "address": {
+            "street": "10",
+            "zip": "588 25",
+            "city": "Jers\u00edn",
+            "district": "Jers\u00edn"
+        },
+        "ds_id": "kz9ax2c"
+    },
+    "Je\u0159ice": {
+        "address": {
+            "street": "21",
+            "zip": "508 01",
+            "city": "Je\u0159ice",
+            "district": "Je\u0159ice"
+        },
+        "ds_id": "as5as3b"
+    },
+    "Je\u0159i\u0161no": {
+        "address": {
+            "street": "25",
+            "zip": "582 74",
+            "city": "Je\u0159i\u0161no",
+            "district": "Je\u0159i\u0161no"
+        },
+        "ds_id": "p7dax3p"
+    },
+    "Je\u0159manice": {
+        "address": {
+            "street": "Pastevn\u00ed 274",
+            "zip": "463 12",
+            "city": "Je\u0159manice",
+            "district": "Je\u0159manice"
+        },
+        "ds_id": "ehaan7h"
+    },
+    "Jesenec": {
+        "address": {
+            "street": "117",
+            "zip": "798 53",
+            "city": "Jesenec",
+            "district": "Jesenec"
+        },
+        "ds_id": "swyaqv6"
+    },
+    "Jesen\u00edk nad Odrou": {
+        "address": {
+            "street": "256",
+            "zip": "742 33",
+            "city": "Jesen\u00edk nad Odrou",
+            "district": "Jesen\u00edk nad Odrou"
+        },
+        "ds_id": "em3br89"
+    },
+    "Jesenn\u00fd": {
+        "address": {
+            "street": "13",
+            "zip": "512 12",
+            "city": "Jesenn\u00fd",
+            "district": "Jesenn\u00fd"
+        },
+        "ds_id": "44xbxnp"
+    },
+    "Jest\u0159ab\u00ed Lhota": {
+        "address": {
+            "street": "74",
+            "zip": "280 02",
+            "city": "Jest\u0159ab\u00ed Lhota",
+            "district": "Jest\u0159ab\u00ed Lhota"
+        },
+        "ds_id": "2qibpdr"
+    },
+    "Jest\u0159ab\u00ed v Krkono\u0161\u00edch": {
+        "address": {
+            "street": "42",
+            "zip": "514 01",
+            "city": "Jest\u0159ab\u00ed v Krkono\u0161\u00edch",
+            "district": "Roudnice"
+        },
+        "ds_id": "4gvasyk"
+    },
+    "Jest\u0159eb\u00ed": {
+        "address": {
+            "street": "142",
+            "zip": "471 61",
+            "city": "Jest\u0159eb\u00ed",
+            "district": "Jest\u0159eb\u00ed"
+        },
+        "ds_id": "v2xbsq3"
+    },
+    "Je\u0161etice": {
+        "address": {
+            "street": "22",
+            "zip": "257 89",
+            "city": "Je\u0161etice",
+            "district": "Je\u0161etice"
+        },
+        "ds_id": "3mmay8v"
+    },
+    "Jet\u011btice": {
+        "address": {
+            "street": "122",
+            "zip": "398 48",
+            "city": "Jet\u011btice",
+            "district": "Jet\u011btice"
+        },
+        "ds_id": "bwuap2g"
+    },
+    "Jet\u0159ichovice": {
+        "address": {
+            "street": "24",
+            "zip": "407 16",
+            "city": "Jet\u0159ichovice",
+            "district": "Jet\u0159ichovice"
+        },
+        "ds_id": "6ryarph"
+    },
+    "Jevany": {
+        "address": {
+            "street": "\u010cernokosteleck\u00e1 49",
+            "zip": "281 66",
+            "city": "Jevany",
+            "district": "Jevany"
+        },
+        "ds_id": "j7sbduc"
+    },
+    "Jevin\u011bves": {
+        "address": {
+            "street": "28",
+            "zip": "277 05",
+            "city": "Jevin\u011bves",
+            "district": "Jevin\u011bves"
+        },
+        "ds_id": "s9kb7g6"
+    },
+    "Jevi\u0161ovka": {
+        "address": {
+            "street": "98",
+            "zip": "691 83",
+            "city": "Jevi\u0161ovka",
+            "district": "Jevi\u0161ovka"
+        },
+        "ds_id": "mpga2ww"
+    },
+    "Jezbo\u0159ice": {
+        "address": {
+            "street": "67",
+            "zip": "530 02",
+            "city": "Jezbo\u0159ice",
+            "district": "Jezbo\u0159ice"
+        },
+        "ds_id": "3u5bhjn"
+    },
+    "Jezdkovice": {
+        "address": {
+            "street": "32",
+            "zip": "747 55",
+            "city": "Jezdkovice",
+            "district": "Jezdkovice"
+        },
+        "ds_id": "r6rb7qq"
+    },
+    "Jezdovice": {
+        "address": {
+            "street": "90",
+            "zip": "589 01",
+            "city": "Jezdovice",
+            "district": "Jezdovice"
+        },
+        "ds_id": "4xsb5z9"
+    },
+    "Jezernice": {
+        "address": {
+            "street": "206",
+            "zip": "751 31",
+            "city": "Jezernice",
+            "district": "Jezernice"
+        },
+        "ds_id": "i6kbive"
+    },
+    "Jeze\u0159any-Mar\u0161ovice": {
+        "address": {
+            "street": "1",
+            "zip": "671 75",
+            "city": "Jeze\u0159any-Mar\u0161ovice",
+            "district": "Jeze\u0159any-Mar\u0161ovice"
+        },
+        "ds_id": "ebubujc"
+    },
+    "Je\u017een\u00e1": {
+        "address": {
+            "street": "12",
+            "zip": "588 41",
+            "city": "Je\u017een\u00e1",
+            "district": "Je\u017een\u00e1"
+        },
+        "ds_id": "jmaaqav"
+    },
+    "Je\u017ekovice": {
+        "address": {
+            "street": "31",
+            "zip": "683 04",
+            "city": "Je\u017ekovice",
+            "district": "Je\u017ekovice"
+        },
+        "ds_id": "x3jbm8f"
+    },
+    "Je\u017eov": {
+        "address": {
+            "street": "33",
+            "zip": "396 01",
+            "city": "Je\u017eov",
+            "district": "Je\u017eov"
+        },
+        "ds_id": "npsayn6"
+    },
+    "Je\u017eovy": {
+        "address": {
+            "street": "52",
+            "zip": "340 12",
+            "city": "Je\u017eovy",
+            "district": "Je\u017eovy"
+        },
+        "ds_id": "ziabqeb"
+    },
+    "Jickovice": {
+        "address": {
+            "street": "87",
+            "zip": "399 01",
+            "city": "Jickovice",
+            "district": "Jickovice"
+        },
+        "ds_id": "9rnbw4n"
+    },
+    "Ji\u010d\u00edn\u011bves": {
+        "address": {
+            "street": "82",
+            "zip": "507 31",
+            "city": "Ji\u010d\u00edn\u011bves",
+            "district": "Ji\u010d\u00edn\u011bves"
+        },
+        "ds_id": "hg6a7wm"
+    },
+    "Jihl\u00e1vka": {
+        "address": {
+            "street": "134",
+            "zip": "588 51",
+            "city": "Jihl\u00e1vka",
+            "district": "Jihl\u00e1vka"
+        },
+        "ds_id": "xkyb6gz"
+    },
+    "J\u00edkev": {
+        "address": {
+            "street": "58",
+            "zip": "289 32",
+            "city": "J\u00edkev",
+            "district": "J\u00edkev"
+        },
+        "ds_id": "apibgig"
+    },
+    "Jilem": {
+        "address": {
+            "street": "55",
+            "zip": "583 01",
+            "city": "Jilem",
+            "district": "Jilem"
+        },
+        "ds_id": "4r2bf4w"
+    },
+    "J\u00edlov\u00e9 u Dr\u017ekova": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "J\u00edlov\u00e9 u Dr\u017ekova 87, J\u00edlov\u00e9 u Dr\u017ekova, 46822 J\u00edlov\u00e9 u Dr\u017ekova",
+            "district": ""
+        },
+        "ds_id": "d2hbt55"
+    },
+    "J\u00edlovice": {
+        "address": {
+            "street": "170",
+            "zip": "373 32",
+            "city": "J\u00edlovice",
+            "district": "J\u00edlovice"
+        },
+        "ds_id": "72gbrpb"
+    },
+    "J\u00edlovi\u0161t\u011b": {
+        "address": {
+            "street": "Pra\u017esk\u00e1 81",
+            "zip": "252 02",
+            "city": "J\u00edlovi\u0161t\u011b",
+            "district": "J\u00edlovi\u0161t\u011b"
+        },
+        "ds_id": "e8rbs4j"
+    },
+    "Jiml\u00edn": {
+        "address": {
+            "street": "7",
+            "zip": "440 01",
+            "city": "Jiml\u00edn",
+            "district": "Jiml\u00edn"
+        },
+        "ds_id": "zjxbu7v"
+    },
+    "Jina\u010dovice": {
+        "address": {
+            "street": "83",
+            "zip": "664 34",
+            "city": "Jina\u010dovice",
+            "district": "Jina\u010dovice"
+        },
+        "ds_id": "u8gb8i5"
+    },
+    "Jind\u0159ichov": {
+        "address": {
+            "street": "78",
+            "zip": "788 23",
+            "city": "Jind\u0159ichov",
+            "district": "Jind\u0159ichov"
+        },
+        "ds_id": "gywbjdi"
+    },
+    "Jind\u0159ichovice": {
+        "address": {
+            "street": "232",
+            "zip": "358 01",
+            "city": "Jind\u0159ichovice",
+            "district": "Jind\u0159ichovice"
+        },
+        "ds_id": "dmxa7sw"
+    },
+    "Jind\u0159ichovice pod Smrkem": {
+        "address": {
+            "street": "245",
+            "zip": "463 65",
+            "city": "Jind\u0159ichovice pod Smrkem",
+            "district": "Jind\u0159ichovice pod Smrkem"
+        },
+        "ds_id": "xf4bdsb"
+    },
+    "Jin\u00edn": {
+        "address": {
+            "street": "41",
+            "zip": "386 01",
+            "city": "Jin\u00edn",
+            "district": "Jin\u00edn"
+        },
+        "ds_id": "gbvattt"
+    },
+    "Jino\u010dany": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 5. kv\u011btna 19",
+            "zip": "252 25",
+            "city": "Jino\u010dany",
+            "district": "Jino\u010dany"
+        },
+        "ds_id": "nntbdsf"
+    },
+    "Jino\u0161ov": {
+        "address": {
+            "street": "24",
+            "zip": "675 71",
+            "city": "Jino\u0161ov",
+            "district": "Jino\u0161ov"
+        },
+        "ds_id": "jxeayau"
+    },
+    "Jiratice": {
+        "address": {
+            "street": "26",
+            "zip": "675 32",
+            "city": "Jiratice",
+            "district": "Jiratice"
+        },
+        "ds_id": "4xaaxe8"
+    },
+    "Jirny": {
+        "address": {
+            "street": "Brand\u00fdsk\u00e1 9",
+            "zip": "250 90",
+            "city": "Jirny",
+            "district": "Jirny"
+        },
+        "ds_id": "5n5arx2"
+    },
+    "Ji\u0159et\u00edn pod Jedlovou": {
+        "address": {
+            "street": "Vina\u0159sk\u00e1 32",
+            "zip": "407 56",
+            "city": "Ji\u0159et\u00edn pod Jedlovou",
+            "district": "Ji\u0159et\u00edn pod Jedlovou"
+        },
+        "ds_id": "dd6bngb"
+    },
+    "Ji\u0159ice": {
+        "address": {
+            "street": "56",
+            "zip": "289 22",
+            "city": "Ji\u0159ice",
+            "district": "Ji\u0159ice"
+        },
+        "ds_id": "d3nasbn"
+    },
+    "Ji\u0159ice u Miroslavi": {
+        "address": {
+            "street": "33",
+            "zip": "671 78",
+            "city": "Ji\u0159ice u Miroslavi",
+            "district": "Ji\u0159ice u Miroslavi"
+        },
+        "ds_id": "etzbtff"
+    },
+    "Ji\u0159ice u Moravsk\u00fdch Bud\u011bjovic": {
+        "address": {
+            "street": "7",
+            "zip": "671 54",
+            "city": "Ji\u0159ice u Moravsk\u00fdch Bud\u011bjovic",
+            "district": "Ji\u0159ice u Moravsk\u00fdch Bud\u011bjovic"
+        },
+        "ds_id": "2bya22h"
+    },
+    "Ji\u0159\u00edkovice": {
+        "address": {
+            "street": "Za \u0160kolou 230",
+            "zip": "664 51",
+            "city": "Ji\u0159\u00edkovice",
+            "district": "Ji\u0159\u00edkovice"
+        },
+        "ds_id": "5kha2au"
+    },
+    "Jistebn\u00edk": {
+        "address": {
+            "street": "149",
+            "zip": "742 82",
+            "city": "Jistebn\u00edk",
+            "district": "Jistebn\u00edk"
+        },
+        "ds_id": "nxyb2ws"
+    },
+    "Jitkov": {
+        "address": {
+            "street": "60",
+            "zip": "583 01",
+            "city": "Jitkov",
+            "district": "Jitkov"
+        },
+        "ds_id": "w7qax8t"
+    },
+    "Jivina": {
+        "address": {
+            "street": "76",
+            "zip": "267 62",
+            "city": "Jivina",
+            "district": "Jivina"
+        },
+        "ds_id": "v5na726"
+    },
+    "J\u00edvka": {
+        "address": {
+            "street": "42",
+            "zip": "542 13",
+            "city": "J\u00edvka",
+            "district": "J\u00edvka"
+        },
+        "ds_id": "k4vapph"
+    },
+    "Jivno": {
+        "address": {
+            "street": "34",
+            "zip": "373 71",
+            "city": "Jivno",
+            "district": "Jivno"
+        },
+        "ds_id": "cw6amsp"
+    },
+    "J\u00edvov\u00e1": {
+        "address": {
+            "street": "69",
+            "zip": "783 16",
+            "city": "J\u00edvov\u00e1",
+            "district": "J\u00edvov\u00e1"
+        },
+        "ds_id": "dtsbjc5"
+    },
+    "J\u00edvov\u00ed": {
+        "address": {
+            "street": "40",
+            "zip": "594 51",
+            "city": "J\u00edvov\u00ed",
+            "district": "J\u00edvov\u00ed"
+        },
+        "ds_id": "cc3bg6a"
+    },
+    "Jizbice": {
+        "address": {
+            "street": "72",
+            "zip": "288 02",
+            "city": "Jizbice",
+            "district": "Jizbice"
+        },
+        "ds_id": "nf4a4zh"
+    },
+    "Jizern\u00ed Vtelno": {
+        "address": {
+            "street": "71",
+            "zip": "294 31",
+            "city": "Jizern\u00ed Vtelno",
+            "district": "Jizern\u00ed Vtelno"
+        },
+        "ds_id": "p4xajqe"
+    },
+    "Josefov": {
+        "address": {
+            "street": "12",
+            "zip": "357 09",
+            "city": "Josefov",
+            "district": "Josefov"
+        },
+        "ds_id": "g65amjj"
+    },
+    "Josef\u016fv D\u016fl": {
+        "address": {
+            "street": "218",
+            "zip": "468 44",
+            "city": "Josef\u016fv D\u016fl",
+            "district": "Doln\u00ed Maxov"
+        },
+        "ds_id": "yh6a5y2"
+    },
+    "Kacanovy": {
+        "address": {
+            "street": "51",
+            "zip": "511 01",
+            "city": "Kacanovy",
+            "district": "Kacanovy"
+        },
+        "ds_id": "6d4an93"
+    },
+    "Kace\u0159ov": {
+        "address": {
+            "street": "32",
+            "zip": "357 51",
+            "city": "Kace\u0159ov",
+            "district": "Kace\u0159ov"
+        },
+        "ds_id": "ryeamjd"
+    },
+    "Ka\u010dice": {
+        "address": {
+            "street": "Masarykova 20",
+            "zip": "273 04",
+            "city": "Ka\u010dice",
+            "district": "Ka\u010dice"
+        },
+        "ds_id": "46pbr44"
+    },
+    "Ka\u010dlehy": {
+        "address": {
+            "street": "51",
+            "zip": "377 01",
+            "city": "Ka\u010dlehy",
+            "district": "Ka\u010dlehy"
+        },
+        "ds_id": "e5ia67g"
+    },
+    "Kadl\u00edn, Okres M\u011bln\u00edk": {
+        "address": {
+            "street": "8",
+            "zip": "277 35",
+            "city": "Kadl\u00edn",
+            "district": "Kadl\u00edn"
+        },
+        "ds_id": "s69bgsr"
+    },
+    "Kadolec": {
+        "address": {
+            "street": "61",
+            "zip": "594 51",
+            "city": "Kadolec",
+            "district": "Kadolec"
+        },
+        "ds_id": "q7sajgu"
+    },
+    "Kadov": {
+        "address": {
+            "street": "23",
+            "zip": "672 01",
+            "city": "Kadov",
+            "district": "Kadov"
+        },
+        "ds_id": "d9ha5vx"
+    },
+    "K\u00e1jov": {
+        "address": {
+            "street": "K\u00e1jovsk\u00e1 100",
+            "zip": "382 21",
+            "city": "K\u00e1jov",
+            "district": "K\u00e1jov"
+        },
+        "ds_id": "hwhb3tm"
+    },
+    "Kakejcov": {
+        "address": {
+            "street": "3",
+            "zip": "338 43",
+            "city": "Kakejcov",
+            "district": "Kakejcov"
+        },
+        "ds_id": "a5caqq7"
+    },
+    "Kalek": {
+        "address": {
+            "street": "26",
+            "zip": "431 32",
+            "city": "Kalek",
+            "district": "Kalek"
+        },
+        "ds_id": "79jaq42"
+    },
+    "Kalenice": {
+        "address": {
+            "street": "47",
+            "zip": "387 16",
+            "city": "Kalenice",
+            "district": "Kalenice"
+        },
+        "ds_id": "qkzauxk"
+    },
+    "Kalhov": {
+        "address": {
+            "street": "56",
+            "zip": "588 42",
+            "city": "Kalhov",
+            "district": "Kalhov"
+        },
+        "ds_id": "qbdbtik"
+    },
+    "Kali\u0161t\u011b": {
+        "address": {
+            "street": "4",
+            "zip": "588 51",
+            "city": "Kali\u0161t\u011b",
+            "district": "Kali\u0161t\u011b"
+        },
+        "ds_id": "njbbqwi"
+    },
+    "Kalivody": {
+        "address": {
+            "street": "11",
+            "zip": "270 54",
+            "city": "Kalivody",
+            "district": "Kalivody"
+        },
+        "ds_id": "3rib62u"
+    },
+    "Kaly": {
+        "address": {
+            "street": "23",
+            "zip": "594 55",
+            "city": "Kaly",
+            "district": "Kaly"
+        },
+        "ds_id": "v65bzhu"
+    },
+    "Kamberk": {
+        "address": {
+            "street": "71",
+            "zip": "257 06",
+            "city": "Kamberk",
+            "district": "Kamberk"
+        },
+        "ds_id": "33ubscn"
+    },
+    "K\u00e1men": {
+        "address": {
+            "street": "2",
+            "zip": "394 13",
+            "city": "K\u00e1men",
+            "district": "K\u00e1men"
+        },
+        "ds_id": "eixaty3"
+    },
+    "Kamenec": {
+        "address": {
+            "street": "7",
+            "zip": "338 28",
+            "city": "Kamenec",
+            "district": "Kamenec"
+        },
+        "ds_id": "kjjbsmv"
+    },
+    "Kamenec u Poli\u010dky": {
+        "address": {
+            "street": "90",
+            "zip": "572 01",
+            "city": "Kamenec u Poli\u010dky",
+            "district": "Kamenec u Poli\u010dky"
+        },
+        "ds_id": "5qpa83m"
+    },
+    "Kameni\u010dky": {
+        "address": {
+            "street": "149",
+            "zip": "539 41",
+            "city": "Kameni\u010dky",
+            "district": "Kameni\u010dky"
+        },
+        "ds_id": "p82a4u9"
+    },
+    "Kameni\u010dn\u00e1": {
+        "address": {
+            "street": "33",
+            "zip": "564 01",
+            "city": "Kameni\u010dn\u00e1",
+            "district": "Kameni\u010dn\u00e1"
+        },
+        "ds_id": "y2ba4u3"
+    },
+    "Kamenn\u00e1": {
+        "address": {
+            "street": "19",
+            "zip": "374 01",
+            "city": "Kamenn\u00e1",
+            "district": "Kamenn\u00e1"
+        },
+        "ds_id": "nqab695"
+    },
+    "Kamenn\u00e1 Horka": {
+        "address": {
+            "street": "29",
+            "zip": "568 02",
+            "city": "Kamenn\u00e1 Horka",
+            "district": "Kamenn\u00e1 Horka"
+        },
+        "ds_id": "9tka4ux"
+    },
+    "Kamenn\u00e1 Lhota": {
+        "address": {
+            "street": "52",
+            "zip": "582 92",
+            "city": "Kamenn\u00e1 Lhota",
+            "district": "Kamenn\u00e1 Lhota"
+        },
+        "ds_id": "h6gayf4"
+    },
+    "Kamenn\u00e9 Zbo\u017e\u00ed": {
+        "address": {
+            "street": "70",
+            "zip": "288 02",
+            "city": "Kamenn\u00e9 Zbo\u017e\u00ed",
+            "district": "Kamenn\u00e9 Zbo\u017e\u00ed"
+        },
+        "ds_id": "xk3bt5w"
+    },
+    "Kamenn\u00e9 \u017dehrovice": {
+        "address": {
+            "street": "Karlovarsk\u00e1 t\u0159\u00edda 6",
+            "zip": "273 01",
+            "city": "Kamenn\u00e9 \u017dehrovice",
+            "district": "Kamenn\u00e9 \u017dehrovice"
+        },
+        "ds_id": "agmbufm"
+    },
+    "Kamenn\u00fd Mal\u00edkov": {
+        "address": {
+            "street": "54",
+            "zip": "378 42",
+            "city": "Kamenn\u00fd Mal\u00edkov",
+            "district": "Kamenn\u00fd Mal\u00edkov"
+        },
+        "ds_id": "zx7am9z"
+    },
+    "Kamenn\u00fd Most": {
+        "address": {
+            "street": "80",
+            "zip": "273 26",
+            "city": "Kamenn\u00fd Most",
+            "district": "Kamenn\u00fd Most"
+        },
+        "ds_id": "ey3bxfx"
+    },
+    "Kamenn\u00fd P\u0159\u00edvoz": {
+        "address": {
+            "street": "285",
+            "zip": "252 82",
+            "city": "Kamenn\u00fd P\u0159\u00edvoz",
+            "district": "Kamenn\u00fd P\u0159\u00edvoz"
+        },
+        "ds_id": "3i7akvj"
+    },
+    "Kamenn\u00fd \u00dajezd": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 220",
+            "zip": "373 81",
+            "city": "Kamenn\u00fd \u00dajezd",
+            "district": "Kamenn\u00fd \u00dajezd"
+        },
+        "ds_id": "aqebdr7"
+    },
+    "Kam\u00fdk": {
+        "address": {
+            "street": "65",
+            "zip": "412 01",
+            "city": "Kam\u00fdk",
+            "district": "Kam\u00fdk"
+        },
+        "ds_id": "cd5arpw"
+    },
+    "Kam\u00fdk nad Vltavou": {
+        "address": {
+            "street": "69",
+            "zip": "262 63",
+            "city": "Kam\u00fdk nad Vltavou",
+            "district": "Kam\u00fdk nad Vltavou"
+        },
+        "ds_id": "zw5bdqe"
+    },
+    "Kanice": {
+        "address": {
+            "street": "32",
+            "zip": "345 43",
+            "city": "Kanice",
+            "district": "Kanice"
+        },
+        "ds_id": "hvzau8n"
+    },
+    "Kani\u010dky": {
+        "address": {
+            "street": "2",
+            "zip": "345 43",
+            "city": "Kani\u010dky",
+            "district": "Kani\u010dky"
+        },
+        "ds_id": "ya9bhv5"
+    },
+    "Kanina": {
+        "address": {
+            "street": "34",
+            "zip": "277 35",
+            "city": "Kanina",
+            "district": "Kanina"
+        },
+        "ds_id": "mxubgge"
+    },
+    "Ka\u0148ovice": {
+        "address": {
+            "street": "33",
+            "zip": "739 36",
+            "city": "Ka\u0148ovice",
+            "district": "Ka\u0148ovice"
+        },
+        "ds_id": "agwavef"
+    },
+    "K\u00e1ran\u00fd": {
+        "address": {
+            "street": "V\u00e1clavsk\u00e1 19",
+            "zip": "250 75",
+            "city": "K\u00e1ran\u00fd",
+            "district": "K\u00e1ran\u00fd"
+        },
+        "ds_id": "jkeas36"
+    },
+    "Karle": {
+        "address": {
+            "street": "4",
+            "zip": "568 02",
+            "city": "Karle",
+            "district": "Karle"
+        },
+        "ds_id": "q3wb7y9"
+    },
+    "Karl\u00edk": {
+        "address": {
+            "street": "Karlick\u00e1 1",
+            "zip": "252 29",
+            "city": "Karl\u00edk",
+            "district": "Karl\u00edk"
+        },
+        "ds_id": "y3pb8nu"
+    },
+    "Karl\u00edn": {
+        "address": {
+            "street": "60",
+            "zip": "696 14",
+            "city": "Karl\u00edn",
+            "district": "Karl\u00edn"
+        },
+        "ds_id": "q5ubdqi"
+    },
+    "Karlov": {
+        "address": {
+            "street": "28",
+            "zip": "592 21",
+            "city": "Karlov",
+            "district": "Karlov"
+        },
+        "ds_id": "6j2aqga"
+    },
+    "Karlova Stud\u00e1nka": {
+        "address": {
+            "street": "17",
+            "zip": "793 24",
+            "city": "Karlova Stud\u00e1nka",
+            "district": "Karlova Stud\u00e1nka"
+        },
+        "ds_id": "aidbnv2"
+    },
+    "Karlova Ves": {
+        "address": {
+            "street": "2",
+            "zip": "270 23",
+            "city": "Karlova Ves",
+            "district": "Karlova Ves"
+        },
+        "ds_id": "s57b798"
+    },
+    "Karlovice": {
+        "address": {
+            "street": "12",
+            "zip": "511 01",
+            "city": "Karlovice",
+            "district": "Karlovice"
+        },
+        "ds_id": "zq4bnua"
+    },
+    "Karol\u00edn": {
+        "address": {
+            "street": "4",
+            "zip": "768 21",
+            "city": "Karol\u00edn",
+            "district": "Karol\u00edn"
+        },
+        "ds_id": "ytkat33"
+    },
+    "Ka\u0159ez": {
+        "address": {
+            "street": "28",
+            "zip": "338 08",
+            "city": "Ka\u0159ez",
+            "district": "Ka\u0159ez"
+        },
+        "ds_id": "747a6zg"
+    },
+    "Ka\u0159\u00edzek": {
+        "address": {
+            "street": "8",
+            "zip": "338 08",
+            "city": "Ka\u0159\u00edzek",
+            "district": "Ka\u0159\u00edzek"
+        },
+        "ds_id": "q7pavtw"
+    },
+    "Kasalice": {
+        "address": {
+            "street": "46",
+            "zip": "533 41",
+            "city": "Kasalice",
+            "district": "Kasalice"
+        },
+        "ds_id": "8whbszt"
+    },
+    "Ka\u0161ava": {
+        "address": {
+            "street": "217",
+            "zip": "763 19",
+            "city": "Ka\u0161ava",
+            "district": "Ka\u0161ava"
+        },
+        "ds_id": "dzmbwwe"
+    },
+    "Ka\u0161nice": {
+        "address": {
+            "street": "38",
+            "zip": "691 72",
+            "city": "Ka\u0161nice",
+            "district": "Ka\u0161nice"
+        },
+        "ds_id": "xjka2n9"
+    },
+    "Kate\u0159inice": {
+        "address": {
+            "street": "242",
+            "zip": "756 21",
+            "city": "Kate\u0159inice",
+            "district": "Kate\u0159inice"
+        },
+        "ds_id": "qtfb4rs"
+    },
+    "Katov": {
+        "address": {
+            "street": "28",
+            "zip": "392 01",
+            "city": "Katov",
+            "district": "Katov"
+        },
+        "ds_id": "a3jed86"
+    },
+    "Katusice": {
+        "address": {
+            "street": "n\u00e1m. Budovatel\u016f 4",
+            "zip": "294 25",
+            "city": "Katusice",
+            "district": "Katusice"
+        },
+        "ds_id": "7jabdpu"
+    },
+    "Kbel": {
+        "address": {
+            "street": "92",
+            "zip": "280 02",
+            "city": "Kbel",
+            "district": "Kbel"
+        },
+        "ds_id": "xzbak7y"
+    },
+    "Kbelany": {
+        "address": {
+            "street": "46",
+            "zip": "330 23",
+            "city": "Kbelany",
+            "district": "Kbelany"
+        },
+        "ds_id": "hvtbhwr"
+    },
+    "Kdousov": {
+        "address": {
+            "street": "14",
+            "zip": "675 32",
+            "city": "Kdousov",
+            "district": "Kdousov"
+        },
+        "ds_id": "dqjaxf3"
+    },
+    "Keblice": {
+        "address": {
+            "street": "68",
+            "zip": "410 02",
+            "city": "Keblice",
+            "district": "Keblice"
+        },
+        "ds_id": "fnnaqx8"
+    },
+    "Keblov": {
+        "address": {
+            "street": "75",
+            "zip": "257 65",
+            "city": "Keblov",
+            "district": "Keblov"
+        },
+        "ds_id": "asgjdqi"
+    },
+    "Kejnice": {
+        "address": {
+            "street": "12",
+            "zip": "341 01",
+            "city": "Kejnice",
+            "district": "Kejnice"
+        },
+        "ds_id": "zjcayxw"
+    },
+    "Kej\u017elice": {
+        "address": {
+            "street": "Ke Sv\u011btl\u00e9 161",
+            "zip": "394 52",
+            "city": "Kej\u017elice",
+            "district": "Kej\u017elice"
+        },
+        "ds_id": "dk6ax85"
+    },
+    "Kel\u010dany": {
+        "address": {
+            "street": "3",
+            "zip": "696 49",
+            "city": "Kel\u010dany",
+            "district": "Kel\u010dany"
+        },
+        "ds_id": "t8iazem"
+    },
+    "Kest\u0159any": {
+        "address": {
+            "street": "136",
+            "zip": "398 21",
+            "city": "Kest\u0159any",
+            "district": "Kest\u0159any"
+        },
+        "ds_id": "fsnbke4"
+    },
+    "Ketkovice": {
+        "address": {
+            "street": "87",
+            "zip": "664 91",
+            "city": "Ketkovice",
+            "district": "Ketkovice"
+        },
+        "ds_id": "gjyb8ek"
+    },
+    "Klabava": {
+        "address": {
+            "street": "17",
+            "zip": "338 41",
+            "city": "Klabava",
+            "district": "Klabava"
+        },
+        "ds_id": "7cdbrkz"
+    },
+    "Kladeruby": {
+        "address": {
+            "street": "72",
+            "zip": "756 43",
+            "city": "Kladeruby",
+            "district": "Kladeruby"
+        },
+        "ds_id": "8mxbz5h"
+    },
+    "Kladeruby nad Oslavou": {
+        "address": {
+            "street": "36",
+            "zip": "675 75",
+            "city": "Kladeruby nad Oslavou",
+            "district": "Kladeruby nad Oslavou"
+        },
+        "ds_id": "74ba9sp"
+    },
+    "Kladky": {
+        "address": {
+            "street": "19",
+            "zip": "798 54",
+            "city": "Kladky",
+            "district": "Kladky"
+        },
+        "ds_id": "6ekbvu2"
+    },
+    "Kladn\u00edky": {
+        "address": {
+            "street": "21",
+            "zip": "751 31",
+            "city": "Kladn\u00edky",
+            "district": "Kladn\u00edky"
+        },
+        "ds_id": "atqbpb8"
+    },
+    "Kladno": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed starosty Pavla 44",
+            "zip": "272 01",
+            "city": "Kladno",
+            "district": "Kladno"
+        },
+        "ds_id": "dyubpcm"
+    },
+    "Kladruby nad Labem": {
+        "address": {
+            "street": "110",
+            "zip": "533 14",
+            "city": "Kladruby nad Labem",
+            "district": "Kladruby nad Labem"
+        },
+        "ds_id": "7hma8wd"
+    },
+    "Klamo\u0161": {
+        "address": {
+            "street": "26",
+            "zip": "503 51",
+            "city": "Klamo\u0161",
+            "district": "Klamo\u0161"
+        },
+        "ds_id": "5mdaxhj"
+    },
+    "Klap\u00fd": {
+        "address": {
+            "street": "200",
+            "zip": "411 16",
+            "city": "Klap\u00fd",
+            "district": "Klap\u00fd"
+        },
+        "ds_id": "g38buxk"
+    },
+    "Kl\u00e1\u0161ter": {
+        "address": {
+            "street": "70",
+            "zip": "335 01",
+            "city": "Kl\u00e1\u0161ter",
+            "district": "Kl\u00e1\u0161ter"
+        },
+        "ds_id": "g7wau5c"
+    },
+    "Kl\u00e1\u0161terec nad Orlic\u00ed": {
+        "address": {
+            "street": "167",
+            "zip": "561 82",
+            "city": "Kl\u00e1\u0161terec nad Orlic\u00ed",
+            "district": "Kl\u00e1\u0161terec nad Orlic\u00ed"
+        },
+        "ds_id": "ikva4vs"
+    },
+    "Kl\u00e1\u0161ter Hradi\u0161t\u011b nad Jizerou": {
+        "address": {
+            "street": "2",
+            "zip": "294 15",
+            "city": "Kl\u00e1\u0161ter Hradi\u0161t\u011b nad Jizerou",
+            "district": "Kl\u00e1\u0161ter Hradi\u0161t\u011b nad Jizerou"
+        },
+        "ds_id": "3mqanvs"
+    },
+    "Kl\u00e1\u0161tern\u00ed Skalice": {
+        "address": {
+            "street": "9",
+            "zip": "281 63",
+            "city": "Kl\u00e1\u0161tern\u00ed Skalice",
+            "district": "Kl\u00e1\u0161tern\u00ed Skalice"
+        },
+        "ds_id": "ay3auai"
+    },
+    "Klatovec": {
+        "address": {
+            "street": "76",
+            "zip": "588 51",
+            "city": "Klatovec",
+            "district": "Klatovec"
+        },
+        "ds_id": "rt5aq5q"
+    },
+    "Klec": {
+        "address": {
+            "street": "75",
+            "zip": "379 01",
+            "city": "Klec",
+            "district": "Klec"
+        },
+        "ds_id": "hdteeay"
+    },
+    "Klene\u010d": {
+        "address": {
+            "street": "Hlavn\u00ed 95",
+            "zip": "413 01",
+            "city": "Klene\u010d",
+            "district": "Klene\u010d"
+        },
+        "ds_id": "57aaqt3"
+    },
+    "Klenov\u00e1": {
+        "address": {
+            "street": "65",
+            "zip": "340 21",
+            "city": "Klenov\u00e1",
+            "district": "Klenov\u00e1"
+        },
+        "ds_id": "sn4bhwn"
+    },
+    "Klenovice": {
+        "address": {
+            "street": "69",
+            "zip": "392 01",
+            "city": "Klenovice",
+            "district": "Klenovice"
+        },
+        "ds_id": "vqmb7e9"
+    },
+    "Klenovice Na Han\u00e9": {
+        "address": {
+            "street": "3",
+            "zip": "798 23",
+            "city": "Klenovice na Han\u00e9",
+            "district": "Klenovice na Han\u00e9"
+        },
+        "ds_id": "itkbdnq"
+    },
+    "Klentnice": {
+        "address": {
+            "street": "24",
+            "zip": "692 01",
+            "city": "Klentnice",
+            "district": "Klentnice"
+        },
+        "ds_id": "wh8budg"
+    },
+    "Kle\u0161ice": {
+        "address": {
+            "street": "101",
+            "zip": "538 03",
+            "city": "Kle\u0161ice",
+            "district": "Kle\u0161ice"
+        },
+        "ds_id": "gzpbsxb"
+    },
+    "Kl\u00ed\u010dany": {
+        "address": {
+            "street": "Ke \u0161kolce 8",
+            "zip": "250 69",
+            "city": "Kl\u00ed\u010dany",
+            "district": "Kl\u00ed\u010dany"
+        },
+        "ds_id": "jf5awmi"
+    },
+    "Kl\u00ednec": {
+        "address": {
+            "street": "138",
+            "zip": "252 10",
+            "city": "Kl\u00ednec",
+            "district": "Kl\u00ednec"
+        },
+        "ds_id": "fyvank5"
+    },
+    "Kl\u00edny": {
+        "address": {
+            "street": "61",
+            "zip": "436 01",
+            "city": "Kl\u00edny",
+            "district": "Kl\u00edny"
+        },
+        "ds_id": "jdbbtnf"
+    },
+    "Klobuky": {
+        "address": {
+            "street": "9. kv\u011btna 62",
+            "zip": "273 74",
+            "city": "Klobuky",
+            "district": "Klobuky"
+        },
+        "ds_id": "jr3btbm"
+    },
+    "Kloko\u010d\u00ed": {
+        "address": {
+            "street": "65",
+            "zip": "511 01",
+            "city": "Kloko\u010d\u00ed",
+            "district": "Kloko\u010d\u00ed"
+        },
+        "ds_id": "xdran4x"
+    },
+    "Kloko\u010dov": {
+        "address": {
+            "street": "105",
+            "zip": "583 01",
+            "city": "Kloko\u010dov",
+            "district": "Kloko\u010dov"
+        },
+        "ds_id": "2n2edui"
+    },
+    "Klopina": {
+        "address": {
+            "street": "116",
+            "zip": "789 73",
+            "city": "Klopina",
+            "district": "Klopina"
+        },
+        "ds_id": "rbyar9m"
+    },
+    "Klopotovice": {
+        "address": {
+            "street": "11",
+            "zip": "798 21",
+            "city": "Klopotovice",
+            "district": "Klopotovice"
+        },
+        "ds_id": "d5baw46"
+    },
+    "Klu\u010denice": {
+        "address": {
+            "street": "16",
+            "zip": "262 56",
+            "city": "Klu\u010denice",
+            "district": "Klu\u010denice"
+        },
+        "ds_id": "y82bdm4"
+    },
+    "Klu\u010dov": {
+        "address": {
+            "street": "114",
+            "zip": "282 01",
+            "city": "Klu\u010dov",
+            "district": "Klu\u010dov"
+        },
+        "ds_id": "wjybntv"
+    },
+    "Kluky": {
+        "address": {
+            "street": "56",
+            "zip": "285 45",
+            "city": "Kluky",
+            "district": "Kluky"
+        },
+        "ds_id": "sgjakfh"
+    },
+    "Kly": {
+        "address": {
+            "street": "375",
+            "zip": "277 41",
+            "city": "Kly",
+            "district": "Z\u00e1bo\u0159\u00ed"
+        },
+        "ds_id": "ahhbrnc"
+    },
+    "Kmetin\u011bves": {
+        "address": {
+            "street": "17",
+            "zip": "273 22",
+            "city": "Kmetin\u011bves",
+            "district": "Kmetin\u011bves"
+        },
+        "ds_id": "qbab5vn"
+    },
+    "Kn\u011b\u017edub": {
+        "address": {
+            "street": "140",
+            "zip": "696 64",
+            "city": "Kn\u011b\u017edub",
+            "district": "Kn\u011b\u017edub"
+        },
+        "ds_id": "qfrbdm8"
+    },
+    "Kn\u011b\u017eice": {
+        "address": {
+            "street": "1",
+            "zip": "675 29",
+            "city": "Kn\u011b\u017eice",
+            "district": "Kn\u011b\u017eice"
+        },
+        "ds_id": "u9ibg3n"
+    },
+    "Kn\u011b\u017ei\u010dky": {
+        "address": {
+            "street": "90",
+            "zip": "289 08",
+            "city": "Kn\u011b\u017ei\u010dky",
+            "district": "Kn\u011b\u017ei\u010dky"
+        },
+        "ds_id": "tyxatew"
+    },
+    "Kn\u011b\u017emost": {
+        "address": {
+            "street": "Na Rynku 51",
+            "zip": "294 02",
+            "city": "Kn\u011b\u017emost",
+            "district": "Kn\u011b\u017emost"
+        },
+        "ds_id": "299b5dh"
+    },
+    "Kn\u011b\u017enice": {
+        "address": {
+            "street": "123",
+            "zip": "506 01",
+            "city": "Kn\u011b\u017enice",
+            "district": "Kn\u011b\u017enice"
+        },
+        "ds_id": "dbibwt4"
+    },
+    "Kn\u011b\u017epole": {
+        "address": {
+            "street": "125",
+            "zip": "687 12",
+            "city": "Kn\u011b\u017epole",
+            "district": "Kn\u011b\u017epole"
+        },
+        "ds_id": "fngbdmc"
+    },
+    "K\u0148ovice": {
+        "address": {
+            "street": "6",
+            "zip": "264 01",
+            "city": "K\u0148ovice",
+            "district": "K\u0148ovice"
+        },
+        "ds_id": "5uaajkd"
+    },
+    "Knov\u00edz": {
+        "address": {
+            "street": "15",
+            "zip": "274 01",
+            "city": "Knov\u00edz",
+            "district": "Knov\u00edz"
+        },
+        "ds_id": "zk4atde"
+    },
+    "Knyk": {
+        "address": {
+            "street": "40",
+            "zip": "580 01",
+            "city": "Knyk",
+            "district": "Knyk"
+        },
+        "ds_id": "tx3av77"
+    },
+    "Koberovice": {
+        "address": {
+            "street": "42",
+            "zip": "394 59",
+            "city": "Koberovice",
+            "district": "Koberovice"
+        },
+        "ds_id": "zvjawkt"
+    },
+    "Koberovy": {
+        "address": {
+            "street": "102",
+            "zip": "468 22",
+            "city": "Koberovy",
+            "district": "Koberovy"
+        },
+        "ds_id": "x7ubin6"
+    },
+    "Kobe\u0159ice": {
+        "address": {
+            "street": "Hlu\u010d\u00ednsk\u00e1 888",
+            "zip": "747 27",
+            "city": "Kobe\u0159ice",
+            "district": "Kobe\u0159ice"
+        },
+        "ds_id": "6u7bdkj"
+    },
+    "Kobe\u0159ice u Brna": {
+        "address": {
+            "street": "Doln\u00ed 54",
+            "zip": "684 01",
+            "city": "Kobe\u0159ice u Brna",
+            "district": "Kobe\u0159ice u Brna"
+        },
+        "ds_id": "uega2mu"
+    },
+    "Kobyl\u00e1 nad Vidnavkou": {
+        "address": {
+            "street": "53",
+            "zip": "790 65",
+            "city": "Kobyl\u00e1 nad Vidnavkou",
+            "district": "Kobyl\u00e1 nad Vidnavkou"
+        },
+        "ds_id": "5qhbvrr"
+    },
+    "Kobyl\u00ed": {
+        "address": {
+            "street": "459",
+            "zip": "691 10",
+            "city": "Kobyl\u00ed",
+            "district": "Kobyl\u00ed"
+        },
+        "ds_id": "v3wbdkp"
+    },
+    "Kobylnice": {
+        "address": {
+            "street": "8",
+            "zip": "294 46",
+            "city": "Kobylnice",
+            "district": "Kobylnice"
+        },
+        "ds_id": "ix3ameb"
+    },
+    "Kobyly": {
+        "address": {
+            "street": "9",
+            "zip": "463 45",
+            "city": "Kobyly",
+            "district": "Kobyly"
+        },
+        "ds_id": "zv3b47u"
+    },
+    "Kocelovice": {
+        "address": {
+            "street": "32",
+            "zip": "387 42",
+            "city": "Kocelovice",
+            "district": "Kocelovice"
+        },
+        "ds_id": "whqamse"
+    },
+    "Ko\u010d\u00ed": {
+        "address": {
+            "street": "92",
+            "zip": "538 61",
+            "city": "Ko\u010d\u00ed",
+            "district": "Ko\u010d\u00ed"
+        },
+        "ds_id": "mjsb2q7"
+    },
+    "Ko\u010d\u00edn": {
+        "address": {
+            "street": "35",
+            "zip": "331 41",
+            "city": "Ko\u010d\u00edn",
+            "district": "Ko\u010d\u00edn"
+        },
+        "ds_id": "3gdbhwg"
+    },
+    "Ko\u010dov": {
+        "address": {
+            "street": "29",
+            "zip": "348 15",
+            "city": "Ko\u010dov",
+            "district": "Ko\u010dov"
+        },
+        "ds_id": "b9nbhxa"
+    },
+    "Koch\u00e1nky": {
+        "address": {
+            "street": "201",
+            "zip": "294 74",
+            "city": "Koch\u00e1nky",
+            "district": "Koch\u00e1nky"
+        },
+        "ds_id": "h4tatnk"
+    },
+    "Koch\u00e1nov": {
+        "address": {
+            "street": "60",
+            "zip": "582 53",
+            "city": "Koch\u00e1nov",
+            "district": "Koch\u00e1nov"
+        },
+        "ds_id": "t2kax7e"
+    },
+    "Kojatice": {
+        "address": {
+            "street": "68",
+            "zip": "675 32",
+            "city": "Kojatice",
+            "district": "Kojatice"
+        },
+        "ds_id": "djbbf5n"
+    },
+    "Kojat\u00edn": {
+        "address": {
+            "street": "38",
+            "zip": "675 03",
+            "city": "Kojat\u00edn",
+            "district": "Kojat\u00edn"
+        },
+        "ds_id": "5mvb54k"
+    },
+    "Koj\u00e1tky": {
+        "address": {
+            "street": "155",
+            "zip": "685 01",
+            "city": "Koj\u00e1tky",
+            "district": "\u0160ardi\u010dky"
+        },
+        "ds_id": "rxfa2pr"
+    },
+    "Koj\u010dice": {
+        "address": {
+            "street": "67",
+            "zip": "394 09",
+            "city": "Koj\u010dice",
+            "district": "Koj\u010dice"
+        },
+        "ds_id": "34zaqi7"
+    },
+    "Kojetice": {
+        "address": {
+            "street": "131",
+            "zip": "675 23",
+            "city": "Kojetice",
+            "district": "Kojetice"
+        },
+        "ds_id": "cw3ax5s"
+    },
+    "Kojice": {
+        "address": {
+            "street": "53",
+            "zip": "533 12",
+            "city": "Kojice",
+            "district": "Kojice"
+        },
+        "ds_id": "e7aazmw"
+    },
+    "Koka\u0161ice": {
+        "address": {
+            "street": "48",
+            "zip": "349 52",
+            "city": "Koka\u0161ice",
+            "district": "Koka\u0161ice"
+        },
+        "ds_id": "k2xbhx6"
+    },
+    "Kokory": {
+        "address": {
+            "street": "57",
+            "zip": "751 05",
+            "city": "Kokory",
+            "district": "Kokory"
+        },
+        "ds_id": "mambdkt"
+    },
+    "Koko\u0159\u00edn": {
+        "address": {
+            "street": "52",
+            "zip": "277 23",
+            "city": "Koko\u0159\u00edn",
+            "district": "Koko\u0159\u00edn"
+        },
+        "ds_id": "h26anv3"
+    },
+    "Kolaje": {
+        "address": {
+            "street": "45",
+            "zip": "289 04",
+            "city": "Kolaje",
+            "district": "Kolaje"
+        },
+        "ds_id": "miba89h"
+    },
+    "Kold\u00edn": {
+        "address": {
+            "street": "15",
+            "zip": "565 01",
+            "city": "Kold\u00edn",
+            "district": "Kold\u00edn"
+        },
+        "ds_id": "qq7a3qe"
+    },
+    "Kole\u010d": {
+        "address": {
+            "street": "103",
+            "zip": "273 29",
+            "city": "Kole\u010d",
+            "district": "Kole\u010d"
+        },
+        "ds_id": "ui9b5nk"
+    },
+    "Kole\u0161ov": {
+        "address": {
+            "street": "35",
+            "zip": "270 04",
+            "city": "Kole\u0161ov",
+            "district": "Kole\u0161ov"
+        },
+        "ds_id": "jt4anqu"
+    },
+    "Kole\u0161ovice": {
+        "address": {
+            "street": "212",
+            "zip": "270 02",
+            "city": "Kole\u0161ovice",
+            "district": "Kole\u0161ovice"
+        },
+        "ds_id": "r8hbz65"
+    },
+    "Kolomuty": {
+        "address": {
+            "street": "2",
+            "zip": "293 01",
+            "city": "Kolomuty",
+            "district": "Kolomuty"
+        },
+        "ds_id": "vqzav2y"
+    },
+    "Kolov\u00e1": {
+        "address": {
+            "street": "16",
+            "zip": "360 01",
+            "city": "Kolov\u00e1",
+            "district": "Kolov\u00e1"
+        },
+        "ds_id": "xr5bx5e"
+    },
+    "Kol\u0161ov": {
+        "address": {
+            "street": "160",
+            "zip": "788 21",
+            "city": "Kol\u0161ov",
+            "district": "Kol\u0161ov"
+        },
+        "ds_id": "u8uaw6u"
+    },
+    "Kom\u00e1rno": {
+        "address": {
+            "street": "49",
+            "zip": "768 71",
+            "city": "Kom\u00e1rno",
+            "district": "Kom\u00e1rno"
+        },
+        "ds_id": "w2ab5kk"
+    },
+    "Kom\u00e1rovice": {
+        "address": {
+            "street": "14",
+            "zip": "675 26",
+            "city": "Kom\u00e1rovice",
+            "district": "Kom\u00e1rovice"
+        },
+        "ds_id": "78ebswh"
+    },
+    "Koma\u0159ice": {
+        "address": {
+            "street": "7",
+            "zip": "373 14",
+            "city": "Koma\u0159ice",
+            "district": "Koma\u0159ice"
+        },
+        "ds_id": "xqdb5px"
+    },
+    "Kom\u0148a": {
+        "address": {
+            "street": "42",
+            "zip": "687 71",
+            "city": "Kom\u0148a",
+            "district": "Kom\u0148a"
+        },
+        "ds_id": "iz8bysu"
+    },
+    "Komorn\u00ed Lhotka": {
+        "address": {
+            "street": "27",
+            "zip": "739 53",
+            "city": "Komorn\u00ed Lhotka",
+            "district": "Komorn\u00ed Lhotka"
+        },
+        "ds_id": "v8aaxpb"
+    },
+    "Komorovice": {
+        "address": {
+            "street": "50",
+            "zip": "396 01",
+            "city": "Komorovice",
+            "district": "Komorovice"
+        },
+        "ds_id": "jwcbpr9"
+    },
+    "Komo\u0159any": {
+        "address": {
+            "street": "1",
+            "zip": "683 01",
+            "city": "Komo\u0159any",
+            "district": "Komo\u0159any"
+        },
+        "ds_id": "dzqbkjc"
+    },
+    "Kon\u00e1rovice": {
+        "address": {
+            "street": "Na Rynku 11",
+            "zip": "281 25",
+            "city": "Kon\u00e1rovice",
+            "district": "Kon\u00e1rovice"
+        },
+        "ds_id": "9kpbgr4"
+    },
+    "Kondrac": {
+        "address": {
+            "street": "3",
+            "zip": "258 01",
+            "city": "Kondrac",
+            "district": "Kondrac"
+        },
+        "ds_id": "bqwanta"
+    },
+    "Kon\u011bprusy": {
+        "address": {
+            "street": "63",
+            "zip": "266 01",
+            "city": "Kon\u011bprusy",
+            "district": "Kon\u011bprusy"
+        },
+        "ds_id": "jx7a7up"
+    },
+    "Kon\u011b\u0161\u00edn": {
+        "address": {
+            "street": "145",
+            "zip": "675 02",
+            "city": "Kon\u011b\u0161\u00edn",
+            "district": "Kon\u011b\u0161\u00edn"
+        },
+        "ds_id": "uijbjrn"
+    },
+    "Kon\u011btopy": {
+        "address": {
+            "street": "14",
+            "zip": "277 14",
+            "city": "Kon\u011btopy",
+            "district": "Kon\u011btopy"
+        },
+        "ds_id": "cujj2pn"
+    },
+    "Konojedy": {
+        "address": {
+            "street": "7",
+            "zip": "281 63",
+            "city": "Konojedy",
+            "district": "Konojedy"
+        },
+        "ds_id": "uvra4a8"
+    },
+    "Konstantinovy L\u00e1zn\u011b": {
+        "address": {
+            "street": "L\u00e1ze\u0148sk\u00e1 27",
+            "zip": "349 52",
+            "city": "Konstantinovy L\u00e1zn\u011b",
+            "district": "Konstantinovy L\u00e1zn\u011b"
+        },
+        "ds_id": "w93bnw7"
+    },
+    "Kopidlo": {
+        "address": {
+            "street": "73",
+            "zip": "331 41",
+            "city": "Kopidlo",
+            "district": "Kopidlo"
+        },
+        "ds_id": "pthavma"
+    },
+    "Kop\u0159ivn\u00e1": {
+        "address": {
+            "street": "115",
+            "zip": "788 33",
+            "city": "Kop\u0159ivn\u00e1",
+            "district": "Kop\u0159ivn\u00e1"
+        },
+        "ds_id": "z49ar9h"
+    },
+    "Korkyn\u011b": {
+        "address": {
+            "street": "30",
+            "zip": "262 06",
+            "city": "Korkyn\u011b",
+            "district": "Korkyn\u011b"
+        },
+        "ds_id": "ig7b4p3"
+    },
+    "Kornatice": {
+        "address": {
+            "street": "26",
+            "zip": "338 43",
+            "city": "Kornatice",
+            "district": "Kornatice"
+        },
+        "ds_id": "jjiavuf"
+    },
+    "Korno": {
+        "address": {
+            "street": "21",
+            "zip": "267 27",
+            "city": "Korno",
+            "district": "Korno"
+        },
+        "ds_id": "9zfbge7"
+    },
+    "Korolupy": {
+        "address": {
+            "street": "69",
+            "zip": "671 07",
+            "city": "Korolupy",
+            "district": "Korolupy"
+        },
+        "ds_id": "a95btrx"
+    },
+    "Korouhev": {
+        "address": {
+            "street": "234",
+            "zip": "569 93",
+            "city": "Korouhev",
+            "district": "Korouhev"
+        },
+        "ds_id": "37fa4vg"
+    },
+    "Korou\u017en\u00e9": {
+        "address": {
+            "street": "33",
+            "zip": "593 01",
+            "city": "Korou\u017en\u00e9",
+            "district": "Korou\u017en\u00e9"
+        },
+        "ds_id": "cuiav5h"
+    },
+    "Korozluky": {
+        "address": {
+            "street": "20",
+            "zip": "434 01",
+            "city": "Korozluky",
+            "district": "Korozluky"
+        },
+        "ds_id": "rwdbr65"
+    },
+    "Koruna": {
+        "address": {
+            "street": "10",
+            "zip": "563 01",
+            "city": "Koruna",
+            "district": "Koruna"
+        },
+        "ds_id": "cyqa4wa"
+    },
+    "Koryta": {
+        "address": {
+            "street": "5",
+            "zip": "294 11",
+            "city": "Koryta",
+            "district": "Koryta"
+        },
+        "ds_id": "f2iatdm"
+    },
+    "Korytn\u00e1": {
+        "address": {
+            "street": "297",
+            "zip": "687 52",
+            "city": "Korytn\u00e1",
+            "district": "Korytn\u00e1"
+        },
+        "ds_id": "swsbdja"
+    },
+    "Ko\u0159enec": {
+        "address": {
+            "street": "152",
+            "zip": "680 01",
+            "city": "Ko\u0159enec",
+            "district": "Ko\u0159enec"
+        },
+        "ds_id": "uidb8ft"
+    },
+    "Ko\u0159enice": {
+        "address": {
+            "street": "78",
+            "zip": "280 02",
+            "city": "Ko\u0159enice",
+            "district": "Ko\u0159enice"
+        },
+        "ds_id": "689atcv"
+    },
+    "Ko\u0159enov": {
+        "address": {
+            "street": "480",
+            "zip": "468 49",
+            "city": "Ko\u0159enov",
+            "district": "Ko\u0159enov"
+        },
+        "ds_id": "7i7bp2y"
+    },
+    "Koso\u0159": {
+        "address": {
+            "street": "Pr\u016fb\u011b\u017en\u00e1 260",
+            "zip": "252 26",
+            "city": "Koso\u0159",
+            "district": "Koso\u0159"
+        },
+        "ds_id": "s2dap44"
+    },
+    "Koso\u0159ice": {
+        "address": {
+            "street": "45",
+            "zip": "294 41",
+            "city": "Koso\u0159ice",
+            "district": "Koso\u0159ice"
+        },
+        "ds_id": "n5ba7v2"
+    },
+    "Koso\u0159\u00edn": {
+        "address": {
+            "street": "33",
+            "zip": "565 01",
+            "city": "Koso\u0159\u00edn",
+            "district": "Koso\u0159\u00edn"
+        },
+        "ds_id": "mg9byqy"
+    },
+    "Kosov": {
+        "address": {
+            "street": "84",
+            "zip": "789 01",
+            "city": "Kosov",
+            "district": "Kosov"
+        },
+        "ds_id": "efcbhf7"
+    },
+    "Kosova Hora": {
+        "address": {
+            "street": "45",
+            "zip": "262 91",
+            "city": "Kosova Hora",
+            "district": "Kosova Hora"
+        },
+        "ds_id": "kf9bg3u"
+    },
+    "Kostelany": {
+        "address": {
+            "street": "48",
+            "zip": "767 01",
+            "city": "Kostelany",
+            "district": "Kostelany"
+        },
+        "ds_id": "nujidxi"
+    },
+    "Kostelany nad Moravou": {
+        "address": {
+            "street": "19",
+            "zip": "686 01",
+            "city": "Kostelany nad Moravou",
+            "district": "Kostelany nad Moravou"
+        },
+        "ds_id": "kkibdhh"
+    },
+    "Kostelec": {
+        "address": {
+            "street": "260",
+            "zip": "696 51",
+            "city": "Kostelec",
+            "district": "Kostelec"
+        },
+        "ds_id": "eydbdiz"
+    },
+    "Kostelec nad Vltavou": {
+        "address": {
+            "street": "104",
+            "zip": "398 58",
+            "city": "Kostelec nad Vltavou",
+            "district": "Kostelec nad Vltavou"
+        },
+        "ds_id": "iixbw5g"
+    },
+    "Kostelec u He\u0159manova M\u011bstce": {
+        "address": {
+            "street": "64",
+            "zip": "538 03",
+            "city": "Kostelec u He\u0159manova M\u011bstce",
+            "district": "Kostelec u He\u0159manova M\u011bstce"
+        },
+        "ds_id": "mrza4w7"
+    },
+    "Kostelec u Hole\u0161ova": {
+        "address": {
+            "street": "58",
+            "zip": "768 43",
+            "city": "Kostelec u Hole\u0161ova",
+            "district": "Kostelec u Hole\u0161ova"
+        },
+        "ds_id": "bs9bdhn"
+    },
+    "Kostelec u K\u0159\u00ed\u017ek\u016f": {
+        "address": {
+            "street": "73",
+            "zip": "251 68",
+            "city": "Kostelec u K\u0159\u00ed\u017ek\u016f",
+            "district": "Kostelec u K\u0159\u00ed\u017ek\u016f"
+        },
+        "ds_id": "vw2akw3"
+    },
+    "Kosteln\u00ed Hlavno": {
+        "address": {
+            "street": "12",
+            "zip": "294 76",
+            "city": "Kosteln\u00ed Hlavno",
+            "district": "Kosteln\u00ed Hlavno"
+        },
+        "ds_id": "5w8b6is"
+    },
+    "Kosteln\u00ed Lhota": {
+        "address": {
+            "street": "6",
+            "zip": "289 12",
+            "city": "Kosteln\u00ed Lhota",
+            "district": "Kosteln\u00ed Lhota"
+        },
+        "ds_id": "6rpbqqp"
+    },
+    "Kosteln\u00ed Myslov\u00e1": {
+        "address": {
+            "street": "24",
+            "zip": "588 56",
+            "city": "Kosteln\u00ed Myslov\u00e1",
+            "district": "Kosteln\u00ed Myslov\u00e1"
+        },
+        "ds_id": "w5vbf5e"
+    },
+    "Kosteln\u00ed Radou\u0148": {
+        "address": {
+            "street": "49",
+            "zip": "378 42",
+            "city": "Kosteln\u00ed Radou\u0148",
+            "district": "Kosteln\u00ed Radou\u0148"
+        },
+        "ds_id": "52mb5rq"
+    },
+    "Kosteln\u00ed Vyd\u0159\u00ed": {
+        "address": {
+            "street": "4",
+            "zip": "380 01",
+            "city": "Kosteln\u00ed Vyd\u0159\u00ed",
+            "district": "Kosteln\u00ed Vyd\u0159\u00ed"
+        },
+        "ds_id": "jy5eanr"
+    },
+    "Kost\u011bnice": {
+        "address": {
+            "street": "8",
+            "zip": "530 02",
+            "city": "Kost\u011bnice",
+            "district": "Kost\u011bnice"
+        },
+        "ds_id": "hnbazjz"
+    },
+    "Kostice": {
+        "address": {
+            "street": "n\u00e1m. Osvobozen\u00ed 445",
+            "zip": "691 52",
+            "city": "Kostice",
+            "district": "Kostice"
+        },
+        "ds_id": "2zybdgu"
+    },
+    "Kostn\u00edky": {
+        "address": {
+            "street": "29",
+            "zip": "675 32",
+            "city": "Kostn\u00edky",
+            "district": "Kostn\u00edky"
+        },
+        "ds_id": "2fdaz9f"
+    },
+    "Kostoml\u00e1tky": {
+        "address": {
+            "street": "5. kv\u011btna 32",
+            "zip": "289 21",
+            "city": "Kostoml\u00e1tky",
+            "district": "Kostoml\u00e1tky"
+        },
+        "ds_id": "wpnanzm"
+    },
+    "Kostomlaty nad Labem": {
+        "address": {
+            "street": "Hron\u011btick\u00e1 237",
+            "zip": "289 21",
+            "city": "Kostomlaty nad Labem",
+            "district": "Kostomlaty nad Labem"
+        },
+        "ds_id": "r8pbdgy"
+    },
+    "Kostomlaty pod Mile\u0161ovkou": {
+        "address": {
+            "street": "Lhenick\u00e1 310",
+            "zip": "417 54",
+            "city": "Kostomlaty pod Mile\u0161ovkou",
+            "district": "Kostomlaty pod Mile\u0161ovkou"
+        },
+        "ds_id": "hfebdg4"
+    },
+    "Kostomlaty pod \u0158\u00edpem": {
+        "address": {
+            "street": "90",
+            "zip": "413 01",
+            "city": "Kostomlaty pod \u0158\u00edpem",
+            "district": "Kostomlaty pod \u0158\u00edpem"
+        },
+        "ds_id": "cembyav"
+    },
+    "Ko\u0161a\u0159iska": {
+        "address": {
+            "street": "88",
+            "zip": "739 81",
+            "city": "Ko\u0161a\u0159iska",
+            "district": "Ko\u0161a\u0159iska"
+        },
+        "ds_id": "3h2bnp3"
+    },
+    "Ko\u0161\u00e1tky": {
+        "address": {
+            "street": "4",
+            "zip": "294 79",
+            "city": "Ko\u0161\u00e1tky",
+            "district": "Ko\u0161\u00e1tky"
+        },
+        "ds_id": "tgeb5w3"
+    },
+    "Ko\u0161etice": {
+        "address": {
+            "street": "146",
+            "zip": "394 22",
+            "city": "Ko\u0161etice",
+            "district": "Ko\u0161etice"
+        },
+        "ds_id": "h5hbdje"
+    },
+    "Ko\u0161ice": {
+        "address": {
+            "street": "46",
+            "zip": "285 04",
+            "city": "Ko\u0161ice",
+            "district": "Ko\u0161ice"
+        },
+        "ds_id": "ayaakqp"
+    },
+    "Ko\u0161\u00edk": {
+        "address": {
+            "street": "25",
+            "zip": "289 35",
+            "city": "Ko\u0161\u00edk",
+            "district": "Ko\u0161\u00edk"
+        },
+        "ds_id": "rxiaqcn"
+    },
+    "Ko\u0161\u00edky": {
+        "address": {
+            "street": "172",
+            "zip": "687 04",
+            "city": "Ko\u0161\u00edky",
+            "district": "Ko\u0161\u00edky"
+        },
+        "ds_id": "3zkarb7"
+    },
+    "Ko\u0161\u00edn": {
+        "address": {
+            "street": "1",
+            "zip": "391 37",
+            "city": "Ko\u0161\u00edn",
+            "district": "Ko\u0161\u00edn"
+        },
+        "ds_id": "drfauns"
+    },
+    "Ko\u0161\u0165\u00e1lov": {
+        "address": {
+            "street": "201",
+            "zip": "512 02",
+            "city": "Ko\u0161\u0165\u00e1lov",
+            "district": "Ko\u0161\u0165\u00e1lov"
+        },
+        "ds_id": "vb3bi3x"
+    },
+    "Ko\u0161tice": {
+        "address": {
+            "street": "26",
+            "zip": "439 21",
+            "city": "Ko\u0161tice",
+            "district": "Ko\u0161tice"
+        },
+        "ds_id": "9vcaxad"
+    },
+    "Koten\u010dice": {
+        "address": {
+            "street": "19",
+            "zip": "262 23",
+            "city": "Koten\u010dice",
+            "district": "Koten\u010dice"
+        },
+        "ds_id": "gs3a7ta"
+    },
+    "Kotlasy": {
+        "address": {
+            "street": "31",
+            "zip": "592 14",
+            "city": "Kotlasy",
+            "district": "Kotlasy"
+        },
+        "ds_id": "bcxawqy"
+    },
+    "Kotovice": {
+        "address": {
+            "street": "22",
+            "zip": "333 01",
+            "city": "Kotovice",
+            "district": "Kotovice"
+        },
+        "ds_id": "f4pb6r7"
+    },
+    "Kotvrdovice": {
+        "address": {
+            "street": "198",
+            "zip": "679 07",
+            "city": "Kotvrdovice",
+            "district": "Kotvrdovice"
+        },
+        "ds_id": "2qqa2pn"
+    },
+    "Kounov": {
+        "address": {
+            "street": "44",
+            "zip": "270 06",
+            "city": "Kounov",
+            "district": "Kounov"
+        },
+        "ds_id": "8m5bdfc"
+    },
+    "Koup\u011b": {
+        "address": {
+            "street": "68",
+            "zip": "262 72",
+            "city": "Koup\u011b",
+            "district": "Koup\u011b"
+        },
+        "ds_id": "43dbgi2"
+    },
+    "Kout Na \u0160umav\u011b": {
+        "address": {
+            "street": "1",
+            "zip": "345 02",
+            "city": "Kout na \u0160umav\u011b",
+            "district": "Kout na \u0160umav\u011b"
+        },
+        "ds_id": "vmkawty"
+    },
+    "Kouty": {
+        "address": {
+            "street": "19",
+            "zip": "584 01",
+            "city": "Kouty",
+            "district": "Kouty"
+        },
+        "ds_id": "8m2bpse"
+    },
+    "Kovalovice": {
+        "address": {
+            "street": "10",
+            "zip": "664 06",
+            "city": "Kovalovice",
+            "district": "Kovalovice"
+        },
+        "ds_id": "t7db284"
+    },
+    "Kov\u00e1lovice-Os\u00ed\u010dany": {
+        "address": {
+            "street": "67",
+            "zip": "798 29",
+            "city": "Kov\u00e1lovice-Os\u00ed\u010dany",
+            "district": "Kov\u00e1lovice u Ti\u0161t\u00edna"
+        },
+        "ds_id": "j5cazh3"
+    },
+    "Kov\u00e1\u0148": {
+        "address": {
+            "street": "40",
+            "zip": "294 25",
+            "city": "Kov\u00e1\u0148",
+            "district": "Kov\u00e1\u0148"
+        },
+        "ds_id": "trcame6"
+    },
+    "Kovanec": {
+        "address": {
+            "street": "61",
+            "zip": "294 26",
+            "city": "Kovanec",
+            "district": "Kovanec"
+        },
+        "ds_id": "fr3ap68"
+    },
+    "Kovanice": {
+        "address": {
+            "street": "101",
+            "zip": "288 02",
+            "city": "Kovanice",
+            "district": "Kovanice"
+        },
+        "ds_id": "2fgapwc"
+    },
+    "Kov\u00e1\u0159ov": {
+        "address": {
+            "street": "63",
+            "zip": "398 55",
+            "city": "Kov\u00e1\u0159ov",
+            "district": "Kov\u00e1\u0159ov"
+        },
+        "ds_id": "xuubdff"
+    },
+    "Kov\u010d\u00edn": {
+        "address": {
+            "street": "57",
+            "zip": "341 01",
+            "city": "Kov\u010d\u00edn",
+            "district": "Kov\u010d\u00edn"
+        },
+        "ds_id": "juwj2ur"
+    },
+    "Koz\u00e1rov": {
+        "address": {
+            "street": "18",
+            "zip": "679 71",
+            "city": "Koz\u00e1rov",
+            "district": "Koz\u00e1rov"
+        },
+        "ds_id": "yxsa2uu"
+    },
+    "Koz\u00e1rovice": {
+        "address": {
+            "street": "181",
+            "zip": "262 84",
+            "city": "Koz\u00e1rovice",
+            "district": "Koz\u00e1rovice"
+        },
+        "ds_id": "dunbgju"
+    },
+    "Kozlany": {
+        "address": {
+            "street": "8",
+            "zip": "683 41",
+            "city": "Kozlany",
+            "district": "Kozlany"
+        },
+        "ds_id": "n2kbsjx"
+    },
+    "Kozlov": {
+        "address": {
+            "street": "1020",
+            "zip": "783 57",
+            "city": "Kozlov",
+            "district": "Kozlov"
+        },
+        "ds_id": "b6dfevq"
+    },
+    "Kozlovice": {
+        "address": {
+            "street": "343",
+            "zip": "739 47",
+            "city": "Kozlovice",
+            "district": "Kozlovice"
+        },
+        "ds_id": "iwtbzjv"
+    },
+    "Kozly": {
+        "address": {
+            "street": "93",
+            "zip": "470 01",
+            "city": "Kozly",
+            "district": "Kozly"
+        },
+        "ds_id": "sj4jdvi"
+    },
+    "Kozmice": {
+        "address": {
+            "street": "12",
+            "zip": "256 01",
+            "city": "Kozmice",
+            "district": "Kozmice"
+        },
+        "ds_id": "gzsbgk9"
+    },
+    "Kozojedy": {
+        "address": {
+            "street": "9. kv\u011btna 40",
+            "zip": "281 63",
+            "city": "Kozojedy",
+            "district": "Kozojedy"
+        },
+        "ds_id": "6qbakww"
+    },
+    "Kozoj\u00eddky": {
+        "address": {
+            "street": "100",
+            "zip": "696 63",
+            "city": "Kozoj\u00eddky",
+            "district": "Kozoj\u00eddky"
+        },
+        "ds_id": "vvvbnqj"
+    },
+    "Kozolupy": {
+        "address": {
+            "street": "147",
+            "zip": "330 32",
+            "city": "Kozolupy",
+            "district": "Kozolupy"
+        },
+        "ds_id": "afubkvt"
+    },
+    "Kozom\u00edn": {
+        "address": {
+            "street": "28",
+            "zip": "277 45",
+            "city": "Kozom\u00edn",
+            "district": "Kozom\u00edn"
+        },
+        "ds_id": "vfja7xu"
+    },
+    "Ko\u017eichovice": {
+        "address": {
+            "street": "36",
+            "zip": "674 01",
+            "city": "Ko\u017eichovice",
+            "district": "Ko\u017eichovice"
+        },
+        "ds_id": "sf7bvtt"
+    },
+    "Ko\u017el\u00ed": {
+        "address": {
+            "street": "156",
+            "zip": "582 93",
+            "city": "Ko\u017el\u00ed",
+            "district": "Ko\u017el\u00ed"
+        },
+        "ds_id": "8acaynu"
+    },
+    "Ko\u017eu\u0161any-T\u00e1\u017ealy": {
+        "address": {
+            "street": "1",
+            "zip": "783 75",
+            "city": "Ko\u017eu\u0161any-T\u00e1\u017ealy",
+            "district": "T\u00e1\u017ealy"
+        },
+        "ds_id": "f95azde"
+    },
+    "Ko\u017eu\u0161ice": {
+        "address": {
+            "street": "97",
+            "zip": "683 33",
+            "city": "Ko\u017eu\u0161ice",
+            "district": "Ko\u017eu\u0161ice"
+        },
+        "ds_id": "gyza82h"
+    },
+    "Krab\u010dice": {
+        "address": {
+            "street": "67",
+            "zip": "411 87",
+            "city": "Krab\u010dice",
+            "district": "Rovn\u00e9"
+        },
+        "ds_id": "4aua34g"
+    },
+    "Kraborovice": {
+        "address": {
+            "street": "21",
+            "zip": "582 82",
+            "city": "Kraborovice",
+            "district": "Kraborovice"
+        },
+        "ds_id": "thnarri"
+    },
+    "Krahul\u010d\u00ed": {
+        "address": {
+            "street": "85",
+            "zip": "588 56",
+            "city": "Krahul\u010d\u00ed",
+            "district": "Krahul\u010d\u00ed"
+        },
+        "ds_id": "cbbbnqt"
+    },
+    "Krahulov": {
+        "address": {
+            "street": "41",
+            "zip": "675 21",
+            "city": "Krahulov",
+            "district": "Krahulov"
+        },
+        "ds_id": "38wbwc6"
+    },
+    "Krajkov\u00e1": {
+        "address": {
+            "street": "295",
+            "zip": "357 08",
+            "city": "Krajkov\u00e1",
+            "district": "Krajkov\u00e1"
+        },
+        "ds_id": "pt4brv8"
+    },
+    "Krajn\u00ed\u010dko": {
+        "address": {
+            "street": "5",
+            "zip": "387 73",
+            "city": "Krajn\u00ed\u010dko",
+            "district": "Krajn\u00ed\u010dko"
+        },
+        "ds_id": "7azamsa"
+    },
+    "Krakov": {
+        "address": {
+            "street": "51",
+            "zip": "270 35",
+            "city": "Krakov",
+            "district": "Krakov"
+        },
+        "ds_id": "diqajvr"
+    },
+    "Krakovany": {
+        "address": {
+            "street": "15",
+            "zip": "281 27",
+            "city": "Krakovany",
+            "district": "Krakovany"
+        },
+        "ds_id": "6dtbna9"
+    },
+    "Krakovec": {
+        "address": {
+            "street": "46",
+            "zip": "270 35",
+            "city": "Krakovec",
+            "district": "Krakovec"
+        },
+        "ds_id": "m8zb5ks"
+    },
+    "Kralice nad Oslavou": {
+        "address": {
+            "street": "Jino\u0161ovsk\u00e1 78",
+            "zip": "675 73",
+            "city": "Kralice nad Oslavou",
+            "district": "Kralice nad Oslavou"
+        },
+        "ds_id": "j9fbimv"
+    },
+    "Kr\u00e1lova Lhota": {
+        "address": {
+            "street": "56",
+            "zip": "398 04",
+            "city": "Kr\u00e1lova Lhota",
+            "district": "Kr\u00e1lova Lhota"
+        },
+        "ds_id": "s87ani4"
+    },
+    "Kr\u00e1lovec": {
+        "address": {
+            "street": "78",
+            "zip": "542 03",
+            "city": "Kr\u00e1lovec",
+            "district": "Kr\u00e1lovec"
+        },
+        "ds_id": "ymab386"
+    },
+    "Kr\u00e1lovice": {
+        "address": {
+            "street": "19",
+            "zip": "274 01",
+            "city": "Kr\u00e1lovice",
+            "district": "Kr\u00e1lovice"
+        },
+        "ds_id": "x9saqeg"
+    },
+    "Kr\u00e1lovsk\u00e9 Po\u0159\u00ed\u010d\u00ed": {
+        "address": {
+            "street": "L\u00e1ze\u0148sk\u00e1 114",
+            "zip": "356 01",
+            "city": "Kr\u00e1lovsk\u00e9 Po\u0159\u00ed\u010d\u00ed",
+            "district": "Kr\u00e1lovsk\u00e9 Po\u0159\u00ed\u010d\u00ed"
+        },
+        "ds_id": "ya3b6jb"
+    },
+    "Kramol\u00edn": {
+        "address": {
+            "street": "10",
+            "zip": "675 77",
+            "city": "Kramol\u00edn",
+            "district": "Kramol\u00edn"
+        },
+        "ds_id": "tiiany8"
+    },
+    "Kraselov": {
+        "address": {
+            "street": "53",
+            "zip": "387 16",
+            "city": "Kraselov",
+            "district": "Kraselov"
+        },
+        "ds_id": "arganas"
+    },
+    "Kr\u00e1sensko": {
+        "address": {
+            "street": "123",
+            "zip": "683 04",
+            "city": "Kr\u00e1sensko",
+            "district": "Kr\u00e1sensko"
+        },
+        "ds_id": "d42bv5e"
+    },
+    "Kras\u00edkov": {
+        "address": {
+            "street": "64",
+            "zip": "563 01",
+            "city": "Kras\u00edkov",
+            "district": "Kras\u00edkov"
+        },
+        "ds_id": "2mba3gn"
+    },
+    "Kras\u00edkovice": {
+        "address": {
+            "street": "28",
+            "zip": "393 01",
+            "city": "Kras\u00edkovice",
+            "district": "Kras\u00edkovice"
+        },
+        "ds_id": "bt8aydc"
+    },
+    "Kr\u00e1sn\u00e1": {
+        "address": {
+            "street": "196",
+            "zip": "352 01",
+            "city": "Kr\u00e1sn\u00e1",
+            "district": "Kr\u00e1sn\u00e1"
+        },
+        "ds_id": "nhjbwg5"
+    },
+    "Kr\u00e1sn\u00e1 Hora": {
+        "address": {
+            "street": "34",
+            "zip": "582 34",
+            "city": "Kr\u00e1sn\u00e1 Hora",
+            "district": "Kr\u00e1sn\u00e1 Hora"
+        },
+        "ds_id": "n45buj8"
+    },
+    "Kr\u00e1sn\u00e1 Ves": {
+        "address": {
+            "street": "23",
+            "zip": "294 25",
+            "city": "Kr\u00e1sn\u00e1 Ves",
+            "district": "Kr\u00e1sn\u00e1 Ves"
+        },
+        "ds_id": "diujd4t"
+    },
+    "Kr\u00e1sn\u00e9": {
+        "address": {
+            "street": "68",
+            "zip": "592 03",
+            "city": "Kr\u00e1sn\u00e9",
+            "district": "Kr\u00e1sn\u00e9"
+        },
+        "ds_id": "vwxaw96"
+    },
+    "Kr\u00e1sn\u011bves": {
+        "address": {
+            "street": "52",
+            "zip": "594 44",
+            "city": "Kr\u00e1sn\u011bves",
+            "district": "Kr\u00e1sn\u011bves"
+        },
+        "ds_id": "7k2a75d"
+    },
+    "Kr\u00e1sn\u00fd Dv\u016fr": {
+        "address": {
+            "street": "117",
+            "zip": "439 72",
+            "city": "Kr\u00e1sn\u00fd Dv\u016fr",
+            "district": "Kr\u00e1sn\u00fd Dv\u016fr"
+        },
+        "ds_id": "jwmaqq3"
+    },
+    "Kr\u00e1sn\u00fd Les": {
+        "address": {
+            "street": "122",
+            "zip": "464 01",
+            "city": "Kr\u00e1sn\u00fd Les",
+            "district": "Kr\u00e1sn\u00fd Les"
+        },
+        "ds_id": "5vxaqdx"
+    },
+    "Krasonice": {
+        "address": {
+            "street": "127",
+            "zip": "588 64",
+            "city": "Krasonice",
+            "district": "Krasonice"
+        },
+        "ds_id": "y9zayhs"
+    },
+    "Krasov": {
+        "address": {
+            "street": "29",
+            "zip": "794 01",
+            "city": "Krasov",
+            "district": "Krasov"
+        },
+        "ds_id": "ubxaymm"
+    },
+    "Krasov\u00e1": {
+        "address": {
+            "street": "43",
+            "zip": "679 06",
+            "city": "Krasov\u00e1",
+            "district": "Krasov\u00e1"
+        },
+        "ds_id": "wgra2ws"
+    },
+    "Kra\u0161lovice": {
+        "address": {
+            "street": "43",
+            "zip": "389 01",
+            "city": "Kra\u0161lovice",
+            "district": "Kra\u0161lovice"
+        },
+        "ds_id": "f4aamt2"
+    },
+    "Kra\u0161ovice": {
+        "address": {
+            "street": "49",
+            "zip": "330 13",
+            "city": "Kra\u0161ovice",
+            "district": "Kra\u0161ovice"
+        },
+        "ds_id": "m26br2g"
+    },
+    "Kr\u00e1tk\u00e1 Ves": {
+        "address": {
+            "street": "31",
+            "zip": "582 22",
+            "city": "Kr\u00e1tk\u00e1 Ves",
+            "district": "Kr\u00e1tk\u00e1 Ves"
+        },
+        "ds_id": "936avqd"
+    },
+    "Kratochvilka": {
+        "address": {
+            "street": "7",
+            "zip": "664 91",
+            "city": "Kratochvilka",
+            "district": "Kratochvilka"
+        },
+        "ds_id": "edsa2bn"
+    },
+    "Kr\u00e1to\u0161ice": {
+        "address": {
+            "street": "41",
+            "zip": "392 01",
+            "city": "Kr\u00e1to\u0161ice",
+            "district": "Kr\u00e1to\u0161ice"
+        },
+        "ds_id": "6mbb6m3"
+    },
+    "Kratu\u0161\u00edn": {
+        "address": {
+            "street": "10",
+            "zip": "383 01",
+            "city": "Kratu\u0161\u00edn",
+            "district": "Kratu\u0161\u00edn"
+        },
+        "ds_id": "zgfb8by"
+    },
+    "Kravsko": {
+        "address": {
+            "street": "12",
+            "zip": "671 51",
+            "city": "Kravsko",
+            "district": "Kravsko"
+        },
+        "ds_id": "jwfbde6"
+    },
+    "Kr\u010dma\u0148": {
+        "address": {
+            "street": "Kokorsk\u00e1 163",
+            "zip": "779 00",
+            "city": "Kr\u010dma\u0148",
+            "district": "Kr\u010dma\u0148"
+        },
+        "ds_id": "t4xbnvs"
+    },
+    "Krejnice": {
+        "address": {
+            "street": "22",
+            "zip": "387 16",
+            "city": "Krejnice",
+            "district": "Krejnice"
+        },
+        "ds_id": "pghaqek"
+    },
+    "Krhanice": {
+        "address": {
+            "street": "46",
+            "zip": "257 42",
+            "city": "Krhanice",
+            "district": "Krhanice"
+        },
+        "ds_id": "en8aqes"
+    },
+    "Krhov": {
+        "address": {
+            "street": "25",
+            "zip": "675 55",
+            "city": "Krhov",
+            "district": "Krhov"
+        },
+        "ds_id": "yv6j2mh"
+    },
+    "Krhov\u00e1": {
+        "address": {
+            "street": "B\u0159\u00ed Podmol\u016f 441",
+            "zip": "756 63",
+            "city": "Krhov\u00e1",
+            "district": "Krhov\u00e1"
+        },
+        "ds_id": "85kpew4"
+    },
+    "Krhovice": {
+        "address": {
+            "street": "147",
+            "zip": "671 28",
+            "city": "Krhovice",
+            "district": "Krhovice"
+        },
+        "ds_id": "9tebri3"
+    },
+    "Krchleby": {
+        "address": {
+            "street": "32",
+            "zip": "517 41",
+            "city": "Krchleby",
+            "district": "Krchleby"
+        },
+        "ds_id": "id3a6fv"
+    },
+    "Krmel\u00edn": {
+        "address": {
+            "street": "Kosteln\u00ed 70",
+            "zip": "739 24",
+            "city": "Krmel\u00edn",
+            "district": "Krmel\u00edn"
+        },
+        "ds_id": "teubnsg"
+    },
+    "Kr\u0148any": {
+        "address": {
+            "street": "3",
+            "zip": "257 44",
+            "city": "Kr\u0148any",
+            "district": "Kr\u0148any"
+        },
+        "ds_id": "krsautv"
+    },
+    "Krnsko": {
+        "address": {
+            "street": "41",
+            "zip": "294 31",
+            "city": "Krnsko",
+            "district": "Krnsko"
+        },
+        "ds_id": "dj7bdcf"
+    },
+    "Kroko\u010d\u00edn": {
+        "address": {
+            "street": "18",
+            "zip": "675 71",
+            "city": "Kroko\u010d\u00edn",
+            "district": "Kroko\u010d\u00edn"
+        },
+        "ds_id": "3rzajbh"
+    },
+    "Krompach": {
+        "address": {
+            "street": "49",
+            "zip": "471 57",
+            "city": "Krompach",
+            "district": "Krompach"
+        },
+        "ds_id": "823aqec"
+    },
+    "Krop\u00e1\u010dova Vrutice": {
+        "address": {
+            "street": "30",
+            "zip": "294 79",
+            "city": "Krop\u00e1\u010dova Vrutice",
+            "district": "St\u0159\u00ed\u017eovice"
+        },
+        "ds_id": "rkxb334"
+    },
+    "Krou\u010dov\u00e1": {
+        "address": {
+            "street": "9",
+            "zip": "270 54",
+            "city": "Krou\u010dov\u00e1",
+            "district": "Krou\u010dov\u00e1"
+        },
+        "ds_id": "5uejdte"
+    },
+    "Krouna": {
+        "address": {
+            "street": "218",
+            "zip": "539 43",
+            "city": "Krouna",
+            "district": "Krouna"
+        },
+        "ds_id": "y9tbk7v"
+    },
+    "Krsy": {
+        "address": {
+            "street": "1",
+            "zip": "330 38",
+            "city": "Krsy",
+            "district": "Krsy"
+        },
+        "ds_id": "3rwavnk"
+    },
+    "Krtov": {
+        "address": {
+            "street": "69",
+            "zip": "392 01",
+            "city": "Krtov",
+            "district": "Krtov"
+        },
+        "ds_id": "hr8b7d2"
+    },
+    "Krty": {
+        "address": {
+            "street": "51",
+            "zip": "270 33",
+            "city": "Krty",
+            "district": "Krty"
+        },
+        "ds_id": "4axarre"
+    },
+    "Krty-Hradec": {
+        "address": {
+            "street": "76",
+            "zip": "386 01",
+            "city": "Krty-Hradec",
+            "district": "Krty-Hradec"
+        },
+        "ds_id": "448aymh"
+    },
+    "Kruh": {
+        "address": {
+            "street": "165",
+            "zip": "514 01",
+            "city": "Kruh",
+            "district": "Kruh"
+        },
+        "ds_id": "488bt4d"
+    },
+    "Krums\u00edn": {
+        "address": {
+            "street": "2",
+            "zip": "798 03",
+            "city": "Krums\u00edn",
+            "district": "Krums\u00edn"
+        },
+        "ds_id": "mspbnty"
+    },
+    "Krumv\u00ed\u0159": {
+        "address": {
+            "street": "184",
+            "zip": "691 73",
+            "city": "Krumv\u00ed\u0159",
+            "district": "Krumv\u00ed\u0159"
+        },
+        "ds_id": "czebnt4"
+    },
+    "Krup\u00e1": {
+        "address": {
+            "street": "100",
+            "zip": "281 63",
+            "city": "Krup\u00e1",
+            "district": "Krup\u00e1"
+        },
+        "ds_id": "u4naqd3"
+    },
+    "Kru\u0161ovice": {
+        "address": {
+            "street": "Rabasova 47",
+            "zip": "270 53",
+            "city": "Kru\u0161ovice",
+            "district": "Kru\u0161ovice"
+        },
+        "ds_id": "vnabgqt"
+    },
+    "Kru\u017eberk": {
+        "address": {
+            "street": "84",
+            "zip": "747 86",
+            "city": "Kru\u017eberk",
+            "district": "Kru\u017eberk"
+        },
+        "ds_id": "6zjaxp7"
+    },
+    "Krychnov": {
+        "address": {
+            "street": "57",
+            "zip": "280 02",
+            "city": "Krychnov",
+            "district": "Krychnov"
+        },
+        "ds_id": "6evawtu"
+    },
+    "Kry\u0161tofovo \u00dadol\u00ed": {
+        "address": {
+            "street": "166",
+            "zip": "460 01",
+            "city": "Kry\u0161tofovo \u00dadol\u00ed",
+            "district": "Kry\u0161tofovo \u00dadol\u00ed"
+        },
+        "ds_id": "8u2azi8"
+    },
+    "Kry\u0161tofovy Hamry": {
+        "address": {
+            "street": "64",
+            "zip": "431 91",
+            "city": "Kry\u0161tofovy Hamry",
+            "district": "Kry\u0161tofovy Hamry"
+        },
+        "ds_id": "xgaaq46"
+    },
+    "K\u0159e\u010d": {
+        "address": {
+            "street": "95",
+            "zip": "394 95",
+            "city": "K\u0159e\u010d",
+            "district": "K\u0159e\u010d"
+        },
+        "ds_id": "375bnsc"
+    },
+    "K\u0159e\u010dho\u0159": {
+        "address": {
+            "street": "1",
+            "zip": "280 02",
+            "city": "K\u0159e\u010dho\u0159",
+            "district": "K\u0159e\u010dho\u0159"
+        },
+        "ds_id": "8skak7u"
+    },
+    "K\u0159e\u010dkov": {
+        "address": {
+            "street": "68",
+            "zip": "290 01",
+            "city": "K\u0159e\u010dkov",
+            "district": "K\u0159e\u010dkov"
+        },
+        "ds_id": "vh7axk3"
+    },
+    "K\u0159e\u010dovice": {
+        "address": {
+            "street": "9",
+            "zip": "257 56",
+            "city": "K\u0159e\u010dovice",
+            "district": "K\u0159e\u010dovice"
+        },
+        "ds_id": "hspajnk"
+    },
+    "K\u0159elov-B\u0159uchot\u00edn": {
+        "address": {
+            "street": "Marie Majerov\u00e9 45",
+            "zip": "783 36",
+            "city": "K\u0159elov-B\u0159uchot\u00edn",
+            "district": "K\u0159elov"
+        },
+        "ds_id": "yrnbnbs"
+    },
+    "K\u0159elovice": {
+        "address": {
+            "street": "67",
+            "zip": "394 45",
+            "city": "K\u0159elovice",
+            "district": "K\u0159elovice"
+        },
+        "ds_id": "w48j2sq"
+    },
+    "K\u0159enek": {
+        "address": {
+            "street": "23",
+            "zip": "277 14",
+            "city": "K\u0159enek",
+            "district": "K\u0159enek"
+        },
+        "ds_id": "g5das53"
+    },
+    "K\u0159enice": {
+        "address": {
+            "street": "48",
+            "zip": "340 12",
+            "city": "K\u0159enice",
+            "district": "K\u0159enice"
+        },
+        "ds_id": "fbnajqi"
+    },
+    "K\u0159enov": {
+        "address": {
+            "street": "26",
+            "zip": "569 22",
+            "city": "K\u0159enov",
+            "district": "K\u0159enov"
+        },
+        "ds_id": "wjaa4wz"
+    },
+    "K\u0159enovice": {
+        "address": {
+            "street": "48",
+            "zip": "398 43",
+            "city": "K\u0159enovice",
+            "district": "K\u0159enovice"
+        },
+        "ds_id": "j89b7b4"
+    },
+    "K\u0159enovy": {
+        "address": {
+            "street": "29",
+            "zip": "345 61",
+            "city": "K\u0159enovy",
+            "district": "K\u0159enovy"
+        },
+        "ds_id": "99tbvyr"
+    },
+    "K\u0159epenice": {
+        "address": {
+            "street": "79",
+            "zip": "264 01",
+            "city": "K\u0159epenice",
+            "district": "K\u0159epenice"
+        },
+        "ds_id": "yv8ajqa"
+    },
+    "K\u0159epice": {
+        "address": {
+            "street": "25",
+            "zip": "691 65",
+            "city": "K\u0159epice",
+            "district": "K\u0159epice"
+        },
+        "ds_id": "8cva2n5"
+    },
+    "K\u0159esetice": {
+        "address": {
+            "street": "1",
+            "zip": "285 47",
+            "city": "K\u0159esetice",
+            "district": "K\u0159esetice"
+        },
+        "ds_id": "ampbyf5"
+    },
+    "K\u0159es\u00edn": {
+        "address": {
+            "street": "77",
+            "zip": "410 02",
+            "city": "K\u0159es\u00edn",
+            "district": "K\u0159es\u00edn"
+        },
+        "ds_id": "5twbuyp"
+    },
+    "K\u0159e\u0161ice": {
+        "address": {
+            "street": "N\u00e1dra\u017en\u00ed 84",
+            "zip": "411 48",
+            "city": "K\u0159e\u0161ice",
+            "district": "K\u0159e\u0161ice"
+        },
+        "ds_id": "rikbddn"
+    },
+    "K\u0159e\u0161\u00edn": {
+        "address": {
+            "street": "42",
+            "zip": "394 24",
+            "city": "K\u0159e\u0161\u00edn",
+            "district": "K\u0159e\u0161\u00edn"
+        },
+        "ds_id": "582ai9j"
+    },
+    "K\u0159et\u00edn": {
+        "address": {
+            "street": "100",
+            "zip": "679 62",
+            "city": "K\u0159et\u00edn",
+            "district": "K\u0159et\u00edn"
+        },
+        "ds_id": "4ajb25n"
+    },
+    "K\u0159i\u010de\u0148": {
+        "address": {
+            "street": "88",
+            "zip": "533 41",
+            "city": "K\u0159i\u010de\u0148",
+            "district": "K\u0159i\u010de\u0148"
+        },
+        "ds_id": "6p5a9k6"
+    },
+    "K\u0159\u00eddla": {
+        "address": {
+            "street": "1",
+            "zip": "592 31",
+            "city": "K\u0159\u00eddla",
+            "district": "K\u0159\u00eddla"
+        },
+        "ds_id": "sh8aq83"
+    },
+    "K\u0159\u00eddl\u016fvky": {
+        "address": {
+            "street": "67",
+            "zip": "671 28",
+            "city": "K\u0159\u00eddl\u016fvky",
+            "district": "K\u0159\u00eddl\u016fvky"
+        },
+        "ds_id": "yg7bi4c"
+    },
+    "K\u0159imov": {
+        "address": {
+            "street": "1",
+            "zip": "430 01",
+            "city": "K\u0159imov",
+            "district": "K\u0159imov"
+        },
+        "ds_id": "9z8bpy2"
+    },
+    "K\u0159inice": {
+        "address": {
+            "street": "176",
+            "zip": "550 01",
+            "city": "K\u0159inice",
+            "district": "K\u0159inice"
+        },
+        "ds_id": "fgfbnr8"
+    },
+    "K\u0159i\u0161\u0165anov": {
+        "address": {
+            "street": "2",
+            "zip": "383 01",
+            "city": "K\u0159i\u0161\u0165anov",
+            "district": "K\u0159i\u0161\u0165anov"
+        },
+        "ds_id": "ydyaw79"
+    },
+    "K\u0159i\u0161\u0165anovice": {
+        "address": {
+            "street": "92",
+            "zip": "793 68",
+            "city": "K\u0159i\u0161\u0165anovice",
+            "district": "K\u0159i\u0161\u0165anovice"
+        },
+        "ds_id": "a37bsiq"
+    },
+    "K\u0159i\u017e\u00e1nky": {
+        "address": {
+            "street": "116",
+            "zip": "592 02",
+            "city": "K\u0159i\u017e\u00e1nky",
+            "district": "Moravsk\u00e9 K\u0159i\u017e\u00e1nky"
+        },
+        "ds_id": "uzubme2"
+    },
+    "K\u0159i\u017eanovice": {
+        "address": {
+            "street": "85",
+            "zip": "685 01",
+            "city": "K\u0159i\u017eanovice",
+            "district": "K\u0159i\u017eanovice"
+        },
+        "ds_id": "tfqbjz7"
+    },
+    "K\u0159i\u017eanovice u Vy\u0161kova": {
+        "address": {
+            "street": "28",
+            "zip": "682 01",
+            "city": "K\u0159i\u017eanovice u Vy\u0161kova",
+            "district": "K\u0159i\u017eanovice u Vy\u0161kova"
+        },
+        "ds_id": "bbsbyif"
+    },
+    "K\u0159i\u017eany": {
+        "address": {
+            "street": "340",
+            "zip": "463 53",
+            "city": "K\u0159i\u017eany",
+            "district": "K\u0159i\u017eany"
+        },
+        "ds_id": "w6rbdc5"
+    },
+    "K\u0159i\u017e\u00ednkov": {
+        "address": {
+            "street": "5",
+            "zip": "594 53",
+            "city": "K\u0159i\u017e\u00ednkov",
+            "district": "K\u0159i\u017e\u00ednkov"
+        },
+        "ds_id": "6aka2d6"
+    },
+    "K\u0159\u00ed\u017ekov\u00fd \u00dajezdec": {
+        "address": {
+            "street": "37",
+            "zip": "251 68",
+            "city": "K\u0159\u00ed\u017ekov\u00fd \u00dajezdec",
+            "district": "K\u0159\u00ed\u017ekov\u00fd \u00dajezdec"
+        },
+        "ds_id": "fhkakxq"
+    },
+    "K\u0159i\u017eovatka": {
+        "address": {
+            "street": "103",
+            "zip": "351 34",
+            "city": "K\u0159i\u017eovatka",
+            "district": "K\u0159i\u017eovatka"
+        },
+        "ds_id": "effa646"
+    },
+    "K\u0159ov\u00ed": {
+        "address": {
+            "street": "32",
+            "zip": "594 54",
+            "city": "K\u0159ov\u00ed",
+            "district": "K\u0159ov\u00ed"
+        },
+        "ds_id": "k2ubua9"
+    },
+    "K\u0159t\u011bnov": {
+        "address": {
+            "street": "17",
+            "zip": "679 74",
+            "city": "K\u0159t\u011bnov",
+            "district": "K\u0159t\u011bnov"
+        },
+        "ds_id": "a49a23b"
+    },
+    "K\u0159tomil": {
+        "address": {
+            "street": "60",
+            "zip": "751 14",
+            "city": "K\u0159tomil",
+            "district": "K\u0159tomil"
+        },
+        "ds_id": "7wgav8e"
+    },
+    "K\u0161ely": {
+        "address": {
+            "street": "10",
+            "zip": "282 01",
+            "city": "K\u0161ely",
+            "district": "K\u0161ely"
+        },
+        "ds_id": "zvnaj9q"
+    },
+    "K\u0161ice": {
+        "address": {
+            "street": "45",
+            "zip": "349 01",
+            "city": "K\u0161ice",
+            "district": "K\u0161ice"
+        },
+        "ds_id": "ijwbhz4"
+    },
+    "Kti\u0161": {
+        "address": {
+            "street": "11",
+            "zip": "384 03",
+            "city": "Kti\u0161",
+            "district": "Kti\u0161"
+        },
+        "ds_id": "c89edq5"
+    },
+    "Ktov\u00e1": {
+        "address": {
+            "street": "62",
+            "zip": "512 63",
+            "city": "Ktov\u00e1",
+            "district": "Ktov\u00e1"
+        },
+        "ds_id": "imjbnsk"
+    },
+    "Kublov": {
+        "address": {
+            "street": "199",
+            "zip": "267 41",
+            "city": "Kublov",
+            "district": "Kublov"
+        },
+        "ds_id": "8jebx58"
+    },
+    "Kubova Hu\u0165": {
+        "address": {
+            "street": "22",
+            "zip": "385 01",
+            "city": "Kubova Hu\u0165",
+            "district": "Kubova Hu\u0165"
+        },
+        "ds_id": "vp8ang7"
+    },
+    "Kub\u0161ice": {
+        "address": {
+            "street": "40",
+            "zip": "671 76",
+            "city": "Kub\u0161ice",
+            "district": "Kub\u0161ice"
+        },
+        "ds_id": "9uabnrs"
+    },
+    "Ku\u010derov": {
+        "address": {
+            "street": "59",
+            "zip": "682 01",
+            "city": "Ku\u010derov",
+            "district": "Ku\u010derov"
+        },
+        "ds_id": "2dfbuh5"
+    },
+    "Ku\u010de\u0159": {
+        "address": {
+            "street": "35",
+            "zip": "398 34",
+            "city": "Ku\u010de\u0159",
+            "district": "Ku\u010de\u0159"
+        },
+        "ds_id": "tb8bw5c"
+    },
+    "Kudlovice": {
+        "address": {
+            "street": "39",
+            "zip": "687 03",
+            "city": "Kudlovice",
+            "district": "Kudlovice"
+        },
+        "ds_id": "i39at74"
+    },
+    "Kucha\u0159ovice": {
+        "address": {
+            "street": "8.Kv\u011btna 211",
+            "zip": "669 02",
+            "city": "Kucha\u0159ovice",
+            "district": "Kucha\u0159ovice"
+        },
+        "ds_id": "35kbks3"
+    },
+    "Kujavy": {
+        "address": {
+            "street": "86",
+            "zip": "742 45",
+            "city": "Kujavy",
+            "district": "Kujavy"
+        },
+        "ds_id": "fsuaxqz"
+    },
+    "Kukle": {
+        "address": {
+            "street": "20",
+            "zip": "568 02",
+            "city": "Kukle",
+            "district": "Kukle"
+        },
+        "ds_id": "7cja4wv"
+    },
+    "Kukl\u00edk": {
+        "address": {
+            "street": "25",
+            "zip": "592 03",
+            "city": "Kukl\u00edk",
+            "district": "Kukl\u00edk"
+        },
+        "ds_id": "6p8aw93"
+    },
+    "Kuks": {
+        "address": {
+            "street": "12",
+            "zip": "544 43",
+            "city": "Kuks",
+            "district": "Kuks"
+        },
+        "ds_id": "p6bbpi4"
+    },
+    "Kul\u00ed\u0159ov": {
+        "address": {
+            "street": "130",
+            "zip": "679 06",
+            "city": "Kul\u00ed\u0159ov",
+            "district": "Kul\u00ed\u0159ov"
+        },
+        "ds_id": "ps8buni"
+    },
+    "Kun\u010dice nad Labem": {
+        "address": {
+            "street": "121",
+            "zip": "543 61",
+            "city": "Kun\u010dice nad Labem",
+            "district": "Kun\u010dice nad Labem"
+        },
+        "ds_id": "eaybxcm"
+    },
+    "Kun\u010dice pod Ond\u0159ejn\u00edkem": {
+        "address": {
+            "street": "569",
+            "zip": "739 13",
+            "city": "Kun\u010dice pod Ond\u0159ejn\u00edkem",
+            "district": "Kun\u010dice pod Ond\u0159ejn\u00edkem"
+        },
+        "ds_id": "i8cbdbu"
+    },
+    "Kun\u010dina": {
+        "address": {
+            "street": "204",
+            "zip": "569 24",
+            "city": "Kun\u010dina",
+            "district": "Kun\u010dina"
+        },
+        "ds_id": "59ibrui"
+    },
+    "Kun\u010dina Ves": {
+        "address": {
+            "street": "40",
+            "zip": "679 71",
+            "city": "Kun\u010dina Ves",
+            "district": "Kun\u010dina Ves"
+        },
+        "ds_id": "gp9b4ua"
+    },
+    "Kundratice": {
+        "address": {
+            "street": "50",
+            "zip": "594 51",
+            "city": "Kundratice",
+            "district": "Kundratice"
+        },
+        "ds_id": "m78bv2y"
+    },
+    "Kun\u011bjovice": {
+        "address": {
+            "street": "28",
+            "zip": "330 35",
+            "city": "Kun\u011bjovice",
+            "district": "Kun\u011bjovice"
+        },
+        "ds_id": "yzcbhyd"
+    },
+    "Kunemil": {
+        "address": {
+            "street": "43",
+            "zip": "582 91",
+            "city": "Kunemil",
+            "district": "Kunemil"
+        },
+        "ds_id": "rsdawp9"
+    },
+    "Kun\u011btice": {
+        "address": {
+            "street": "58",
+            "zip": "533 04",
+            "city": "Kun\u011btice",
+            "district": "Kun\u011btice"
+        },
+        "ds_id": "yfma3yr"
+    },
+    "Kunice": {
+        "address": {
+            "street": "Na N\u00e1vsi 92",
+            "zip": "251 63",
+            "city": "Kunice",
+            "district": "Kunice"
+        },
+        "ds_id": "kbdaqd7"
+    },
+    "Kuni\u010dky": {
+        "address": {
+            "street": "47",
+            "zip": "679 02",
+            "city": "Kuni\u010dky",
+            "district": "Kuni\u010dky"
+        },
+        "ds_id": "692a2wn"
+    },
+    "Kun\u00edn": {
+        "address": {
+            "street": "69",
+            "zip": "742 53",
+            "city": "Kun\u00edn",
+            "district": "Kun\u00edn"
+        },
+        "ds_id": "w26b2tc"
+    },
+    "Ku\u0148ovice": {
+        "address": {
+            "street": "7",
+            "zip": "257 65",
+            "city": "Ku\u0148ovice",
+            "district": "Ku\u0148ovice"
+        },
+        "ds_id": "wtxajfb"
+    },
+    "Kunratice": {
+        "address": {
+            "street": "107",
+            "zip": "405 02",
+            "city": "Kunratice",
+            "district": "Kunratice"
+        },
+        "ds_id": "7yqbw9v"
+    },
+    "Kunratice u Cvikova": {
+        "address": {
+            "street": "145",
+            "zip": "471 55",
+            "city": "Kunratice u Cvikova",
+            "district": "Kunratice u Cvikova"
+        },
+        "ds_id": "hy5btgu"
+    },
+    "Kun\u017eak": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Komensk\u00e9ho 74",
+            "zip": "378 62",
+            "city": "Kun\u017eak",
+            "district": "Kun\u017eak"
+        },
+        "ds_id": "zmsbda8"
+    },
+    "Kupa\u0159ovice": {
+        "address": {
+            "street": "44",
+            "zip": "664 64",
+            "city": "Kupa\u0159ovice",
+            "district": "Kupa\u0159ovice"
+        },
+        "ds_id": "jeda372"
+    },
+    "Kurd\u011bjov": {
+        "address": {
+            "street": "1",
+            "zip": "693 01",
+            "city": "Kurd\u011bjov",
+            "district": "Kurd\u011bjov"
+        },
+        "ds_id": "nsba2nc"
+    },
+    "Kuroslepy": {
+        "address": {
+            "street": "19",
+            "zip": "675 75",
+            "city": "Kuroslepy",
+            "district": "Kuroslepy"
+        },
+        "ds_id": "2x8bi2e"
+    },
+    "Kurovice": {
+        "address": {
+            "street": "68",
+            "zip": "768 52",
+            "city": "Kurovice",
+            "district": "Kurovice"
+        },
+        "ds_id": "amyazex"
+    },
+    "Ku\u0159imany": {
+        "address": {
+            "street": "11",
+            "zip": "386 01",
+            "city": "Ku\u0159imany",
+            "district": "Ku\u0159imany"
+        },
+        "ds_id": "4tyamu7"
+    },
+    "Ku\u0159imsk\u00e1 Nov\u00e1 Ves": {
+        "address": {
+            "street": "50",
+            "zip": "594 55",
+            "city": "Ku\u0159imsk\u00e1 Nov\u00e1 Ves",
+            "district": "Ku\u0159imsk\u00e1 Nov\u00e1 Ves"
+        },
+        "ds_id": "wcdbgt4"
+    },
+    "Ku\u0159imsk\u00e9 Jest\u0159ab\u00ed": {
+        "address": {
+            "street": "50",
+            "zip": "594 55",
+            "city": "Ku\u0159imsk\u00e9 Jest\u0159ab\u00ed",
+            "district": "Ku\u0159imsk\u00e9 Jest\u0159ab\u00ed"
+        },
+        "ds_id": "imraz4h"
+    },
+    "Kutrovice": {
+        "address": {
+            "street": "26",
+            "zip": "273 75",
+            "city": "Neprobylice",
+            "district": "Neprobylice"
+        },
+        "ds_id": "7i4b2d3"
+    },
+    "Ku\u017eelov": {
+        "address": {
+            "street": "125",
+            "zip": "696 73",
+            "city": "Ku\u017eelov",
+            "district": "Ku\u017eelov"
+        },
+        "ds_id": "mfkbtxd"
+    },
+    "Kvasice": {
+        "address": {
+            "street": "A. Dohnala 18",
+            "zip": "768 21",
+            "city": "Kvasice",
+            "district": "Kvasice"
+        },
+        "ds_id": "quhbdab"
+    },
+    "Kv\u00e1skovice": {
+        "address": {
+            "street": "1",
+            "zip": "386 01",
+            "city": "Kv\u00e1skovice",
+            "district": "Kv\u00e1skovice"
+        },
+        "ds_id": "dk9amv2"
+    },
+    "Kv\u00e1\u0161\u0148ovice": {
+        "address": {
+            "street": "5",
+            "zip": "341 01",
+            "city": "Kv\u00e1\u0161\u0148ovice",
+            "district": "Kv\u00e1\u0161\u0148ovice"
+        },
+        "ds_id": "9smbhy9"
+    },
+    "Kv\u011btinov": {
+        "address": {
+            "street": "12",
+            "zip": "580 01",
+            "city": "Kv\u011btinov",
+            "district": "Kv\u011btinov"
+        },
+        "ds_id": "xvtayb5"
+    },
+    "Kv\u011btn\u00e1": {
+        "address": {
+            "street": "92",
+            "zip": "572 01",
+            "city": "Kv\u011btn\u00e1",
+            "district": "Kv\u011btn\u00e1"
+        },
+        "ds_id": "fubbq7k"
+    },
+    "Kv\u011btnice": {
+        "address": {
+            "street": "K Dobro\u010dovic\u016fm 35",
+            "zip": "250 84",
+            "city": "Kv\u011btnice",
+            "district": "Kv\u011btnice"
+        },
+        "ds_id": "egearys"
+    },
+    "Kv\u011btov": {
+        "address": {
+            "street": "7",
+            "zip": "399 01",
+            "city": "Kv\u011btov",
+            "district": "Kv\u011btov"
+        },
+        "ds_id": "7x8aqnw"
+    },
+    "Kv\u00ed\u010dovice": {
+        "address": {
+            "street": "50",
+            "zip": "345 62",
+            "city": "Kv\u00ed\u010dovice",
+            "district": "Kv\u00ed\u010dovice"
+        },
+        "ds_id": "rvpa79b"
+    },
+    "Kvilda": {
+        "address": {
+            "street": "17",
+            "zip": "384 93",
+            "city": "Kvilda",
+            "district": "Kvilda"
+        },
+        "ds_id": "ryaefuu"
+    },
+    "Kv\u00edlice": {
+        "address": {
+            "street": "38",
+            "zip": "273 75",
+            "city": "Kv\u00edlice",
+            "district": "Kv\u00edlice"
+        },
+        "ds_id": "8b4as4b"
+    },
+    "Kv\u00edtkov": {
+        "address": {
+            "street": "57",
+            "zip": "470 01",
+            "city": "Kv\u00edtkov",
+            "district": "Kv\u00edtkov"
+        },
+        "ds_id": "gbkbsuz"
+    },
+    "Kv\u00edtkovice": {
+        "address": {
+            "street": "54",
+            "zip": "373 84",
+            "city": "Kv\u00edtkovice",
+            "district": "Kv\u00edtkovice"
+        },
+        "ds_id": "eqhb6jj"
+    },
+    "Kyjovice": {
+        "address": {
+            "street": "2",
+            "zip": "671 61",
+            "city": "Kyjovice",
+            "district": "Kyjovice"
+        },
+        "ds_id": "47ra2mq"
+    },
+    "Kynice": {
+        "address": {
+            "street": "38",
+            "zip": "584 01",
+            "city": "Kynice",
+            "district": "Kynice"
+        },
+        "ds_id": "mfhb6ag"
+    },
+    "Kyselka": {
+        "address": {
+            "street": "118",
+            "zip": "362 72",
+            "city": "Kyselka",
+            "district": "Rado\u0161ov"
+        },
+        "ds_id": "69xbc9p"
+    },
+    "Kyselovice": {
+        "address": {
+            "street": "189",
+            "zip": "768 11",
+            "city": "Kyselovice",
+            "district": "Kyselovice"
+        },
+        "ds_id": "wgnbc9t"
+    },
+    "Ky\u0161ice": {
+        "address": {
+            "street": "Berounsk\u00e1 4",
+            "zip": "273 51",
+            "city": "Ky\u0161ice",
+            "district": "Ky\u0161ice"
+        },
+        "ds_id": "vfdbumy"
+    },
+    "Ky\u0161kovice": {
+        "address": {
+            "street": "5",
+            "zip": "413 01",
+            "city": "Ky\u0161kovice",
+            "district": "Ky\u0161kovice"
+        },
+        "ds_id": "ziga3q8"
+    },
+    "Kytlice": {
+        "address": {
+            "street": "24",
+            "zip": "407 45",
+            "city": "Kytlice",
+            "district": "Kytlice"
+        },
+        "ds_id": "fwubs7v"
+    },
+    "Labsk\u00e1 Str\u00e1\u0148": {
+        "address": {
+            "street": "111",
+            "zip": "405 02",
+            "city": "Labsk\u00e1 Str\u00e1\u0148",
+            "district": "Labsk\u00e1 Str\u00e1\u0148"
+        },
+        "ds_id": "iwwbn8s"
+    },
+    "Labsk\u00e9 Chr\u010dice": {
+        "address": {
+            "street": "41",
+            "zip": "281 26",
+            "city": "Labsk\u00e9 Chr\u010dice",
+            "district": "Labsk\u00e9 Chr\u010dice"
+        },
+        "ds_id": "f5ua4xp"
+    },
+    "Labuty": {
+        "address": {
+            "street": "30",
+            "zip": "696 48",
+            "city": "Labuty",
+            "district": "Labuty"
+        },
+        "ds_id": "c2gaxcq"
+    },
+    "La\u010dnov": {
+        "address": {
+            "street": "158",
+            "zip": "756 12",
+            "city": "La\u010dnov",
+            "district": "La\u010dnov"
+        },
+        "ds_id": "mpdbc9x"
+    },
+    "Ladn\u00e1": {
+        "address": {
+            "street": "Masarykova 119",
+            "zip": "691 46",
+            "city": "Ladn\u00e1",
+            "district": "Ladn\u00e1"
+        },
+        "ds_id": "dpeby9i"
+    },
+    "Laho\u0161\u0165": {
+        "address": {
+            "street": "\u0160vermova 22",
+            "zip": "417 25",
+            "city": "Laho\u0161\u0165",
+            "district": "Laho\u0161\u0165"
+        },
+        "ds_id": "6sjbmxc"
+    },
+    "Lan\u010dov": {
+        "address": {
+            "street": "54",
+            "zip": "671 06",
+            "city": "Lan\u010dov",
+            "district": "Lan\u010dov"
+        },
+        "ds_id": "wvbbn9z"
+    },
+    "L\u00e1nov": {
+        "address": {
+            "street": "200",
+            "zip": "543 41",
+            "city": "L\u00e1nov",
+            "district": "Prost\u0159edn\u00ed L\u00e1nov"
+        },
+        "ds_id": "avja7em"
+    },
+    "L\u00e1ny": {
+        "address": {
+            "street": "14",
+            "zip": "537 01",
+            "city": "L\u00e1ny",
+            "district": "L\u00e1ny"
+        },
+        "ds_id": "qw5a4xj"
+    },
+    "L\u00e1ny u Da\u0161ic": {
+        "address": {
+            "street": "51",
+            "zip": "530 02",
+            "city": "L\u00e1ny u Da\u0161ic",
+            "district": "L\u00e1ny u Da\u0161ic"
+        },
+        "ds_id": "88wa3ym"
+    },
+    "L\u00e1senice": {
+        "address": {
+            "street": "11",
+            "zip": "378 01",
+            "city": "L\u00e1senice",
+            "district": "L\u00e1senice"
+        },
+        "ds_id": "eb2a7v8"
+    },
+    "La\u0161kov": {
+        "address": {
+            "street": "1",
+            "zip": "798 57",
+            "city": "La\u0161kov",
+            "district": "La\u0161kov"
+        },
+        "ds_id": "tbibc8e"
+    },
+    "La\u0161ovice": {
+        "address": {
+            "street": "9",
+            "zip": "270 21",
+            "city": "La\u0161ovice",
+            "district": "La\u0161ovice"
+        },
+        "ds_id": "2grb537"
+    },
+    "Lavi\u010dky": {
+        "address": {
+            "street": "90",
+            "zip": "594 01",
+            "city": "Lavi\u010dky",
+            "district": "Lavi\u010dky"
+        },
+        "ds_id": "mcjajc5"
+    },
+    "Lavi\u010dn\u00e9": {
+        "address": {
+            "street": "30",
+            "zip": "569 04",
+            "city": "Lavi\u010dn\u00e9",
+            "district": "Lavi\u010dn\u00e9"
+        },
+        "ds_id": "3zha3na"
+    },
+    "L\u00e1z": {
+        "address": {
+            "street": "219",
+            "zip": "262 41",
+            "city": "L\u00e1z",
+            "district": "L\u00e1z"
+        },
+        "ds_id": "hduawcj"
+    },
+    "Lazinov": {
+        "address": {
+            "street": "121",
+            "zip": "679 62",
+            "city": "Lazinov",
+            "district": "Lazinov"
+        },
+        "ds_id": "7p6b6dj"
+    },
+    "L\u00e1zn\u011b Libverda": {
+        "address": {
+            "street": "16",
+            "zip": "463 62",
+            "city": "L\u00e1zn\u011b Libverda",
+            "district": "L\u00e1zn\u011b Libverda"
+        },
+        "ds_id": "yadbknd"
+    },
+    "Lazn\u00ed\u010dky": {
+        "address": {
+            "street": "35",
+            "zip": "751 25",
+            "city": "Lazn\u00ed\u010dky",
+            "district": "Lazn\u00ed\u010dky"
+        },
+        "ds_id": "hmfa4ca"
+    },
+    "Lazn\u00edky": {
+        "address": {
+            "street": "116",
+            "zip": "751 25",
+            "city": "Lazn\u00edky",
+            "district": "Lazn\u00edky"
+        },
+        "ds_id": "ehsbvsi"
+    },
+    "Lazsko": {
+        "address": {
+            "street": "52",
+            "zip": "262 31",
+            "city": "Lazsko",
+            "district": "Lazsko"
+        },
+        "ds_id": "ajiak3j"
+    },
+    "La\u017e\u00e1nky": {
+        "address": {
+            "street": "14",
+            "zip": "664 71",
+            "city": "La\u017e\u00e1nky",
+            "district": "La\u017e\u00e1nky"
+        },
+        "ds_id": "grea22r"
+    },
+    "La\u017eany": {
+        "address": {
+            "street": "39",
+            "zip": "388 01",
+            "city": "La\u017eany",
+            "district": "La\u017eany"
+        },
+        "ds_id": "mcda72a"
+    },
+    "La\u017ei\u0161t\u011b": {
+        "address": {
+            "street": "24",
+            "zip": "384 32",
+            "city": "La\u017ei\u0161t\u011b",
+            "district": "La\u017ei\u0161t\u011b"
+        },
+        "ds_id": "8j7b7p4"
+    },
+    "L\u00e1\u017eovice": {
+        "address": {
+            "street": "50",
+            "zip": "267 24",
+            "city": "L\u00e1\u017eovice",
+            "district": "L\u00e1\u017eovice"
+        },
+        "ds_id": "juhb7nw"
+    },
+    "L\u010dovice": {
+        "address": {
+            "street": "64",
+            "zip": "384 81",
+            "city": "L\u010dovice",
+            "district": "L\u010dovice"
+        },
+        "ds_id": "ee6b55e"
+    },
+    "Ledce": {
+        "address": {
+            "street": "120",
+            "zip": "294 47",
+            "city": "Ledce",
+            "district": "Ledce"
+        },
+        "ds_id": "4imame2"
+    },
+    "Led\u010dice": {
+        "address": {
+            "street": "45",
+            "zip": "277 08",
+            "city": "Led\u010dice",
+            "district": "Led\u010dice"
+        },
+        "ds_id": "wpdbm2t"
+    },
+    "Lede\u010dko": {
+        "address": {
+            "street": "13",
+            "zip": "285 06",
+            "city": "Lede\u010dko",
+            "district": "Lede\u010dko"
+        },
+        "ds_id": "be7bxrf"
+    },
+    "Lednice": {
+        "address": {
+            "street": "Z\u00e1meck\u00e9 n\u00e1m\u011bst\u00ed 70",
+            "zip": "691 44",
+            "city": "Lednice",
+            "district": "Lednice"
+        },
+        "ds_id": "yxpbc7v"
+    },
+    "Lechotice": {
+        "address": {
+            "street": "100",
+            "zip": "768 52",
+            "city": "Lechotice",
+            "district": "Lechotice"
+        },
+        "ds_id": "66fbqds"
+    },
+    "Lechovice": {
+        "address": {
+            "street": "32",
+            "zip": "671 63",
+            "city": "Lechovice",
+            "district": "Lechovice"
+        },
+        "ds_id": "c4tbm24"
+    },
+    "Lelekovice": {
+        "address": {
+            "street": "Hlavn\u00ed 75",
+            "zip": "664 31",
+            "city": "Lelekovice",
+            "district": "Lelekovice"
+        },
+        "ds_id": "jwia235"
+    },
+    "Lene\u0161ice": {
+        "address": {
+            "street": "Kn\u00ed\u017eete V\u00e1clava 521",
+            "zip": "439 23",
+            "city": "Lene\u0161ice",
+            "district": "Lene\u0161ice"
+        },
+        "ds_id": "p6ebc7z"
+    },
+    "Lenora": {
+        "address": {
+            "street": "36",
+            "zip": "384 42",
+            "city": "Lenora",
+            "district": "Lenora"
+        },
+        "ds_id": "yegb5s8"
+    },
+    "Leskovec": {
+        "address": {
+            "street": "67",
+            "zip": "756 11",
+            "city": "Leskovec",
+            "district": "Leskovec"
+        },
+        "ds_id": "q5nb2ep"
+    },
+    "Leskovec nad Moravic\u00ed": {
+        "address": {
+            "street": "42",
+            "zip": "793 68",
+            "city": "Leskovec nad Moravic\u00ed",
+            "district": "Leskovec nad Moravic\u00ed"
+        },
+        "ds_id": "fndbpye"
+    },
+    "Leskovice": {
+        "address": {
+            "street": "51",
+            "zip": "394 14",
+            "city": "Leskovice",
+            "district": "Leskovice"
+        },
+        "ds_id": "6z6btx5"
+    },
+    "Lesn\u00e1": {
+        "address": {
+            "street": "35",
+            "zip": "395 01",
+            "city": "Lesn\u00e1",
+            "district": "Lesn\u00e1"
+        },
+        "ds_id": "hrqaysy"
+    },
+    "Lesnice": {
+        "address": {
+            "street": "46",
+            "zip": "789 01",
+            "city": "Lesnice",
+            "district": "Lesnice"
+        },
+        "ds_id": "zuhbm37"
+    },
+    "Lesn\u00ed Hlubok\u00e9": {
+        "address": {
+            "street": "46",
+            "zip": "664 83",
+            "city": "Lesn\u00ed Hlubok\u00e9",
+            "district": "Lesn\u00ed Hlubok\u00e9"
+        },
+        "ds_id": "zavavqh"
+    },
+    "Lesn\u00ed Jakubov": {
+        "address": {
+            "street": "30",
+            "zip": "675 73",
+            "city": "Lesn\u00ed Jakubov",
+            "district": "Lesn\u00ed Jakubov"
+        },
+        "ds_id": "9vub5ve"
+    },
+    "Lesonice": {
+        "address": {
+            "street": "73",
+            "zip": "672 01",
+            "city": "Lesonice",
+            "district": "Lesonice"
+        },
+        "ds_id": "f9xbm3h"
+    },
+    "Lestkov": {
+        "address": {
+            "street": "210",
+            "zip": "349 53",
+            "city": "Lestkov",
+            "district": "Lestkov"
+        },
+        "ds_id": "36gbhzs"
+    },
+    "Les\u016f\u0148ky": {
+        "address": {
+            "street": "2",
+            "zip": "675 51",
+            "city": "Les\u016f\u0148ky",
+            "district": "Les\u016f\u0148ky"
+        },
+        "ds_id": "9peav37"
+    },
+    "Le\u0161any": {
+        "address": {
+            "street": "23",
+            "zip": "257 44",
+            "city": "Le\u0161any",
+            "district": "Le\u0161any"
+        },
+        "ds_id": "bnvbte3"
+    },
+    "Le\u0161etice": {
+        "address": {
+            "street": "41",
+            "zip": "262 31",
+            "city": "Le\u0161etice",
+            "district": "Le\u0161etice"
+        },
+        "ds_id": "m2javsh"
+    },
+    "Le\u0161kovice": {
+        "address": {
+            "street": "38",
+            "zip": "582 82",
+            "city": "Le\u0161kovice",
+            "district": "Le\u0161kovice"
+        },
+        "ds_id": "qj2a93y"
+    },
+    "Le\u0161n\u00e1": {
+        "address": {
+            "street": "36",
+            "zip": "756 41",
+            "city": "Le\u0161n\u00e1",
+            "district": "Le\u0161n\u00e1"
+        },
+        "ds_id": "fc5bc77"
+    },
+    "Le\u0161tina": {
+        "address": {
+            "street": "87",
+            "zip": "539 44",
+            "city": "Le\u0161tina",
+            "district": "Le\u0161tina"
+        },
+        "ds_id": "zqea4xe"
+    },
+    "Le\u0161tina u Sv\u011btl\u00e9": {
+        "address": {
+            "street": "51",
+            "zip": "582 86",
+            "city": "Le\u0161tina u Sv\u011btl\u00e9",
+            "district": "Le\u0161tina u Sv\u011btl\u00e9"
+        },
+        "ds_id": "r8kbpt2"
+    },
+    "Le\u0161tinka": {
+        "address": {
+            "street": "30",
+            "zip": "539 73",
+            "city": "Le\u0161tinka",
+            "district": "Le\u0161tinka"
+        },
+        "ds_id": "wc3b2q3"
+    },
+    "Letiny": {
+        "address": {
+            "street": "20",
+            "zip": "336 01",
+            "city": "Letiny",
+            "district": "Letiny"
+        },
+        "ds_id": "6jubc6d"
+    },
+    "Letkov": {
+        "address": {
+            "street": "Ke H\u0159i\u0161ti 117",
+            "zip": "326 00",
+            "city": "Letkov",
+            "district": "Letkov"
+        },
+        "ds_id": "dcbb6dw"
+    },
+    "Letonice": {
+        "address": {
+            "street": "Osvobozen\u00ed 112",
+            "zip": "683 35",
+            "city": "Letonice",
+            "district": "Letonice"
+        },
+        "ds_id": "vsjbc6g"
+    },
+    "Lety": {
+        "address": {
+            "street": "Na n\u00e1vsi 160",
+            "zip": "252 29",
+            "city": "Lety",
+            "district": "Lety"
+        },
+        "ds_id": "e4uamak"
+    },
+    "Lev\u00ednsk\u00e1 Ole\u0161nice": {
+        "address": {
+            "street": "94",
+            "zip": "514 01",
+            "city": "Lev\u00ednsk\u00e1 Ole\u0161nice",
+            "district": "Lev\u00ednsk\u00e1 Ole\u0161nice"
+        },
+        "ds_id": "n4cbkzc"
+    },
+    "Lh\u00e1nice": {
+        "address": {
+            "street": "25",
+            "zip": "675 75",
+            "city": "Lh\u00e1nice",
+            "district": "Lh\u00e1nice"
+        },
+        "ds_id": "a3mj2uv"
+    },
+    "Lhota": {
+        "address": {
+            "street": "63",
+            "zip": "751 31",
+            "city": "Lhota",
+            "district": "Lhota"
+        },
+        "ds_id": "453edsk"
+    },
+    "Lhota pod Rad\u010dem": {
+        "address": {
+            "street": "59",
+            "zip": "337 01",
+            "city": "Lhota pod Rad\u010dem",
+            "district": "Lhota pod Rad\u010dem"
+        },
+        "ds_id": "pn8ay7n"
+    },
+    "Lhota Rapotina": {
+        "address": {
+            "street": "15",
+            "zip": "679 01",
+            "city": "Lhota Rapotina",
+            "district": "Lhota Rapotina"
+        },
+        "ds_id": "9wtbqr3"
+    },
+    "Lhota u Lysic": {
+        "address": {
+            "street": "40",
+            "zip": "679 71",
+            "city": "Lhota u Lysic",
+            "district": "Lhota u Lysic"
+        },
+        "ds_id": "67kanjb"
+    },
+    "Lhota u Ole\u0161nice": {
+        "address": {
+            "street": "45",
+            "zip": "679 74",
+            "city": "Lhota u Ole\u0161nice",
+            "district": "Lhota u Ole\u0161nice"
+        },
+        "ds_id": "upta232"
+    },
+    "Lhota u P\u0159\u00edbram\u011b": {
+        "address": {
+            "street": "77",
+            "zip": "261 01",
+            "city": "Lhota u P\u0159\u00edbram\u011b",
+            "district": "Lhota u P\u0159\u00edbram\u011b"
+        },
+        "ds_id": "qp8bgup"
+    },
+    "Lhota u Vset\u00edna": {
+        "address": {
+            "street": "211",
+            "zip": "755 01",
+            "city": "Lhota u Vset\u00edna",
+            "district": "Lhota u Vset\u00edna"
+        },
+        "ds_id": "5yybyy7"
+    },
+    "Lhota-Vlasenice": {
+        "address": {
+            "street": "18",
+            "zip": "394 70",
+            "city": "Lhota-Vlasenice",
+            "district": "Vlasenice"
+        },
+        "ds_id": "vesayd3"
+    },
+    "Lhotice": {
+        "address": {
+            "street": "31",
+            "zip": "675 31",
+            "city": "Lhotice",
+            "district": "Lhotice"
+        },
+        "ds_id": "5gbath3"
+    },
+    "Lhotka": {
+        "address": {
+            "street": "Ho\u0159ej\u0161\u00ed 16",
+            "zip": "267 23",
+            "city": "Lhotka",
+            "district": "Lhotka"
+        },
+        "ds_id": "gk8at92"
+    },
+    "Lhotka nad Labem": {
+        "address": {
+            "street": "22",
+            "zip": "410 02",
+            "city": "Lhotka nad Labem",
+            "district": "Lhotka nad Labem"
+        },
+        "ds_id": "qbnauhe"
+    },
+    "Lhotka u Litultovic": {
+        "address": {
+            "street": "61",
+            "zip": "747 55",
+            "city": "Lhotka u Litultovic",
+            "district": "Lhotka u Litultovic"
+        },
+        "ds_id": "vybb23u"
+    },
+    "Lhotka u Radnic": {
+        "address": {
+            "street": "33",
+            "zip": "338 24",
+            "city": "Lhotka u Radnic",
+            "district": "Lhotka u Radnic"
+        },
+        "ds_id": "yydbw4r"
+    },
+    "Lhotky": {
+        "address": {
+            "street": "39",
+            "zip": "294 06",
+            "city": "Lhotky",
+            "district": "Lhotky"
+        },
+        "ds_id": "97ga7ad"
+    },
+    "Lhotsko": {
+        "address": {
+            "street": "57",
+            "zip": "763 12",
+            "city": "Lhotsko",
+            "district": "Lhotsko"
+        },
+        "ds_id": "gvka9th"
+    },
+    "Lhoty u Pot\u0161tejna": {
+        "address": {
+            "street": "34",
+            "zip": "517 41",
+            "city": "Lhoty u Pot\u0161tejna",
+            "district": "Lhoty u Pot\u0161tejna"
+        },
+        "ds_id": "vjjb3er"
+    },
+    "Lh\u016fta": {
+        "address": {
+            "street": "81",
+            "zip": "332 01",
+            "city": "Lh\u016fta",
+            "district": "Lh\u016fta"
+        },
+        "ds_id": "cnkauwb"
+    },
+    "Lib\u00e1": {
+        "address": {
+            "street": "220",
+            "zip": "351 31",
+            "city": "Lib\u00e1",
+            "district": "Lib\u00e1"
+        },
+        "ds_id": "japb3za"
+    },
+    "Libavsk\u00e9 \u00dadol\u00ed": {
+        "address": {
+            "street": "110",
+            "zip": "357 51",
+            "city": "Libavsk\u00e9 \u00dadol\u00ed",
+            "district": "Libavsk\u00e9 \u00dadol\u00ed"
+        },
+        "ds_id": "4bibmza"
+    },
+    "Lib\u010deves": {
+        "address": {
+            "street": "K Z\u00e1mku 1",
+            "zip": "439 26",
+            "city": "Lib\u010deves",
+            "district": "Lib\u010deves"
+        },
+        "ds_id": "trxbhn5"
+    },
+    "Libecina": {
+        "address": {
+            "street": "36",
+            "zip": "566 01",
+            "city": "Libecina",
+            "district": "Libecina"
+        },
+        "ds_id": "twba3rq"
+    },
+    "Lib\u011bdice": {
+        "address": {
+            "street": "27",
+            "zip": "438 01",
+            "city": "Lib\u011bdice",
+            "district": "Lib\u011bdice"
+        },
+        "ds_id": "5ira7ue"
+    },
+    "Lib\u011bjovice": {
+        "address": {
+            "street": "26",
+            "zip": "387 72",
+            "city": "Lib\u011bjovice",
+            "district": "Lib\u011bjovice"
+        },
+        "ds_id": "f5jb3yv"
+    },
+    "Libenice": {
+        "address": {
+            "street": "115",
+            "zip": "280 02",
+            "city": "Libenice",
+            "district": "Libenice"
+        },
+        "ds_id": "7ebaxcb"
+    },
+    "Libe\u0159": {
+        "address": {
+            "street": "35",
+            "zip": "252 41",
+            "city": "Libe\u0159",
+            "district": "Libe\u0159"
+        },
+        "ds_id": "2xcbmtm"
+    },
+    "Lib\u011b\u0161ice": {
+        "address": {
+            "street": "6",
+            "zip": "411 46",
+            "city": "Lib\u011b\u0161ice",
+            "district": "Lib\u011b\u0161ice"
+        },
+        "ds_id": "smfbc54"
+    },
+    "Lib\u011btice": {
+        "address": {
+            "street": "31",
+            "zip": "386 01",
+            "city": "Lib\u011btice",
+            "district": "Lib\u011btice"
+        },
+        "ds_id": "jiranan"
+    },
+    "L\u00edbeznice": {
+        "address": {
+            "street": "M\u011blnick\u00e1 43",
+            "zip": "250 65",
+            "city": "L\u00edbeznice",
+            "district": "L\u00edbeznice"
+        },
+        "ds_id": "ht6bc59"
+    },
+    "Libe\u017e": {
+        "address": {
+            "street": "53",
+            "zip": "257 26",
+            "city": "Libe\u017e",
+            "district": "Libe\u017e"
+        },
+        "ds_id": "997akkh"
+    },
+    "Libho\u0161\u0165": {
+        "address": {
+            "street": "1",
+            "zip": "742 57",
+            "city": "Libho\u0161\u0165",
+            "district": "Libho\u0161\u0165"
+        },
+        "ds_id": "zgcwtb9"
+    },
+    "Libchavy": {
+        "address": {
+            "street": "93",
+            "zip": "561 16",
+            "city": "Libchavy",
+            "district": "Doln\u00ed Libchavy"
+        },
+        "ds_id": "54gbmu2"
+    },
+    "Libice nad Cidlinou": {
+        "address": {
+            "street": "Husova 4",
+            "zip": "289 07",
+            "city": "Libice nad Cidlinou",
+            "district": "Libice nad Cidlinou"
+        },
+        "ds_id": "mw3a8wn"
+    },
+    "Lib\u00edn": {
+        "address": {
+            "street": "26",
+            "zip": "373 73",
+            "city": "Lib\u00edn",
+            "district": "Lib\u00edn"
+        },
+        "ds_id": "gsdamwc"
+    },
+    "Libina": {
+        "address": {
+            "street": "523",
+            "zip": "788 05",
+            "city": "Libina",
+            "district": "Libina"
+        },
+        "ds_id": "82vbc4f"
+    },
+    "Libi\u0161": {
+        "address": {
+            "street": "M\u011blnick\u00e1 579",
+            "zip": "277 11",
+            "city": "Libi\u0161",
+            "district": "Libi\u0161"
+        },
+        "ds_id": "x5bbgnv"
+    },
+    "Libi\u0161any": {
+        "address": {
+            "street": "40",
+            "zip": "533 45",
+            "city": "Libi\u0161any",
+            "district": "Libi\u0161any"
+        },
+        "ds_id": "ahpa4y8"
+    },
+    "Libkov": {
+        "address": {
+            "street": "31",
+            "zip": "538 25",
+            "city": "Libkov",
+            "district": "Libkov"
+        },
+        "ds_id": "jaya4y4"
+    },
+    "Libkova Voda": {
+        "address": {
+            "street": "61",
+            "zip": "394 62",
+            "city": "Libkova Voda",
+            "district": "Libkova Voda"
+        },
+        "ds_id": "jtzay3w"
+    },
+    "Libkovice pod \u0158\u00edpem": {
+        "address": {
+            "street": "181",
+            "zip": "413 01",
+            "city": "Libkovice pod \u0158\u00edpem",
+            "district": "Libkovice pod \u0158\u00edpem"
+        },
+        "ds_id": "eyjaquv"
+    },
+    "Liblice": {
+        "address": {
+            "street": "57",
+            "zip": "277 32",
+            "city": "Liblice",
+            "district": "Liblice"
+        },
+        "ds_id": "deub8d7"
+    },
+    "Libn\u00ed\u010d": {
+        "address": {
+            "street": "85",
+            "zip": "373 71",
+            "city": "Libn\u00ed\u010d",
+            "district": "Libn\u00ed\u010d"
+        },
+        "ds_id": "sm5bw22"
+    },
+    "Libo\u010dany": {
+        "address": {
+            "street": "103",
+            "zip": "439 75",
+            "city": "Libo\u010dany",
+            "district": "Libo\u010dany"
+        },
+        "ds_id": "va7bmu8"
+    },
+    "Libod\u0159ice": {
+        "address": {
+            "street": "55",
+            "zip": "280 02",
+            "city": "Libod\u0159ice",
+            "district": "Libod\u0159ice"
+        },
+        "ds_id": "2qtaqcj"
+    },
+    "Libochovany": {
+        "address": {
+            "street": "5",
+            "zip": "411 03",
+            "city": "Libochovany",
+            "district": "Libochovany"
+        },
+        "ds_id": "qhbburt"
+    },
+    "Libochovi\u010dky": {
+        "address": {
+            "street": "33",
+            "zip": "273 42",
+            "city": "Libochovi\u010dky",
+            "district": "Libochovi\u010dky"
+        },
+        "ds_id": "m8kaknn"
+    },
+    "Libom\u011b\u0159ice": {
+        "address": {
+            "street": "26",
+            "zip": "538 21",
+            "city": "Libom\u011b\u0159ice",
+            "district": "Libom\u011b\u0159ice"
+        },
+        "ds_id": "66cb2qv"
+    },
+    "Libomy\u0161l": {
+        "address": {
+            "street": "71",
+            "zip": "267 23",
+            "city": "Libomy\u0161l",
+            "district": "Libomy\u0161l"
+        },
+        "ds_id": "e79akhk"
+    },
+    "Libo\u0159ice": {
+        "address": {
+            "street": "30",
+            "zip": "438 01",
+            "city": "Libo\u0159ice",
+            "district": "Libo\u0159ice"
+        },
+        "ds_id": "upwaqqy"
+    },
+    "Libo\u0161": {
+        "address": {
+            "street": "82",
+            "zip": "783 13",
+            "city": "Libo\u0161",
+            "district": "Libo\u0161"
+        },
+        "ds_id": "pgbbc4p"
+    },
+    "Libo\u0161ovice": {
+        "address": {
+            "street": "104",
+            "zip": "507 44",
+            "city": "Libo\u0161ovice",
+            "district": "Libo\u0161ovice"
+        },
+        "ds_id": "haca9gn"
+    },
+    "Libotenice": {
+        "address": {
+            "street": "37",
+            "zip": "412 01",
+            "city": "Libotenice",
+            "district": "Libotenice"
+        },
+        "ds_id": "khwbmuc"
+    },
+    "Libotov": {
+        "address": {
+            "street": "80",
+            "zip": "544 01",
+            "city": "Libotov",
+            "district": "Libotov"
+        },
+        "ds_id": "zsxa6xn"
+    },
+    "Libouchec": {
+        "address": {
+            "street": "211",
+            "zip": "403 35",
+            "city": "Libouchec",
+            "district": "Libouchec"
+        },
+        "ds_id": "en2bc4v"
+    },
+    "Libovice": {
+        "address": {
+            "street": "1",
+            "zip": "273 79",
+            "city": "Libovice",
+            "district": "Libovice"
+        },
+        "ds_id": "dcka7cq"
+    },
+    "Librantice": {
+        "address": {
+            "street": "80",
+            "zip": "503 46",
+            "city": "Librantice",
+            "district": "Librantice"
+        },
+        "ds_id": "ujia6mc"
+    },
+    "Libu\u0148": {
+        "address": {
+            "street": "27",
+            "zip": "507 15",
+            "city": "Libu\u0148",
+            "district": "Libu\u0148"
+        },
+        "ds_id": "nwha9f5"
+    },
+    "Licibo\u0159ice": {
+        "address": {
+            "street": "17",
+            "zip": "538 23",
+            "city": "Licibo\u0159ice",
+            "district": "Licibo\u0159ice"
+        },
+        "ds_id": "t39a4yy"
+    },
+    "Lide\u010dko": {
+        "address": {
+            "street": "467",
+            "zip": "756 12",
+            "city": "Lide\u010dko",
+            "district": "Lide\u010dko"
+        },
+        "ds_id": "ka7bc3c"
+    },
+    "Lidice": {
+        "address": {
+            "street": "10. \u010dervna 1942 161",
+            "zip": "273 54",
+            "city": "Lidice",
+            "district": "Lidice"
+        },
+        "ds_id": "3uxb59t"
+    },
+    "Lidma\u0148": {
+        "address": {
+            "street": "94",
+            "zip": "395 01",
+            "city": "Lidma\u0148",
+            "district": "Lidma\u0148"
+        },
+        "ds_id": "6mpau9s"
+    },
+    "Lichkov": {
+        "address": {
+            "street": "203",
+            "zip": "561 68",
+            "city": "Lichkov",
+            "district": "Lichkov"
+        },
+        "ds_id": "djea5sm"
+    },
+    "Lichnov": {
+        "address": {
+            "street": "90",
+            "zip": "742 75",
+            "city": "Lichnov",
+            "district": "Lichnov"
+        },
+        "ds_id": "u4gbc36"
+    },
+    "Lichoceves": {
+        "address": {
+            "street": "20",
+            "zip": "252 64",
+            "city": "Lichoceves",
+            "district": "Lichoceves"
+        },
+        "ds_id": "npvanb3"
+    },
+    "L\u00edn\u011b": {
+        "address": {
+            "street": "Plze\u0148sk\u00e1 145",
+            "zip": "330 21",
+            "city": "L\u00edn\u011b",
+            "district": "L\u00edn\u011b"
+        },
+        "ds_id": "74zbtpk"
+    },
+    "Linhartice": {
+        "address": {
+            "street": "134",
+            "zip": "571 01",
+            "city": "Linhartice",
+            "district": "Linhartice"
+        },
+        "ds_id": "c3ub26g"
+    },
+    "L\u00edpa": {
+        "address": {
+            "street": "93",
+            "zip": "582 57",
+            "city": "L\u00edpa",
+            "district": "L\u00edpa"
+        },
+        "ds_id": "fi9arqb"
+    },
+    "L\u00edpa nad Orlic\u00ed": {
+        "address": {
+            "street": "23",
+            "zip": "517 21",
+            "city": "L\u00edpa nad Orlic\u00ed",
+            "district": "L\u00edpa nad Orlic\u00ed"
+        },
+        "ds_id": "muia6wd"
+    },
+    "Lipec": {
+        "address": {
+            "street": "83",
+            "zip": "281 26",
+            "city": "Lipec",
+            "district": "Lipec"
+        },
+        "ds_id": "ga4aj92"
+    },
+    "Lip\u00ed": {
+        "address": {
+            "street": "28",
+            "zip": "373 84",
+            "city": "Lip\u00ed",
+            "district": "Lip\u00ed"
+        },
+        "ds_id": "7gjbyds"
+    },
+    "Lipina": {
+        "address": {
+            "street": "81",
+            "zip": "785 01",
+            "city": "Lipina",
+            "district": "Lipina"
+        },
+        "ds_id": "7xubz26"
+    },
+    "Lipinka": {
+        "address": {
+            "street": "82",
+            "zip": "783 83",
+            "city": "Lipinka",
+            "district": "Lipinka"
+        },
+        "ds_id": "5ejay3m"
+    },
+    "Lipn\u00edk": {
+        "address": {
+            "street": "106",
+            "zip": "675 52",
+            "city": "Lipn\u00edk",
+            "district": "Lipn\u00edk"
+        },
+        "ds_id": "7ssbv2n"
+    },
+    "Lipno": {
+        "address": {
+            "street": "14",
+            "zip": "438 01",
+            "city": "Lipno",
+            "district": "Lipno"
+        },
+        "ds_id": "thja34k"
+    },
+    "Lipno nad Vltavou": {
+        "address": {
+            "street": "83",
+            "zip": "382 78",
+            "city": "Lipno nad Vltavou",
+            "district": "Lipno nad Vltavou"
+        },
+        "ds_id": "rjnamw9"
+    },
+    "Lipoltice": {
+        "address": {
+            "street": "2",
+            "zip": "533 64",
+            "city": "Lipoltice",
+            "district": "Lipoltice"
+        },
+        "ds_id": "4via4ys"
+    },
+    "Lipov": {
+        "address": {
+            "street": "182",
+            "zip": "696 72",
+            "city": "Lipov",
+            "district": "Lipov"
+        },
+        "ds_id": "2qmbc2n"
+    },
+    "Lipov\u00e1": {
+        "address": {
+            "street": "17",
+            "zip": "751 14",
+            "city": "Lipov\u00e1",
+            "district": "Lipov\u00e1"
+        },
+        "ds_id": "r53bmtt"
+    },
+    "Lipov\u00e1-l\u00e1zn\u011b": {
+        "address": {
+            "street": "396",
+            "zip": "790 61",
+            "city": "Lipov\u00e1-l\u00e1zn\u011b",
+            "district": "Lipov\u00e1-l\u00e1zn\u011b"
+        },
+        "ds_id": "hcsbmtx"
+    },
+    "Lipovec": {
+        "address": {
+            "street": "13",
+            "zip": "538 43",
+            "city": "Lipovec",
+            "district": "Lipovec"
+        },
+        "ds_id": "dnta4zm"
+    },
+    "Lipovice": {
+        "address": {
+            "street": "44",
+            "zip": "384 22",
+            "city": "Lipovice",
+            "district": "Lipovice"
+        },
+        "ds_id": "s9xed2a"
+    },
+    "Lipt\u00e1l": {
+        "address": {
+            "street": "331",
+            "zip": "756 31",
+            "city": "Lipt\u00e1l",
+            "district": "Lipt\u00e1l"
+        },
+        "ds_id": "ejfb2j3"
+    },
+    "Lipta\u0148": {
+        "address": {
+            "street": "149",
+            "zip": "793 99",
+            "city": "Lipta\u0148",
+            "district": "Lipta\u0148"
+        },
+        "ds_id": "zdeaxqq"
+    },
+    "Lip\u016fvka": {
+        "address": {
+            "street": "146",
+            "zip": "679 22",
+            "city": "Lip\u016fvka",
+            "district": "Lip\u016fvka"
+        },
+        "ds_id": "g53bc2x"
+    },
+    "L\u00edsek": {
+        "address": {
+            "street": "80",
+            "zip": "592 45",
+            "city": "L\u00edsek",
+            "district": "Lhota"
+        },
+        "ds_id": "baba63r"
+    },
+    "L\u00edsk\u00fd": {
+        "address": {
+            "street": "20",
+            "zip": "273 76",
+            "city": "L\u00edsk\u00fd",
+            "district": "L\u00edsk\u00fd"
+        },
+        "ds_id": "svbaj4k"
+    },
+    "Lisov": {
+        "address": {
+            "street": "3",
+            "zip": "333 01",
+            "city": "Lisov",
+            "district": "Lisov"
+        },
+        "ds_id": "6tmawgy"
+    },
+    "Li\u0161any": {
+        "address": {
+            "street": "34",
+            "zip": "440 01",
+            "city": "Li\u0161any",
+            "district": "Li\u0161any"
+        },
+        "ds_id": "txsbu8d"
+    },
+    "L\u00ed\u0161ina": {
+        "address": {
+            "street": "52",
+            "zip": "333 01",
+            "city": "L\u00ed\u0161ina",
+            "district": "L\u00ed\u0161ina"
+        },
+        "ds_id": "jjmajhd"
+    },
+    "L\u00ed\u0161n\u00e1": {
+        "address": {
+            "street": "39",
+            "zip": "338 08",
+            "city": "L\u00ed\u0161n\u00e1",
+            "district": "L\u00ed\u0161n\u00e1"
+        },
+        "ds_id": "2k2b2hw"
+    },
+    "Li\u0161nice": {
+        "address": {
+            "street": "42",
+            "zip": "434 01",
+            "city": "Li\u0161nice",
+            "district": "Li\u0161nice"
+        },
+        "ds_id": "vsgbphj"
+    },
+    "L\u00ed\u0161nice": {
+        "address": {
+            "street": "39",
+            "zip": "789 85",
+            "city": "L\u00ed\u0161nice",
+            "district": "L\u00ed\u0161nice"
+        },
+        "ds_id": "srtaw8s"
+    },
+    "L\u00ed\u0161n\u00fd": {
+        "address": {
+            "street": "60",
+            "zip": "468 22",
+            "city": "L\u00ed\u0161n\u00fd",
+            "district": "L\u00ed\u0161n\u00fd 2.d\u00edl"
+        },
+        "ds_id": "rrkan5g"
+    },
+    "L\u00ed\u0161\u0165any": {
+        "address": {
+            "street": "U Svat\u00e9ho J\u00e1na 100",
+            "zip": "440 01",
+            "city": "L\u00ed\u0161\u0165any",
+            "district": "L\u00ed\u0161\u0165any"
+        },
+        "ds_id": "8csbcz5"
+    },
+    "L\u00edt\u00e9": {
+        "address": {
+            "street": "71",
+            "zip": "331 52",
+            "city": "L\u00edt\u00e9",
+            "district": "L\u00edt\u00e9"
+        },
+        "ds_id": "cxrbh2k"
+    },
+    "Litichovice": {
+        "address": {
+            "street": "4",
+            "zip": "257 26",
+            "city": "Litichovice",
+            "district": "Litichovice"
+        },
+        "ds_id": "i5zanmi"
+    },
+    "Litobrat\u0159ice": {
+        "address": {
+            "street": "16",
+            "zip": "671 78",
+            "city": "Litobrat\u0159ice",
+            "district": "Litobrat\u0159ice"
+        },
+        "ds_id": "5g4a23w"
+    },
+    "Litohlavy": {
+        "address": {
+            "street": "64",
+            "zip": "337 01",
+            "city": "Litohlavy",
+            "district": "Litohlavy"
+        },
+        "ds_id": "85bbrfr"
+    },
+    "Litoho\u0159": {
+        "address": {
+            "street": "155",
+            "zip": "675 44",
+            "city": "Litoho\u0159",
+            "district": "Litoho\u0159"
+        },
+        "ds_id": "x72avy2"
+    },
+    "Litoho\u0161\u0165": {
+        "address": {
+            "street": "39",
+            "zip": "395 01",
+            "city": "Litoho\u0161\u0165",
+            "district": "Litoho\u0161\u0165"
+        },
+        "ds_id": "9adbvf9"
+    },
+    "Litochovice": {
+        "address": {
+            "street": "16",
+            "zip": "387 01",
+            "city": "Litochovice",
+            "district": "Neuslu\u017eice"
+        },
+        "ds_id": "ub2anai"
+    },
+    "Litostrov": {
+        "address": {
+            "street": "59",
+            "zip": "664 83",
+            "city": "Litostrov",
+            "district": "Litostrov"
+        },
+        "ds_id": "igqj2n6"
+    },
+    "Lito\u0161ice": {
+        "address": {
+            "street": "27",
+            "zip": "535 01",
+            "city": "Lito\u0161ice",
+            "district": "Lito\u0161ice"
+        },
+        "ds_id": "s5pazn7"
+    },
+    "Litovany": {
+        "address": {
+            "street": "57",
+            "zip": "675 57",
+            "city": "Litovany",
+            "district": "Litovany"
+        },
+        "ds_id": "8mca5vi"
+    },
+    "Litv\u00ednovice": {
+        "address": {
+            "street": "39",
+            "zip": "370 01",
+            "city": "Litv\u00ednovice",
+            "district": "Litv\u00ednovice"
+        },
+        "ds_id": "fz9bsev"
+    },
+    "Lk\u00e1\u0148": {
+        "address": {
+            "street": "83",
+            "zip": "411 15",
+            "city": "Lk\u00e1\u0148",
+            "district": "Lk\u00e1\u0148"
+        },
+        "ds_id": "756arv4"
+    },
+    "Ln\u00e1\u0159e": {
+        "address": {
+            "street": "74",
+            "zip": "387 42",
+            "city": "Ln\u00e1\u0159e",
+            "district": "Ln\u00e1\u0159e"
+        },
+        "ds_id": "dyxbczi"
+    },
+    "Lobe\u010d": {
+        "address": {
+            "street": "43",
+            "zip": "277 36",
+            "city": "Lobe\u010d",
+            "district": "Lobe\u010d"
+        },
+        "ds_id": "8n7amyx"
+    },
+    "Lobendava": {
+        "address": {
+            "street": "271",
+            "zip": "407 84",
+            "city": "Lobendava",
+            "district": "Lobendava"
+        },
+        "ds_id": "tgpa6vv"
+    },
+    "Lobodice": {
+        "address": {
+            "street": "39",
+            "zip": "751 01",
+            "city": "Lobodice",
+            "district": "Lobodice"
+        },
+        "ds_id": "st6bmw5"
+    },
+    "Lo\u010denice": {
+        "address": {
+            "street": "158",
+            "zip": "373 22",
+            "city": "Lo\u010denice",
+            "district": "Lo\u010denice"
+        },
+        "ds_id": "4mjb8cd"
+    },
+    "Lod\u011bnice": {
+        "address": {
+            "street": "114",
+            "zip": "671 75",
+            "city": "Lod\u011bnice",
+            "district": "Lod\u011bnice"
+        },
+        "ds_id": "vzabmxg"
+    },
+    "Lodh\u00e9\u0159ov": {
+        "address": {
+            "street": "168",
+            "zip": "378 26",
+            "city": "Lodh\u00e9\u0159ov",
+            "district": "Lodh\u00e9\u0159ov"
+        },
+        "ds_id": "qxse6su"
+    },
+    "Lochousice": {
+        "address": {
+            "street": "75",
+            "zip": "330 23",
+            "city": "Lochousice",
+            "district": "Lochousice"
+        },
+        "ds_id": "2d8b33y"
+    },
+    "Lochovice": {
+        "address": {
+            "street": "77",
+            "zip": "267 23",
+            "city": "Lochovice",
+            "district": "Lochovice"
+        },
+        "ds_id": "k7zbmxn"
+    },
+    "Lomec": {
+        "address": {
+            "street": "50",
+            "zip": "339 01",
+            "city": "Lomec",
+            "district": "Lomec"
+        },
+        "ds_id": "zayajde"
+    },
+    "Lomni\u010dka": {
+        "address": {
+            "street": "103",
+            "zip": "666 01",
+            "city": "Lomni\u010dka",
+            "district": "Lomni\u010dka"
+        },
+        "ds_id": "quka2xa"
+    },
+    "Lom u Tachova": {
+        "address": {
+            "street": "35",
+            "zip": "347 01",
+            "city": "Lom u Tachova",
+            "district": "Lom u Tachova"
+        },
+        "ds_id": "j9ia8au"
+    },
+    "Lomy": {
+        "address": {
+            "street": "45",
+            "zip": "675 31",
+            "city": "Lomy",
+            "district": "Lomy"
+        },
+        "ds_id": "wmqbg9b"
+    },
+    "Lopen\u00edk": {
+        "address": {
+            "street": "211",
+            "zip": "687 67",
+            "city": "Lopen\u00edk",
+            "district": "Lopen\u00edk"
+        },
+        "ds_id": "su2bi5u"
+    },
+    "Losin\u00e1": {
+        "address": {
+            "street": "11",
+            "zip": "332 04",
+            "city": "Losin\u00e1",
+            "district": "Losin\u00e1"
+        },
+        "ds_id": "ygbbmvj"
+    },
+    "Lo\u0161any": {
+        "address": {
+            "street": "13",
+            "zip": "280 02",
+            "city": "Lo\u0161any",
+            "district": "Lo\u0161any"
+        },
+        "ds_id": "gsvbuhe"
+    },
+    "Louck\u00e1": {
+        "address": {
+            "street": "61",
+            "zip": "273 24",
+            "city": "Louck\u00e1",
+            "district": "Louck\u00e1"
+        },
+        "ds_id": "qiybzid"
+    },
+    "Lou\u010dany": {
+        "address": {
+            "street": "749",
+            "zip": "783 44",
+            "city": "Lou\u010dany",
+            "district": "Lou\u010dany"
+        },
+        "ds_id": "jegarux"
+    },
+    "Lou\u010dim": {
+        "address": {
+            "street": "2",
+            "zip": "345 06",
+            "city": "Lou\u010dim",
+            "district": "Lou\u010dim"
+        },
+        "ds_id": "mq2bh2h"
+    },
+    "Lou\u010dka": {
+        "address": {
+            "street": "76",
+            "zip": "783 22",
+            "city": "Lou\u010dka",
+            "district": "Lou\u010dka"
+        },
+        "ds_id": "pn2bmvr"
+    },
+    "Lou\u010dky": {
+        "address": {
+            "street": "34",
+            "zip": "511 01",
+            "city": "Lou\u010dky",
+            "district": "Lou\u010dky"
+        },
+        "ds_id": "xz4auru"
+    },
+    "Lou\u010dn\u00e1 nad Desnou": {
+        "address": {
+            "street": "57",
+            "zip": "788 11",
+            "city": "Lou\u010dn\u00e1 nad Desnou",
+            "district": "Lou\u010dn\u00e1 nad Desnou"
+        },
+        "ds_id": "jptasa6"
+    },
+    "Lou\u010dovice": {
+        "address": {
+            "street": "51",
+            "zip": "382 76",
+            "city": "Lou\u010dovice",
+            "district": "Lou\u010dovice"
+        },
+        "ds_id": "w5sbsgh"
+    },
+    "Louka": {
+        "address": {
+            "street": "19",
+            "zip": "696 76",
+            "city": "Louka",
+            "district": "Louka"
+        },
+        "ds_id": "evrbmvu"
+    },
+    "Louka u Litv\u00ednova": {
+        "address": {
+            "street": "Sokolovsk\u00e1 127",
+            "zip": "435 33",
+            "city": "Louka u Litv\u00ednova",
+            "district": "Louka u Litv\u00ednova"
+        },
+        "ds_id": "ndnaqn6"
+    },
+    "Loukov": {
+        "address": {
+            "street": "199",
+            "zip": "768 75",
+            "city": "Loukov",
+            "district": "Loukov"
+        },
+        "ds_id": "gwjaup6"
+    },
+    "Loukovec": {
+        "address": {
+            "street": "90",
+            "zip": "294 11",
+            "city": "Loukovec",
+            "district": "Loukovec"
+        },
+        "ds_id": "nmxbgjr"
+    },
+    "Loukovice": {
+        "address": {
+            "street": "43",
+            "zip": "675 22",
+            "city": "Loukovice",
+            "district": "Loukovice"
+        },
+        "ds_id": "gqfbf63"
+    },
+    "Lou\u0148ov\u00e1": {
+        "address": {
+            "street": "64",
+            "zip": "336 01",
+            "city": "Lou\u0148ov\u00e1",
+            "district": "Lou\u0148ov\u00e1"
+        },
+        "ds_id": "viya66u"
+    },
+    "Lou\u0148ovice": {
+        "address": {
+            "street": "Horn\u00ed n\u00e1ves 6",
+            "zip": "251 62",
+            "city": "Lou\u0148ovice",
+            "district": "Lou\u0148ovice"
+        },
+        "ds_id": "7d5bj2g"
+    },
+    "Lou\u017enice": {
+        "address": {
+            "street": "58",
+            "zip": "468 22",
+            "city": "Lou\u017enice",
+            "district": "Lou\u017enice"
+        },
+        "ds_id": "58xavkn"
+    },
+    "Lov\u010dice": {
+        "address": {
+            "street": "118",
+            "zip": "696 39",
+            "city": "Lov\u010dice",
+            "district": "Lov\u010dice"
+        },
+        "ds_id": "gfybcxm"
+    },
+    "Lov\u010di\u010dky": {
+        "address": {
+            "street": "148",
+            "zip": "683 54",
+            "city": "Lov\u010di\u010dky",
+            "district": "Lov\u010di\u010dky"
+        },
+        "ds_id": "eada24n"
+    },
+    "Lov\u010dovice": {
+        "address": {
+            "street": "12",
+            "zip": "675 31",
+            "city": "Lov\u010dovice",
+            "district": "Lov\u010dovice"
+        },
+        "ds_id": "bgub4ix"
+    },
+    "Love\u010dkovice": {
+        "address": {
+            "street": "40",
+            "zip": "411 45",
+            "city": "Love\u010dkovice",
+            "district": "Love\u010dkovice"
+        },
+        "ds_id": "ns7axv4"
+    },
+    "Loza": {
+        "address": {
+            "street": "47",
+            "zip": "331 52",
+            "city": "Loza",
+            "district": "Loza"
+        },
+        "ds_id": "wibbh2b"
+    },
+    "Lozice": {
+        "address": {
+            "street": "71",
+            "zip": "538 54",
+            "city": "Lozice",
+            "district": "Lozice"
+        },
+        "ds_id": "fxmb2rp"
+    },
+    "L\u0161t\u011bn\u00ed": {
+        "address": {
+            "street": "Gr\u00e9grova 29",
+            "zip": "257 22",
+            "city": "L\u0161t\u011bn\u00ed",
+            "district": "L\u0161t\u011bn\u00ed"
+        },
+        "ds_id": "xe8bgjm"
+    },
+    "Lub\u011b": {
+        "address": {
+            "street": "15",
+            "zip": "679 21",
+            "city": "Lub\u011b",
+            "district": "Lub\u011b"
+        },
+        "ds_id": "zmpbpmb"
+    },
+    "Lubenec": {
+        "address": {
+            "street": "Podbo\u0159ansk\u00e1 51",
+            "zip": "439 83",
+            "city": "Lubenec",
+            "district": "Lubenec"
+        },
+        "ds_id": "7npbcwt"
+    },
+    "Lub\u011bnice": {
+        "address": {
+            "street": "140",
+            "zip": "783 46",
+            "city": "Lub\u011bnice",
+            "district": "Lub\u011bnice"
+        },
+        "ds_id": "68ybsd3"
+    },
+    "Lubn\u00e1": {
+        "address": {
+            "street": "48",
+            "zip": "270 36",
+            "city": "Lubn\u00e1",
+            "district": "Lubn\u00e1"
+        },
+        "ds_id": "tagb4pv"
+    },
+    "Lubn\u00e9": {
+        "address": {
+            "street": "19",
+            "zip": "594 51",
+            "city": "Lubn\u00e9",
+            "district": "Lubn\u00e9"
+        },
+        "ds_id": "ipzb25y"
+    },
+    "Lubnice": {
+        "address": {
+            "street": "25",
+            "zip": "671 07",
+            "city": "Lubnice",
+            "district": "Lubnice"
+        },
+        "ds_id": "xuxa24e"
+    },
+    "Lubn\u00edk": {
+        "address": {
+            "street": "94",
+            "zip": "563 01",
+            "city": "Lubn\u00edk",
+            "district": "Lubn\u00edk"
+        },
+        "ds_id": "w9da4zb"
+    },
+    "Lubom\u011b\u0159": {
+        "address": {
+            "street": "93",
+            "zip": "742 35",
+            "city": "Lubom\u011b\u0159",
+            "district": "Lubom\u011b\u0159"
+        },
+        "ds_id": "bqmbmug"
+    },
+    "Lubom\u011b\u0159 pod Str\u00e1\u017enou": {
+        "address": {
+            "street": "1364",
+            "zip": "753 62",
+            "city": "Lubom\u011b\u0159 pod Str\u00e1\u017enou",
+            "district": "Lubom\u011b\u0159 pod Str\u00e1\u017enou"
+        },
+        "ds_id": "kxnfevk"
+    },
+    "Lu\u010dice": {
+        "address": {
+            "street": "90",
+            "zip": "582 35",
+            "city": "Lu\u010dice",
+            "district": "Lu\u010dice"
+        },
+        "ds_id": "86gapma"
+    },
+    "Lu\u010dina": {
+        "address": {
+            "street": "1",
+            "zip": "739 39",
+            "city": "Lu\u010dina",
+            "district": "Lu\u010dina"
+        },
+        "ds_id": "h7ub39u"
+    },
+    "Ludge\u0159ovice": {
+        "address": {
+            "street": "Markvartovick\u00e1 52",
+            "zip": "747 14",
+            "city": "Ludge\u0159ovice",
+            "district": "Ludge\u0159ovice"
+        },
+        "ds_id": "n9bb3cx"
+    },
+    "Lud\u00edkov": {
+        "address": {
+            "street": "84",
+            "zip": "680 01",
+            "city": "Lud\u00edkov",
+            "district": "Lud\u00edkov"
+        },
+        "ds_id": "d4xb8gh"
+    },
+    "Ludkovice": {
+        "address": {
+            "street": "44",
+            "zip": "763 41",
+            "city": "Ludkovice",
+            "district": "Ludkovice"
+        },
+        "ds_id": "mj6arcw"
+    },
+    "Ludm\u00edrov": {
+        "address": {
+            "street": "56",
+            "zip": "798 55",
+            "city": "Ludm\u00edrov",
+            "district": "Ludm\u00edrov"
+        },
+        "ds_id": "t7rarut"
+    },
+    "Ludslavice": {
+        "address": {
+            "street": "31",
+            "zip": "768 52",
+            "city": "Ludslavice",
+            "district": "Ludslavice"
+        },
+        "ds_id": "6q4augs"
+    },
+    "Ludv\u00edkov": {
+        "address": {
+            "street": "122",
+            "zip": "793 26",
+            "city": "Ludv\u00edkov",
+            "district": "Ludv\u00edkov"
+        },
+        "ds_id": "bu4avk3"
+    },
+    "Ludv\u00edkovice": {
+        "address": {
+            "street": "71",
+            "zip": "407 13",
+            "city": "Ludv\u00edkovice",
+            "district": "Ludv\u00edkovice"
+        },
+        "ds_id": "aapbs8e"
+    },
+    "Luka": {
+        "address": {
+            "street": "17",
+            "zip": "472 01",
+            "city": "Luka",
+            "district": "Luka"
+        },
+        "ds_id": "kh4ay69"
+    },
+    "Luk\u00e1": {
+        "address": {
+            "street": "80",
+            "zip": "783 24",
+            "city": "Luk\u00e1",
+            "district": "Luk\u00e1"
+        },
+        "ds_id": "w29bqga"
+    },
+    "Lukavice": {
+        "address": {
+            "street": "47",
+            "zip": "789 01",
+            "city": "Lukavice",
+            "district": "Lukavice"
+        },
+        "ds_id": "ug4asa2"
+    },
+    "Lukov\u00e1": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "Lukov\u00e1 102, Lukov\u00e1, 56123 Lukov\u00e1",
+            "district": ""
+        },
+        "ds_id": "j7kb2ii"
+    },
+    "Lukovany": {
+        "address": {
+            "street": "70",
+            "zip": "664 84",
+            "city": "Lukovany",
+            "district": "Lukovany"
+        },
+        "ds_id": "kkma26g"
+    },
+    "Lukove\u010dek": {
+        "address": {
+            "street": "P\u0159\u00edlepsk\u00e1 120",
+            "zip": "763 16",
+            "city": "Lukove\u010dek",
+            "district": "Lukove\u010dek"
+        },
+        "ds_id": "cgnatp5"
+    },
+    "Lule\u010d": {
+        "address": {
+            "street": "33",
+            "zip": "683 03",
+            "city": "Lule\u010d",
+            "district": "Lule\u010d"
+        },
+        "ds_id": "68gajsz"
+    },
+    "Lu\u0161t\u011bnice": {
+        "address": {
+            "street": "Boleslavsk\u00e1 171",
+            "zip": "294 42",
+            "city": "Lu\u0161t\u011bnice",
+            "district": "Lu\u0161t\u011bnice"
+        },
+        "ds_id": "7xxbpp4"
+    },
+    "Lut\u00edn": {
+        "address": {
+            "street": "\u0160koln\u00ed 203",
+            "zip": "783 49",
+            "city": "Lut\u00edn",
+            "district": "Lut\u00edn"
+        },
+        "ds_id": "4hjbcve"
+    },
+    "Lutonina": {
+        "address": {
+            "street": "114",
+            "zip": "763 12",
+            "city": "Lutonina",
+            "district": "Lutonina"
+        },
+        "ds_id": "s7fat4k"
+    },
+    "Lutopecny": {
+        "address": {
+            "street": "1",
+            "zip": "767 01",
+            "city": "Lutopecny",
+            "district": "Lutopecny"
+        },
+        "ds_id": "vkibnad"
+    },
+    "Lu\u017eany": {
+        "address": {
+            "street": "144",
+            "zip": "507 06",
+            "city": "Lu\u017eany",
+            "district": "Lu\u017eany"
+        },
+        "ds_id": "asubr4h"
+    },
+    "Lu\u017ece": {
+        "address": {
+            "street": "31",
+            "zip": "267 16",
+            "city": "Lu\u017ece",
+            "district": "Lu\u017ece"
+        },
+        "ds_id": "4whapue"
+    },
+    "Lu\u017eec nad Vltavou": {
+        "address": {
+            "street": "1. m\u00e1je 176",
+            "zip": "277 06",
+            "city": "Lu\u017eec nad Vltavou",
+            "district": "Lu\u017eec nad Vltavou"
+        },
+        "ds_id": "r4ebg29"
+    },
+    "Lu\u017eeni\u010dky": {
+        "address": {
+            "street": "1",
+            "zip": "344 01",
+            "city": "Lu\u017eeni\u010dky",
+            "district": "Lu\u017eeni\u010dky"
+        },
+        "ds_id": "qqzbqeh"
+    },
+    "Lu\u017eice": {
+        "address": {
+            "street": "58",
+            "zip": "785 01",
+            "city": "Lu\u017eice",
+            "district": "Lu\u017eice"
+        },
+        "ds_id": "a9iaxhy"
+    },
+    "Lu\u017en\u00e1": {
+        "address": {
+            "street": "230",
+            "zip": "756 11",
+            "city": "Lu\u017en\u00e1",
+            "district": "Lu\u017en\u00e1"
+        },
+        "ds_id": "fmeb44s"
+    },
+    "Lu\u017enice": {
+        "address": {
+            "street": "139",
+            "zip": "379 01",
+            "city": "Lu\u017enice",
+            "district": "Lu\u017enice"
+        },
+        "ds_id": "wbbb8aj"
+    },
+    "Lysovice": {
+        "address": {
+            "street": "68",
+            "zip": "682 01",
+            "city": "Lysovice",
+            "district": "Lysovice"
+        },
+        "ds_id": "sggawsj"
+    },
+    "Mackovice": {
+        "address": {
+            "street": "49",
+            "zip": "671 78",
+            "city": "Mackovice",
+            "district": "Mackovice"
+        },
+        "ds_id": "wywazsv"
+    },
+    "Ma\u010dkov": {
+        "address": {
+            "street": "75",
+            "zip": "388 01",
+            "city": "Ma\u010dkov",
+            "district": "Ma\u010dkov"
+        },
+        "ds_id": "2cxamw5"
+    },
+    "Mahou\u0161": {
+        "address": {
+            "street": "17",
+            "zip": "384 11",
+            "city": "Mahou\u0161",
+            "district": "Mahou\u0161"
+        },
+        "ds_id": "shcatza"
+    },
+    "Machov\u00e1": {
+        "address": {
+            "street": "120",
+            "zip": "763 01",
+            "city": "Machov\u00e1",
+            "district": "Machov\u00e1"
+        },
+        "ds_id": "3g3b3te"
+    },
+    "Majdalena": {
+        "address": {
+            "street": "78",
+            "zip": "378 03",
+            "city": "Majdalena",
+            "district": "Majdalena"
+        },
+        "ds_id": "7hqawjb"
+    },
+    "Majet\u00edn": {
+        "address": {
+            "street": "Lipov\u00e1 25",
+            "zip": "751 03",
+            "city": "Majet\u00edn",
+            "district": "Majet\u00edn"
+        },
+        "ds_id": "pydbnbv"
+    },
+    "Makot\u0159asy": {
+        "address": {
+            "street": "11",
+            "zip": "273 54",
+            "city": "Makot\u0159asy",
+            "district": "Makot\u0159asy"
+        },
+        "ds_id": "wzvakni"
+    },
+    "Makov": {
+        "address": {
+            "street": "113",
+            "zip": "570 01",
+            "city": "Makov",
+            "district": "Makov"
+        },
+        "ds_id": "72na4z7"
+    },
+    "Mal\u00e1 Byst\u0159ice": {
+        "address": {
+            "street": "55",
+            "zip": "756 27",
+            "city": "Mal\u00e1 Byst\u0159ice",
+            "district": "Mal\u00e1 Byst\u0159ice"
+        },
+        "ds_id": "aznbqif"
+    },
+    "Mal\u00e1 Hra\u0161tice": {
+        "address": {
+            "street": "115",
+            "zip": "262 03",
+            "city": "Mal\u00e1 Hra\u0161tice",
+            "district": "Mal\u00e1 Hra\u0161tice"
+        },
+        "ds_id": "qj8amdt"
+    },
+    "Mal\u00e1 Lhota": {
+        "address": {
+            "street": "38",
+            "zip": "679 21",
+            "city": "Mal\u00e1 Lhota",
+            "district": "Mal\u00e1 Lhota"
+        },
+        "ds_id": "iw4a2ip"
+    },
+    "Mal\u00e1 Losenice": {
+        "address": {
+            "street": "30",
+            "zip": "592 11",
+            "city": "Mal\u00e1 Losenice",
+            "district": "Mal\u00e1 Losenice"
+        },
+        "ds_id": "f3eaqkc"
+    },
+    "Mal\u00e1 Morava": {
+        "address": {
+            "street": "2",
+            "zip": "788 33",
+            "city": "Mal\u00e1 Morava",
+            "district": "Vysok\u00fd Potok"
+        },
+        "ds_id": "bwjbn3n"
+    },
+    "Mal\u00e1 Mor\u00e1vka": {
+        "address": {
+            "street": "55",
+            "zip": "793 36",
+            "city": "Mal\u00e1 Mor\u00e1vka",
+            "district": "Mal\u00e1 Mor\u00e1vka"
+        },
+        "ds_id": "6c8ar2c"
+    },
+    "Mal\u00e1 Roudka": {
+        "address": {
+            "street": "27",
+            "zip": "679 63",
+            "city": "Mal\u00e1 Roudka",
+            "district": "Mal\u00e1 Roudka"
+        },
+        "ds_id": "95ta2hv"
+    },
+    "Mal\u00e1 Sk\u00e1la": {
+        "address": {
+            "street": "122",
+            "zip": "468 22",
+            "city": "Mal\u00e1 Sk\u00e1la",
+            "district": "Vranov\u00e9 1.d\u00edl"
+        },
+        "ds_id": "9b5bpvq"
+    },
+    "Mal\u00e1 \u0160t\u00e1hle": {
+        "address": {
+            "street": "26",
+            "zip": "795 01",
+            "city": "Mal\u00e1 \u0160t\u00e1hle",
+            "district": "Mal\u00e1 \u0160t\u00e1hle"
+        },
+        "ds_id": "vuba7ky"
+    },
+    "Mal\u00e1 Vele\u0148": {
+        "address": {
+            "street": "46",
+            "zip": "405 02",
+            "city": "Mal\u00e1 Vele\u0148",
+            "district": "Jedlka"
+        },
+        "ds_id": "igebu57"
+    },
+    "Mal\u00e1 V\u00edska": {
+        "address": {
+            "street": "44",
+            "zip": "267 62",
+            "city": "Mal\u00e1 V\u00edska",
+            "district": "Mal\u00e1 V\u00edska"
+        },
+        "ds_id": "457ajh5"
+    },
+    "Mal\u00e1 Vrbka": {
+        "address": {
+            "street": "56",
+            "zip": "696 73",
+            "city": "Mal\u00e1 Vrbka",
+            "district": "Mal\u00e1 Vrbka"
+        },
+        "ds_id": "zcia2hz"
+    },
+    "Mal\u010d\u00edn": {
+        "address": {
+            "street": "21",
+            "zip": "582 91",
+            "city": "Mal\u010d\u00edn",
+            "district": "Mal\u010d\u00edn"
+        },
+        "ds_id": "e2bajab"
+    },
+    "Mal\u00e9 B\u0159ezno": {
+        "address": {
+            "street": "7",
+            "zip": "400 02",
+            "city": "Mal\u00e9 B\u0159ezno",
+            "district": "Mal\u00e9 B\u0159ezno"
+        },
+        "ds_id": "eagaqrk"
+    },
+    "Male\u010d": {
+        "address": {
+            "street": "48",
+            "zip": "582 76",
+            "city": "Male\u010d",
+            "district": "Male\u010d"
+        },
+        "ds_id": "hm5bm96"
+    },
+    "Male\u010dov": {
+        "address": {
+            "street": "36",
+            "zip": "403 27",
+            "city": "Male\u010dov",
+            "district": "Male\u010dov"
+        },
+        "ds_id": "nf7asnf"
+    },
+    "Mal\u00e9 Hradisko": {
+        "address": {
+            "street": "60",
+            "zip": "798 49",
+            "city": "Mal\u00e9 Hradisko",
+            "district": "Mal\u00e9 Hradisko"
+        },
+        "ds_id": "juvawam"
+    },
+    "Mal\u00e9 Ky\u0161ice": {
+        "address": {
+            "street": "M\u00edru 72",
+            "zip": "273 51",
+            "city": "Mal\u00e9 Ky\u0161ice",
+            "district": "Mal\u00e9 Ky\u0161ice"
+        },
+        "ds_id": "j8gbxr9"
+    },
+    "Malenice": {
+        "address": {
+            "street": "Na N\u00e1vsi 95",
+            "zip": "387 06",
+            "city": "Malenice",
+            "district": "Malenice"
+        },
+        "ds_id": "ccybthd"
+    },
+    "Malenovice": {
+        "address": {
+            "street": "85",
+            "zip": "739 11",
+            "city": "Malenovice",
+            "district": "Malenovice"
+        },
+        "ds_id": "k77ay9j"
+    },
+    "Mal\u00e9 P\u0159\u00edto\u010dno": {
+        "address": {
+            "street": "Kladensk\u00e1 10",
+            "zip": "273 51",
+            "city": "Mal\u00e9 P\u0159\u00edto\u010dno",
+            "district": "Mal\u00e9 P\u0159\u00edto\u010dno"
+        },
+        "ds_id": "6nabrhp"
+    },
+    "Mal\u00e9 Svato\u0148ovice": {
+        "address": {
+            "street": "N\u00e1dra\u017en\u00ed 105",
+            "zip": "542 34",
+            "city": "Mal\u00e9 Svato\u0148ovice",
+            "district": "Mal\u00e9 Svato\u0148ovice"
+        },
+        "ds_id": "zcfbcuz"
+    },
+    "Male\u0161ovice": {
+        "address": {
+            "street": "50",
+            "zip": "664 65",
+            "city": "Male\u0161ovice",
+            "district": "Male\u0161ovice"
+        },
+        "ds_id": "5wtamkn"
+    },
+    "Malet\u00edn": {
+        "address": {
+            "street": "21",
+            "zip": "789 01",
+            "city": "Malet\u00edn",
+            "district": "Star\u00fd Malet\u00edn"
+        },
+        "ds_id": "m8bbjpu"
+    },
+    "Mal\u00e9 V\u00fdkleky": {
+        "address": {
+            "street": "41",
+            "zip": "533 16",
+            "city": "Mal\u00e9 V\u00fdkleky",
+            "district": "Mal\u00e9 V\u00fdkleky"
+        },
+        "ds_id": "gtxa42z"
+    },
+    "Mal\u00e9 \u017dernoseky": {
+        "address": {
+            "street": "Zahradn\u00ed 245",
+            "zip": "410 02",
+            "city": "Mal\u00e9 \u017dernoseky",
+            "district": "Mal\u00e9 \u017dernoseky"
+        },
+        "ds_id": "sfebm9y"
+    },
+    "Malhostovice": {
+        "address": {
+            "street": "75",
+            "zip": "666 03",
+            "city": "Malhostovice",
+            "district": "Malhostovice"
+        },
+        "ds_id": "mataqwp"
+    },
+    "Malhotice": {
+        "address": {
+            "street": "1",
+            "zip": "753 53",
+            "city": "Malhotice",
+            "district": "Malhotice"
+        },
+        "ds_id": "fnja3ab"
+    },
+    "Mal\u00ed\u010d": {
+        "address": {
+            "street": "12",
+            "zip": "412 01",
+            "city": "Mal\u00ed\u010d",
+            "district": "Mal\u00ed\u010d"
+        },
+        "ds_id": "ybca7i3"
+    },
+    "Mal\u00edkov": {
+        "address": {
+            "street": "5",
+            "zip": "571 01",
+            "city": "Mal\u00edkov",
+            "district": "Mal\u00edkov"
+        },
+        "ds_id": "js5a3u7"
+    },
+    "Mal\u00edkovice": {
+        "address": {
+            "street": "17",
+            "zip": "273 77",
+            "city": "Mal\u00edkovice",
+            "district": "Mal\u00edkovice"
+        },
+        "ds_id": "p8rb3vf"
+    },
+    "Mal\u00ednky": {
+        "address": {
+            "street": "75",
+            "zip": "683 33",
+            "city": "Mal\u00ednky",
+            "district": "Mal\u00ednky"
+        },
+        "ds_id": "9pba8ea"
+    },
+    "Malinov\u00e1": {
+        "address": {
+            "street": "15",
+            "zip": "270 35",
+            "city": "Malinov\u00e1",
+            "district": "Malinov\u00e1"
+        },
+        "ds_id": "8jsanry"
+    },
+    "M\u00e1lkov": {
+        "address": {
+            "street": "3",
+            "zip": "431 02",
+            "city": "M\u00e1lkov",
+            "district": "Zelen\u00e1"
+        },
+        "ds_id": "zr6axdw"
+    },
+    "Malonty": {
+        "address": {
+            "street": "27",
+            "zip": "382 91",
+            "city": "Malonty",
+            "district": "Malonty"
+        },
+        "ds_id": "6z3b6a8"
+    },
+    "Malotice": {
+        "address": {
+            "street": "35",
+            "zip": "281 63",
+            "city": "Malotice",
+            "district": "Malotice"
+        },
+        "ds_id": "hjvak8p"
+    },
+    "Malovice": {
+        "address": {
+            "street": "5",
+            "zip": "384 11",
+            "city": "Malovice",
+            "district": "Malovice"
+        },
+        "ds_id": "bzybnan"
+    },
+    "Mal\u0161\u00edn": {
+        "address": {
+            "street": "24",
+            "zip": "382 73",
+            "city": "Mal\u0161\u00edn",
+            "district": "Mal\u0161\u00edn"
+        },
+        "ds_id": "nhra9sz"
+    },
+    "Mal\u0161ovice": {
+        "address": {
+            "street": "6",
+            "zip": "405 02",
+            "city": "Mal\u0161ovice",
+            "district": "Mal\u0161ovice"
+        },
+        "ds_id": "scya9wq"
+    },
+    "Mal\u00fd Beranov": {
+        "address": {
+            "street": "36",
+            "zip": "586 03",
+            "city": "Mal\u00fd Beranov",
+            "district": "Mal\u00fd Beranov"
+        },
+        "ds_id": "kxfbu39"
+    },
+    "Mal\u00fd Bor": {
+        "address": {
+            "street": "146",
+            "zip": "341 01",
+            "city": "Mal\u00fd Bor",
+            "district": "Mal\u00fd Bor"
+        },
+        "ds_id": "zeaauxe"
+    },
+    "Mal\u00fd \u00dajezd": {
+        "address": {
+            "street": "95",
+            "zip": "277 31",
+            "city": "Mal\u00fd \u00dajezd",
+            "district": "Mal\u00fd \u00dajezd"
+        },
+        "ds_id": "j9ujdtq"
+    },
+    "Mankovice": {
+        "address": {
+            "street": "73",
+            "zip": "742 35",
+            "city": "Mankovice",
+            "district": "Mankovice"
+        },
+        "ds_id": "tmjbxjh"
+    },
+    "Ma\u0148ovice": {
+        "address": {
+            "street": "22",
+            "zip": "341 01",
+            "city": "Ma\u0148ovice",
+            "district": "Ma\u0148ovice"
+        },
+        "ds_id": "f4vbh3z"
+    },
+    "Mari\u00e1nsk\u00e9 Rad\u010dice": {
+        "address": {
+            "street": "Komensk\u00e9ho 4",
+            "zip": "435 32",
+            "city": "Mari\u00e1nsk\u00e9 Rad\u010dice",
+            "district": "Mari\u00e1nsk\u00e9 Rad\u010dice"
+        },
+        "ds_id": "gcraq2i"
+    },
+    "Markvartice": {
+        "address": {
+            "street": "67",
+            "zip": "675 22",
+            "city": "Markvartice",
+            "district": "Markvartice"
+        },
+        "ds_id": "vjua4dj"
+    },
+    "Markvartovice": {
+        "address": {
+            "street": "\u0160ilhe\u0159ovick\u00e1 491",
+            "zip": "747 14",
+            "city": "Markvartovice",
+            "district": "Markvartovice"
+        },
+        "ds_id": "96paxqk"
+    },
+    "Mar\u0161ov": {
+        "address": {
+            "street": "71",
+            "zip": "664 71",
+            "city": "Mar\u0161ov",
+            "district": "Mar\u0161ov"
+        },
+        "ds_id": "te2az4d"
+    },
+    "Martin\u011bves": {
+        "address": {
+            "street": "24",
+            "zip": "411 19",
+            "city": "Martin\u011bves",
+            "district": "Poho\u0159ice"
+        },
+        "ds_id": "rj3b6ud"
+    },
+    "Martinice": {
+        "address": {
+            "street": "16",
+            "zip": "769 01",
+            "city": "Martinice",
+            "district": "Martinice"
+        },
+        "ds_id": "wdfarcq"
+    },
+    "Martinice u On\u0161ova": {
+        "address": {
+            "street": "19",
+            "zip": "395 01",
+            "city": "Martinice u On\u0161ova",
+            "district": "Martinice u On\u0161ova"
+        },
+        "ds_id": "9q6aqhp"
+    },
+    "Martinice v Krkono\u0161\u00edch": {
+        "address": {
+            "street": "131",
+            "zip": "512 32",
+            "city": "Martinice v Krkono\u0161\u00edch",
+            "district": "Martinice v Krkono\u0161\u00edch"
+        },
+        "ds_id": "8mfatig"
+    },
+    "Mart\u00ednkov": {
+        "address": {
+            "street": "29",
+            "zip": "675 44",
+            "city": "Mart\u00ednkov",
+            "district": "Mart\u00ednkov"
+        },
+        "ds_id": "uuyauqf"
+    },
+    "Mart\u00ednkovice": {
+        "address": {
+            "street": "186",
+            "zip": "549 73",
+            "city": "Mart\u00ednkovice",
+            "district": "Mart\u00ednkovice"
+        },
+        "ds_id": "cp3bndz"
+    },
+    "Ma\u0159enice": {
+        "address": {
+            "street": "26",
+            "zip": "471 56",
+            "city": "Ma\u0159enice",
+            "district": "Ma\u0159enice"
+        },
+        "ds_id": "86ybv8b"
+    },
+    "M\u00e1slovice": {
+        "address": {
+            "street": "Pra\u017esk\u00e1 18",
+            "zip": "250 69",
+            "city": "M\u00e1slovice",
+            "district": "M\u00e1slovice"
+        },
+        "ds_id": "3wsbnc6"
+    },
+    "Masojedy": {
+        "address": {
+            "street": "27",
+            "zip": "282 01",
+            "city": "Masojedy",
+            "district": "Masojedy"
+        },
+        "ds_id": "4dabgfq"
+    },
+    "Mastn\u00edk": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "Mastn\u00edk 47, Mastn\u00edk, 67522 Mastn\u00edk",
+            "district": ""
+        },
+        "ds_id": "p4vj2mm"
+    },
+    "Ma\u0161ovice": {
+        "address": {
+            "street": "52",
+            "zip": "669 02",
+            "city": "Ma\u0161ovice",
+            "district": "Ma\u0161ovice"
+        },
+        "ds_id": "ycwbnnn"
+    },
+    "Mat\u011bjov": {
+        "address": {
+            "street": "45",
+            "zip": "592 12",
+            "city": "Mat\u011bjov",
+            "district": "Mat\u011bjov"
+        },
+        "ds_id": "3kuarn4"
+    },
+    "Mazelov": {
+        "address": {
+            "street": "40",
+            "zip": "373 63",
+            "city": "Mazelov",
+            "district": "Mazelov"
+        },
+        "ds_id": "fu7bned"
+    },
+    "Ma\u017eice": {
+        "address": {
+            "street": "87",
+            "zip": "391 81",
+            "city": "Ma\u017eice",
+            "district": "Ma\u017eice"
+        },
+        "ds_id": "5feed8r"
+    },
+    "Mcely": {
+        "address": {
+            "street": "51",
+            "zip": "289 36",
+            "city": "Mcely",
+            "district": "Mcely"
+        },
+        "ds_id": "863bjv8"
+    },
+    "Meclov": {
+        "address": {
+            "street": "137",
+            "zip": "345 21",
+            "city": "Meclov",
+            "district": "Meclov"
+        },
+        "ds_id": "ajca9rr"
+    },
+    "Me\u010de\u0159\u00ed\u017e": {
+        "address": {
+            "street": "50",
+            "zip": "294 77",
+            "city": "Me\u010de\u0159\u00ed\u017e",
+            "district": "Me\u010de\u0159\u00ed\u017e"
+        },
+        "ds_id": "i33bgv7"
+    },
+    "Me\u010dichov": {
+        "address": {
+            "street": "3",
+            "zip": "387 36",
+            "city": "Me\u010dichov",
+            "district": "Me\u010dichov"
+        },
+        "ds_id": "dwkanb6"
+    },
+    "M\u011bd\u011bnec": {
+        "address": {
+            "street": "N\u00e1dra\u017en\u00ed 212",
+            "zip": "431 84",
+            "city": "M\u011bd\u011bnec",
+            "district": "M\u011bd\u011bnec"
+        },
+        "ds_id": "fkmbviz"
+    },
+    "Medlice": {
+        "address": {
+            "street": "58",
+            "zip": "671 40",
+            "city": "Medlice",
+            "district": "Medlice"
+        },
+        "ds_id": "jv9bz4d"
+    },
+    "Medlovice": {
+        "address": {
+            "street": "140",
+            "zip": "687 41",
+            "city": "Medlovice",
+            "district": "Medlovice"
+        },
+        "ds_id": "bvyastr"
+    },
+    "Medonosy": {
+        "address": {
+            "street": "80",
+            "zip": "277 21",
+            "city": "Medonosy",
+            "district": "Medonosy"
+        },
+        "ds_id": "3xxakip"
+    },
+    "Medov\u00fd \u00dajezd": {
+        "address": {
+            "street": "14",
+            "zip": "337 01",
+            "city": "Medov\u00fd \u00dajezd",
+            "district": "Medov\u00fd \u00dajezd"
+        },
+        "ds_id": "qfua3a7"
+    },
+    "M\u011bchenice": {
+        "address": {
+            "street": "Hlavn\u00ed 4",
+            "zip": "252 06",
+            "city": "M\u011bchenice",
+            "district": "M\u011bchenice"
+        },
+        "ds_id": "gt2aspx"
+    },
+    "M\u011bkynec": {
+        "address": {
+            "street": "22",
+            "zip": "387 73",
+            "city": "M\u011bkynec",
+            "district": "M\u011bkynec"
+        },
+        "ds_id": "sdjb56m"
+    },
+    "Mel\u010d": {
+        "address": {
+            "street": "6",
+            "zip": "747 84",
+            "city": "Mel\u010d",
+            "district": "Mel\u010d"
+        },
+        "ds_id": "6ykbctg"
+    },
+    "M\u011bl\u010dany": {
+        "address": {
+            "street": "163",
+            "zip": "664 64",
+            "city": "M\u011bl\u010dany",
+            "district": "M\u011bl\u010dany"
+        },
+        "ds_id": "f3zbkua"
+    },
+    "M\u011blnick\u00e9 Vtelno": {
+        "address": {
+            "street": "M\u011blnick\u00e1 49",
+            "zip": "277 38",
+            "city": "M\u011blnick\u00e9 Vtelno",
+            "district": "M\u011blnick\u00e9 Vtelno"
+        },
+        "ds_id": "v7bbctk"
+    },
+    "M\u011b\u0148any": {
+        "address": {
+            "street": "92",
+            "zip": "267 27",
+            "city": "M\u011b\u0148any",
+            "district": "M\u011b\u0148any"
+        },
+        "ds_id": "gededrg"
+    },
+    "Menhartice": {
+        "address": {
+            "street": "23",
+            "zip": "675 31",
+            "city": "Menhartice",
+            "district": "Menhartice"
+        },
+        "ds_id": "x5hatyr"
+    },
+    "M\u011bn\u00edn": {
+        "address": {
+            "street": "34",
+            "zip": "664 57",
+            "city": "M\u011bn\u00edn",
+            "district": "M\u011bn\u00edn"
+        },
+        "ds_id": "qi9a2h7"
+    },
+    "Merboltice": {
+        "address": {
+            "street": "53",
+            "zip": "405 02",
+            "city": "Merboltice",
+            "district": "Merboltice"
+        },
+        "ds_id": "fmsatqi"
+    },
+    "Merkl\u00edn": {
+        "address": {
+            "street": "6",
+            "zip": "362 34",
+            "city": "Merkl\u00edn",
+            "district": "Merkl\u00edn"
+        },
+        "ds_id": "8yxb7c7"
+    },
+    "M\u011brot\u00edn": {
+        "address": {
+            "street": "19",
+            "zip": "783 24",
+            "city": "M\u011brot\u00edn",
+            "district": "M\u011brot\u00edn"
+        },
+        "ds_id": "s5hbnca"
+    },
+    "M\u011brovice nad Hanou": {
+        "address": {
+            "street": "131",
+            "zip": "752 01",
+            "city": "M\u011brovice nad Hanou",
+            "district": "M\u011brovice nad Hanou"
+        },
+        "ds_id": "j2taxhu"
+    },
+    "M\u011brunice": {
+        "address": {
+            "street": "67",
+            "zip": "418 04",
+            "city": "M\u011brunice",
+            "district": "M\u011brunice"
+        },
+        "ds_id": "k59bth9"
+    },
+    "M\u011bste\u010dko": {
+        "address": {
+            "street": "70",
+            "zip": "270 23",
+            "city": "M\u011bste\u010dko",
+            "district": "M\u011bste\u010dko"
+        },
+        "ds_id": "tr2a7b4"
+    },
+    "M\u011bste\u010dko Trn\u00e1vka": {
+        "address": {
+            "street": "5",
+            "zip": "569 41",
+            "city": "M\u011bste\u010dko Trn\u00e1vka",
+            "district": "M\u011bste\u010dko Trn\u00e1vka"
+        },
+        "ds_id": "3tgbcs3"
+    },
+    "Libav\u00e1": {
+        "address": {
+            "street": "Berounsk\u00e1 41",
+            "zip": "783 07",
+            "city": "M\u011bsto Libav\u00e1",
+            "district": "M\u011bsto Libav\u00e1"
+        },
+        "ds_id": "hsifeu7"
+    },
+    "M\u011b\u0161ice": {
+        "address": {
+            "street": "Hlavn\u00ed 55",
+            "zip": "250 64",
+            "city": "M\u011b\u0161ice",
+            "district": "M\u011b\u0161ice"
+        },
+        "ds_id": "md2bcts"
+    },
+    "M\u011b\u0161\u00edn": {
+        "address": {
+            "street": "33",
+            "zip": "586 01",
+            "city": "M\u011b\u0161\u00edn",
+            "district": "M\u011b\u0161\u00edn"
+        },
+        "ds_id": "8zbavyu"
+    },
+    "Me\u0161no": {
+        "address": {
+            "street": "29",
+            "zip": "338 43",
+            "city": "Me\u0161no",
+            "district": "Me\u0161no"
+        },
+        "ds_id": "e2tbrvc"
+    },
+    "Metylovice": {
+        "address": {
+            "street": "495",
+            "zip": "739 49",
+            "city": "Metylovice",
+            "district": "Metylovice"
+        },
+        "ds_id": "ib8bncg"
+    },
+    "Mezholezy": {
+        "address": {
+            "street": "24",
+            "zip": "346 01",
+            "city": "Mezholezy",
+            "district": "Mezholezy"
+        },
+        "ds_id": "qv6bh3v"
+    },
+    "Meziho\u0159\u00ed": {
+        "address": {
+            "street": "23",
+            "zip": "340 12",
+            "city": "Meziho\u0159\u00ed",
+            "district": "Meziho\u0159\u00ed"
+        },
+        "ds_id": "8zeajms"
+    },
+    "Meziles\u00ed": {
+        "address": {
+            "street": "14",
+            "zip": "395 01",
+            "city": "Meziles\u00ed",
+            "district": "Meziles\u00ed"
+        },
+        "ds_id": "yv5av3c"
+    },
+    "Mezina": {
+        "address": {
+            "street": "2",
+            "zip": "792 01",
+            "city": "Mezina",
+            "district": "Mezina"
+        },
+        "ds_id": "e6har34"
+    },
+    "Mezi\u0159\u00ed\u010d\u00ed": {
+        "address": {
+            "street": "70",
+            "zip": "391 31",
+            "city": "Mezi\u0159\u00ed\u010d\u00ed",
+            "district": "Mezi\u0159\u00ed\u010d\u00ed"
+        },
+        "ds_id": "fzmed4b"
+    },
+    "Mezi\u0159\u00ed\u010dko": {
+        "address": {
+            "street": "5",
+            "zip": "675 26",
+            "city": "Mezi\u0159\u00ed\u010dko",
+            "district": "Mezi\u0159\u00ed\u010dko"
+        },
+        "ds_id": "uuva63h"
+    },
+    "Mezn\u00e1": {
+        "address": {
+            "street": "40",
+            "zip": "393 01",
+            "city": "Mezn\u00e1",
+            "district": "Mezn\u00e1"
+        },
+        "ds_id": "4mxawy4"
+    },
+    "Mezno": {
+        "address": {
+            "street": "57",
+            "zip": "257 86",
+            "city": "Mezno",
+            "district": "Mezno"
+        },
+        "ds_id": "mmwajsb"
+    },
+    "Mezou\u0148": {
+        "address": {
+            "street": "72",
+            "zip": "267 16",
+            "city": "Mezou\u0148",
+            "district": "Mezou\u0148"
+        },
+        "ds_id": "ir5aj75"
+    },
+    "Mi\u010dovice": {
+        "address": {
+            "street": "23",
+            "zip": "383 01",
+            "city": "Mi\u010dovice",
+            "district": "Mi\u010dovice"
+        },
+        "ds_id": "65gb5h6"
+    },
+    "M\u00ed\u010dov-Su\u0161ice": {
+        "address": {
+            "street": "32",
+            "zip": "538 03",
+            "city": "M\u00ed\u010dov-Su\u0161ice",
+            "district": "M\u00ed\u010dov"
+        },
+        "ds_id": "abgb2s7"
+    },
+    "Michalovice": {
+        "address": {
+            "street": "44",
+            "zip": "412 01",
+            "city": "Michalovice",
+            "district": "Michalovice"
+        },
+        "ds_id": "wd8aywj"
+    },
+    "M\u00edchov": {
+        "address": {
+            "street": "50",
+            "zip": "679 61",
+            "city": "M\u00edchov",
+            "district": "M\u00edchov"
+        },
+        "ds_id": "bp2arkk"
+    },
+    "Mikolajice": {
+        "address": {
+            "street": "55",
+            "zip": "747 84",
+            "city": "Mikolajice",
+            "district": "Mikolajice"
+        },
+        "ds_id": "hiqbn26"
+    },
+    "Mikul\u010dice": {
+        "address": {
+            "street": "245",
+            "zip": "696 19",
+            "city": "Mikul\u010dice",
+            "district": "Mikul\u010dice"
+        },
+        "ds_id": "jbjby8z"
+    },
+    "Mikule\u010d": {
+        "address": {
+            "street": "34",
+            "zip": "568 02",
+            "city": "Mikule\u010d",
+            "district": "Mikule\u010d"
+        },
+        "ds_id": "rk8a42w"
+    },
+    "Mikul\u016fvka": {
+        "address": {
+            "street": "226",
+            "zip": "756 24",
+            "city": "Mikul\u016fvka",
+            "district": "Mikul\u016fvka"
+        },
+        "ds_id": "98xbyr3"
+    },
+    "Milas\u00edn": {
+        "address": {
+            "street": "17",
+            "zip": "592 51",
+            "city": "Milas\u00edn",
+            "district": "Milas\u00edn"
+        },
+        "ds_id": "2uqbv6h"
+    },
+    "Milav\u010de": {
+        "address": {
+            "street": "1",
+            "zip": "344 01",
+            "city": "Milav\u010de",
+            "district": "Milav\u010de"
+        },
+        "ds_id": "3gjau8d"
+    },
+    "Mil\u010dice": {
+        "address": {
+            "street": "32",
+            "zip": "289 11",
+            "city": "Mil\u010dice",
+            "district": "Mil\u010dice"
+        },
+        "ds_id": "gqmatgy"
+    },
+    "Mile\u010d": {
+        "address": {
+            "street": "23",
+            "zip": "335 01",
+            "city": "Mile\u010d",
+            "district": "Mile\u010d"
+        },
+        "ds_id": "2sgau52"
+    },
+    "Milejovice": {
+        "address": {
+            "street": "46",
+            "zip": "387 01",
+            "city": "Milejovice",
+            "district": "Milejovice"
+        },
+        "ds_id": "a58amxx"
+    },
+    "Milenov": {
+        "address": {
+            "street": "120",
+            "zip": "753 61",
+            "city": "Milenov",
+            "district": "Milenov"
+        },
+        "ds_id": "4zmbm4k"
+    },
+    "Mile\u0161\u00edn": {
+        "address": {
+            "street": "42",
+            "zip": "594 51",
+            "city": "Mile\u0161\u00edn",
+            "district": "Mile\u0161\u00edn"
+        },
+        "ds_id": "5upb4ih"
+    },
+    "Mile\u0161ov": {
+        "address": {
+            "street": "73",
+            "zip": "262 56",
+            "city": "Mile\u0161ov",
+            "district": "Mile\u0161ov"
+        },
+        "ds_id": "bcrbje3"
+    },
+    "Mile\u0161ovice": {
+        "address": {
+            "street": "68",
+            "zip": "683 54",
+            "city": "Mile\u0161ovice",
+            "district": "Mile\u0161ovice"
+        },
+        "ds_id": "skgbr9g"
+    },
+    "Milhostov": {
+        "address": {
+            "street": "68",
+            "zip": "350 02",
+            "city": "Milhostov",
+            "district": "Milhostov"
+        },
+        "ds_id": "uffamhg"
+    },
+    "Mil\u00ed\u010dov": {
+        "address": {
+            "street": "56",
+            "zip": "588 05",
+            "city": "Mil\u00ed\u010dov",
+            "district": "Mil\u00ed\u010dov"
+        },
+        "ds_id": "9anawe3"
+    },
+    "Mil\u00ed\u010dovice": {
+        "address": {
+            "street": "40",
+            "zip": "669 02",
+            "city": "Mil\u00ed\u010dovice",
+            "district": "Mil\u00ed\u010dovice"
+        },
+        "ds_id": "nzqbvc8"
+    },
+    "Mil\u00edkov": {
+        "address": {
+            "street": "200",
+            "zip": "739 81",
+            "city": "Mil\u00edkov",
+            "district": "Mil\u00edkov"
+        },
+        "ds_id": "r9dbxdu"
+    },
+    "Mil\u00edn": {
+        "address": {
+            "street": "11. kv\u011btna 27",
+            "zip": "262 31",
+            "city": "Mil\u00edn",
+            "district": "Mil\u00edn"
+        },
+        "ds_id": "pu3bcrv"
+    },
+    "Mil\u00ednov": {
+        "address": {
+            "street": "48",
+            "zip": "332 04",
+            "city": "Mil\u00ednov",
+            "district": "Mil\u00ednov"
+        },
+        "ds_id": "vjnbq3n"
+    },
+    "Mil\u00ed\u0159e": {
+        "address": {
+            "street": "140",
+            "zip": "347 01",
+            "city": "Mil\u00ed\u0159e",
+            "district": "Mil\u00ed\u0159e"
+        },
+        "ds_id": "zpfbh3q"
+    },
+    "Milonice": {
+        "address": {
+            "street": "118",
+            "zip": "683 33",
+            "city": "Milonice",
+            "district": "Milonice"
+        },
+        "ds_id": "frya2hb"
+    },
+    "Milo\u0148ovice": {
+        "address": {
+            "street": "1",
+            "zip": "386 01",
+            "city": "Milo\u0148ovice",
+            "district": "Milo\u0148ovice"
+        },
+        "ds_id": "jxhamxr"
+    },
+    "Milost\u00edn": {
+        "address": {
+            "street": "38",
+            "zip": "270 04",
+            "city": "Milost\u00edn",
+            "district": "Milost\u00edn"
+        },
+        "ds_id": "ut7ak6m"
+    },
+    "Milotice": {
+        "address": {
+            "street": "\u0160koln\u00ed 72",
+            "zip": "696 05",
+            "city": "Milotice",
+            "district": "Milotice"
+        },
+        "ds_id": "e3sbcrz"
+    },
+    "Milotice nad Be\u010dvou": {
+        "address": {
+            "street": "59",
+            "zip": "753 67",
+            "city": "Milotice nad Be\u010dvou",
+            "district": "Milotice nad Be\u010dvou"
+        },
+        "ds_id": "fjubmy7"
+    },
+    "Milotice nad Opavou": {
+        "address": {
+            "street": "55",
+            "zip": "792 01",
+            "city": "Milotice nad Opavou",
+            "district": "Milotice nad Opavou"
+        },
+        "ds_id": "nj7bm5b"
+    },
+    "Milovice u Ho\u0159ic": {
+        "address": {
+            "street": "46",
+            "zip": "508 01",
+            "city": "Milovice u Ho\u0159ic",
+            "district": "Milovice u Ho\u0159ic"
+        },
+        "ds_id": "kfga9h3"
+    },
+    "Mil\u00fd": {
+        "address": {
+            "street": "2",
+            "zip": "270 54",
+            "city": "Mil\u00fd",
+            "district": "Mil\u00fd"
+        },
+        "ds_id": "xs7a8nz"
+    },
+    "Minice": {
+        "address": {
+            "street": "8",
+            "zip": "398 04",
+            "city": "Minice",
+            "district": "Minice"
+        },
+        "ds_id": "czpapsw"
+    },
+    "Mirkovice": {
+        "address": {
+            "street": "19",
+            "zip": "382 32",
+            "city": "Mirkovice",
+            "district": "Mirkovice"
+        },
+        "ds_id": "2ywb4xa"
+    },
+    "Miroslavsk\u00e9 Kn\u00ednice": {
+        "address": {
+            "street": "1",
+            "zip": "671 72",
+            "city": "Miroslavsk\u00e9 Kn\u00ednice",
+            "district": "Miroslavsk\u00e9 Kn\u00ednice"
+        },
+        "ds_id": "6ypa2gg"
+    },
+    "Miro\u0161ovice": {
+        "address": {
+            "street": "Na Ohrad\u011b 190",
+            "zip": "251 66",
+            "city": "Miro\u0161ovice",
+            "district": "Miro\u0161ovice"
+        },
+        "ds_id": "qavakxk"
+    },
+    "M\u00edrov": {
+        "address": {
+            "street": "47",
+            "zip": "789 01",
+            "city": "M\u00edrov",
+            "district": "M\u00edrov"
+        },
+        "ds_id": "6babkay"
+    },
+    "M\u00edrov\u00e1": {
+        "address": {
+            "street": "40",
+            "zip": "357 35",
+            "city": "M\u00edrov\u00e1",
+            "district": "M\u00edrov\u00e1"
+        },
+        "ds_id": "qp2b5iv"
+    },
+    "M\u00edrov\u00e1 pod Koz\u00e1kovem": {
+        "address": {
+            "street": "36",
+            "zip": "511 01",
+            "city": "M\u00edrov\u00e1 pod Koz\u00e1kovem",
+            "district": "Chutnovka"
+        },
+        "ds_id": "762an4t"
+    },
+    "Mi\u0159ejovice": {
+        "address": {
+            "street": "13",
+            "zip": "412 01",
+            "city": "Mi\u0159ejovice",
+            "district": "Mi\u0159ejovice"
+        },
+        "ds_id": "pruaqus"
+    },
+    "Mi\u0159etice": {
+        "address": {
+            "street": "5",
+            "zip": "257 65",
+            "city": "Mi\u0159etice",
+            "district": "Mi\u0159etice"
+        },
+        "ds_id": "vheap27"
+    },
+    "M\u00ed\u0159kov": {
+        "address": {
+            "street": "77",
+            "zip": "346 01",
+            "city": "M\u00ed\u0159kov",
+            "district": "M\u00ed\u0159kov"
+        },
+        "ds_id": "kxma8d6"
+    },
+    "Miskovice": {
+        "address": {
+            "street": "26",
+            "zip": "285 01",
+            "city": "Miskovice",
+            "district": "Miskovice"
+        },
+        "ds_id": "pyabyny"
+    },
+    "M\u00edsto": {
+        "address": {
+            "street": "81",
+            "zip": "431 58",
+            "city": "M\u00edsto",
+            "district": "M\u00edsto"
+        },
+        "ds_id": "pxeb3f9"
+    },
+    "Mistrovice": {
+        "address": {
+            "street": "138",
+            "zip": "561 64",
+            "city": "Mistrovice",
+            "district": "Mistrovice"
+        },
+        "ds_id": "8xja3if"
+    },
+    "Mist\u0159ice": {
+        "address": {
+            "street": "9",
+            "zip": "687 12",
+            "city": "Mist\u0159ice",
+            "district": "Mist\u0159ice"
+        },
+        "ds_id": "549bvew"
+    },
+    "M\u00ed\u0161kovice": {
+        "address": {
+            "street": "46",
+            "zip": "768 52",
+            "city": "M\u00ed\u0161kovice",
+            "district": "M\u00ed\u0161kovice"
+        },
+        "ds_id": "rs9atwz"
+    },
+    "M\u00ed\u0161ov": {
+        "address": {
+            "street": "73",
+            "zip": "335 63",
+            "city": "M\u00ed\u0161ov",
+            "district": "M\u00ed\u0161ov"
+        },
+        "ds_id": "agqbh4i"
+    },
+    "Mi\u0161ovice": {
+        "address": {
+            "street": "20",
+            "zip": "398 04",
+            "city": "Mi\u0161ovice",
+            "district": "Mi\u0161ovice"
+        },
+        "ds_id": "rg9jd54"
+    },
+    "Mlad\u00e9 B\u0159\u00ed\u0161t\u011b": {
+        "address": {
+            "street": "16",
+            "zip": "394 43",
+            "city": "Mlad\u00e9 B\u0159\u00ed\u0161t\u011b",
+            "district": "Mlad\u00e9 B\u0159\u00ed\u0161t\u011b"
+        },
+        "ds_id": "yhdawe7"
+    },
+    "Mladecko": {
+        "address": {
+            "street": "19",
+            "zip": "747 54",
+            "city": "Mladecko",
+            "district": "Mladecko"
+        },
+        "ds_id": "ixyaxre"
+    },
+    "Mlade\u010d": {
+        "address": {
+            "street": "78",
+            "zip": "783 21",
+            "city": "Mlade\u010d",
+            "district": "Mlade\u010d"
+        },
+        "ds_id": "62fauwv"
+    },
+    "Mlad\u011bjovice": {
+        "address": {
+            "street": "24",
+            "zip": "785 01",
+            "city": "Mlad\u011bjovice",
+            "district": "Mlad\u011bjovice"
+        },
+        "ds_id": "xm8asbf"
+    },
+    "Mlad\u011bjov Na Morav\u011b": {
+        "address": {
+            "street": "56",
+            "zip": "569 35",
+            "city": "Mlad\u011bjov na Morav\u011b",
+            "district": "Mlad\u011bjov na Morav\u011b"
+        },
+        "ds_id": "ukea3u2"
+    },
+    "Mlado\u0148ovice": {
+        "address": {
+            "street": "58",
+            "zip": "675 32",
+            "city": "Mlado\u0148ovice",
+            "district": "Mlado\u0148ovice"
+        },
+        "ds_id": "rhqbf6x"
+    },
+    "Mlado\u0161ovice": {
+        "address": {
+            "street": "2",
+            "zip": "379 01",
+            "city": "Mlado\u0161ovice",
+            "district": "Mlado\u0161ovice"
+        },
+        "ds_id": "dtkb72a"
+    },
+    "Mladotice": {
+        "address": {
+            "street": "14",
+            "zip": "331 41",
+            "city": "Mladotice",
+            "district": "Mladotice"
+        },
+        "ds_id": "a5ubxb8"
+    },
+    "Mlad\u00fd Smolivec": {
+        "address": {
+            "street": "95",
+            "zip": "335 01",
+            "city": "Mlad\u00fd Smolivec",
+            "district": "Mlad\u00fd Smolivec"
+        },
+        "ds_id": "39ya6vr"
+    },
+    "Mle\u010dice": {
+        "address": {
+            "street": "11",
+            "zip": "338 08",
+            "city": "Mle\u010dice",
+            "district": "Mle\u010dice"
+        },
+        "ds_id": "xvibxcb"
+    },
+    "Ml\u00e9kojedy": {
+        "address": {
+            "street": "41",
+            "zip": "412 01",
+            "city": "Ml\u00e9kojedy",
+            "district": "Ml\u00e9kojedy"
+        },
+        "ds_id": "yi5aqun"
+    },
+    "Ml\u00fdnsk\u00e9 Struhadlo": {
+        "address": {
+            "street": "2",
+            "zip": "339 01",
+            "city": "Ml\u00fdnsk\u00e9 Struhadlo",
+            "district": "Ml\u00fdnsk\u00e9 Struhadlo"
+        },
+        "ds_id": "nbta8jt"
+    },
+    "Ml\u00fdny": {
+        "address": {
+            "street": "47",
+            "zip": "392 01",
+            "city": "Ml\u00fdny",
+            "district": "Ml\u00fdny"
+        },
+        "ds_id": "dmnb6t4"
+    },
+    "Mnet\u011b\u0161": {
+        "address": {
+            "street": "28",
+            "zip": "413 01",
+            "city": "Mnet\u011b\u0161",
+            "district": "Mnet\u011b\u0161"
+        },
+        "ds_id": "tviat7w"
+    },
+    "Mnich": {
+        "address": {
+            "street": "145",
+            "zip": "394 92",
+            "city": "Mnich",
+            "district": "Mnich"
+        },
+        "ds_id": "268aus8"
+    },
+    "Mnichov": {
+        "address": {
+            "street": "73",
+            "zip": "386 01",
+            "city": "Mnichov",
+            "district": "Mnichov"
+        },
+        "ds_id": "6h9edy9"
+    },
+    "Mn\u00ed\u0161ek": {
+        "address": {
+            "street": "Old\u0159ichovsk\u00e1 185",
+            "zip": "463 31",
+            "city": "Mn\u00ed\u0161ek",
+            "district": "Mn\u00ed\u0161ek"
+        },
+        "ds_id": "prjbpvy"
+    },
+    "Mo\u010derady": {
+        "address": {
+            "street": "50",
+            "zip": "345 61",
+            "city": "Mo\u010derady",
+            "district": "Mo\u010derady"
+        },
+        "ds_id": "i9zbh4e"
+    },
+    "Mo\u010dovice": {
+        "address": {
+            "street": "26",
+            "zip": "286 01",
+            "city": "Mo\u010dovice",
+            "district": "Mo\u010dovice"
+        },
+        "ds_id": "92ea3av"
+    },
+    "Modlany": {
+        "address": {
+            "street": "34",
+            "zip": "417 13",
+            "city": "Modlany",
+            "district": "Modlany"
+        },
+        "ds_id": "bwnbcqk"
+    },
+    "Modl\u00edkov": {
+        "address": {
+            "street": "60",
+            "zip": "582 22",
+            "city": "Modl\u00edkov",
+            "district": "Modl\u00edkov"
+        },
+        "ds_id": "fykbmmb"
+    },
+    "Modr\u00e1": {
+        "address": {
+            "street": "170",
+            "zip": "687 06",
+            "city": "Modr\u00e1",
+            "district": "Modr\u00e1"
+        },
+        "ds_id": "i76bzz3"
+    },
+    "Modr\u00e1 H\u016frka": {
+        "address": {
+            "street": "16",
+            "zip": "375 01",
+            "city": "Modr\u00e1 H\u016frka",
+            "district": "Modr\u00e1 H\u016frka"
+        },
+        "ds_id": "dpge6uw"
+    },
+    "Modrava": {
+        "address": {
+            "street": "63",
+            "zip": "341 92",
+            "city": "Modrava",
+            "district": "Modrava"
+        },
+        "ds_id": "vpubxuf"
+    },
+    "Mod\u0159i\u0161ice": {
+        "address": {
+            "street": "11",
+            "zip": "511 01",
+            "city": "Mod\u0159i\u0161ice",
+            "district": "Mod\u0159i\u0161ice"
+        },
+        "ds_id": "i9wbufh"
+    },
+    "Mod\u0159ovice": {
+        "address": {
+            "street": "10",
+            "zip": "262 42",
+            "city": "Mod\u0159ovice",
+            "district": "Mod\u0159ovice"
+        },
+        "ds_id": "ftma7as"
+    },
+    "Mohelnice nad Jizerou": {
+        "address": {
+            "street": "48",
+            "zip": "294 13",
+            "city": "Mohelnice nad Jizerou",
+            "district": "Mohelnice nad Jizerou"
+        },
+        "ds_id": "9aab7sb"
+    },
+    "Mochov": {
+        "address": {
+            "street": "Sokolovsk\u00e1 92",
+            "zip": "250 87",
+            "city": "Mochov",
+            "district": "Mochov"
+        },
+        "ds_id": "gqcbsh6"
+    },
+    "Mocht\u00edn": {
+        "address": {
+            "street": "105",
+            "zip": "339 01",
+            "city": "Mocht\u00edn",
+            "district": "Mocht\u00edn"
+        },
+        "ds_id": "nfbavfn"
+    },
+    "Mojn\u00e9": {
+        "address": {
+            "street": "19",
+            "zip": "382 32",
+            "city": "Mojn\u00e9",
+            "district": "Mojn\u00e9"
+        },
+        "ds_id": "je3bm4w"
+    },
+    "Moko\u0161\u00edn": {
+        "address": {
+            "street": "27",
+            "zip": "535 01",
+            "city": "Moko\u0161\u00edn",
+            "district": "Moko\u0161\u00edn"
+        },
+        "ds_id": "jy3a43e"
+    },
+    "Mokr\u00e1 - Hor\u00e1kov": {
+        "address": {
+            "street": "207",
+            "zip": "664 04",
+            "city": "Mokr\u00e1-Hor\u00e1kov",
+            "district": "Mokr\u00e1"
+        },
+        "ds_id": "i3aa9be"
+    },
+    "Mokr\u00e9 Lazce": {
+        "address": {
+            "street": "Pavla K\u0159\u00ed\u017ekovsk\u00e9ho 158",
+            "zip": "747 62",
+            "city": "Mokr\u00e9 Lazce",
+            "district": "Mokr\u00e9 Lazce"
+        },
+        "ds_id": "egzbm8r"
+    },
+    "Mokrosuky": {
+        "address": {
+            "street": "66",
+            "zip": "342 01",
+            "city": "Mokrosuky",
+            "district": "Mokrosuky"
+        },
+        "ds_id": "qrsbxya"
+    },
+    "Mokrou\u0161e": {
+        "address": {
+            "street": "47",
+            "zip": "332 01",
+            "city": "Mokrou\u0161e",
+            "district": "Mokrou\u0161e"
+        },
+        "ds_id": "k5naw9a"
+    },
+    "Mokrovraty": {
+        "address": {
+            "street": "92",
+            "zip": "262 03",
+            "city": "Mokrovraty",
+            "district": "Mokrovraty"
+        },
+        "ds_id": "j9qajkp"
+    },
+    "Mokr\u00fd Lom": {
+        "address": {
+            "street": "1",
+            "zip": "374 01",
+            "city": "Mokr\u00fd Lom",
+            "district": "Mokr\u00fd Lom"
+        },
+        "ds_id": "qesbsrk"
+    },
+    "Moldava v Kru\u0161n\u00fdch Hor\u00e1ch": {
+        "address": {
+            "street": "113",
+            "zip": "417 81",
+            "city": "Moldava",
+            "district": "Moldava"
+        },
+        "ds_id": "5xbbt7m"
+    },
+    "Mora\u0161ice": {
+        "address": {
+            "street": "96",
+            "zip": "569 51",
+            "city": "Mora\u0161ice",
+            "district": "Mora\u0161ice"
+        },
+        "ds_id": "ecwa44x"
+    },
+    "Moravany": {
+        "address": {
+            "street": "n\u00e1m. Hrdin\u016f 136",
+            "zip": "533 72",
+            "city": "Moravany",
+            "district": "Moravany"
+        },
+        "ds_id": "hitbcp4"
+    },
+    "Moravec": {
+        "address": {
+            "street": "146",
+            "zip": "592 54",
+            "city": "Moravec",
+            "district": "Moravec"
+        },
+        "ds_id": "pbcawr7"
+    },
+    "Moraveck\u00e9 Pavlovice": {
+        "address": {
+            "street": "23",
+            "zip": "592 62",
+            "city": "Moraveck\u00e9 Pavlovice",
+            "district": "Moraveck\u00e9 Pavlovice"
+        },
+        "ds_id": "utza9us"
+    },
+    "Morave\u010d": {
+        "address": {
+            "street": "110",
+            "zip": "393 01",
+            "city": "Morave\u010d",
+            "district": "Morave\u010d"
+        },
+        "ds_id": "j2ibwi2"
+    },
+    "Moravice": {
+        "address": {
+            "street": "34",
+            "zip": "747 84",
+            "city": "Moravice",
+            "district": "Moravice"
+        },
+        "ds_id": "bxmaxka"
+    },
+    "Moravi\u010dany": {
+        "address": {
+            "street": "67",
+            "zip": "789 82",
+            "city": "Moravi\u010dany",
+            "district": "Moravi\u010dany"
+        },
+        "ds_id": "uwfbm72"
+    },
+    "Mor\u00e1vka": {
+        "address": {
+            "street": "599",
+            "zip": "739 04",
+            "city": "Mor\u00e1vka",
+            "district": "Mor\u00e1vka"
+        },
+        "ds_id": "5r6b2ib"
+    },
+    "Moravsk\u00e9 Br\u00e1nice": {
+        "address": {
+            "street": "325",
+            "zip": "664 64",
+            "city": "Moravsk\u00e9 Br\u00e1nice",
+            "district": "Moravsk\u00e9 Br\u00e1nice"
+        },
+        "ds_id": "yvcanhh"
+    },
+    "Moravsk\u00e9 Kn\u00ednice": {
+        "address": {
+            "street": "Ku\u0159imsk\u00e1 99",
+            "zip": "664 34",
+            "city": "Moravsk\u00e9 Kn\u00ednice",
+            "district": "Moravsk\u00e9 Kn\u00ednice"
+        },
+        "ds_id": "umaay3r"
+    },
+    "Moravsk\u00e9 M\u00e1lkovice": {
+        "address": {
+            "street": "56",
+            "zip": "682 01",
+            "city": "Moravsk\u00e9 M\u00e1lkovice",
+            "district": "Moravsk\u00e9 M\u00e1lkovice"
+        },
+        "ds_id": "t9ba8ye"
+    },
+    "Moravskoslezsk\u00fd Ko\u010dov": {
+        "address": {
+            "street": "200",
+            "zip": "792 01",
+            "city": "Moravskoslezsk\u00fd Ko\u010dov",
+            "district": "Moravsk\u00fd Ko\u010dov"
+        },
+        "ds_id": "pxsar3y"
+    },
+    "Moravsk\u00fd P\u00edsek": {
+        "address": {
+            "street": "Velkomoravsk\u00e1 1",
+            "zip": "696 85",
+            "city": "Moravsk\u00fd P\u00edsek",
+            "district": "Moravsk\u00fd P\u00edsek"
+        },
+        "ds_id": "krkbhhz"
+    },
+    "Mork\u016fvky": {
+        "address": {
+            "street": "113",
+            "zip": "691 72",
+            "city": "Mork\u016fvky",
+            "district": "Mork\u016fvky"
+        },
+        "ds_id": "555bsmm"
+    },
+    "Mo\u0159ice": {
+        "address": {
+            "street": "68",
+            "zip": "798 28",
+            "city": "Mo\u0159ice",
+            "district": "Mo\u0159ice"
+        },
+        "ds_id": "3xuawvr"
+    },
+    "Mo\u0159ina": {
+        "address": {
+            "street": "81",
+            "zip": "267 17",
+            "city": "Mo\u0159ina",
+            "district": "Mo\u0159ina"
+        },
+        "ds_id": "9jtbjid"
+    },
+    "Mo\u0159inka": {
+        "address": {
+            "street": "28",
+            "zip": "267 18",
+            "city": "Mo\u0159inka",
+            "district": "Mo\u0159inka"
+        },
+        "ds_id": "rbkidvm"
+    },
+    "Mo\u0159kov": {
+        "address": {
+            "street": "Horn\u00ed 10",
+            "zip": "742 72",
+            "city": "Mo\u0159kov",
+            "district": "Mo\u0159kov"
+        },
+        "ds_id": "vn3bqan"
+    },
+    "Mostek": {
+        "address": {
+            "street": "62",
+            "zip": "565 01",
+            "city": "Mostek",
+            "district": "Mostek"
+        },
+        "ds_id": "4pka3rm"
+    },
+    "Mostkovice": {
+        "address": {
+            "street": "Prost\u011bjovsk\u00e1 197",
+            "zip": "798 02",
+            "city": "Mostkovice",
+            "district": "Mostkovice"
+        },
+        "ds_id": "giebrax"
+    },
+    "Mosty u Jablunkova": {
+        "address": {
+            "street": "800",
+            "zip": "739 98",
+            "city": "Mosty u Jablunkova",
+            "district": "Mosty u Jablunkova"
+        },
+        "ds_id": "xx9bcnf"
+    },
+    "Mo\u0161nov": {
+        "address": {
+            "street": "96",
+            "zip": "742 51",
+            "city": "Mo\u0161nov",
+            "district": "Mo\u0161nov"
+        },
+        "ds_id": "tq9axrb"
+    },
+    "Mouchnice": {
+        "address": {
+            "street": "7",
+            "zip": "683 33",
+            "city": "Mouchnice",
+            "district": "Mouchnice"
+        },
+        "ds_id": "szzbzgf"
+    },
+    "Mou\u0159\u00ednov": {
+        "address": {
+            "street": "190",
+            "zip": "685 01",
+            "city": "Mou\u0159\u00ednov",
+            "district": "Mou\u0159\u00ednov"
+        },
+        "ds_id": "32dayvy"
+    },
+    "Moutnice": {
+        "address": {
+            "street": "277",
+            "zip": "664 55",
+            "city": "Moutnice",
+            "district": "Moutnice"
+        },
+        "ds_id": "rf9anpc"
+    },
+    "Mra\u010d": {
+        "address": {
+            "street": "14",
+            "zip": "257 21",
+            "city": "Mra\u010d",
+            "district": "Mra\u010d"
+        },
+        "ds_id": "u25jdtk"
+    },
+    "Mr\u00e1kot\u00edn": {
+        "address": {
+            "street": "52",
+            "zip": "539 01",
+            "city": "Mr\u00e1kot\u00edn",
+            "district": "Mr\u00e1kot\u00edn"
+        },
+        "ds_id": "tv2b2sx"
+    },
+    "Mr\u00e1kov": {
+        "address": {
+            "street": "105",
+            "zip": "345 01",
+            "city": "Mr\u00e1kov",
+            "district": "Mr\u00e1kov"
+        },
+        "ds_id": "b9uau97"
+    },
+    "Mrat\u00edn": {
+        "address": {
+            "street": "Kosteleck\u00e1 131",
+            "zip": "250 63",
+            "city": "Mrat\u00edn",
+            "district": "Mrat\u00edn"
+        },
+        "ds_id": "v6masws"
+    },
+    "Mrl\u00ednek": {
+        "address": {
+            "street": "54",
+            "zip": "768 61",
+            "city": "Mrl\u00ednek",
+            "district": "Mrl\u00ednek"
+        },
+        "ds_id": "66qarck"
+    },
+    "Mrsklesy": {
+        "address": {
+            "street": "49",
+            "zip": "783 65",
+            "city": "Mrsklesy",
+            "district": "Mrsklesy"
+        },
+        "ds_id": "8fhasb9"
+    },
+    "Mrtn\u00edk": {
+        "address": {
+            "street": "52",
+            "zip": "331 52",
+            "city": "Mrtn\u00edk",
+            "district": "Mrtn\u00edk"
+        },
+        "ds_id": "xtaawbu"
+    },
+    "Mrzky": {
+        "address": {
+            "street": "25",
+            "zip": "282 01",
+            "city": "Mrzky",
+            "district": "Mrzky"
+        },
+        "ds_id": "dxaa782"
+    },
+    "M\u0161eck\u00e9 \u017dehrovice": {
+        "address": {
+            "street": "77",
+            "zip": "270 64",
+            "city": "M\u0161eck\u00e9 \u017dehrovice",
+            "district": "M\u0161eck\u00e9 \u017dehrovice"
+        },
+        "ds_id": "97dbhme"
+    },
+    "M\u0161en\u00e9-l\u00e1zn\u011b": {
+        "address": {
+            "street": "Prosek 174",
+            "zip": "411 19",
+            "city": "M\u0161en\u00e9-l\u00e1zn\u011b",
+            "district": "M\u0161en\u00e9-l\u00e1zn\u011b"
+        },
+        "ds_id": "qsnbu7y"
+    },
+    "Muka\u0159ov": {
+        "address": {
+            "street": "P\u0159\u00ed\u010dn\u00e1 11",
+            "zip": "251 62",
+            "city": "Muka\u0159ov",
+            "district": "Muka\u0159ov"
+        },
+        "ds_id": "qyvaxdz"
+    },
+    "Mut\u011bjovice": {
+        "address": {
+            "street": "Mal\u00e1 Strana 190",
+            "zip": "270 07",
+            "city": "Mut\u011bjovice",
+            "district": "Mut\u011bjovice"
+        },
+        "ds_id": "edpbcnp"
+    },
+    "Mut\u011bnice": {
+        "address": {
+            "street": "Masarykova 200",
+            "zip": "696 11",
+            "city": "Mut\u011bnice",
+            "district": "Mut\u011bnice"
+        },
+        "ds_id": "5kebcmv"
+    },
+    "Mut\u011bn\u00edn": {
+        "address": {
+            "street": "60",
+            "zip": "345 25",
+            "city": "Mut\u011bn\u00edn",
+            "district": "Mut\u011bn\u00edn"
+        },
+        "ds_id": "qhpajdi"
+    },
+    "Mutkov": {
+        "address": {
+            "street": "14",
+            "zip": "785 01",
+            "city": "Mutkov",
+            "district": "Mutkov"
+        },
+        "ds_id": "haxb5qm"
+    },
+    "Mydlovary": {
+        "address": {
+            "street": "61",
+            "zip": "373 49",
+            "city": "Mydlovary",
+            "district": "Mydlovary"
+        },
+        "ds_id": "5h3amxi"
+    },
+    "Myslejovice": {
+        "address": {
+            "street": "145",
+            "zip": "798 05",
+            "city": "Myslejovice",
+            "district": "Myslejovice"
+        },
+        "ds_id": "paabm8j"
+    },
+    "Mysletice": {
+        "address": {
+            "street": "44",
+            "zip": "588 56",
+            "city": "Mysletice",
+            "district": "Mysletice"
+        },
+        "ds_id": "3bhaq8v"
+    },
+    "Myslet\u00edn": {
+        "address": {
+            "street": "36",
+            "zip": "396 01",
+            "city": "Myslet\u00edn",
+            "district": "Myslet\u00edn"
+        },
+        "ds_id": "xdnazf2"
+    },
+    "Myslibo\u0159": {
+        "address": {
+            "street": "73",
+            "zip": "588 62",
+            "city": "Myslibo\u0159",
+            "district": "Myslibo\u0159"
+        },
+        "ds_id": "pf8bpfu"
+    },
+    "Myslibo\u0159ice": {
+        "address": {
+            "street": "14",
+            "zip": "675 60",
+            "city": "Myslibo\u0159ice",
+            "district": "Myslibo\u0159ice"
+        },
+        "ds_id": "idaawvz"
+    },
+    "Mysl\u00edn": {
+        "address": {
+            "street": "58",
+            "zip": "398 04",
+            "city": "Mysl\u00edn",
+            "district": "Mysl\u00edn"
+        },
+        "ds_id": "v5db63c"
+    },
+    "Myslinka": {
+        "address": {
+            "street": "6",
+            "zip": "330 23",
+            "city": "Myslinka",
+            "district": "Myslinka"
+        },
+        "ds_id": "36dbucv"
+    },
+    "Mysl\u00edv": {
+        "address": {
+            "street": "52",
+            "zip": "341 01",
+            "city": "Mysl\u00edv",
+            "district": "Mysl\u00edv"
+        },
+        "ds_id": "t3abh48"
+    },
+    "Myslkovice": {
+        "address": {
+            "street": "59",
+            "zip": "391 16",
+            "city": "Myslkovice",
+            "district": "Myslkovice"
+        },
+        "ds_id": "aurefs8"
+    },
+    "Myslo\u010dovice": {
+        "address": {
+            "street": "21",
+            "zip": "763 01",
+            "city": "Myslo\u010dovice",
+            "district": "Myslo\u010dovice"
+        },
+        "ds_id": "5x4b3rh"
+    },
+    "Myslovice": {
+        "address": {
+            "street": "56",
+            "zip": "339 01",
+            "city": "Myslovice",
+            "district": "Myslovice"
+        },
+        "ds_id": "4ujbh44"
+    },
+    "My\u0161tice": {
+        "address": {
+            "street": "15",
+            "zip": "388 01",
+            "city": "My\u0161tice",
+            "district": "My\u0161tice"
+        },
+        "ds_id": "wrbats5"
+    },
+    "Nabo\u010dany": {
+        "address": {
+            "street": "24",
+            "zip": "538 62",
+            "city": "Nabo\u010dany",
+            "district": "Nabo\u010dany"
+        },
+        "ds_id": "4pbb2ss"
+    },
+    "Na\u010de\u0161ice": {
+        "address": {
+            "street": "21",
+            "zip": "538 03",
+            "city": "Na\u010de\u0161ice",
+            "district": "Na\u010de\u0161ice"
+        },
+        "ds_id": "n57a44t"
+    },
+    "Nad\u011bjkov": {
+        "address": {
+            "street": "n\u00e1m. Prokopa Chocholou\u0161ka 6",
+            "zip": "398 52",
+            "city": "Nad\u011bjkov",
+            "district": "Nad\u011bjkov"
+        },
+        "ds_id": "jzubcm6"
+    },
+    "Nad\u011bjov": {
+        "address": {
+            "street": "37",
+            "zip": "588 27",
+            "city": "Nad\u011bjov",
+            "district": "Nad\u011bjov"
+        },
+        "ds_id": "2azbf6t"
+    },
+    "Nadryby": {
+        "address": {
+            "street": "14",
+            "zip": "330 11",
+            "city": "Nadryby",
+            "district": "Nadryby"
+        },
+        "ds_id": "nw7btcz"
+    },
+    "Naho\u0161ovice": {
+        "address": {
+            "street": "39",
+            "zip": "751 14",
+            "city": "Naho\u0161ovice",
+            "district": "Naho\u0161ovice"
+        },
+        "ds_id": "rrhazgj"
+    },
+    "N\u00e1klo": {
+        "address": {
+            "street": "14",
+            "zip": "783 32",
+            "city": "N\u00e1klo",
+            "district": "N\u00e1klo"
+        },
+        "ds_id": "a8jbcma"
+    },
+    "N\u00e1k\u0159\u00ed": {
+        "address": {
+            "street": "24",
+            "zip": "373 48",
+            "city": "N\u00e1k\u0159\u00ed",
+            "district": "N\u00e1k\u0159\u00ed"
+        },
+        "ds_id": "3iza9jr"
+    },
+    "Nalou\u010dany": {
+        "address": {
+            "street": "29",
+            "zip": "675 71",
+            "city": "Nalou\u010dany",
+            "district": "Nalou\u010dany"
+        },
+        "ds_id": "pvxa9ym"
+    },
+    "Nal\u017eovice": {
+        "address": {
+            "street": "21",
+            "zip": "262 93",
+            "city": "Nal\u017eovice",
+            "district": "Chlum"
+        },
+        "ds_id": "vq4ajpw"
+    },
+    "N\u00e1rame\u010d": {
+        "address": {
+            "street": "7",
+            "zip": "675 03",
+            "city": "N\u00e1rame\u010d",
+            "district": "N\u00e1rame\u010d"
+        },
+        "ds_id": "u2ta8aq"
+    },
+    "Narysov": {
+        "address": {
+            "street": "76",
+            "zip": "261 01",
+            "city": "Narysov",
+            "district": "Narysov"
+        },
+        "ds_id": "z5rbyug"
+    },
+    "N\u00e1sedlovice": {
+        "address": {
+            "street": "129",
+            "zip": "696 36",
+            "city": "N\u00e1sedlovice",
+            "district": "N\u00e1sedlovice"
+        },
+        "ds_id": "76rbm5z"
+    },
+    "Na\u0161im\u011b\u0159ice": {
+        "address": {
+            "street": "48",
+            "zip": "671 76",
+            "city": "Na\u0161im\u011b\u0159ice",
+            "district": "Na\u0161im\u011b\u0159ice"
+        },
+        "ds_id": "iftayva"
+    },
+    "N\u00e1vojn\u00e1": {
+        "address": {
+            "street": "101",
+            "zip": "763 32",
+            "city": "N\u00e1vojn\u00e1",
+            "district": "N\u00e1vojn\u00e1"
+        },
+        "ds_id": "ddabq9i"
+    },
+    "N\u00e1vs\u00ed": {
+        "address": {
+            "street": "327",
+            "zip": "739 92",
+            "city": "N\u00e1vs\u00ed",
+            "district": "N\u00e1vs\u00ed"
+        },
+        "ds_id": "qfnbpya"
+    },
+    "Nebahovy": {
+        "address": {
+            "street": "38",
+            "zip": "384 01",
+            "city": "Nebahovy",
+            "district": "Nebahovy"
+        },
+        "ds_id": "d3aidxn"
+    },
+    "Nebanice": {
+        "address": {
+            "street": "7",
+            "zip": "350 02",
+            "city": "Nebanice",
+            "district": "Nebanice"
+        },
+        "ds_id": "guqbckr"
+    },
+    "Neb\u00edlovy": {
+        "address": {
+            "street": "101",
+            "zip": "332 04",
+            "city": "Neb\u00edlovy",
+            "district": "Neb\u00edlovy"
+        },
+        "ds_id": "dcpauzm"
+    },
+    "Nebovidy": {
+        "address": {
+            "street": "75",
+            "zip": "280 02",
+            "city": "Nebovidy",
+            "district": "Nebovidy"
+        },
+        "ds_id": "htgas8d"
+    },
+    "Neb\u0159ehovice": {
+        "address": {
+            "street": "35",
+            "zip": "386 01",
+            "city": "Neb\u0159ehovice",
+            "district": "Neb\u0159ehovice"
+        },
+        "ds_id": "uxhawqn"
+    },
+    "Nebu\u017eely": {
+        "address": {
+            "street": "14",
+            "zip": "277 34",
+            "city": "Nebu\u017eely",
+            "district": "Nebu\u017eely"
+        },
+        "ds_id": "j46bm78"
+    },
+    "Ne\u010d\u00edn": {
+        "address": {
+            "street": "18",
+            "zip": "262 13",
+            "city": "Ne\u010d\u00edn",
+            "district": "Ne\u010d\u00edn"
+        },
+        "ds_id": "w96bcj5"
+    },
+    "Ne\u010dtiny": {
+        "address": {
+            "street": "82",
+            "zip": "331 62",
+            "city": "Ne\u010dtiny",
+            "district": "Ne\u010dtiny"
+        },
+        "ds_id": "ngvbcj9"
+    },
+    "Nedabyle": {
+        "address": {
+            "street": "4",
+            "zip": "370 06",
+            "city": "Nedabyle",
+            "district": "Nedabyle"
+        },
+        "ds_id": "i6eb7jk"
+    },
+    "Nedachlebice": {
+        "address": {
+            "street": "250",
+            "zip": "687 12",
+            "city": "Nedachlebice",
+            "district": "Nedachlebice"
+        },
+        "ds_id": "dpkbcjd"
+    },
+    "Nedakonice": {
+        "address": {
+            "street": "33",
+            "zip": "687 38",
+            "city": "Nedakonice",
+            "district": "Nedakonice"
+        },
+        "ds_id": "puvbzf2"
+    },
+    "Neda\u0161ov": {
+        "address": {
+            "street": "370",
+            "zip": "763 32",
+            "city": "Neda\u0161ov",
+            "district": "Neda\u0161ov"
+        },
+        "ds_id": "4wbbcii"
+    },
+    "Neda\u0161ova Lhota": {
+        "address": {
+            "street": "10",
+            "zip": "763 32",
+            "city": "Neda\u0161ova Lhota",
+            "district": "Neda\u0161ova Lhota"
+        },
+        "ds_id": "qfjb2bd"
+    },
+    "Nedomice": {
+        "address": {
+            "street": "78",
+            "zip": "277 14",
+            "city": "Nedomice",
+            "district": "Nedomice"
+        },
+        "ds_id": "ja3asm2"
+    },
+    "Nedrahovice": {
+        "address": {
+            "street": "49",
+            "zip": "264 01",
+            "city": "Nedrahovice",
+            "district": "Nedrahovice"
+        },
+        "ds_id": "2ikbm6i"
+    },
+    "Nedv\u011bz\u00ed": {
+        "address": {
+            "street": "87",
+            "zip": "569 92",
+            "city": "Nedv\u011bz\u00ed",
+            "district": "Nedv\u011bz\u00ed"
+        },
+        "ds_id": "xxga44m"
+    },
+    "Nehodiv": {
+        "address": {
+            "street": "13",
+            "zip": "341 01",
+            "city": "Nehodiv",
+            "district": "Nehodiv"
+        },
+        "ds_id": "tqybwsg"
+    },
+    "Nechvalice": {
+        "address": {
+            "street": "62",
+            "zip": "264 01",
+            "city": "Nechvalice",
+            "district": "Nechvalice"
+        },
+        "ds_id": "u2zajkj"
+    },
+    "Nechval\u00edn": {
+        "address": {
+            "street": "13",
+            "zip": "696 31",
+            "city": "Nechval\u00edn",
+            "district": "Nechval\u00edn"
+        },
+        "ds_id": "7x5a2zy"
+    },
+    "Nejep\u00edn": {
+        "address": {
+            "street": "21",
+            "zip": "583 01",
+            "city": "Nejep\u00edn",
+            "district": "Nejep\u00edn"
+        },
+        "ds_id": "7yzax8p"
+    },
+    "Nekm\u00ed\u0159": {
+        "address": {
+            "street": "114",
+            "zip": "331 52",
+            "city": "Nekm\u00ed\u0159",
+            "district": "Nekm\u00ed\u0159"
+        },
+        "ds_id": "4ftbifz"
+    },
+    "Neko\u0159": {
+        "address": {
+            "street": "330",
+            "zip": "561 63",
+            "city": "Neko\u0159",
+            "district": "Neko\u0159"
+        },
+        "ds_id": "8qra44i"
+    },
+    "Nekvasovy": {
+        "address": {
+            "street": "102",
+            "zip": "335 47",
+            "city": "Nekvasovy",
+            "district": "Nekvasovy"
+        },
+        "ds_id": "dmubh5x"
+    },
+    "Nelahozeves": {
+        "address": {
+            "street": "\u0160koln\u00ed 3",
+            "zip": "277 51",
+            "city": "Nelahozeves",
+            "district": "Nelahozeves"
+        },
+        "ds_id": "t42bciq"
+    },
+    "Nelepe\u010d-\u017dern\u016fvka": {
+        "address": {
+            "street": "10",
+            "zip": "666 01",
+            "city": "Nelepe\u010d-\u017dern\u016fvka",
+            "district": "\u017dern\u016fvka"
+        },
+        "ds_id": "p3yayur"
+    },
+    "Nele\u0161ovice": {
+        "address": {
+            "street": "50",
+            "zip": "751 03",
+            "city": "Nele\u0161ovice",
+            "district": "Nele\u0161ovice"
+        },
+        "ds_id": "rrbbm6n"
+    },
+    "Nemanice": {
+        "address": {
+            "street": "17",
+            "zip": "344 01",
+            "city": "Nemanice",
+            "district": "Nemanice"
+        },
+        "ds_id": "ne5bh5t"
+    },
+    "N\u011bm\u010dany": {
+        "address": {
+            "street": "145",
+            "zip": "684 01",
+            "city": "N\u011bm\u010dany",
+            "district": "N\u011bm\u010dany"
+        },
+        "ds_id": "hfha253"
+    },
+    "N\u011bm\u010dice": {
+        "address": {
+            "street": "44",
+            "zip": "387 19",
+            "city": "N\u011bm\u010dice",
+            "district": "N\u011bm\u010dice"
+        },
+        "ds_id": "xg6anbx"
+    },
+    "N\u011bm\u010di\u010dky": {
+        "address": {
+            "street": "49",
+            "zip": "671 53",
+            "city": "N\u011bm\u010di\u010dky",
+            "district": "N\u011bm\u010di\u010dky"
+        },
+        "ds_id": "jbrbciu"
+    },
+    "N\u011bm\u010dovice": {
+        "address": {
+            "street": "37",
+            "zip": "338 24",
+            "city": "N\u011bm\u010dovice",
+            "district": "N\u011bm\u010dovice"
+        },
+        "ds_id": "usxbzb7"
+    },
+    "N\u011bm\u011btice": {
+        "address": {
+            "street": "20",
+            "zip": "387 01",
+            "city": "N\u011bm\u011btice",
+            "district": "N\u011bm\u011btice"
+        },
+        "ds_id": "8afanbr"
+    },
+    "Nemile": {
+        "address": {
+            "street": "93",
+            "zip": "789 01",
+            "city": "Nemile",
+            "district": "Nemile"
+        },
+        "ds_id": "7s3awzg"
+    },
+    "Nemochovice": {
+        "address": {
+            "street": "132",
+            "zip": "683 33",
+            "city": "Nemochovice",
+            "district": "Nemochovice"
+        },
+        "ds_id": "k56b5ub"
+    },
+    "Nemojany": {
+        "address": {
+            "street": "10",
+            "zip": "683 03",
+            "city": "Nemojany",
+            "district": "Nemojany"
+        },
+        "ds_id": "aigbciy"
+    },
+    "Nemotice": {
+        "address": {
+            "street": "66",
+            "zip": "683 33",
+            "city": "Nemotice",
+            "district": "Nemotice"
+        },
+        "ds_id": "zq7bch8"
+    },
+    "Nemy\u010deves": {
+        "address": {
+            "street": "78",
+            "zip": "506 01",
+            "city": "Nemy\u010deves",
+            "district": "Nemy\u010deves"
+        },
+        "ds_id": "38eapr5"
+    },
+    "Nemyslovice": {
+        "address": {
+            "street": "59",
+            "zip": "294 29",
+            "city": "Nemyslovice",
+            "district": "Nemyslovice"
+        },
+        "ds_id": "qeya53g"
+    },
+    "Nemy\u0161l": {
+        "address": {
+            "street": "10",
+            "zip": "391 43",
+            "city": "Nemy\u0161l",
+            "district": "Nemy\u0161l"
+        },
+        "ds_id": "ebcamya"
+    },
+    "Nena\u010dovice": {
+        "address": {
+            "street": "59",
+            "zip": "266 01",
+            "city": "Nena\u010dovice",
+            "district": "Nena\u010dovice"
+        },
+        "ds_id": "s3xa68r"
+    },
+    "Nenkovice": {
+        "address": {
+            "street": "37",
+            "zip": "696 37",
+            "city": "Nenkovice",
+            "district": "Nenkovice"
+        },
+        "ds_id": "2jja828"
+    },
+    "Neplachov": {
+        "address": {
+            "street": "47",
+            "zip": "373 65",
+            "city": "Neplachov",
+            "district": "Neplachov"
+        },
+        "ds_id": "qxwbchb"
+    },
+    "Neplachovice": {
+        "address": {
+            "street": "Na N\u00e1vsi 16",
+            "zip": "747 74",
+            "city": "Neplachovice",
+            "district": "Neplachovice"
+        },
+        "ds_id": "vrkbsav"
+    },
+    "Nepom\u011b\u0159ice": {
+        "address": {
+            "street": "48",
+            "zip": "285 11",
+            "city": "Nepom\u011b\u0159ice",
+            "district": "Nepom\u011b\u0159ice"
+        },
+        "ds_id": "2dma7tz"
+    },
+    "Neprobylice": {
+        "address": {
+            "street": "4",
+            "zip": "273 75",
+            "city": "Neprobylice",
+            "district": "Neprobylice"
+        },
+        "ds_id": "875aueu"
+    },
+    "Nep\u0159ev\u00e1zka": {
+        "address": {
+            "street": "49",
+            "zip": "293 01",
+            "city": "Nep\u0159ev\u00e1zka",
+            "district": "Nep\u0159ev\u00e1zka"
+        },
+        "ds_id": "aj2btnm"
+    },
+    "Neratov": {
+        "address": {
+            "street": "12",
+            "zip": "533 41",
+            "city": "Neratov",
+            "district": "Neratov"
+        },
+        "ds_id": "53sa3x8"
+    },
+    "Nerestce": {
+        "address": {
+            "street": "46",
+            "zip": "398 04",
+            "city": "Nerestce",
+            "district": "Doln\u00ed Nerestce"
+        },
+        "ds_id": "sjuedxy"
+    },
+    "Neslovice": {
+        "address": {
+            "street": "Hlavn\u00ed 14",
+            "zip": "664 91",
+            "city": "Neslovice",
+            "district": "Neslovice"
+        },
+        "ds_id": "rsaa82b"
+    },
+    "Nesovice": {
+        "address": {
+            "street": "305",
+            "zip": "683 33",
+            "city": "Nesovice",
+            "district": "Nesovice"
+        },
+        "ds_id": "7dcbcgm"
+    },
+    "Nespeky": {
+        "address": {
+            "street": "Bene\u0161ovsk\u00e1 12",
+            "zip": "257 22",
+            "city": "Nespeky",
+            "district": "Nespeky"
+        },
+        "ds_id": "zy3ajgq"
+    },
+    "Nestra\u0161ovice": {
+        "address": {
+            "street": "37",
+            "zip": "262 72",
+            "city": "Nestra\u0161ovice",
+            "district": "Nestra\u0161ovice"
+        },
+        "ds_id": "pb2bgn3"
+    },
+    "Nesuchyn\u011b": {
+        "address": {
+            "street": "21",
+            "zip": "270 07",
+            "city": "Nesuchyn\u011b",
+            "district": "Nesuchyn\u011b"
+        },
+        "ds_id": "d8tajy3"
+    },
+    "Nesva\u010dilka": {
+        "address": {
+            "street": "100",
+            "zip": "664 54",
+            "city": "Nesva\u010dilka",
+            "district": "Nesva\u010dilka"
+        },
+        "ds_id": "3yqat4g"
+    },
+    "Nesva\u010dily": {
+        "address": {
+            "street": "2",
+            "zip": "267 27",
+            "city": "Nesva\u010dily",
+            "district": "Nesva\u010dily"
+        },
+        "ds_id": "tjeaj7x"
+    },
+    "Net\u00edn": {
+        "address": {
+            "street": "11",
+            "zip": "594 44",
+            "city": "Net\u00edn",
+            "district": "Net\u00edn"
+        },
+        "ds_id": "t8cbm4q"
+    },
+    "Net\u0159ebice": {
+        "address": {
+            "street": "80",
+            "zip": "288 02",
+            "city": "Net\u0159ebice",
+            "district": "Net\u0159ebice"
+        },
+        "ds_id": "qnrapd2"
+    },
+    "Netunice": {
+        "address": {
+            "street": "69",
+            "zip": "332 04",
+            "city": "Netunice",
+            "district": "Netunice"
+        },
+        "ds_id": "w8ebh5m"
+    },
+    "Neubuz": {
+        "address": {
+            "street": "91",
+            "zip": "763 15",
+            "city": "Neubuz",
+            "district": "Neubuz"
+        },
+        "ds_id": "k8vbi6d"
+    },
+    "Neum\u011b\u0159": {
+        "address": {
+            "street": "26",
+            "zip": "345 62",
+            "city": "Neum\u011b\u0159",
+            "district": "Neum\u011b\u0159"
+        },
+        "ds_id": "xzwbhfx"
+    },
+    "Neum\u011b\u0159ice": {
+        "address": {
+            "street": "85",
+            "zip": "273 26",
+            "city": "Neum\u011b\u0159ice",
+            "district": "Neum\u011b\u0159ice"
+        },
+        "ds_id": "3afbgpa"
+    },
+    "Neum\u011btely": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 28",
+            "zip": "267 24",
+            "city": "Neum\u011btely",
+            "district": "Neum\u011btely"
+        },
+        "ds_id": "t3da7r8"
+    },
+    "Neurazy": {
+        "address": {
+            "street": "61",
+            "zip": "335 55",
+            "city": "Neurazy",
+            "district": "Neurazy"
+        },
+        "ds_id": "cfkbi6h"
+    },
+    "Nevcehle": {
+        "address": {
+            "street": "54",
+            "zip": "588 62",
+            "city": "Nevcehle",
+            "district": "Nevcehle"
+        },
+        "ds_id": "v2cawg4"
+    },
+    "Neveklovice": {
+        "address": {
+            "street": "19",
+            "zip": "294 13",
+            "city": "Neveklovice",
+            "district": "Neveklovice"
+        },
+        "ds_id": "si4anfs"
+    },
+    "Nev\u011bzice": {
+        "address": {
+            "street": "80",
+            "zip": "398 04",
+            "city": "Nev\u011bzice",
+            "district": "Nev\u011bzice"
+        },
+        "ds_id": "e5fbhih"
+    },
+    "Nevid": {
+        "address": {
+            "street": "14",
+            "zip": "337 01",
+            "city": "Nevid",
+            "district": "Nevid"
+        },
+        "ds_id": "jxzbuit"
+    },
+    "Nevojice": {
+        "address": {
+            "street": "33",
+            "zip": "685 01",
+            "city": "Nevojice",
+            "district": "Nevojice"
+        },
+        "ds_id": "umvbvbq"
+    },
+    "Nevolice": {
+        "address": {
+            "street": "36",
+            "zip": "344 01",
+            "city": "Nevolice",
+            "district": "Nevolice"
+        },
+        "ds_id": "feyavak"
+    },
+    "Nevratice": {
+        "address": {
+            "street": "93",
+            "zip": "508 01",
+            "city": "Nevratice",
+            "district": "Nevratice"
+        },
+        "ds_id": "bm7a9h9"
+    },
+    "Nev\u0159e\u0148": {
+        "address": {
+            "street": "73",
+            "zip": "330 11",
+            "city": "Nev\u0159e\u0148",
+            "district": "Nev\u0159e\u0148"
+        },
+        "ds_id": "2xmansf"
+    },
+    "Nezabudice": {
+        "address": {
+            "street": "68",
+            "zip": "270 23",
+            "city": "Nezabudice",
+            "district": "Nezabudice"
+        },
+        "ds_id": "4fwa74y"
+    },
+    "Nezabylice": {
+        "address": {
+            "street": "6",
+            "zip": "430 01",
+            "city": "Nezabylice",
+            "district": "Ho\u0159enec"
+        },
+        "ds_id": "nnzaq4c"
+    },
+    "Nezamyslice": {
+        "address": {
+            "street": "47",
+            "zip": "342 01",
+            "city": "Nezamyslice",
+            "district": "Nezamyslice"
+        },
+        "ds_id": "zi3bxy6"
+    },
+    "Nezbav\u011btice": {
+        "address": {
+            "street": "80",
+            "zip": "332 04",
+            "city": "Nezbav\u011btice",
+            "district": "Nezbav\u011btice"
+        },
+        "ds_id": "fq7asxh"
+    },
+    "Nezdenice": {
+        "address": {
+            "street": "72",
+            "zip": "687 32",
+            "city": "Nezdenice",
+            "district": "Nezdenice"
+        },
+        "ds_id": "yirbz8x"
+    },
+    "Nezdice": {
+        "address": {
+            "street": "46",
+            "zip": "334 01",
+            "city": "Nezdice",
+            "district": "Nezdice"
+        },
+        "ds_id": "h5bbz9j"
+    },
+    "Nezdice Na \u0160umav\u011b": {
+        "address": {
+            "street": "173",
+            "zip": "342 01",
+            "city": "Nezdice na \u0160umav\u011b",
+            "district": "Nezdice na \u0160umav\u011b"
+        },
+        "ds_id": "accbxzw"
+    },
+    "Nezd\u0159ev": {
+        "address": {
+            "street": "9",
+            "zip": "335 44",
+            "city": "Nezd\u0159ev",
+            "district": "Nezd\u0159ev"
+        },
+        "ds_id": "k3qbrhy"
+    },
+    "Nezv\u011bstice": {
+        "address": {
+            "street": "277",
+            "zip": "332 04",
+            "city": "Nezv\u011bstice",
+            "district": "Nezv\u011bstice"
+        },
+        "ds_id": "pfcbr83"
+    },
+    "Nicov": {
+        "address": {
+            "street": "33",
+            "zip": "384 73",
+            "city": "Nicov",
+            "district": "Nicov"
+        },
+        "ds_id": "m9dat8f"
+    },
+    "Niho\u0161ovice": {
+        "address": {
+            "street": "1",
+            "zip": "387 01",
+            "city": "Niho\u0161ovice",
+            "district": "Niho\u0161ovice"
+        },
+        "ds_id": "n4mamy6"
+    },
+    "N\u00edhov": {
+        "address": {
+            "street": "17",
+            "zip": "594 55",
+            "city": "N\u00edhov",
+            "district": "N\u00edhov"
+        },
+        "ds_id": "ezxbunn"
+    },
+    "Nikol\u010dice": {
+        "address": {
+            "street": "85",
+            "zip": "691 71",
+            "city": "Nikol\u010dice",
+            "district": "Nikol\u010dice"
+        },
+        "ds_id": "p9qbnr4"
+    },
+    "Nim\u011b\u0159ice": {
+        "address": {
+            "street": "27",
+            "zip": "294 30",
+            "city": "Nim\u011b\u0159ice",
+            "district": "Doln\u00ed Cetno"
+        },
+        "ds_id": "nz4ajyx"
+    },
+    "Nimp\u0161ov": {
+        "address": {
+            "street": "36",
+            "zip": "675 41",
+            "city": "Nimp\u0161ov",
+            "district": "Nimp\u0161ov"
+        },
+        "ds_id": "a4abf7j"
+    },
+    "Ni\u0161ovice": {
+        "address": {
+            "street": "18",
+            "zip": "387 01",
+            "city": "Ni\u0161ovice",
+            "district": "Ni\u0161ovice"
+        },
+        "ds_id": "253bwkq"
+    },
+    "N\u00edtkovice": {
+        "address": {
+            "street": "89",
+            "zip": "768 13",
+            "city": "N\u00edtkovice",
+            "district": "N\u00edtkovice"
+        },
+        "ds_id": "v86auw3"
+    },
+    "Niva": {
+        "address": {
+            "street": "61",
+            "zip": "798 61",
+            "city": "Niva",
+            "district": "Niva"
+        },
+        "ds_id": "5ffawac"
+    },
+    "Nivnice": {
+        "address": {
+            "street": "S\u00eddli\u0161t\u011b 1000",
+            "zip": "687 51",
+            "city": "Nivnice",
+            "district": "Nivnice"
+        },
+        "ds_id": "8k6bsjq"
+    },
+    "Ni\u017ebor": {
+        "address": {
+            "street": "K\u0159ivokl\u00e1tsk\u00e1 26",
+            "zip": "267 05",
+            "city": "Ni\u017ebor",
+            "district": "Ni\u017ebor"
+        },
+        "ds_id": "ppwbi4g"
+    },
+    "N\u00ed\u017ekov": {
+        "address": {
+            "street": "107",
+            "zip": "592 12",
+            "city": "N\u00ed\u017ekov",
+            "district": "N\u00ed\u017ekov"
+        },
+        "ds_id": "378bcfa"
+    },
+    "N\u00ed\u017ekovice": {
+        "address": {
+            "street": "39",
+            "zip": "684 01",
+            "city": "N\u00ed\u017ekovice",
+            "district": "N\u00ed\u017ekovice"
+        },
+        "ds_id": "texbcfe"
+    },
+    "Ni\u017en\u00ed Lhoty": {
+        "address": {
+            "street": "71",
+            "zip": "739 51",
+            "city": "Ni\u017en\u00ed Lhoty",
+            "district": "Ni\u017en\u00ed Lhoty"
+        },
+        "ds_id": "nztbiz5"
+    },
+    "Norber\u010dany": {
+        "address": {
+            "street": "58",
+            "zip": "793 05",
+            "city": "Norber\u010dany",
+            "district": "Norber\u010dany"
+        },
+        "ds_id": "crmb5hk"
+    },
+    "Nos\u00e1lov": {
+        "address": {
+            "street": "29",
+            "zip": "277 35",
+            "city": "Nos\u00e1lov",
+            "district": "Nos\u00e1lov"
+        },
+        "ds_id": "ufcaxui"
+    },
+    "No\u0161ovice": {
+        "address": {
+            "street": "58",
+            "zip": "739 51",
+            "city": "No\u0161ovice",
+            "district": "No\u0161ovice"
+        },
+        "ds_id": "h3rbi5y"
+    },
+    "Nov\u00e1 Bukov\u00e1": {
+        "address": {
+            "street": "48",
+            "zip": "393 01",
+            "city": "Nov\u00e1 Bukov\u00e1",
+            "district": "Nov\u00e1 Bukov\u00e1"
+        },
+        "ds_id": "rdcbv3b"
+    },
+    "Nov\u00e1 D\u011bdina": {
+        "address": {
+            "street": "12",
+            "zip": "768 21",
+            "city": "Nov\u00e1 D\u011bdina",
+            "district": "Nov\u00e1 D\u011bdina"
+        },
+        "ds_id": "9wqb245"
+    },
+    "Nov\u00e1 Hrade\u010dn\u00e1": {
+        "address": {
+            "street": "193",
+            "zip": "783 83",
+            "city": "Nov\u00e1 Hrade\u010dn\u00e1",
+            "district": "Nov\u00e1 Hrade\u010dn\u00e1"
+        },
+        "ds_id": "r6ubvdm"
+    },
+    "Nov\u00e1 Lhota": {
+        "address": {
+            "street": "355",
+            "zip": "696 74",
+            "city": "Nov\u00e1 Lhota",
+            "district": "Nov\u00e1 Lhota"
+        },
+        "ds_id": "imnbcfi"
+    },
+    "Nov\u00e1 Ole\u0161n\u00e1": {
+        "address": {
+            "street": "71",
+            "zip": "378 53",
+            "city": "Nov\u00e1 Ole\u0161n\u00e1",
+            "district": "Nov\u00e1 Ole\u0161n\u00e1"
+        },
+        "ds_id": "zs2aukk"
+    },
+    "Nov\u00e1 Pec": {
+        "address": {
+            "street": "43",
+            "zip": "384 62",
+            "city": "Nov\u00e1 Pec",
+            "district": "Nov\u00e9 Chalupy"
+        },
+        "ds_id": "ywcjdx9"
+    },
+    "Nov\u00e1 Pl\u00e1\u0148": {
+        "address": {
+            "street": "26",
+            "zip": "792 01",
+            "city": "Nov\u00e1 Pl\u00e1\u0148",
+            "district": "Nov\u00e1 Pl\u00e1\u0148"
+        },
+        "ds_id": "4iiaxr5"
+    },
+    "Nov\u00e1 S\u00eddla": {
+        "address": {
+            "street": "78",
+            "zip": "570 01",
+            "city": "Nov\u00e1 S\u00eddla",
+            "district": "Nov\u00e1 S\u00eddla"
+        },
+        "ds_id": "sbba456"
+    },
+    "Nov\u00e1 Telib": {
+        "address": {
+            "street": "9",
+            "zip": "294 06",
+            "city": "Nov\u00e1 Telib",
+            "district": "Nov\u00e1 Telib"
+        },
+        "ds_id": "ucwajh9"
+    },
+    "Nov\u00e1 Ves": {
+        "address": {
+            "street": "11",
+            "zip": "675 21",
+            "city": "Nov\u00e1 Ves",
+            "district": "Nov\u00e1 Ves"
+        },
+        "ds_id": "6vvbxhf"
+    },
+    "Nov\u00e1 Ves i": {
+        "address": {
+            "street": "V\u00e1clavsk\u00e9 n\u00e1m\u011bst\u00ed 22",
+            "zip": "280 02",
+            "city": "Nov\u00e1 Ves I",
+            "district": "Nov\u00e1 Ves I"
+        },
+        "ds_id": "visbtux"
+    },
+    "Nov\u00e1 Ves nad Lu\u017enic\u00ed": {
+        "address": {
+            "street": "109",
+            "zip": "378 09",
+            "city": "Nov\u00e1 Ves nad Lu\u017enic\u00ed",
+            "district": "Nov\u00e1 Ves nad Lu\u017enic\u00ed"
+        },
+        "ds_id": "rjabxai"
+    },
+    "Nov\u00e1 Ves nad Nisou": {
+        "address": {
+            "street": "281",
+            "zip": "468 27",
+            "city": "Nov\u00e1 Ves nad Nisou",
+            "district": "Nov\u00e1 Ves nad Nisou"
+        },
+        "ds_id": "jjhedsu"
+    },
+    "Nov\u00e1 Ves nad Popelkou": {
+        "address": {
+            "street": "244",
+            "zip": "512 71",
+            "city": "Nov\u00e1 Ves nad Popelkou",
+            "district": "Nov\u00e1 Ves nad Popelkou"
+        },
+        "ds_id": "28yan8n"
+    },
+    "Nov\u00e1 Ves pod Ple\u0161\u00ed": {
+        "address": {
+            "street": "Masarykova t\u0159\u00edda 90",
+            "zip": "262 04",
+            "city": "Nov\u00e1 Ves pod Ple\u0161\u00ed",
+            "district": "Nov\u00e1 Ves pod Ple\u0161\u00ed"
+        },
+        "ds_id": "8hubgzm"
+    },
+    "Nov\u00e1 Ves u Bakova": {
+        "address": {
+            "street": "85",
+            "zip": "294 01",
+            "city": "Nov\u00e1 Ves u Bakova",
+            "district": "Nov\u00e1 Ves u Bakova"
+        },
+        "ds_id": "m47amfq"
+    },
+    "Nov\u00e1 Ves u Chot\u011bbo\u0159e": {
+        "address": {
+            "street": "63",
+            "zip": "582 73",
+            "city": "Nov\u00e1 Ves u Chot\u011bbo\u0159e",
+            "district": "Nov\u00e1 Ves u Chot\u011bbo\u0159e"
+        },
+        "ds_id": "2kiatwu"
+    },
+    "Nov\u00e1 Ves u Ch\u00fdnova": {
+        "address": {
+            "street": "87",
+            "zip": "391 55",
+            "city": "Nov\u00e1 Ves u Ch\u00fdnova",
+            "district": "Nov\u00e1 Ves u Ch\u00fdnova"
+        },
+        "ds_id": "srfb8k3"
+    },
+    "Nov\u00e1 Ves u Jaro\u0161ova": {
+        "address": {
+            "street": "41",
+            "zip": "570 01",
+            "city": "Nov\u00e1 Ves u Jaro\u0161ova",
+            "district": "Nov\u00e1 Ves u Jaro\u0161ova"
+        },
+        "ds_id": "24ka452"
+    },
+    "Nov\u00e1 Ves u Le\u0161tiny": {
+        "address": {
+            "street": "33",
+            "zip": "582 82",
+            "city": "Nov\u00e1 Ves u Le\u0161tiny",
+            "district": "Nov\u00e1 Ves u Le\u0161tiny"
+        },
+        "ds_id": "hkgbhgk"
+    },
+    "Nov\u00e1 Ves u Mlad\u00e9 Vo\u017eice": {
+        "address": {
+            "street": "2",
+            "zip": "391 43",
+            "city": "Nov\u00e1 Ves u Mlad\u00e9 Vo\u017eice",
+            "district": "Nov\u00e1 Ves u Mlad\u00e9 Vo\u017eice"
+        },
+        "ds_id": "7vkayzp"
+    },
+    "Nov\u00e1 Ves u Nov\u00e9ho M\u011bsta Na Morav\u011b": {
+        "address": {
+            "street": "104",
+            "zip": "592 31",
+            "city": "Nov\u00e1 Ves u Nov\u00e9ho M\u011bsta na Morav\u011b",
+            "district": "Nov\u00e1 Ves u Nov\u00e9ho M\u011bsta na Morav\u011b"
+        },
+        "ds_id": "hqxaq87"
+    },
+    "Nov\u00e1 Ves u Sv\u011btl\u00e9": {
+        "address": {
+            "street": "5",
+            "zip": "582 91",
+            "city": "Nov\u00e1 Ves u Sv\u011btl\u00e9",
+            "district": "Nov\u00e1 Ves u Sv\u011btl\u00e9"
+        },
+        "ds_id": "3q2ayfv"
+    },
+    "Nov\u00e1 Ves v Hor\u00e1ch": {
+        "address": {
+            "street": "33",
+            "zip": "435 45",
+            "city": "Nov\u00e1 Ves v Hor\u00e1ch",
+            "district": "Nov\u00e1 Ves v Hor\u00e1ch"
+        },
+        "ds_id": "v5gbuqa"
+    },
+    "Nov\u00e9 Br\u00e1nice": {
+        "address": {
+            "street": "7",
+            "zip": "664 64",
+            "city": "Nov\u00e9 Br\u00e1nice",
+            "district": "Nov\u00e9 Br\u00e1nice"
+        },
+        "ds_id": "567a268"
+    },
+    "Nov\u00e9 Hamry": {
+        "address": {
+            "street": "333",
+            "zip": "362 21",
+            "city": "Nov\u00e9 Hamry",
+            "district": "Nov\u00e9 Hamry"
+        },
+        "ds_id": "8y2buz4"
+    },
+    "Nov\u00e9 He\u0159minovy": {
+        "address": {
+            "street": "122",
+            "zip": "792 01",
+            "city": "Nov\u00e9 He\u0159minovy",
+            "district": "Nov\u00e9 He\u0159minovy"
+        },
+        "ds_id": "hgdaycs"
+    },
+    "Nov\u00e9 Hut\u011b": {
+        "address": {
+            "street": "106",
+            "zip": "385 01",
+            "city": "Nov\u00e9 Hut\u011b",
+            "district": "Nov\u00e9 Hut\u011b"
+        },
+        "ds_id": "qswed47"
+    },
+    "Nov\u00e9 Lublice": {
+        "address": {
+            "street": "75",
+            "zip": "749 01",
+            "city": "Nov\u00e9 Lublice",
+            "district": "Nov\u00e9 Lublice"
+        },
+        "ds_id": "dbtaxsw"
+    },
+    "Nov\u00e9 Mitrovice": {
+        "address": {
+            "street": "136",
+            "zip": "335 63",
+            "city": "Nov\u00e9 Mitrovice",
+            "district": "Nov\u00e9 Mitrovice"
+        },
+        "ds_id": "phvbt8c"
+    },
+    "Nov\u00e9 Sady": {
+        "address": {
+            "street": "5",
+            "zip": "683 08",
+            "city": "Nov\u00e9 Sady",
+            "district": "Nov\u00e9 Sady"
+        },
+        "ds_id": "cv7a2w3"
+    },
+    "Nov\u00e9 Sedlice": {
+        "address": {
+            "street": "Zahumenn\u00ed 85",
+            "zip": "747 06",
+            "city": "Nov\u00e9 Sedlice",
+            "district": "Nov\u00e9 Sedlice"
+        },
+        "ds_id": "q3eazd8"
+    },
+    "Nov\u00e9 Syrovice": {
+        "address": {
+            "street": "2",
+            "zip": "675 41",
+            "city": "Nov\u00e9 Syrovice",
+            "district": "Nov\u00e9 Syrovice"
+        },
+        "ds_id": "fkqbi7w"
+    },
+    "Noviny pod Ralskem": {
+        "address": {
+            "street": "116",
+            "zip": "471 24",
+            "city": "Noviny pod Ralskem",
+            "district": "Noviny pod Ralskem"
+        },
+        "ds_id": "9i8apag"
+    },
+    "Novosedlice": {
+        "address": {
+            "street": "Trnovansk\u00e1 208",
+            "zip": "417 31",
+            "city": "Novosedlice",
+            "district": "Novosedlice"
+        },
+        "ds_id": "58ua7xq"
+    },
+    "Novosedly": {
+        "address": {
+            "street": "1",
+            "zip": "691 82",
+            "city": "Novosedly",
+            "district": "Novosedly"
+        },
+        "ds_id": "k4pbcdk"
+    },
+    "Novosedly nad Ne\u017e\u00e1rkou": {
+        "address": {
+            "street": "182",
+            "zip": "378 17",
+            "city": "Novosedly nad Ne\u017e\u00e1rkou",
+            "district": "Novosedly nad Ne\u017e\u00e1rkou"
+        },
+        "ds_id": "cbebcdq"
+    },
+    "Nov\u00fd D\u016fm": {
+        "address": {
+            "street": "4",
+            "zip": "269 01",
+            "city": "Nov\u00fd D\u016fm",
+            "district": "Nov\u00fd D\u016fm"
+        },
+        "ds_id": "x39b75d"
+    },
+    "Nov\u00fd Dv\u016fr": {
+        "address": {
+            "street": "25",
+            "zip": "289 32",
+            "city": "Nov\u00fd Dv\u016fr",
+            "district": "Nov\u00fd Dv\u016fr"
+        },
+        "ds_id": "jbxapuq"
+    },
+    "Nov\u00fd J\u00e1chymov": {
+        "address": {
+            "street": "Tyr\u0161ova 31",
+            "zip": "267 03",
+            "city": "Nov\u00fd J\u00e1chymov",
+            "district": "Nov\u00fd J\u00e1chymov"
+        },
+        "ds_id": "5r9bp78"
+    },
+    "Nov\u00fd Jimramov": {
+        "address": {
+            "street": "30",
+            "zip": "592 42",
+            "city": "Nov\u00fd Jimramov",
+            "district": "Nov\u00fd Jimramov"
+        },
+        "ds_id": "sizaysu"
+    },
+    "Nov\u00fd Kostel": {
+        "address": {
+            "street": "27",
+            "zip": "351 34",
+            "city": "Nov\u00fd Kostel",
+            "district": "Nov\u00fd Kostel"
+        },
+        "ds_id": "48qamhc"
+    },
+    "Nov\u00fd Kramol\u00edn": {
+        "address": {
+            "street": "13",
+            "zip": "344 01",
+            "city": "Nov\u00fd Kramol\u00edn",
+            "district": "Nov\u00fd Kramol\u00edn"
+        },
+        "ds_id": "m2dbigm"
+    },
+    "Nov\u00fd Mal\u00edn": {
+        "address": {
+            "street": "240",
+            "zip": "788 03",
+            "city": "Nov\u00fd Mal\u00edn",
+            "district": "Nov\u00fd Mal\u00edn"
+        },
+        "ds_id": "th6bycj"
+    },
+    "Nov\u00fd Old\u0159ichov": {
+        "address": {
+            "street": "51",
+            "zip": "471 13",
+            "city": "Nov\u00fd Old\u0159ichov",
+            "district": "Mistrovice"
+        },
+        "ds_id": "kgfaudp"
+    },
+    "Nov\u00fd Poddvorov": {
+        "address": {
+            "street": "25",
+            "zip": "696 16",
+            "city": "Nov\u00fd Poddvorov",
+            "district": "Nov\u00fd Poddvorov"
+        },
+        "ds_id": "pu6a2eu"
+    },
+    "Nov\u00fd P\u0159erov": {
+        "address": {
+            "street": "54",
+            "zip": "691 81",
+            "city": "Nov\u00fd P\u0159erov",
+            "district": "Nov\u00fd P\u0159erov"
+        },
+        "ds_id": "6ehb775"
+    },
+    "Nov\u00fd \u0160aldorf - Sedle\u0161ovice": {
+        "address": {
+            "street": "Hlavn\u00ed 169",
+            "zip": "671 81",
+            "city": "Nov\u00fd \u0160aldorf-Sedle\u0161ovice",
+            "district": "Nov\u00fd \u0160aldorf"
+        },
+        "ds_id": "w8bbugq"
+    },
+    "Nov\u00fd Tele\u010dkov": {
+        "address": {
+            "street": "12",
+            "zip": "675 05",
+            "city": "Nov\u00fd Tele\u010dkov",
+            "district": "Nov\u00fd Tele\u010dkov"
+        },
+        "ds_id": "rd8bta4"
+    },
+    "Nov\u00fd Vestec": {
+        "address": {
+            "street": "Ke Spo\u0159ilovu 5",
+            "zip": "250 75",
+            "city": "Nov\u00fd Vestec",
+            "district": "Nov\u00fd Vestec"
+        },
+        "ds_id": "3xgb792"
+    },
+    "Nu\u010dice": {
+        "address": {
+            "street": "2",
+            "zip": "281 63",
+            "city": "Nu\u010dice",
+            "district": "Nu\u010dice"
+        },
+        "ds_id": "4hdbzjk"
+    },
+    "Nupaky": {
+        "address": {
+            "street": "Nupack\u00e1 106",
+            "zip": "251 01",
+            "city": "Nupaky",
+            "district": "Nupaky"
+        },
+        "ds_id": "y36akxg"
+    },
+    "N\u00fddek": {
+        "address": {
+            "street": "251",
+            "zip": "739 95",
+            "city": "N\u00fddek",
+            "district": "N\u00fddek"
+        },
+        "ds_id": "pm3b2z5"
+    },
+    "Nyklovice": {
+        "address": {
+            "street": "42",
+            "zip": "592 65",
+            "city": "Nyklovice",
+            "district": "Nyklovice"
+        },
+        "ds_id": "329av4r"
+    },
+    "N\u00fdrov": {
+        "address": {
+            "street": "56",
+            "zip": "679 72",
+            "city": "N\u00fdrov",
+            "district": "N\u00fdrov"
+        },
+        "ds_id": "ae6a2yz"
+    },
+    "Ob\u010dov": {
+        "address": {
+            "street": "12",
+            "zip": "261 01",
+            "city": "Ob\u010dov",
+            "district": "Ob\u010dov"
+        },
+        "ds_id": "xa8ak4q"
+    },
+    "Obecnice": {
+        "address": {
+            "street": "159",
+            "zip": "262 21",
+            "city": "Obecnice",
+            "district": "Obecnice"
+        },
+        "ds_id": "d3ab3px"
+    },
+    "Ob\u011bdkovice": {
+        "address": {
+            "street": "79",
+            "zip": "798 23",
+            "city": "Ob\u011bdkovice",
+            "district": "Ob\u011bdkovice"
+        },
+        "ds_id": "xpvaw4x"
+    },
+    "Obora": {
+        "address": {
+            "street": "24",
+            "zip": "679 01",
+            "city": "Obora",
+            "district": "Obora"
+        },
+        "ds_id": "9q3a2ur"
+    },
+    "Oborn\u00e1": {
+        "address": {
+            "street": "80",
+            "zip": "792 01",
+            "city": "Oborn\u00e1",
+            "district": "Oborn\u00e1"
+        },
+        "ds_id": "k5dbwag"
+    },
+    "Obory": {
+        "address": {
+            "street": "68",
+            "zip": "263 01",
+            "city": "Obory",
+            "district": "Obory"
+        },
+        "ds_id": "qxqby7g"
+    },
+    "Obo\u0159i\u0161t\u011b": {
+        "address": {
+            "street": "100",
+            "zip": "262 12",
+            "city": "Obo\u0159i\u0161t\u011b",
+            "district": "Obo\u0159i\u0161t\u011b"
+        },
+        "ds_id": "pz5bgrd"
+    },
+    "Obrata\u0148": {
+        "address": {
+            "street": "204",
+            "zip": "394 12",
+            "city": "Obrata\u0148",
+            "district": "Obrata\u0148"
+        },
+        "ds_id": "yczbcbj"
+    },
+    "Obrnice": {
+        "address": {
+            "street": "M\u00edrov\u00e1 70",
+            "zip": "435 21",
+            "city": "Obrnice",
+            "district": "Obrnice"
+        },
+        "ds_id": "8ppbujx"
+    },
+    "Obrubce": {
+        "address": {
+            "street": "65",
+            "zip": "294 04",
+            "city": "Obrubce",
+            "district": "Obrubce"
+        },
+        "ds_id": "7vpannm"
+    },
+    "Obruby": {
+        "address": {
+            "street": "15",
+            "zip": "294 03",
+            "city": "Obruby",
+            "district": "Obruby"
+        },
+        "ds_id": "ixva94g"
+    },
+    "Ob\u0159\u00edstv\u00ed": {
+        "address": {
+            "street": "Svatopluka \u010cecha 40",
+            "zip": "277 42",
+            "city": "Ob\u0159\u00edstv\u00ed",
+            "district": "Ob\u0159\u00edstv\u00ed"
+        },
+        "ds_id": "auhbwvz"
+    },
+    "Oby\u010dtov": {
+        "address": {
+            "street": "80",
+            "zip": "591 01",
+            "city": "Oby\u010dtov",
+            "district": "Oby\u010dtov"
+        },
+        "ds_id": "x66ayrc"
+    },
+    "Obytce": {
+        "address": {
+            "street": "19",
+            "zip": "339 01",
+            "city": "Obytce",
+            "district": "Obytce"
+        },
+        "ds_id": "wk2axch"
+    },
+    "Ocmanice": {
+        "address": {
+            "street": "47",
+            "zip": "675 71",
+            "city": "Ocmanice",
+            "district": "Ocmanice"
+        },
+        "ds_id": "pagazig"
+    },
+    "O\u010dihov": {
+        "address": {
+            "street": "7",
+            "zip": "439 87",
+            "city": "O\u010dihov",
+            "district": "O\u010dihov"
+        },
+        "ds_id": "n9ebqzu"
+    },
+    "Odrava": {
+        "address": {
+            "street": "22",
+            "zip": "350 02",
+            "city": "Odrava",
+            "district": "Odrava"
+        },
+        "ds_id": "942asx3"
+    },
+    "Odrovice": {
+        "address": {
+            "street": "42",
+            "zip": "664 64",
+            "city": "Odrovice",
+            "district": "Odrovice"
+        },
+        "ds_id": "stjarn7"
+    },
+    "Od\u0159epsy": {
+        "address": {
+            "street": "72",
+            "zip": "289 07",
+            "city": "Od\u0159epsy",
+            "district": "Od\u0159epsy"
+        },
+        "ds_id": "qgtam6t"
+    },
+    "Odunec": {
+        "address": {
+            "street": "6",
+            "zip": "675 55",
+            "city": "Odunec",
+            "district": "Odunec"
+        },
+        "ds_id": "7d2bwdj"
+    },
+    "Oha\u0159e": {
+        "address": {
+            "street": "45",
+            "zip": "281 30",
+            "city": "Oha\u0159e",
+            "district": "Oha\u0159e"
+        },
+        "ds_id": "kbybkm6"
+    },
+    "Oha\u0159ice": {
+        "address": {
+            "street": "41",
+            "zip": "506 01",
+            "city": "Oha\u0159ice",
+            "district": "Oha\u0159ice"
+        },
+        "ds_id": "jdha6yb"
+    },
+    "Ohn\u00ed\u010d": {
+        "address": {
+            "street": "30",
+            "zip": "417 65",
+            "city": "Ohn\u00ed\u010d",
+            "district": "Ohn\u00ed\u010d"
+        },
+        "ds_id": "hn7awsr"
+    },
+    "Ohrazenice": {
+        "address": {
+            "street": "81",
+            "zip": "511 01",
+            "city": "Ohrazenice",
+            "district": "Ohrazenice"
+        },
+        "ds_id": "h6abk57"
+    },
+    "Ohrobec": {
+        "address": {
+            "street": "U Rybn\u00edk\u016f II 30",
+            "zip": "252 45",
+            "city": "Ohrobec",
+            "district": "Ohrobec"
+        },
+        "ds_id": "vwnbwac"
+    },
+    "Ohrozim": {
+        "address": {
+            "street": "31",
+            "zip": "798 03",
+            "city": "Ohrozim",
+            "district": "Ohrozim"
+        },
+        "ds_id": "qdzbi7s"
+    },
+    "Ochoz": {
+        "address": {
+            "street": "75",
+            "zip": "798 52",
+            "city": "Ochoz",
+            "district": "Ochoz"
+        },
+        "ds_id": "ad4bsfe"
+    },
+    "Ochoz u Brna": {
+        "address": {
+            "street": "N\u00e1ves 17",
+            "zip": "664 02",
+            "city": "Ochoz u Brna",
+            "district": "Ochoz u Brna"
+        },
+        "ds_id": "jvdb4vk"
+    },
+    "Ochoz u Ti\u0161nova": {
+        "address": {
+            "street": "39",
+            "zip": "679 23",
+            "city": "Ochoz u Ti\u0161nova",
+            "district": "Ochoz u Ti\u0161nova"
+        },
+        "ds_id": "bwgbzer"
+    },
+    "Okarec": {
+        "address": {
+            "street": "35",
+            "zip": "675 02",
+            "city": "Okarec",
+            "district": "Okarec"
+        },
+        "ds_id": "aakb5jh"
+    },
+    "Okna": {
+        "address": {
+            "street": "40",
+            "zip": "471 62",
+            "city": "Okna",
+            "district": "Okna"
+        },
+        "ds_id": "mdcasww"
+    },
+    "Okounov": {
+        "address": {
+            "street": "64",
+            "zip": "431 51",
+            "city": "Okounov",
+            "district": "Okounov"
+        },
+        "ds_id": "sgda85n"
+    },
+    "Okrouhl\u00e1": {
+        "address": {
+            "street": "123",
+            "zip": "680 01",
+            "city": "Okrouhl\u00e1",
+            "district": "Okrouhl\u00e1"
+        },
+        "ds_id": "r47bqk5"
+    },
+    "Okrouhl\u00e1 Radou\u0148": {
+        "address": {
+            "street": "82",
+            "zip": "378 42",
+            "city": "Okrouhl\u00e1 Radou\u0148",
+            "district": "Okrouhl\u00e1 Radou\u0148"
+        },
+        "ds_id": "nz2j2v6"
+    },
+    "Okrouhlice": {
+        "address": {
+            "street": "186",
+            "zip": "582 31",
+            "city": "Okrouhlice",
+            "district": "Okrouhlice"
+        },
+        "ds_id": "cvzbpk7"
+    },
+    "Okrouhli\u010dka": {
+        "address": {
+            "street": "48",
+            "zip": "582 53",
+            "city": "Okrouhli\u010dka",
+            "district": "Okrouhli\u010dka"
+        },
+        "ds_id": "wqfawjf"
+    },
+    "Ok\u0159esane\u010d": {
+        "address": {
+            "street": "8",
+            "zip": "286 01",
+            "city": "Ok\u0159esane\u010d",
+            "district": "Ok\u0159esane\u010d"
+        },
+        "ds_id": "u9cb5ru"
+    },
+    "Ok\u0159e\u0161ice": {
+        "address": {
+            "street": "33",
+            "zip": "674 01",
+            "city": "Ok\u0159e\u0161ice",
+            "district": "Ok\u0159e\u0161ice"
+        },
+        "ds_id": "9xyanxj"
+    },
+    "Ok\u0159\u00ednek": {
+        "address": {
+            "street": "63",
+            "zip": "290 01",
+            "city": "Ok\u0159\u00ednek",
+            "district": "Ok\u0159\u00ednek"
+        },
+        "ds_id": "5qvakdg"
+    },
+    "Olbramice": {
+        "address": {
+            "street": "Prostorn\u00e1 132",
+            "zip": "742 83",
+            "city": "Olbramice",
+            "district": "Olbramice"
+        },
+        "ds_id": "gumbnxt"
+    },
+    "Olbramov": {
+        "address": {
+            "street": "5",
+            "zip": "349 01",
+            "city": "Olbramov",
+            "district": "Olbramov"
+        },
+        "ds_id": "su5a8st"
+    },
+    "Old\u0159ichov": {
+        "address": {
+            "street": "31",
+            "zip": "391 43",
+            "city": "Old\u0159ichov",
+            "district": "Old\u0159ichov"
+        },
+        "ds_id": "hggamzp"
+    },
+    "Old\u0159ichovice": {
+        "address": {
+            "street": "86",
+            "zip": "763 61",
+            "city": "Old\u0159ichovice",
+            "district": "Old\u0159ichovice"
+        },
+        "ds_id": "jupbiyq"
+    },
+    "Old\u0159ichov v H\u00e1j\u00edch": {
+        "address": {
+            "street": "151",
+            "zip": "463 31",
+            "city": "Old\u0159ichov v H\u00e1j\u00edch",
+            "district": "Old\u0159ichov v H\u00e1j\u00edch"
+        },
+        "ds_id": "6tfbi63"
+    },
+    "Old\u0159i\u0161": {
+        "address": {
+            "street": "132",
+            "zip": "569 82",
+            "city": "Old\u0159i\u0161",
+            "district": "Old\u0159i\u0161"
+        },
+        "ds_id": "kn6a46r"
+    },
+    "Old\u0159i\u0161ov": {
+        "address": {
+            "street": "K Z\u00e1mku 246",
+            "zip": "747 33",
+            "city": "Old\u0159i\u0161ov",
+            "district": "Old\u0159i\u0161ov"
+        },
+        "ds_id": "tifazbb"
+    },
+    "Ole\u0161enka": {
+        "address": {
+            "street": "42",
+            "zip": "582 22",
+            "city": "Ole\u0161enka",
+            "district": "Ole\u0161enka"
+        },
+        "ds_id": "e76awun"
+    },
+    "Ole\u0161ka": {
+        "address": {
+            "street": "1",
+            "zip": "281 62",
+            "city": "Ole\u0161ka",
+            "district": "Ole\u0161ka"
+        },
+        "ds_id": "mizbs6d"
+    },
+    "Ole\u0161ko": {
+        "address": {
+            "street": "5",
+            "zip": "412 01",
+            "city": "Ole\u0161ko",
+            "district": "Ole\u0161ko"
+        },
+        "ds_id": "sn7a7jn"
+    },
+    "Ole\u0161n\u00e1": {
+        "address": {
+            "street": "8",
+            "zip": "269 01",
+            "city": "Ole\u0161n\u00e1",
+            "district": "Ole\u0161n\u00e1"
+        },
+        "ds_id": "hdxajzg"
+    },
+    "Ole\u0161nice v Orlick\u00fdch Hor\u00e1ch": {
+        "address": {
+            "street": "8",
+            "zip": "517 83",
+            "city": "Ole\u0161nice v Orlick\u00fdch hor\u00e1ch",
+            "district": "Ole\u0161nice v Orlick\u00fdch hor\u00e1ch"
+        },
+        "ds_id": "xyfapy9"
+    },
+    "Ole\u0161n\u00edk": {
+        "address": {
+            "street": "15",
+            "zip": "373 50",
+            "city": "Ole\u0161n\u00edk",
+            "district": "Ole\u0161n\u00edk"
+        },
+        "ds_id": "r9ramzj"
+    },
+    "Olomu\u010dany": {
+        "address": {
+            "street": "123",
+            "zip": "679 03",
+            "city": "Olomu\u010dany",
+            "district": "Olomu\u010dany"
+        },
+        "ds_id": "w6ua2z4"
+    },
+    "Olovnice": {
+        "address": {
+            "street": "U Rybn\u00edka 45",
+            "zip": "273 26",
+            "city": "Olovnice",
+            "district": "Olovnice"
+        },
+        "ds_id": "dt3akbx"
+    },
+    "Ol\u0161any": {
+        "address": {
+            "street": "15",
+            "zip": "341 01",
+            "city": "Ol\u0161any",
+            "district": "Ol\u0161any"
+        },
+        "ds_id": "97jauxa"
+    },
+    "Ol\u0161any u Prost\u011bjova": {
+        "address": {
+            "street": "50",
+            "zip": "798 14",
+            "city": "Ol\u0161any u Prost\u011bjova",
+            "district": "Ol\u0161any u Prost\u011bjova"
+        },
+        "ds_id": "kipbve6"
+    },
+    "Ol\u0161\u00ed": {
+        "address": {
+            "street": "1",
+            "zip": "588 56",
+            "city": "Ol\u0161\u00ed",
+            "district": "Ol\u0161\u00ed"
+        },
+        "ds_id": "xzza64w"
+    },
+    "Ol\u0161ovec": {
+        "address": {
+            "street": "80",
+            "zip": "753 01",
+            "city": "Ol\u0161ovec",
+            "district": "Ol\u0161ovec"
+        },
+        "ds_id": "rz3ascx"
+    },
+    "Ol\u0161ovice": {
+        "address": {
+            "street": "34",
+            "zip": "384 11",
+            "city": "Ol\u0161ovice",
+            "district": "Ol\u0161ovice"
+        },
+        "ds_id": "wawapch"
+    },
+    "Omice": {
+        "address": {
+            "street": "Tet\u010dick\u00e1 51",
+            "zip": "664 41",
+            "city": "Omice",
+            "district": "Omice"
+        },
+        "ds_id": "a3ebiyu"
+    },
+    "Omlenice": {
+        "address": {
+            "street": "44",
+            "zip": "382 41",
+            "city": "Omlenice",
+            "district": "Omleni\u010dka"
+        },
+        "ds_id": "i7nate2"
+    },
+    "Ondratice": {
+        "address": {
+            "street": "31",
+            "zip": "798 07",
+            "city": "Ondratice",
+            "district": "Ondratice"
+        },
+        "ds_id": "7v7bu9n"
+    },
+    "Ond\u0159ejov": {
+        "address": {
+            "street": "Choceradsk\u00e1 62",
+            "zip": "251 65",
+            "city": "Ond\u0159ejov",
+            "district": "Ond\u0159ejov"
+        },
+        "ds_id": "74wb52n"
+    },
+    "Onomy\u0161l": {
+        "address": {
+            "street": "52",
+            "zip": "285 04",
+            "city": "Onomy\u0161l",
+            "district": "Onomy\u0161l"
+        },
+        "ds_id": "372by5f"
+    },
+    "On\u0161ov": {
+        "address": {
+            "street": "1",
+            "zip": "671 02",
+            "city": "On\u0161ov",
+            "district": "On\u0161ov"
+        },
+        "ds_id": "gnvay2i"
+    },
+    "Opa\u0159any": {
+        "address": {
+            "street": "30",
+            "zip": "391 61",
+            "city": "Opa\u0159any",
+            "district": "Opa\u0159any"
+        },
+        "ds_id": "fhzb5vu"
+    },
+    "Opatovec": {
+        "address": {
+            "street": "40",
+            "zip": "568 02",
+            "city": "Opatovec",
+            "district": "Opatovec"
+        },
+        "ds_id": "dq6btp2"
+    },
+    "Opatovice": {
+        "address": {
+            "street": "Hlavn\u00ed 170",
+            "zip": "753 56",
+            "city": "Opatovice",
+            "district": "Opatovice"
+        },
+        "ds_id": "u7vbca6"
+    },
+    "Opatovice i": {
+        "address": {
+            "street": "35",
+            "zip": "286 01",
+            "city": "Opatovice I",
+            "district": "Opatovice I"
+        },
+        "ds_id": "imgby5p"
+    },
+    "Opatovice nad Labem": {
+        "address": {
+            "street": "Pardubick\u00e1 160",
+            "zip": "533 45",
+            "city": "Opatovice nad Labem",
+            "district": "Opatovice nad Labem"
+        },
+        "ds_id": "kvsbqar"
+    },
+    "Oplany": {
+        "address": {
+            "street": "79",
+            "zip": "281 63",
+            "city": "Oplany",
+            "district": "Oplany"
+        },
+        "ds_id": "5e9biyh"
+    },
+    "Oplocany": {
+        "address": {
+            "street": "100",
+            "zip": "751 01",
+            "city": "Oplocany",
+            "district": "Oplocany"
+        },
+        "ds_id": "ut4axhq"
+    },
+    "Oplot": {
+        "address": {
+            "street": "69",
+            "zip": "334 01",
+            "city": "Oplot",
+            "district": "Oplot"
+        },
+        "ds_id": "c84bigt"
+    },
+    "Opo\u010dnice": {
+        "address": {
+            "street": "80",
+            "zip": "289 04",
+            "city": "Opo\u010dnice",
+            "district": "Opo\u010dnice"
+        },
+        "ds_id": "tpkasyq"
+    },
+    "Opolany": {
+        "address": {
+            "street": "68",
+            "zip": "289 07",
+            "city": "Opolany",
+            "district": "Opolany"
+        },
+        "ds_id": "umybiym"
+    },
+    "Opone\u0161ice": {
+        "address": {
+            "street": "27",
+            "zip": "675 32",
+            "city": "Opone\u0161ice",
+            "district": "Opone\u0161ice"
+        },
+        "ds_id": "5t4a8ak"
+    },
+    "Oprostovice": {
+        "address": {
+            "street": "36",
+            "zip": "753 54",
+            "city": "Oprostovice",
+            "district": "Oprostovice"
+        },
+        "ds_id": "2tcascr"
+    },
+    "Or\u00e1\u010dov": {
+        "address": {
+            "street": "143",
+            "zip": "270 32",
+            "city": "Or\u00e1\u010dov",
+            "district": "Or\u00e1\u010dov"
+        },
+        "ds_id": "r68ajzc"
+    },
+    "Orel": {
+        "address": {
+            "street": "38",
+            "zip": "538 21",
+            "city": "Orel",
+            "district": "Orel"
+        },
+        "ds_id": "4w7a9rd"
+    },
+    "Orlick\u00e9 Podh\u016f\u0159\u00ed": {
+        "address": {
+            "street": "4",
+            "zip": "562 01",
+            "city": "Orlick\u00e9 Podh\u016f\u0159\u00ed",
+            "district": "Dobr\u00e1 Voda"
+        },
+        "ds_id": "59qa46f"
+    },
+    "Orli\u010dky": {
+        "address": {
+            "street": "176",
+            "zip": "561 55",
+            "city": "Orli\u010dky",
+            "district": "Orli\u010dky"
+        },
+        "ds_id": "e2za479"
+    },
+    "Orl\u00edk nad Vltavou": {
+        "address": {
+            "street": "28",
+            "zip": "398 07",
+            "city": "Orl\u00edk nad Vltavou",
+            "district": "Star\u00e9 Sedlo"
+        },
+        "ds_id": "2t2bb9m"
+    },
+    "Orlovice": {
+        "address": {
+            "street": "112",
+            "zip": "682 01",
+            "city": "Orlovice",
+            "district": "Orlovice"
+        },
+        "ds_id": "eyga27y"
+    },
+    "O\u0159ech": {
+        "address": {
+            "street": "Baarovo n\u00e1m\u011bst\u00ed 20",
+            "zip": "252 25",
+            "city": "O\u0159ech",
+            "district": "O\u0159ech"
+        },
+        "ds_id": "hbwbqk9"
+    },
+    "O\u0159echov": {
+        "address": {
+            "street": "Zahradn\u00ed 216",
+            "zip": "664 44",
+            "city": "O\u0159echov",
+            "district": "O\u0159echov"
+        },
+        "ds_id": "bmbbcae"
+    },
+    "Ose\u010dany": {
+        "address": {
+            "street": "21",
+            "zip": "264 01",
+            "city": "Ose\u010dany",
+            "district": "Ose\u010dany"
+        },
+        "ds_id": "r6cansj"
+    },
+    "Ose\u010dek": {
+        "address": {
+            "street": "37",
+            "zip": "289 41",
+            "city": "Ose\u010dek",
+            "district": "Ose\u010dek"
+        },
+        "ds_id": "ystakha"
+    },
+    "Osek nad Be\u010dvou": {
+        "address": {
+            "street": "65",
+            "zip": "751 22",
+            "city": "Osek nad Be\u010dvou",
+            "district": "Osek nad Be\u010dvou"
+        },
+        "ds_id": "g9gbb9v"
+    },
+    "Oselce": {
+        "address": {
+            "street": "2",
+            "zip": "335 46",
+            "city": "Oselce",
+            "district": "Oselce"
+        },
+        "ds_id": "u6bau6j"
+    },
+    "Os\u00ed\u010dko": {
+        "address": {
+            "street": "56",
+            "zip": "768 61",
+            "city": "Os\u00ed\u010dko",
+            "district": "Os\u00ed\u010dko"
+        },
+        "ds_id": "bgfajkt"
+    },
+    "Os\u00edk": {
+        "address": {
+            "street": "240",
+            "zip": "569 67",
+            "city": "Os\u00edk",
+            "district": "Os\u00edk"
+        },
+        "ds_id": "q28bm3d"
+    },
+    "Osiky": {
+        "address": {
+            "street": "23",
+            "zip": "679 23",
+            "city": "Osiky",
+            "district": "Osiky"
+        },
+        "ds_id": "c29a6wj"
+    },
+    "Oskava": {
+        "address": {
+            "street": "112",
+            "zip": "788 01",
+            "city": "Oskava",
+            "district": "Oskava"
+        },
+        "ds_id": "8f7bb85"
+    },
+    "Osko\u0159\u00ednek": {
+        "address": {
+            "street": "Ve Dvo\u0159e 3",
+            "zip": "289 32",
+            "city": "Osko\u0159\u00ednek",
+            "district": "Osko\u0159\u00ednek"
+        },
+        "ds_id": "dnib32t"
+    },
+    "Oslavice": {
+        "address": {
+            "street": "1",
+            "zip": "594 01",
+            "city": "Oslavice",
+            "district": "Oslavice"
+        },
+        "ds_id": "cggbgd8"
+    },
+    "Oslavi\u010dka": {
+        "address": {
+            "street": "39",
+            "zip": "675 05",
+            "city": "Oslavi\u010dka",
+            "district": "Oslavi\u010dka"
+        },
+        "ds_id": "hs4b4kq"
+    },
+    "Oslnovice": {
+        "address": {
+            "street": "18",
+            "zip": "671 07",
+            "city": "Oslnovice",
+            "district": "Oslnovice"
+        },
+        "ds_id": "prra27v"
+    },
+    "Oslov": {
+        "address": {
+            "street": "86",
+            "zip": "398 35",
+            "city": "Oslov",
+            "district": "Oslov"
+        },
+        "ds_id": "k9jb439"
+    },
+    "Osoblaha": {
+        "address": {
+            "street": "Na N\u00e1m\u011bst\u00ed 106",
+            "zip": "793 99",
+            "city": "Osoblaha",
+            "district": "Osoblaha"
+        },
+        "ds_id": "xnwbb89"
+    },
+    "Osov": {
+        "address": {
+            "street": "108",
+            "zip": "267 25",
+            "city": "Osov",
+            "district": "Osov"
+        },
+        "ds_id": "cxua7pk"
+    },
+    "Osov\u00e1 B\u00edt\u00fd\u0161ka": {
+        "address": {
+            "street": "3",
+            "zip": "594 53",
+            "city": "Osov\u00e1 B\u00edt\u00fd\u0161ka",
+            "district": "Osov\u00e1 B\u00edt\u00fd\u0161ka"
+        },
+        "ds_id": "nvmbb8c"
+    },
+    "Osov\u00e9": {
+        "address": {
+            "street": "14",
+            "zip": "594 01",
+            "city": "Osov\u00e9",
+            "district": "Osov\u00e9"
+        },
+        "ds_id": "yhaa8ra"
+    },
+    "Osta\u0161ov": {
+        "address": {
+            "street": "7",
+            "zip": "675 52",
+            "city": "Osta\u0161ov",
+            "district": "Osta\u0161ov"
+        },
+        "ds_id": "sspaufg"
+    },
+    "Ostopovice": {
+        "address": {
+            "street": "U Kaple 260",
+            "zip": "664 49",
+            "city": "Ostopovice",
+            "district": "Ostopovice"
+        },
+        "ds_id": "5kkapxr"
+    },
+    "Ostr\u00e1": {
+        "address": {
+            "street": "172",
+            "zip": "289 22",
+            "city": "Ostr\u00e1",
+            "district": "Ostr\u00e1"
+        },
+        "ds_id": "yzfa7md"
+    },
+    "Ostrata": {
+        "address": {
+            "street": "23",
+            "zip": "763 11",
+            "city": "Ostrata",
+            "district": "Ostrata"
+        },
+        "ds_id": "d4cbb8g"
+    },
+    "Ostravice": {
+        "address": {
+            "street": "577",
+            "zip": "739 14",
+            "city": "Ostravice",
+            "district": "Ostravice"
+        },
+        "ds_id": "5a3bb7q"
+    },
+    "Ostrolovsk\u00fd \u00dajezd": {
+        "address": {
+            "street": "16",
+            "zip": "374 01",
+            "city": "Ostrolovsk\u00fd \u00dajezd",
+            "district": "Ostrolovsk\u00fd \u00dajezd"
+        },
+        "ds_id": "rgzed7i"
+    },
+    "Ostrom\u011b\u0159": {
+        "address": {
+            "street": "T. G. Masaryka 103",
+            "zip": "507 52",
+            "city": "Ostrom\u011b\u0159",
+            "district": "Ostrom\u011b\u0159"
+        },
+        "ds_id": "aw8bb75"
+    },
+    "Ostrov\u00e1nky": {
+        "address": {
+            "street": "1",
+            "zip": "696 31",
+            "city": "Ostrov\u00e1nky",
+            "district": "Ostrov\u00e1nky"
+        },
+        "ds_id": "bcua832"
+    },
+    "Ostrovec": {
+        "address": {
+            "street": "100",
+            "zip": "398 33",
+            "city": "Ostrovec",
+            "district": "Doln\u00ed Ostrovec"
+        },
+        "ds_id": "kisbi33"
+    },
+    "Ostrovec-Lhotka": {
+        "address": {
+            "street": "64",
+            "zip": "338 08",
+            "city": "Ostrovec-Lhotka",
+            "district": "Lhotka"
+        },
+        "ds_id": "te5aprb"
+    },
+    "Ostrov u Bezdru\u017eic": {
+        "address": {
+            "street": "5",
+            "zip": "330 38",
+            "city": "Ostrov u Bezdru\u017eic",
+            "district": "Ostrov u Bezdru\u017eic"
+        },
+        "ds_id": "fkwawht"
+    },
+    "Ostro\u017esk\u00e1 Lhota": {
+        "address": {
+            "street": "148",
+            "zip": "687 23",
+            "city": "Ostro\u017esk\u00e1 Lhota",
+            "district": "Ostro\u017esk\u00e1 Lhota"
+        },
+        "ds_id": "uhsbb7u"
+    },
+    "Ostro\u017esk\u00e1 Nov\u00e1 Ves": {
+        "address": {
+            "street": "Z\u00e1humen\u00ed 1022",
+            "zip": "687 22",
+            "city": "Ostro\u017esk\u00e1 Nov\u00e1 Ves",
+            "district": "Ostro\u017esk\u00e1 Nov\u00e1 Ves"
+        },
+        "ds_id": "jqhbb7y"
+    },
+    "Ostru\u017en\u00e1": {
+        "address": {
+            "street": "135",
+            "zip": "788 25",
+            "city": "Ostru\u017en\u00e1",
+            "district": "Ostru\u017en\u00e1"
+        },
+        "ds_id": "nseaqb9"
+    },
+    "Ostru\u017eno": {
+        "address": {
+            "street": "5",
+            "zip": "506 01",
+            "city": "Ostru\u017eno",
+            "district": "Ostru\u017eno"
+        },
+        "ds_id": "pkka9ig"
+    },
+    "Ost\u0159edek": {
+        "address": {
+            "street": "60",
+            "zip": "257 24",
+            "city": "Ost\u0159edek",
+            "district": "Ost\u0159edek"
+        },
+        "ds_id": "rs3bgk5"
+    },
+    "Ost\u0159e\u0161any": {
+        "address": {
+            "street": "202",
+            "zip": "530 02",
+            "city": "Ost\u0159e\u0161any",
+            "district": "Ost\u0159e\u0161any"
+        },
+        "ds_id": "ymja47y"
+    },
+    "Ost\u0159etice": {
+        "address": {
+            "street": "27",
+            "zip": "339 01",
+            "city": "Ost\u0159etice",
+            "district": "Ost\u0159etice"
+        },
+        "ds_id": "fgqapq2"
+    },
+    "Ost\u0159et\u00edn": {
+        "address": {
+            "street": "92",
+            "zip": "534 01",
+            "city": "Ost\u0159et\u00edn",
+            "district": "Ost\u0159et\u00edn"
+        },
+        "ds_id": "f7ha9q8"
+    },
+    "Osvra\u010d\u00edn": {
+        "address": {
+            "street": "1",
+            "zip": "345 61",
+            "city": "Osvra\u010d\u00edn",
+            "district": "Osvra\u010d\u00edn"
+        },
+        "ds_id": "brhbi37"
+    },
+    "O\u0161el\u00edn": {
+        "address": {
+            "street": "36",
+            "zip": "349 01",
+            "city": "O\u0161el\u00edn",
+            "district": "O\u0161el\u00edn"
+        },
+        "ds_id": "d45bjsb"
+    },
+    "Otaslavice": {
+        "address": {
+            "street": "343",
+            "zip": "798 06",
+            "city": "Otaslavice",
+            "district": "Otaslavice"
+        },
+        "ds_id": "rcnbb6f"
+    },
+    "Ot\u011b\u0161ice": {
+        "address": {
+            "street": "11",
+            "zip": "334 01",
+            "city": "Ot\u011b\u0161ice",
+            "district": "Ot\u011b\u0161ice"
+        },
+        "ds_id": "gsybh6b"
+    },
+    "Otice": {
+        "address": {
+            "street": "Hlavn\u00ed 1",
+            "zip": "747 81",
+            "city": "Otice",
+            "district": "Otice"
+        },
+        "ds_id": "e55b3ff"
+    },
+    "Ot\u00edn": {
+        "address": {
+            "street": "38",
+            "zip": "594 01",
+            "city": "Ot\u00edn",
+            "district": "Ot\u00edn"
+        },
+        "ds_id": "wkrbwdp"
+    },
+    "Otinoves": {
+        "address": {
+            "street": "177",
+            "zip": "798 61",
+            "city": "Otinoves",
+            "district": "Otinoves"
+        },
+        "ds_id": "vb6a8qx"
+    },
+    "Otmarov": {
+        "address": {
+            "street": "56",
+            "zip": "664 57",
+            "city": "Otmarov",
+            "district": "Otmarov"
+        },
+        "ds_id": "yi2a27r"
+    },
+    "Otm\u00ed\u010de": {
+        "address": {
+            "street": "16",
+            "zip": "267 51",
+            "city": "Otm\u00ed\u010de",
+            "district": "Otm\u00ed\u010de"
+        },
+        "ds_id": "sg6bgpg"
+    },
+    "Otnice": {
+        "address": {
+            "street": "D\u011bdina 479",
+            "zip": "683 54",
+            "city": "Otnice",
+            "district": "Otnice"
+        },
+        "ds_id": "gjdbb6j"
+    },
+    "Otov": {
+        "address": {
+            "street": "41",
+            "zip": "345 22",
+            "city": "Otov",
+            "district": "Otov"
+        },
+        "ds_id": "rj9bh68"
+    },
+    "Otovice": {
+        "address": {
+            "street": "Hrozn\u011bt\u00ednsk\u00e1 130",
+            "zip": "360 01",
+            "city": "Otovice",
+            "district": "Otovice"
+        },
+        "ds_id": "32vb7g2"
+    },
+    "Otradov": {
+        "address": {
+            "street": "112",
+            "zip": "539 43",
+            "city": "Otradov",
+            "district": "Otradov"
+        },
+        "ds_id": "9eua47u"
+    },
+    "Otro\u010d\u00edn": {
+        "address": {
+            "street": "48",
+            "zip": "364 01",
+            "city": "Otro\u010d\u00edn",
+            "district": "Otro\u010d\u00edn"
+        },
+        "ds_id": "pvrbwnr"
+    },
+    "Otro\u010din\u011bves": {
+        "address": {
+            "street": "34",
+            "zip": "267 03",
+            "city": "Otro\u010din\u011bves",
+            "district": "Otro\u010din\u011bves"
+        },
+        "ds_id": "55cbi3r"
+    },
+    "Otvice": {
+        "address": {
+            "street": "\u0160koln\u00ed 95",
+            "zip": "431 11",
+            "city": "Otvice",
+            "district": "Otvice"
+        },
+        "ds_id": "mb7buqg"
+    },
+    "Otvovice": {
+        "address": {
+            "street": "34",
+            "zip": "273 27",
+            "city": "Otvovice",
+            "district": "Otvovice"
+        },
+        "ds_id": "h57bxgc"
+    },
+    "Oub\u011bnice": {
+        "address": {
+            "street": "49",
+            "zip": "263 01",
+            "city": "Oub\u011bnice",
+            "district": "Oub\u011bnice"
+        },
+        "ds_id": "pp7aj3a"
+    },
+    "Oucmanice": {
+        "address": {
+            "street": "60",
+            "zip": "562 01",
+            "city": "Oucmanice",
+            "district": "Oucmanice"
+        },
+        "ds_id": "w5ya5sd"
+    },
+    "Oudole\u0148": {
+        "address": {
+            "street": "123",
+            "zip": "582 24",
+            "city": "Oudole\u0148",
+            "district": "Oudole\u0148"
+        },
+        "ds_id": "w35bmpz"
+    },
+    "Ov\u010d\u00e1ry": {
+        "address": {
+            "street": "41",
+            "zip": "277 14",
+            "city": "Ov\u010d\u00e1ry",
+            "district": "Ov\u010d\u00e1ry"
+        },
+        "ds_id": "hgybukr"
+    },
+    "Ovesn\u00e1 Lhota": {
+        "address": {
+            "street": "49",
+            "zip": "582 91",
+            "city": "Ovesn\u00e1 Lhota",
+            "district": "Ovesn\u00e1 Lhota"
+        },
+        "ds_id": "jvjbf7f"
+    },
+    "Ovesn\u00e9 Kladruby": {
+        "address": {
+            "street": "17",
+            "zip": "353 01",
+            "city": "Ovesn\u00e9 Kladruby",
+            "district": "Ovesn\u00e9 Kladruby"
+        },
+        "ds_id": "55fa8qr"
+    },
+    "Oznice": {
+        "address": {
+            "street": "109",
+            "zip": "756 24",
+            "city": "Oznice",
+            "district": "Oznice"
+        },
+        "ds_id": "y5fb249"
+    },
+    "Pab\u011bnice": {
+        "address": {
+            "street": "16",
+            "zip": "285 43",
+            "city": "Pab\u011bnice",
+            "district": "Pab\u011bnice"
+        },
+        "ds_id": "jrjakqk"
+    },
+    "Pace\u0159ice": {
+        "address": {
+            "street": "100",
+            "zip": "463 44",
+            "city": "Pace\u0159ice",
+            "district": "Pace\u0159ice"
+        },
+        "ds_id": "75aaunc"
+    },
+    "Pacetluky": {
+        "address": {
+            "street": "10",
+            "zip": "768 43",
+            "city": "Pacetluky",
+            "district": "Pacetluky"
+        },
+        "ds_id": "w4zbiwp"
+    },
+    "Pa\u010dejov": {
+        "address": {
+            "street": "199",
+            "zip": "341 01",
+            "city": "Pa\u010dejov",
+            "district": "Pa\u010dejov-n\u00e1dra\u017e\u00ed"
+        },
+        "ds_id": "hbtb2xb"
+    },
+    "Pa\u010dlavice": {
+        "address": {
+            "street": "185",
+            "zip": "768 34",
+            "city": "Pa\u010dlavice",
+            "district": "Pa\u010dlavice"
+        },
+        "ds_id": "tajbscs"
+    },
+    "P\u00e1le\u010d": {
+        "address": {
+            "street": "65",
+            "zip": "273 71",
+            "city": "P\u00e1le\u010d",
+            "district": "P\u00e1le\u010d"
+        },
+        "ds_id": "pksakua"
+    },
+    "Palkovice": {
+        "address": {
+            "street": "619",
+            "zip": "739 41",
+            "city": "Palkovice",
+            "district": "Palkovice"
+        },
+        "ds_id": "adzb4sg"
+    },
+    "Palon\u00edn": {
+        "address": {
+            "street": "17",
+            "zip": "789 83",
+            "city": "Palon\u00edn",
+            "district": "Palon\u00edn"
+        },
+        "ds_id": "q4vbsuv"
+    },
+    "P\u00e1lovice": {
+        "address": {
+            "street": "35",
+            "zip": "675 31",
+            "city": "P\u00e1lovice",
+            "district": "P\u00e1lovice"
+        },
+        "ds_id": "j7yaq69"
+    },
+    "Pam\u011btice": {
+        "address": {
+            "street": "58",
+            "zip": "679 61",
+            "city": "Pam\u011btice",
+            "district": "Pam\u011btice"
+        },
+        "ds_id": "anxakaj"
+    },
+    "Panensk\u00e1 Rozs\u00ed\u010dka": {
+        "address": {
+            "street": "33",
+            "zip": "589 01",
+            "city": "Panensk\u00e1 Rozs\u00ed\u010dka",
+            "district": "Panensk\u00e1 Rozs\u00ed\u010dka"
+        },
+        "ds_id": "ppbanuh"
+    },
+    "Panensk\u00e9 B\u0159e\u017eany": {
+        "address": {
+            "street": "Hlavn\u00ed 17",
+            "zip": "250 70",
+            "city": "Panensk\u00e9 B\u0159e\u017eany",
+            "district": "Panensk\u00e9 B\u0159e\u017eany"
+        },
+        "ds_id": "5bubjri"
+    },
+    "Pano\u0161\u00ed \u00dajezd": {
+        "address": {
+            "street": "6",
+            "zip": "270 21",
+            "city": "Pano\u0161\u00ed \u00dajezd",
+            "district": "Pano\u0161\u00ed \u00dajezd"
+        },
+        "ds_id": "g4kajja"
+    },
+    "Pansk\u00e9 Dubenky": {
+        "address": {
+            "street": "33",
+            "zip": "378 53",
+            "city": "Pansk\u00e9 Dubenky",
+            "district": "Pansk\u00e9 Dubenky"
+        },
+        "ds_id": "2meaq5j"
+    },
+    "Para\u010dov": {
+        "address": {
+            "street": "18",
+            "zip": "386 01",
+            "city": "Para\u010dov",
+            "district": "Para\u010dov"
+        },
+        "ds_id": "kmkam24"
+    },
+    "Par\u0161ovice": {
+        "address": {
+            "street": "98",
+            "zip": "753 55",
+            "city": "Par\u0161ovice",
+            "district": "Par\u0161ovice"
+        },
+        "ds_id": "r6xbi2i"
+    },
+    "Partutovice": {
+        "address": {
+            "street": "61",
+            "zip": "753 01",
+            "city": "Partutovice",
+            "district": "Partutovice"
+        },
+        "ds_id": "j55a83w"
+    },
+    "Pa\u0159ezov": {
+        "address": {
+            "street": "35",
+            "zip": "344 01",
+            "city": "Pa\u0159ezov",
+            "district": "Nov\u00fd Pa\u0159ezov"
+        },
+        "ds_id": "a6tbh7u"
+    },
+    "Pase\u010dnice": {
+        "address": {
+            "street": "33",
+            "zip": "344 01",
+            "city": "Pase\u010dnice",
+            "district": "Nov\u00e1 Pase\u010dnice"
+        },
+        "ds_id": "mc3brx6"
+    },
+    "Paseka": {
+        "address": {
+            "street": "17",
+            "zip": "783 97",
+            "city": "Paseka",
+            "district": "Paseka"
+        },
+        "ds_id": "m7ibb52"
+    },
+    "Paseky": {
+        "address": {
+            "street": "17",
+            "zip": "398 11",
+            "city": "Paseky",
+            "district": "Paseky"
+        },
+        "ds_id": "8hnb5pt"
+    },
+    "Pasohl\u00e1vky": {
+        "address": {
+            "street": "1",
+            "zip": "691 22",
+            "city": "Pasohl\u00e1vky",
+            "district": "Pasohl\u00e1vky"
+        },
+        "ds_id": "hdnbi2n"
+    },
+    "Pastuchovice": {
+        "address": {
+            "street": "33",
+            "zip": "331 65",
+            "city": "Pastuchovice",
+            "district": "Pastuchovice"
+        },
+        "ds_id": "8kjawbr"
+    },
+    "Pastviny": {
+        "address": {
+            "street": "32",
+            "zip": "564 01",
+            "city": "Pastviny",
+            "district": "Pastviny"
+        },
+        "ds_id": "d9bbsj3"
+    },
+    "Pa\u0161inka": {
+        "address": {
+            "street": "10",
+            "zip": "280 02",
+            "city": "Pa\u0161inka",
+            "district": "Pa\u0161inka"
+        },
+        "ds_id": "n3dbz5q"
+    },
+    "Pa\u0161ovice": {
+        "address": {
+            "street": "100",
+            "zip": "687 56",
+            "city": "Pa\u0161ovice",
+            "district": "Pa\u0161ovice"
+        },
+        "ds_id": "phdammb"
+    },
+    "P\u00e1tek": {
+        "address": {
+            "street": "14",
+            "zip": "290 01",
+            "city": "P\u00e1tek",
+            "district": "P\u00e1tek"
+        },
+        "ds_id": "a7hb34q"
+    },
+    "Patokryje": {
+        "address": {
+            "street": "35",
+            "zip": "434 01",
+            "city": "Patokryje",
+            "district": "Patokryje"
+        },
+        "ds_id": "p3sbmiv"
+    },
+    "Pavlice": {
+        "address": {
+            "street": "90",
+            "zip": "671 56",
+            "city": "Pavlice",
+            "district": "Pavlice"
+        },
+        "ds_id": "q34bja4"
+    },
+    "Pavl\u00ednov": {
+        "address": {
+            "street": "100",
+            "zip": "594 01",
+            "city": "Pavl\u00ednov",
+            "district": "Pavl\u00ednov"
+        },
+        "ds_id": "unubf7c"
+    },
+    "Pavlov": {
+        "address": {
+            "street": "Lidick\u00e1 65",
+            "zip": "273 51",
+            "city": "Pavlov",
+            "district": "Pavlov"
+        },
+        "ds_id": "rt2a3gt"
+    },
+    "Pavlovice": {
+        "address": {
+            "street": "65",
+            "zip": "258 01",
+            "city": "Pavlovice",
+            "district": "Pavlovice"
+        },
+        "ds_id": "65nbgty"
+    },
+    "Pavlovice u Kojet\u00edna": {
+        "address": {
+            "street": "55",
+            "zip": "798 30",
+            "city": "Pavlovice u Kojet\u00edna",
+            "district": "Pavlovice u Kojet\u00edna"
+        },
+        "ds_id": "p6kaqhw"
+    },
+    "Pavlovice u P\u0159erova": {
+        "address": {
+            "street": "102",
+            "zip": "751 11",
+            "city": "Pavlovice u P\u0159erova",
+            "district": "Pavlovice u P\u0159erova"
+        },
+        "ds_id": "wyqbngz"
+    },
+    "Pazderna": {
+        "address": {
+            "street": "65",
+            "zip": "739 51",
+            "city": "Pazderna",
+            "district": "Pazderna"
+        },
+        "ds_id": "t4uby8v"
+    },
+    "Pec": {
+        "address": {
+            "street": "58",
+            "zip": "344 01",
+            "city": "Pec",
+            "district": "Pec"
+        },
+        "ds_id": "jx4bh7q"
+    },
+    "Pe\u010d": {
+        "address": {
+            "street": "62",
+            "zip": "380 01",
+            "city": "Pe\u010d",
+            "district": "Pe\u010d"
+        },
+        "ds_id": "9g4b58b"
+    },
+    "P\u011b\u010dice": {
+        "address": {
+            "street": "1",
+            "zip": "294 46",
+            "city": "P\u011b\u010dice",
+            "district": "P\u011b\u010dice"
+        },
+        "ds_id": "b3wat2y"
+    },
+    "P\u011b\u010dnov": {
+        "address": {
+            "street": "3",
+            "zip": "383 01",
+            "city": "P\u011b\u010dnov",
+            "district": "P\u011b\u010dnov"
+        },
+        "ds_id": "e7sb78x"
+    },
+    "Pelechy": {
+        "address": {
+            "street": "27",
+            "zip": "344 01",
+            "city": "Pelechy",
+            "district": "Pelechy"
+        },
+        "ds_id": "urdbh7j"
+    },
+    "P\u011bn\u010d\u00edn": {
+        "address": {
+            "street": "57",
+            "zip": "468 21",
+            "city": "P\u011bn\u010d\u00edn",
+            "district": "P\u011bn\u010d\u00edn"
+        },
+        "ds_id": "rvzjds7"
+    },
+    "Per\u00e1lec": {
+        "address": {
+            "street": "24",
+            "zip": "539 44",
+            "city": "Per\u00e1lec",
+            "district": "Per\u00e1lec"
+        },
+        "ds_id": "s4ib3gn"
+    },
+    "Pern\u00e1": {
+        "address": {
+            "street": "294",
+            "zip": "691 86",
+            "city": "Pern\u00e1",
+            "district": "Pern\u00e1"
+        },
+        "ds_id": "uyaa6af"
+    },
+    "Pernarec": {
+        "address": {
+            "street": "62",
+            "zip": "330 36",
+            "city": "Pernarec",
+            "district": "Pernarec"
+        },
+        "ds_id": "ttpbb4h"
+    },
+    "Pernink": {
+        "address": {
+            "street": "T. G. Masaryka 1",
+            "zip": "362 36",
+            "city": "Pernink",
+            "district": "Pernink"
+        },
+        "ds_id": "i2ebb4m"
+    },
+    "Pern\u0161tejnsk\u00e9 Jest\u0159ab\u00ed": {
+        "address": {
+            "street": "6",
+            "zip": "592 61",
+            "city": "Pern\u0161tejnsk\u00e9 Jest\u0159ab\u00ed",
+            "district": "Pern\u0161tejnsk\u00e9 Jest\u0159ab\u00ed"
+        },
+        "ds_id": "72rasn5"
+    },
+    "Per\u0161tejn": {
+        "address": {
+            "street": "Hlavn\u00ed 159",
+            "zip": "431 63",
+            "city": "Per\u0161tejn",
+            "district": "Per\u0161tejn"
+        },
+        "ds_id": "985bb3v"
+    },
+    "Pertoltice": {
+        "address": {
+            "street": "54",
+            "zip": "285 22",
+            "city": "Pertoltice",
+            "district": "Pertoltice"
+        },
+        "ds_id": "qndbyrb"
+    },
+    "Pertoltice pod Ralskem": {
+        "address": {
+            "street": "165",
+            "zip": "471 24",
+            "city": "Pertoltice pod Ralskem",
+            "district": "Pertoltice pod Ralskem"
+        },
+        "ds_id": "ds7an48"
+    },
+    "Pe\u0159imov": {
+        "address": {
+            "street": "107",
+            "zip": "512 04",
+            "city": "Pe\u0159imov",
+            "district": "Pe\u0159imov"
+        },
+        "ds_id": "cqcapcr"
+    },
+    "Pesvice": {
+        "address": {
+            "street": "1",
+            "zip": "431 11",
+            "city": "Pesvice",
+            "district": "Pesvice"
+        },
+        "ds_id": "itsaqyk"
+    },
+    "P\u011btihosty": {
+        "address": {
+            "street": "41",
+            "zip": "251 67",
+            "city": "P\u011btihosty",
+            "district": "P\u011btihosty"
+        },
+        "ds_id": "7nvap8q"
+    },
+    "P\u011btikozly": {
+        "address": {
+            "street": "43",
+            "zip": "294 30",
+            "city": "P\u011btikozly",
+            "district": "P\u011btikozly"
+        },
+        "ds_id": "bgbedva"
+    },
+    "P\u011btipsy": {
+        "address": {
+            "street": "58",
+            "zip": "431 53",
+            "city": "P\u011btipsy",
+            "district": "P\u011btipsy"
+        },
+        "ds_id": "7w3bsgd"
+    },
+    "Petkovy": {
+        "address": {
+            "street": "57",
+            "zip": "294 04",
+            "city": "Petkovy",
+            "district": "Petkovy"
+        },
+        "ds_id": "gzkb5ae"
+    },
+    "Petr\u00e1ve\u010d": {
+        "address": {
+            "street": "40",
+            "zip": "594 01",
+            "city": "Petr\u00e1ve\u010d",
+            "district": "Petr\u00e1ve\u010d"
+        },
+        "ds_id": "2yba8pc"
+    },
+    "Petrohrad": {
+        "address": {
+            "street": "146",
+            "zip": "439 85",
+            "city": "Petrohrad",
+            "district": "Petrohrad"
+        },
+        "ds_id": "y5qa333"
+    },
+    "Petroupim": {
+        "address": {
+            "street": "74",
+            "zip": "256 01",
+            "city": "Petroupim",
+            "district": "Petroupim"
+        },
+        "ds_id": "efiaur4"
+    },
+    "Petrov": {
+        "address": {
+            "street": "113",
+            "zip": "696 65",
+            "city": "Petrov",
+            "district": "Petrov"
+        },
+        "ds_id": "2jgbjd9"
+    },
+    "Petrovice": {
+        "address": {
+            "street": "9",
+            "zip": "672 01",
+            "city": "Petrovice",
+            "district": "Petrovice"
+        },
+        "ds_id": "z5ubnhe"
+    },
+    "Petrovice i": {
+        "address": {
+            "street": "55",
+            "zip": "286 01",
+            "city": "Petrovice I",
+            "district": "Petrovice I"
+        },
+        "ds_id": "rumbxqq"
+    },
+    "Petrovice II": {
+        "address": {
+            "street": "6",
+            "zip": "285 22",
+            "city": "Petrovice II",
+            "district": "Petrovice II"
+        },
+        "ds_id": "ux7bgmi"
+    },
+    "Petrovice u Karvin\u00e9": {
+        "address": {
+            "street": "251",
+            "zip": "735 72",
+            "city": "Petrovice u Karvin\u00e9",
+            "district": "Petrovice u Karvin\u00e9"
+        },
+        "ds_id": "qnjbb35"
+    },
+    "Petrovice u Su\u0161ice": {
+        "address": {
+            "street": "34",
+            "zip": "342 01",
+            "city": "Petrovice u Su\u0161ice",
+            "district": "Petrovice u Su\u0161ice"
+        },
+        "ds_id": "i5mbxzs"
+    },
+    "Petrov nad Desnou": {
+        "address": {
+            "street": "156",
+            "zip": "788 16",
+            "city": "Petrov nad Desnou",
+            "district": "Petrov nad Desnou"
+        },
+        "ds_id": "c42pa2g"
+    },
+    "Petr\u016fvka": {
+        "address": {
+            "street": "90",
+            "zip": "763 21",
+            "city": "Petr\u016fvka",
+            "district": "Petr\u016fvka"
+        },
+        "ds_id": "76xazfw"
+    },
+    "Petr\u016fvky": {
+        "address": {
+            "street": "3",
+            "zip": "675 52",
+            "city": "Petr\u016fvky",
+            "district": "Petr\u016fvky"
+        },
+        "ds_id": "tunawy7"
+    },
+    "Pet\u0159\u00edkov": {
+        "address": {
+            "street": "61",
+            "zip": "251 69",
+            "city": "Pet\u0159\u00edkov",
+            "district": "Pet\u0159\u00edkov"
+        },
+        "ds_id": "hvmb6kx"
+    },
+    "Pchery": {
+        "address": {
+            "street": "333",
+            "zip": "273 08",
+            "city": "Pchery",
+            "district": "Humny"
+        },
+        "ds_id": "ue3bwvs"
+    },
+    "Pi\u010d\u00edn": {
+        "address": {
+            "street": "154",
+            "zip": "262 25",
+            "city": "Pi\u010d\u00edn",
+            "district": "Pi\u010d\u00edn"
+        },
+        "ds_id": "xe2b49s"
+    },
+    "Pik\u00e1rec": {
+        "address": {
+            "street": "99",
+            "zip": "592 53",
+            "city": "Pik\u00e1rec",
+            "district": "Pik\u00e1rec"
+        },
+        "ds_id": "ekkayrk"
+    },
+    "Pila": {
+        "address": {
+            "street": "97",
+            "zip": "360 01",
+            "city": "Pila",
+            "district": "Pila"
+        },
+        "ds_id": "2jab73e"
+    },
+    "P\u00edsa\u0159ov": {
+        "address": {
+            "street": "80",
+            "zip": "789 91",
+            "city": "P\u00edsa\u0159ov",
+            "district": "P\u00edsa\u0159ov"
+        },
+        "ds_id": "es8bjvm"
+    },
+    "P\u00edse\u010dn\u00e1": {
+        "address": {
+            "street": "123",
+            "zip": "790 82",
+            "city": "P\u00edse\u010dn\u00e1",
+            "district": "P\u00edse\u010dn\u00e1"
+        },
+        "ds_id": "6mebuay"
+    },
+    "P\u00edse\u010dn\u00e9": {
+        "address": {
+            "street": "25",
+            "zip": "593 01",
+            "city": "P\u00edse\u010dn\u00e9",
+            "district": "P\u00edse\u010dn\u00e9"
+        },
+        "ds_id": "tbfbpjh"
+    },
+    "P\u00edskov\u00e1 Lhota": {
+        "address": {
+            "street": "Pod\u011bbradsk\u00e1 17",
+            "zip": "290 01",
+            "city": "P\u00edskov\u00e1 Lhota",
+            "district": "P\u00edskov\u00e1 Lhota"
+        },
+        "ds_id": "hstjdvm"
+    },
+    "P\u00edstina": {
+        "address": {
+            "street": "35",
+            "zip": "378 02",
+            "city": "P\u00edstina",
+            "district": "P\u00edstina"
+        },
+        "ds_id": "mxrbstg"
+    },
+    "P\u00edsty": {
+        "address": {
+            "street": "33",
+            "zip": "289 13",
+            "city": "P\u00edsty",
+            "district": "P\u00edsty"
+        },
+        "ds_id": "64va899"
+    },
+    "P\u00ed\u0161\u0165": {
+        "address": {
+            "street": "Opavsk\u00e1 58",
+            "zip": "747 18",
+            "city": "P\u00ed\u0161\u0165",
+            "district": "P\u00ed\u0161\u0165"
+        },
+        "ds_id": "mhfbb2q"
+    },
+    "P\u00ed\u0161\u0165any": {
+        "address": {
+            "street": "64",
+            "zip": "411 01",
+            "city": "P\u00ed\u0161\u0165any",
+            "district": "P\u00ed\u0161\u0165any"
+        },
+        "ds_id": "9ceaqug"
+    },
+    "Pi\u0161t\u00edn": {
+        "address": {
+            "street": "33",
+            "zip": "373 46",
+            "city": "Pi\u0161t\u00edn",
+            "district": "Pi\u0161t\u00edn"
+        },
+        "ds_id": "phsb6jf"
+    },
+    "Pit\u00edn": {
+        "address": {
+            "street": "18",
+            "zip": "687 71",
+            "city": "Pit\u00edn",
+            "district": "Pit\u00edn"
+        },
+        "ds_id": "bt2bk3f"
+    },
+    "Piv\u00edn": {
+        "address": {
+            "street": "220",
+            "zip": "798 24",
+            "city": "Piv\u00edn",
+            "district": "Piv\u00edn"
+        },
+        "ds_id": "kdwasdg"
+    },
+    "Pivkovice": {
+        "address": {
+            "street": "17",
+            "zip": "387 73",
+            "city": "Pivkovice",
+            "district": "Pivkovice"
+        },
+        "ds_id": "qahbwbv"
+    },
+    "Plandry": {
+        "address": {
+            "street": "30",
+            "zip": "588 41",
+            "city": "Plandry",
+            "district": "Plandry"
+        },
+        "ds_id": "tddavbt"
+    },
+    "Pl\u00e1n\u011b": {
+        "address": {
+            "street": "45",
+            "zip": "331 01",
+            "city": "Pl\u00e1n\u011b",
+            "district": "Pl\u00e1n\u011b"
+        },
+        "ds_id": "9z5b2b5"
+    },
+    "Plav": {
+        "address": {
+            "street": "57",
+            "zip": "370 07",
+            "city": "Plav",
+            "district": "Plav"
+        },
+        "ds_id": "tnpedpf"
+    },
+    "Plave\u010d": {
+        "address": {
+            "street": "N\u00e1ves 48",
+            "zip": "671 32",
+            "city": "Plave\u010d",
+            "district": "Plave\u010d"
+        },
+        "ds_id": "3wvbbz3"
+    },
+    "Plavsko": {
+        "address": {
+            "street": "77",
+            "zip": "378 02",
+            "city": "Plavsko",
+            "district": "Plavsko"
+        },
+        "ds_id": "y2zbnry"
+    },
+    "Plazy": {
+        "address": {
+            "street": "46",
+            "zip": "293 01",
+            "city": "Plazy",
+            "district": "Plazy"
+        },
+        "ds_id": "d9kativ"
+    },
+    "Plenkovice": {
+        "address": {
+            "street": "71",
+            "zip": "671 51",
+            "city": "Plenkovice",
+            "district": "Plenkovice"
+        },
+        "ds_id": "e9mbqba"
+    },
+    "Ple\u0161e": {
+        "address": {
+            "street": "85",
+            "zip": "378 21",
+            "city": "Ple\u0161e",
+            "district": "Ple\u0161e"
+        },
+        "ds_id": "m3fasz8"
+    },
+    "Ple\u0161nice": {
+        "address": {
+            "street": "33",
+            "zip": "330 33",
+            "city": "Ple\u0161nice",
+            "district": "Ple\u0161nice"
+        },
+        "ds_id": "68aa8g7"
+    },
+    "Pleten\u00fd \u00dajezd": {
+        "address": {
+            "street": "Kladensk\u00e1 40",
+            "zip": "273 51",
+            "city": "Pleten\u00fd \u00dajezd",
+            "district": "Pleten\u00fd \u00dajezd"
+        },
+        "ds_id": "ar9avum"
+    },
+    "Plch": {
+        "address": {
+            "street": "50",
+            "zip": "533 45",
+            "city": "Plch",
+            "district": "Plch"
+        },
+        "ds_id": "atmbznb"
+    },
+    "Plchov": {
+        "address": {
+            "street": "64",
+            "zip": "273 75",
+            "city": "Plchov",
+            "district": "Plchov"
+        },
+        "ds_id": "gkcaw29"
+    },
+    "Plchovice": {
+        "address": {
+            "street": "29",
+            "zip": "565 01",
+            "city": "Plchovice",
+            "district": "Plchovice"
+        },
+        "ds_id": "m96a3sa"
+    },
+    "Pl\u00edskov": {
+        "address": {
+            "street": "63",
+            "zip": "338 08",
+            "city": "Pl\u00edskov",
+            "district": "Pl\u00edskov"
+        },
+        "ds_id": "5inbh7f"
+    },
+    "Ploskovice": {
+        "address": {
+            "street": "2",
+            "zip": "411 42",
+            "city": "Ploskovice",
+            "district": "Ploskovice"
+        },
+        "ds_id": "8vqbjf2"
+    },
+    "Pluh\u016fv \u017d\u010f\u00e1r": {
+        "address": {
+            "street": "66",
+            "zip": "378 24",
+            "city": "Pluh\u016fv \u017d\u010f\u00e1r",
+            "district": "Pluh\u016fv \u017d\u010f\u00e1r"
+        },
+        "ds_id": "q2cbquk"
+    },
+    "Plu\u017en\u00e1": {
+        "address": {
+            "street": "54",
+            "zip": "294 23",
+            "city": "Plu\u017en\u00e1",
+            "district": "Plu\u017en\u00e1"
+        },
+        "ds_id": "k2camp8"
+    },
+    "Pn\u011btluky": {
+        "address": {
+            "street": "26",
+            "zip": "440 01",
+            "city": "Pn\u011btluky",
+            "district": "Pn\u011btluky"
+        },
+        "ds_id": "4rcav72"
+    },
+    "P\u0148ovany": {
+        "address": {
+            "street": "171",
+            "zip": "330 33",
+            "city": "P\u0148ovany",
+            "district": "P\u0148ovany"
+        },
+        "ds_id": "ci7avpe"
+    },
+    "P\u0148ovice": {
+        "address": {
+            "street": "187",
+            "zip": "784 01",
+            "city": "P\u0148ovice",
+            "district": "P\u0148ovice"
+        },
+        "ds_id": "uxbbjer"
+    },
+    "P\u0148ov-P\u0159edhrad\u00ed": {
+        "address": {
+            "street": "Husova 37",
+            "zip": "289 41",
+            "city": "P\u0148ov-P\u0159edhrad\u00ed",
+            "district": "P\u0148ov"
+        },
+        "ds_id": "ii2bksd"
+    },
+    "Pob\u011b\u017eovice u Holic": {
+        "address": {
+            "street": "18",
+            "zip": "534 01",
+            "city": "Pob\u011b\u017eovice u Holic",
+            "district": "Pob\u011b\u017eovice u Holic"
+        },
+        "ds_id": "ktfazkd"
+    },
+    "Pob\u011b\u017eovice u P\u0159elou\u010de": {
+        "address": {
+            "street": "9",
+            "zip": "535 01",
+            "city": "Pob\u011b\u017eovice u P\u0159elou\u010de",
+            "district": "Pob\u011b\u017eovice u P\u0159elou\u010de"
+        },
+        "ds_id": "k5ja9kd"
+    },
+    "Pocinovice": {
+        "address": {
+            "street": "72",
+            "zip": "345 09",
+            "city": "Pocinovice",
+            "district": "Pocinovice"
+        },
+        "ds_id": "ny5ay4b"
+    },
+    "Po\u010daply": {
+        "address": {
+            "street": "45",
+            "zip": "262 72",
+            "city": "Po\u010daply",
+            "district": "Po\u010daply"
+        },
+        "ds_id": "33rb4pr"
+    },
+    "Po\u010ded\u011blice": {
+        "address": {
+            "street": "11",
+            "zip": "440 01",
+            "city": "Po\u010ded\u011blice",
+            "district": "Po\u010ded\u011blice"
+        },
+        "ds_id": "ph3a7i9"
+    },
+    "Po\u010denice-Tet\u011btice": {
+        "address": {
+            "street": "74",
+            "zip": "768 33",
+            "city": "Po\u010denice-Tet\u011btice",
+            "district": "Po\u010denice"
+        },
+        "ds_id": "webanjf"
+    },
+    "Po\u010depice": {
+        "address": {
+            "street": "60",
+            "zip": "262 55",
+            "city": "Po\u010depice",
+            "district": "Po\u010depice"
+        },
+        "ds_id": "7diapsh"
+    },
+    "Po\u010d\u00edtky": {
+        "address": {
+            "street": "67",
+            "zip": "591 01",
+            "city": "Po\u010d\u00edtky",
+            "district": "Po\u010d\u00edtky"
+        },
+        "ds_id": "7j9ayjk"
+    },
+    "Podbo\u0159ansk\u00fd Rohozec": {
+        "address": {
+            "street": "6",
+            "zip": "441 01",
+            "city": "Podbo\u0159ansk\u00fd Rohozec",
+            "district": "Podbo\u0159ansk\u00fd Rohozec"
+        },
+        "ds_id": "8bfjdri"
+    },
+    "Podbrdy": {
+        "address": {
+            "street": "8",
+            "zip": "267 27",
+            "city": "Podbrdy",
+            "district": "Podbrdy"
+        },
+        "ds_id": "4cpaj7t"
+    },
+    "Podb\u0159e\u017eice": {
+        "address": {
+            "street": "16",
+            "zip": "683 01",
+            "city": "Podb\u0159e\u017eice",
+            "district": "Podb\u0159e\u017eice"
+        },
+        "ds_id": "qapa9ms"
+    },
+    "Pod\u011b\u0161\u00edn": {
+        "address": {
+            "street": "45",
+            "zip": "592 12",
+            "city": "Pod\u011b\u0161\u00edn",
+            "district": "Pod\u011b\u0161\u00edn"
+        },
+        "ds_id": "fkta8uv"
+    },
+    "Pod\u011bvousy": {
+        "address": {
+            "street": "47",
+            "zip": "345 61",
+            "city": "Pod\u011bvousy",
+            "district": "Pod\u011bvousy"
+        },
+        "ds_id": "sneaxzs"
+    },
+    "Podhorn\u00ed \u00dajezd a Vojice": {
+        "address": {
+            "street": "141",
+            "zip": "508 01",
+            "city": "Podhorn\u00ed \u00dajezd a Vojice",
+            "district": "Vojice"
+        },
+        "ds_id": "enxbpfy"
+    },
+    "Podho\u0159any u Ronova": {
+        "address": {
+            "street": "102",
+            "zip": "538 41",
+            "city": "Podho\u0159any u Ronova",
+            "district": "Podho\u0159any u Ronova"
+        },
+        "ds_id": "3vtb3gi"
+    },
+    "Podhrad\u00ed nad Dyj\u00ed": {
+        "address": {
+            "street": "57",
+            "zip": "671 06",
+            "city": "Podhrad\u00ed nad Dyj\u00ed",
+            "district": "Podhrad\u00ed nad Dyj\u00ed"
+        },
+        "ds_id": "x4fbjf6"
+    },
+    "Podhradn\u00ed Lhota": {
+        "address": {
+            "street": "150",
+            "zip": "768 71",
+            "city": "Podhradn\u00ed Lhota",
+            "district": "Podhradn\u00ed Lhota"
+        },
+        "ds_id": "vi3autr"
+    },
+    "Podivice": {
+        "address": {
+            "street": "63",
+            "zip": "683 21",
+            "city": "Podivice",
+            "district": "Podivice"
+        },
+        "ds_id": "qhha73p"
+    },
+    "Podkopn\u00e1 Lhota": {
+        "address": {
+            "street": "37",
+            "zip": "763 18",
+            "city": "Podkopn\u00e1 Lhota",
+            "district": "Podkopn\u00e1 Lhota"
+        },
+        "ds_id": "yz5bri9"
+    },
+    "Podles\u00ed": {
+        "address": {
+            "street": "81",
+            "zip": "261 01",
+            "city": "Podles\u00ed",
+            "district": "Podles\u00ed"
+        },
+        "ds_id": "ehvbjfg"
+    },
+    "Podle\u0161\u00edn": {
+        "address": {
+            "street": "43",
+            "zip": "273 25",
+            "city": "Podle\u0161\u00edn",
+            "district": "Podle\u0161\u00edn"
+        },
+        "ds_id": "yd3aku6"
+    },
+    "Podluhy": {
+        "address": {
+            "street": "51",
+            "zip": "268 01",
+            "city": "Podluhy",
+            "district": "Podluhy"
+        },
+        "ds_id": "pqkb4zc"
+    },
+    "Podmoklany": {
+        "address": {
+            "street": "30",
+            "zip": "582 64",
+            "city": "Podmoklany",
+            "district": "Podmoklany"
+        },
+        "ds_id": "ptkaja7"
+    },
+    "Podmokly": {
+        "address": {
+            "street": "156",
+            "zip": "338 08",
+            "city": "Podmokly",
+            "district": "Podmokly"
+        },
+        "ds_id": "h23ay86"
+    },
+    "Podmoky": {
+        "address": {
+            "street": "42",
+            "zip": "289 04",
+            "city": "Podmoky",
+            "district": "Podmoky"
+        },
+        "ds_id": "wqxb46g"
+    },
+    "Podmol\u00ed": {
+        "address": {
+            "street": "70",
+            "zip": "669 02",
+            "city": "Podmol\u00ed",
+            "district": "Podmol\u00ed"
+        },
+        "ds_id": "p6ha2uy"
+    },
+    "Podmy\u010de": {
+        "address": {
+            "street": "8",
+            "zip": "671 06",
+            "city": "Podmy\u010de",
+            "district": "Podmy\u010de"
+        },
+        "ds_id": "s84ayv6"
+    },
+    "Podolanka": {
+        "address": {
+            "street": "Hlavn\u00ed 15",
+            "zip": "250 73",
+            "city": "Podolanka",
+            "district": "Podolanka"
+        },
+        "ds_id": "x2yaryi"
+    },
+    "Podol\u00ed": {
+        "address": {
+            "street": "33",
+            "zip": "756 44",
+            "city": "Podol\u00ed",
+            "district": "Podol\u00ed"
+        },
+        "ds_id": "zijard5"
+    },
+    "Podol\u00ed i": {
+        "address": {
+            "street": "61",
+            "zip": "398 43",
+            "city": "Podol\u00ed I",
+            "district": "Podol\u00ed I"
+        },
+        "ds_id": "gd2b67d"
+    },
+    "Podom\u00ed": {
+        "address": {
+            "street": "89",
+            "zip": "683 04",
+            "city": "Podom\u00ed",
+            "district": "Podom\u00ed"
+        },
+        "ds_id": "9i2bbyj"
+    },
+    "Podsedice": {
+        "address": {
+            "street": "29",
+            "zip": "411 15",
+            "city": "Podsedice",
+            "district": "Podsedice"
+        },
+        "ds_id": "wfyatcz"
+    },
+    "Pod\u016fl\u0161any": {
+        "address": {
+            "street": "42",
+            "zip": "533 45",
+            "city": "Pod\u016fl\u0161any",
+            "district": "Pod\u016fl\u0161any"
+        },
+        "ds_id": "h75a48n"
+    },
+    "Pod\u016fl\u0161\u00ed": {
+        "address": {
+            "street": "90",
+            "zip": "506 01",
+            "city": "Pod\u016fl\u0161\u00ed",
+            "district": "Pod\u016fl\u0161\u00ed"
+        },
+        "ds_id": "etba9ij"
+    },
+    "Podveky": {
+        "address": {
+            "street": "54",
+            "zip": "285 06",
+            "city": "Podveky",
+            "district": "Podveky"
+        },
+        "ds_id": "wp9bi9k"
+    },
+    "Pohled": {
+        "address": {
+            "street": "Revolu\u010dn\u00ed 39",
+            "zip": "582 21",
+            "city": "Pohled",
+            "district": "Pohled"
+        },
+        "ds_id": "emgavya"
+    },
+    "Pohle\u010f": {
+        "address": {
+            "street": "20",
+            "zip": "582 91",
+            "city": "Pohle\u010f",
+            "district": "Pohle\u010f"
+        },
+        "ds_id": "cibaygm"
+    },
+    "Pohledy": {
+        "address": {
+            "street": "89",
+            "zip": "568 02",
+            "city": "Pohledy",
+            "district": "Horn\u00ed Hyn\u010dina"
+        },
+        "ds_id": "szea48g"
+    },
+    "Pohn\u00e1nec": {
+        "address": {
+            "street": "31",
+            "zip": "391 43",
+            "city": "Pohn\u00e1nec",
+            "district": "Pohn\u00e1nec"
+        },
+        "ds_id": "b6iajp5"
+    },
+    "Pohn\u00e1n\u00ed": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "Pohn\u00e1n\u00ed 7, Pohn\u00e1n\u00ed, 39143 Pohn\u00e1n\u00ed",
+            "district": ""
+        },
+        "ds_id": "7gxanzh"
+    },
+    "Pohorovice": {
+        "address": {
+            "street": "46",
+            "zip": "389 01",
+            "city": "Pohorovice",
+            "district": "Pohorovice"
+        },
+        "ds_id": "vevam2y"
+    },
+    "Pohorsk\u00e1 Ves": {
+        "address": {
+            "street": "45",
+            "zip": "382 83",
+            "city": "Pohorsk\u00e1 Ves",
+            "district": "Pohorsk\u00e1 Ves"
+        },
+        "ds_id": "i2kapei"
+    },
+    "Poho\u0159\u00ed": {
+        "address": {
+            "street": "100",
+            "zip": "254 01",
+            "city": "Poho\u0159\u00ed",
+            "district": "Chotou\u0148"
+        },
+        "ds_id": "pv5amag"
+    },
+    "Pochvalov": {
+        "address": {
+            "street": "90",
+            "zip": "270 55",
+            "city": "Pochvalov",
+            "district": "Pochvalov"
+        },
+        "ds_id": "2yhajz6"
+    },
+    "Pojbuky": {
+        "address": {
+            "street": "55",
+            "zip": "391 43",
+            "city": "Pojbuky",
+            "district": "Pojbuky"
+        },
+        "ds_id": "68kjdz3"
+    },
+    "Pokojov": {
+        "address": {
+            "street": "9",
+            "zip": "592 14",
+            "city": "Pokojov",
+            "district": "Pokojov"
+        },
+        "ds_id": "3n7bgcg"
+    },
+    "Pokojovice": {
+        "address": {
+            "street": "50",
+            "zip": "675 21",
+            "city": "Pokojovice",
+            "district": "Pokojovice"
+        },
+        "ds_id": "kizj2x4"
+    },
+    "Pok\u0159ikov": {
+        "address": {
+            "street": "93",
+            "zip": "539 01",
+            "city": "Pok\u0159ikov",
+            "district": "Pok\u0159ikov"
+        },
+        "ds_id": "3mcbx93"
+    },
+    "Pol\u00e1nka": {
+        "address": {
+            "street": "4",
+            "zip": "335 01",
+            "city": "Pol\u00e1nka",
+            "district": "Pol\u00e1nka"
+        },
+        "ds_id": "939ajda"
+    },
+    "Pole\u0148": {
+        "address": {
+            "street": "47",
+            "zip": "339 01",
+            "city": "Pole\u0148",
+            "district": "Pole\u0148"
+        },
+        "ds_id": "ebxbh89"
+    },
+    "Polepy": {
+        "address": {
+            "street": "131",
+            "zip": "280 02",
+            "city": "Polepy",
+            "district": "Polepy"
+        },
+        "ds_id": "5s5bmew"
+    },
+    "Polerady": {
+        "address": {
+            "street": "113",
+            "zip": "434 01",
+            "city": "Polerady",
+            "district": "Polerady"
+        },
+        "ds_id": "njkarvc"
+    },
+    "Poles\u00ed": {
+        "address": {
+            "street": "23",
+            "zip": "394 64",
+            "city": "Poles\u00ed",
+            "district": "Poles\u00ed"
+        },
+        "ds_id": "d9ebf8y"
+    },
+    "Polevsko": {
+        "address": {
+            "street": "152",
+            "zip": "471 16",
+            "city": "Polevsko",
+            "district": "Polevsko"
+        },
+        "ds_id": "v2ub435"
+    },
+    "Police": {
+        "address": {
+            "street": "5",
+            "zip": "789 73",
+            "city": "Police",
+            "district": "Police"
+        },
+        "ds_id": "u67asdc"
+    },
+    "Poli\u010dn\u00e1": {
+        "address": {
+            "street": "144",
+            "zip": "757 01",
+            "city": "Poli\u010dn\u00e1",
+            "district": "Poli\u010dn\u00e1"
+        },
+        "ds_id": "rbyper7"
+    },
+    "Polkovice": {
+        "address": {
+            "street": "15",
+            "zip": "751 44",
+            "city": "Polkovice",
+            "district": "Polkovice"
+        },
+        "ds_id": "8f4bnj8"
+    },
+    "Poln\u00e1 Na \u0160umav\u011b": {
+        "address": {
+            "street": "204",
+            "zip": "382 29",
+            "city": "Poln\u00e1 na \u0160umav\u011b",
+            "district": "Poln\u00e1 na \u0160umav\u011b"
+        },
+        "ds_id": "pepfetp"
+    },
+    "Polni\u010dka": {
+        "address": {
+            "street": "225",
+            "zip": "591 02",
+            "city": "Polni\u010dka",
+            "district": "Polni\u010dka"
+        },
+        "ds_id": "e67bbyy"
+    },
+    "Poln\u00ed Chr\u010dice": {
+        "address": {
+            "street": "55",
+            "zip": "280 02",
+            "city": "Poln\u00ed Chr\u010dice",
+            "district": "Poln\u00ed Chr\u010dice"
+        },
+        "ds_id": "urga7ui"
+    },
+    "Poln\u00ed Vod\u011brady": {
+        "address": {
+            "street": "93",
+            "zip": "280 02",
+            "city": "Poln\u00ed Vod\u011brady",
+            "district": "Poln\u00ed Vod\u011brady"
+        },
+        "ds_id": "6v9am56"
+    },
+    "Polom": {
+        "address": {
+            "street": "95",
+            "zip": "753 65",
+            "city": "Polom",
+            "district": "Polom"
+        },
+        "ds_id": "5ygasd6"
+    },
+    "Polom\u00ed": {
+        "address": {
+            "street": "20",
+            "zip": "798 55",
+            "city": "Polom\u00ed",
+            "district": "Polom\u00ed"
+        },
+        "ds_id": "cdubqq4"
+    },
+    "Pol\u0161t\u011b": {
+        "address": {
+            "street": "39",
+            "zip": "377 01",
+            "city": "Pol\u0161t\u011b",
+            "district": "Pol\u0161t\u011b"
+        },
+        "ds_id": "kqwaxk7"
+    },
+    "Pomez\u00ed": {
+        "address": {
+            "street": "4",
+            "zip": "569 71",
+            "city": "Pomez\u00ed",
+            "district": "Pomez\u00ed"
+        },
+        "ds_id": "yuda3mv"
+    },
+    "Pomez\u00ed nad Oh\u0159\u00ed": {
+        "address": {
+            "street": "18",
+            "zip": "350 02",
+            "city": "Pomez\u00ed nad Oh\u0159\u00ed",
+            "district": "Pomez\u00ed nad Oh\u0159\u00ed"
+        },
+        "ds_id": "ikpbrjw"
+    },
+    "Pon\u011bdra\u017e": {
+        "address": {
+            "street": "27",
+            "zip": "379 01",
+            "city": "Pon\u011bdra\u017e",
+            "district": "Pon\u011bdra\u017e"
+        },
+        "ds_id": "rytb6hh"
+    },
+    "Pon\u011bdr\u00e1\u017eka": {
+        "address": {
+            "street": "65",
+            "zip": "379 01",
+            "city": "Pon\u011bdr\u00e1\u017eka",
+            "district": "Pon\u011bdr\u00e1\u017eka"
+        },
+        "ds_id": "c8wb66y"
+    },
+    "Pon\u011btovice": {
+        "address": {
+            "street": "63",
+            "zip": "664 51",
+            "city": "Pon\u011btovice",
+            "district": "Pon\u011btovice"
+        },
+        "ds_id": "mt9b5xm"
+    },
+    "Ponikl\u00e1": {
+        "address": {
+            "street": "65",
+            "zip": "512 42",
+            "city": "Ponikl\u00e1",
+            "district": "Ponikl\u00e1"
+        },
+        "ds_id": "6dwbbx6"
+    },
+    "Popel\u00edn": {
+        "address": {
+            "street": "93",
+            "zip": "378 55",
+            "city": "Popel\u00edn",
+            "district": "Popel\u00edn"
+        },
+        "ds_id": "tx2ed5k"
+    },
+    "Popice": {
+        "address": {
+            "street": "Hlavn\u00ed 62",
+            "zip": "691 27",
+            "city": "Popice",
+            "district": "Popice"
+        },
+        "ds_id": "f4sbue4"
+    },
+    "Popovice": {
+        "address": {
+            "street": "303",
+            "zip": "686 04",
+            "city": "Popovice",
+            "district": "Popovice"
+        },
+        "ds_id": "rw6bzqz"
+    },
+    "Popovi\u010dky": {
+        "address": {
+            "street": "K Rybn\u00edku 12",
+            "zip": "251 01",
+            "city": "Popovi\u010dky",
+            "district": "Chomutovice"
+        },
+        "ds_id": "9vfakxa"
+    },
+    "Pop\u016fvky": {
+        "address": {
+            "street": "17",
+            "zip": "675 75",
+            "city": "Pop\u016fvky",
+            "district": "Pop\u016fvky"
+        },
+        "ds_id": "skdb4kj"
+    },
+    "Po\u0159\u00ed\u010dany": {
+        "address": {
+            "street": "Lipov\u00e1 235",
+            "zip": "289 14",
+            "city": "Po\u0159\u00ed\u010dany",
+            "district": "Po\u0159\u00ed\u010dany"
+        },
+        "ds_id": "8sbbj82"
+    },
+    "Po\u0159\u00ed\u010d\u00ed nad S\u00e1zavou": {
+        "address": {
+            "street": "S\u00e1zavsk\u00e1 57",
+            "zip": "257 21",
+            "city": "Po\u0159\u00ed\u010d\u00ed nad S\u00e1zavou",
+            "district": "Po\u0159\u00ed\u010d\u00ed nad S\u00e1zavou"
+        },
+        "ds_id": "irubi8b"
+    },
+    "Po\u0159\u00ed\u010d\u00ed u Litomy\u0161le": {
+        "address": {
+            "street": "81",
+            "zip": "570 01",
+            "city": "Po\u0159\u00ed\u010d\u00ed u Litomy\u0161le",
+            "district": "Po\u0159\u00ed\u010d\u00ed u Litomy\u0161le"
+        },
+        "ds_id": "3spa48c"
+    },
+    "Post\u0159ekov": {
+        "address": {
+            "street": "270",
+            "zip": "345 35",
+            "city": "Post\u0159ekov",
+            "district": "Post\u0159ekov"
+        },
+        "ds_id": "wjvby6y"
+    },
+    "Post\u0159elmov": {
+        "address": {
+            "street": "Komensk\u00e9ho 193",
+            "zip": "789 69",
+            "city": "Post\u0159elmov",
+            "district": "Post\u0159elmov"
+        },
+        "ds_id": "9ygbvij"
+    },
+    "Post\u0159elm\u016fvek": {
+        "address": {
+            "street": "73",
+            "zip": "789 01",
+            "city": "Post\u0159elm\u016fvek",
+            "district": "Post\u0159elm\u016fvek"
+        },
+        "ds_id": "errasez"
+    },
+    "Post\u0159i\u017e\u00edn": {
+        "address": {
+            "street": "Pra\u017esk\u00e1 42",
+            "zip": "250 70",
+            "city": "Post\u0159i\u017e\u00edn",
+            "district": "Post\u0159i\u017e\u00edn"
+        },
+        "ds_id": "4rfajux"
+    },
+    "Postupice": {
+        "address": {
+            "street": "\u0160koln\u00ed 154",
+            "zip": "257 01",
+            "city": "Postupice",
+            "district": "Postupice"
+        },
+        "ds_id": "4ntat7t"
+    },
+    "Po\u0161n\u00e1": {
+        "address": {
+            "street": "51",
+            "zip": "395 01",
+            "city": "Po\u0161n\u00e1",
+            "district": "Po\u0161n\u00e1"
+        },
+        "ds_id": "n2pbf8u"
+    },
+    "Po\u0161tovice": {
+        "address": {
+            "street": "13",
+            "zip": "273 72",
+            "city": "Po\u0161tovice",
+            "district": "Po\u0161tovice"
+        },
+        "ds_id": "uasb2f4"
+    },
+    "Pote\u010d": {
+        "address": {
+            "street": "12",
+            "zip": "766 01",
+            "city": "Pote\u010d",
+            "district": "Pote\u010d"
+        },
+        "ds_id": "4fqbus3"
+    },
+    "Pot\u011bhy": {
+        "address": {
+            "street": "60",
+            "zip": "285 63",
+            "city": "Pot\u011bhy",
+            "district": "Pot\u011bhy"
+        },
+        "ds_id": "29uakfd"
+    },
+    "Pot\u016f\u010dky": {
+        "address": {
+            "street": "58",
+            "zip": "362 35",
+            "city": "Pot\u016f\u010dky",
+            "district": "Pot\u016f\u010dky"
+        },
+        "ds_id": "a6wa7ut"
+    },
+    "Potvorov": {
+        "address": {
+            "street": "10",
+            "zip": "331 41",
+            "city": "Potvorov",
+            "district": "Potvorov"
+        },
+        "ds_id": "4eubxjd"
+    },
+    "Poustka": {
+        "address": {
+            "street": "33",
+            "zip": "350 02",
+            "city": "Poustka",
+            "district": "Poustka"
+        },
+        "ds_id": "5m6a63e"
+    },
+    "Pouzd\u0159any": {
+        "address": {
+            "street": "Hlavn\u00ed 99",
+            "zip": "691 26",
+            "city": "Pouzd\u0159any",
+            "district": "Pouzd\u0159any"
+        },
+        "ds_id": "fc8a2u6"
+    },
+    "Povrly": {
+        "address": {
+            "street": "M\u00edrov\u00e1 165",
+            "zip": "403 32",
+            "city": "Povrly",
+            "district": "Povrly"
+        },
+        "ds_id": "vkmbbxa"
+    },
+    "Poz\u010fat\u00edn": {
+        "address": {
+            "street": "75",
+            "zip": "675 03",
+            "city": "Poz\u010fat\u00edn",
+            "district": "Poz\u010fat\u00edn"
+        },
+        "ds_id": "gkxbta8"
+    },
+    "Pozd\u011bchov": {
+        "address": {
+            "street": "215",
+            "zip": "756 11",
+            "city": "Pozd\u011bchov",
+            "district": "Pozd\u011bchov"
+        },
+        "ds_id": "x2kb3ct"
+    },
+    "Pozde\u0148": {
+        "address": {
+            "street": "95",
+            "zip": "273 76",
+            "city": "Pozde\u0148",
+            "district": "Pozde\u0148"
+        },
+        "ds_id": "kvpb2mu"
+    },
+    "Prace": {
+        "address": {
+            "street": "Pon\u011btovsk\u00e1 129",
+            "zip": "664 58",
+            "city": "Prace",
+            "district": "Prace"
+        },
+        "ds_id": "4q3bu8a"
+    },
+    "Pracejovice": {
+        "address": {
+            "street": "28",
+            "zip": "386 01",
+            "city": "Pracejovice",
+            "district": "Pracejovice"
+        },
+        "ds_id": "ruzancf"
+    },
+    "Prackovice nad Labem": {
+        "address": {
+            "street": "54",
+            "zip": "411 33",
+            "city": "Prackovice nad Labem",
+            "district": "Prackovice nad Labem"
+        },
+        "ds_id": "ihabscw"
+    },
+    "Pr\u00e1\u010de": {
+        "address": {
+            "street": "112",
+            "zip": "671 61",
+            "city": "Pr\u00e1\u010de",
+            "district": "Pr\u00e1\u010de"
+        },
+        "ds_id": "rqqarwr"
+    },
+    "Pr\u00e1dlo": {
+        "address": {
+            "street": "21",
+            "zip": "335 01",
+            "city": "Pr\u00e1dlo",
+            "district": "Pr\u00e1dlo"
+        },
+        "ds_id": "b6ca8da"
+    },
+    "Prachovice": {
+        "address": {
+            "street": "Chrudimsk\u00e1 50",
+            "zip": "538 04",
+            "city": "Prachovice",
+            "district": "Prachovice"
+        },
+        "ds_id": "cn4b3hd"
+    },
+    "Prak\u0161ice": {
+        "address": {
+            "street": "29",
+            "zip": "687 56",
+            "city": "Prak\u0161ice",
+            "district": "Prak\u0161ice"
+        },
+        "ds_id": "k3mb3u2"
+    },
+    "Prameny": {
+        "address": {
+            "street": "32",
+            "zip": "353 01",
+            "city": "Prameny",
+            "district": "Prameny"
+        },
+        "ds_id": "mkxaywp"
+    },
+    "Prasklice": {
+        "address": {
+            "street": "77",
+            "zip": "768 33",
+            "city": "Prasklice",
+            "district": "Prasklice"
+        },
+        "ds_id": "duuatvq"
+    },
+    "Praskolesy": {
+        "address": {
+            "street": "130",
+            "zip": "267 54",
+            "city": "Praskolesy",
+            "district": "Praskolesy"
+        },
+        "ds_id": "g7ta7gf"
+    },
+    "Pr\u00e1\u0161ily": {
+        "address": {
+            "street": "110",
+            "zip": "342 01",
+            "city": "Pr\u00e1\u0161ily",
+            "district": "Pr\u00e1\u0161ily"
+        },
+        "ds_id": "4p7bxzj"
+    },
+    "Prav\u010dice": {
+        "address": {
+            "street": "46",
+            "zip": "768 24",
+            "city": "Prav\u010dice",
+            "district": "Prav\u010dice"
+        },
+        "ds_id": "abuarex"
+    },
+    "Pravice": {
+        "address": {
+            "street": "70",
+            "zip": "671 78",
+            "city": "Pravice",
+            "district": "Pravice"
+        },
+        "ds_id": "6jxa2tc"
+    },
+    "Pravlov": {
+        "address": {
+            "street": "30",
+            "zip": "664 64",
+            "city": "Pravlov",
+            "district": "Pravlov"
+        },
+        "ds_id": "zvga8xv"
+    },
+    "Pravon\u00edn": {
+        "address": {
+            "street": "156",
+            "zip": "257 09",
+            "city": "Pravon\u00edn",
+            "district": "Pravon\u00edn"
+        },
+        "ds_id": "rc9b8eg"
+    },
+    "Pravy": {
+        "address": {
+            "street": "47",
+            "zip": "533 41",
+            "city": "Pravy",
+            "district": "Pravy"
+        },
+        "ds_id": "cjya497"
+    },
+    "Pra\u017emo": {
+        "address": {
+            "street": "153",
+            "zip": "739 04",
+            "city": "Pra\u017emo",
+            "district": "Pra\u017emo"
+        },
+        "ds_id": "4r5a5rw"
+    },
+    "Prlov": {
+        "address": {
+            "street": "141",
+            "zip": "756 11",
+            "city": "Prlov",
+            "district": "Prlov"
+        },
+        "ds_id": "i45aret"
+    },
+    "Probo\u0161tov": {
+        "address": {
+            "street": "n\u00e1m. Svobody 700",
+            "zip": "417 12",
+            "city": "Probo\u0161tov",
+            "district": "Probo\u0161tov"
+        },
+        "ds_id": "ks6bymm"
+    },
+    "Probulov": {
+        "address": {
+            "street": "32",
+            "zip": "398 04",
+            "city": "Probulov",
+            "district": "Probulov"
+        },
+        "ds_id": "nzmb7pb"
+    },
+    "Proda\u0161ice": {
+        "address": {
+            "street": "28",
+            "zip": "294 04",
+            "city": "Proda\u0161ice",
+            "district": "Proda\u0161ice"
+        },
+        "ds_id": "xhjb69z"
+    },
+    "Prokopov": {
+        "address": {
+            "street": "17",
+            "zip": "671 54",
+            "city": "Prokopov",
+            "district": "Prokopov"
+        },
+        "ds_id": "vsna2tf"
+    },
+    "Prose\u010d pod Je\u0161t\u011bdem": {
+        "address": {
+            "street": "89",
+            "zip": "463 43",
+            "city": "Prose\u010d pod Je\u0161t\u011bdem",
+            "district": "Prose\u010d pod Je\u0161t\u011bdem"
+        },
+        "ds_id": "ngsbnwb"
+    },
+    "Prose\u010d pod K\u0159eme\u0161n\u00edkem": {
+        "address": {
+            "street": "19",
+            "zip": "393 01",
+            "city": "Prose\u010d pod K\u0159eme\u0161n\u00edkem",
+            "district": "Prose\u010d pod K\u0159eme\u0161n\u00edkem"
+        },
+        "ds_id": "xtybf8q"
+    },
+    "Prosenice": {
+        "address": {
+            "street": "Na N\u00e1vsi 10",
+            "zip": "751 21",
+            "city": "Prosenice",
+            "district": "Prosenice"
+        },
+        "ds_id": "zvdbjaw"
+    },
+    "Prosenick\u00e1 Lhota": {
+        "address": {
+            "street": "20",
+            "zip": "264 01",
+            "city": "Prosenick\u00e1 Lhota",
+            "district": "Prosenick\u00e1 Lhota"
+        },
+        "ds_id": "sjyajnh"
+    },
+    "Proset\u00edn": {
+        "address": {
+            "street": "34",
+            "zip": "592 64",
+            "city": "Proset\u00edn",
+            "district": "Proset\u00edn"
+        },
+        "ds_id": "bpnb2yu"
+    },
+    "Pros\u00ed\u010dka": {
+        "address": {
+            "street": "7",
+            "zip": "584 01",
+            "city": "Pros\u00ed\u010dka",
+            "district": "Horn\u00ed Pros\u00ed\u010dka"
+        },
+        "ds_id": "4e5ayi7"
+    },
+    "Prost\u011bjovi\u010dky": {
+        "address": {
+            "street": "67",
+            "zip": "798 03",
+            "city": "Prost\u011bjovi\u010dky",
+            "district": "Prost\u011bjovi\u010dky"
+        },
+        "ds_id": "89hbx8i"
+    },
+    "Prostibo\u0159": {
+        "address": {
+            "street": "37",
+            "zip": "349 01",
+            "city": "Prostibo\u0159",
+            "district": "Prostibo\u0159"
+        },
+        "ds_id": "nbqbiwt"
+    },
+    "Prost\u0159edn\u00ed Be\u010dva": {
+        "address": {
+            "street": "272",
+            "zip": "756 56",
+            "city": "Prost\u0159edn\u00ed Be\u010dva",
+            "district": "Prost\u0159edn\u00ed Be\u010dva"
+        },
+        "ds_id": "wiea7pb"
+    },
+    "Prost\u0159edn\u00ed Po\u0159\u00ed\u010d\u00ed": {
+        "address": {
+            "street": "9",
+            "zip": "679 62",
+            "city": "Prost\u0159edn\u00ed Po\u0159\u00ed\u010d\u00ed",
+            "district": "Prost\u0159edn\u00ed Po\u0159\u00ed\u010d\u00ed"
+        },
+        "ds_id": "kzda2tj"
+    },
+    "Provod\u00edn": {
+        "address": {
+            "street": "80",
+            "zip": "471 67",
+            "city": "Provod\u00edn",
+            "district": "Provod\u00edn"
+        },
+        "ds_id": "adea8ii"
+    },
+    "Provodovice": {
+        "address": {
+            "street": "49",
+            "zip": "753 53",
+            "city": "Provodovice",
+            "district": "Provodovice"
+        },
+        "ds_id": "9jqbvvf"
+    },
+    "Provodov-\u0160onov": {
+        "address": {
+            "street": "134",
+            "zip": "549 08",
+            "city": "Provodov-\u0160onov",
+            "district": "\u0160onov u Nov\u00e9ho M\u011bsta nad Metuj\u00ed"
+        },
+        "ds_id": "q8jas2m"
+    },
+    "Pr\u0161tice": {
+        "address": {
+            "street": "Hlavn\u00ed 1",
+            "zip": "664 46",
+            "city": "Pr\u0161tice",
+            "district": "Pr\u0161tice"
+        },
+        "ds_id": "vbganty"
+    },
+    "Pr\u016fhonice": {
+        "address": {
+            "street": "Kv\u011btnov\u00e9 n\u00e1m\u011bst\u00ed 73",
+            "zip": "252 43",
+            "city": "Pr\u016fhonice",
+            "district": "Pr\u016fhonice"
+        },
+        "ds_id": "padbbvg"
+    },
+    "Prusice": {
+        "address": {
+            "street": "11",
+            "zip": "281 63",
+            "city": "Prusice",
+            "district": "Prusice"
+        },
+        "ds_id": "inqaky5"
+    },
+    "Prusinovice": {
+        "address": {
+            "street": "Z\u00e1m\u010disko 350",
+            "zip": "768 42",
+            "city": "Prusinovice",
+            "district": "Prusinovice"
+        },
+        "ds_id": "42hbjbb"
+    },
+    "Prusy-Bo\u0161k\u016fvky": {
+        "address": {
+            "street": "40",
+            "zip": "682 01",
+            "city": "Prusy-Bo\u0161k\u016fvky",
+            "district": "Moravsk\u00e9 Prusy"
+        },
+        "ds_id": "t88bjbh"
+    },
+    "Pru\u0161\u00e1nky": {
+        "address": {
+            "street": "100",
+            "zip": "696 21",
+            "city": "Pru\u0161\u00e1nky",
+            "district": "Pru\u0161\u00e1nky"
+        },
+        "ds_id": "eg4bbvn"
+    },
+    "Prysk": {
+        "address": {
+            "street": "17",
+            "zip": "471 15",
+            "city": "Prysk",
+            "district": "Doln\u00ed Prysk"
+        },
+        "ds_id": "x3uan79"
+    },
+    "Pr\u017eno": {
+        "address": {
+            "street": "201",
+            "zip": "739 11",
+            "city": "Pr\u017eno",
+            "district": "Pr\u017eno"
+        },
+        "ds_id": "5cta6m8"
+    },
+    "P\u0159\u00e1slavice": {
+        "address": {
+            "street": "23",
+            "zip": "783 54",
+            "city": "P\u0159\u00e1slavice",
+            "district": "P\u0159\u00e1slavice"
+        },
+        "ds_id": "bcnbvr6"
+    },
+    "P\u0159eborov": {
+        "address": {
+            "street": "23",
+            "zip": "399 01",
+            "city": "P\u0159eborov",
+            "district": "P\u0159eborov"
+        },
+        "ds_id": "mp3bw6v"
+    },
+    "P\u0159eckov": {
+        "address": {
+            "street": "5",
+            "zip": "675 05",
+            "city": "P\u0159eckov",
+            "district": "P\u0159eckov"
+        },
+        "ds_id": "t9eawmc"
+    },
+    "P\u0159edenice": {
+        "address": {
+            "street": "7",
+            "zip": "332 09",
+            "city": "P\u0159edenice",
+            "district": "P\u0159edenice"
+        },
+        "ds_id": "huubw25"
+    },
+    "P\u0159edhrad\u00ed": {
+        "address": {
+            "street": "kap. Svaton\u011b 80",
+            "zip": "539 74",
+            "city": "P\u0159edhrad\u00ed",
+            "district": "P\u0159edhrad\u00ed"
+        },
+        "ds_id": "tkya3bk"
+    },
+    "P\u0159ed\u00edn": {
+        "address": {
+            "street": "243",
+            "zip": "675 27",
+            "city": "P\u0159ed\u00edn",
+            "district": "P\u0159ed\u00edn"
+        },
+        "ds_id": "8k9bf8m"
+    },
+    "P\u0159edkl\u00e1\u0161te\u0159\u00ed": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed 5. kv\u011btna 1390",
+            "zip": "666 02",
+            "city": "P\u0159edkl\u00e1\u0161te\u0159\u00ed",
+            "district": "P\u0159edkl\u00e1\u0161te\u0159\u00ed"
+        },
+        "ds_id": "q77b4ey"
+    },
+    "P\u0159edm\u011b\u0159ice nad Jizerou": {
+        "address": {
+            "street": "132",
+            "zip": "294 74",
+            "city": "P\u0159edm\u011b\u0159ice nad Jizerou",
+            "district": "P\u0159edm\u011b\u0159ice nad Jizerou"
+        },
+        "ds_id": "va4bx7b"
+    },
+    "P\u0159edm\u011b\u0159ice nad Labem": {
+        "address": {
+            "street": "Obr\u00e1nc\u016f m\u00edru 18",
+            "zip": "503 02",
+            "city": "P\u0159edm\u011b\u0159ice nad Labem",
+            "district": "P\u0159edm\u011b\u0159ice nad Labem"
+        },
+        "ds_id": "jrda9er"
+    },
+    "P\u0159edm\u00ed\u0159": {
+        "address": {
+            "street": "43",
+            "zip": "387 42",
+            "city": "P\u0159edm\u00ed\u0159",
+            "district": "P\u0159edm\u00ed\u0159"
+        },
+        "ds_id": "2naanca"
+    },
+    "P\u0159edn\u00ed V\u00fdto\u0148": {
+        "address": {
+            "street": "30",
+            "zip": "382 73",
+            "city": "P\u0159edn\u00ed V\u00fdto\u0148",
+            "district": "P\u0159edn\u00ed V\u00fdto\u0148"
+        },
+        "ds_id": "sycbupv"
+    },
+    "P\u0159edn\u00ed Zborovice": {
+        "address": {
+            "street": "5",
+            "zip": "387 01",
+            "city": "P\u0159edn\u00ed Zborovice",
+            "district": "P\u0159edn\u00ed Zborovice"
+        },
+        "ds_id": "576am2u"
+    },
+    "P\u0159edotice": {
+        "address": {
+            "street": "3",
+            "zip": "397 01",
+            "city": "P\u0159edotice",
+            "district": "P\u0159edotice"
+        },
+        "ds_id": "pwqbhid"
+    },
+    "P\u0159edslav": {
+        "address": {
+            "street": "124",
+            "zip": "339 01",
+            "city": "P\u0159edslav",
+            "district": "P\u0159edslav"
+        },
+        "ds_id": "cjsbrxa"
+    },
+    "P\u0159edslavice": {
+        "address": {
+            "street": "17",
+            "zip": "387 01",
+            "city": "P\u0159edslavice",
+            "district": "P\u0159edslavice"
+        },
+        "ds_id": "ezfam3k"
+    },
+    "P\u0159eho\u0159ov": {
+        "address": {
+            "street": "11",
+            "zip": "392 01",
+            "city": "P\u0159eho\u0159ov",
+            "district": "P\u0159eho\u0159ov"
+        },
+        "ds_id": "335atbg"
+    },
+    "P\u0159ehvozd\u00ed": {
+        "address": {
+            "street": "46",
+            "zip": "281 63",
+            "city": "P\u0159ehvozd\u00ed",
+            "district": "P\u0159ehvozd\u00ed"
+        },
+        "ds_id": "g4havwc"
+    },
+    "P\u0159eh\u00fd\u0161ov": {
+        "address": {
+            "street": "201",
+            "zip": "330 23",
+            "city": "P\u0159eh\u00fd\u0161ov",
+            "district": "P\u0159eh\u00fd\u0161ov"
+        },
+        "ds_id": "p58bzv8"
+    },
+    "P\u0159echovice": {
+        "address": {
+            "street": "7",
+            "zip": "387 01",
+            "city": "P\u0159echovice",
+            "district": "P\u0159echovice"
+        },
+        "ds_id": "622bq6u"
+    },
+    "P\u0159el\u00edc": {
+        "address": {
+            "street": "119",
+            "zip": "273 05",
+            "city": "P\u0159el\u00edc",
+            "district": "P\u0159el\u00edc"
+        },
+        "ds_id": "byea663"
+    },
+    "P\u0159elovice": {
+        "address": {
+            "street": "87",
+            "zip": "533 41",
+            "city": "P\u0159elovice",
+            "district": "P\u0159elovice"
+        },
+        "ds_id": "ysma87f"
+    },
+    "P\u0159emyslovice": {
+        "address": {
+            "street": "281",
+            "zip": "798 51",
+            "city": "P\u0159emyslovice",
+            "district": "P\u0159emyslovice"
+        },
+        "ds_id": "sfhbbwv"
+    },
+    "P\u0159epe\u0159e": {
+        "address": {
+            "street": "12",
+            "zip": "294 04",
+            "city": "P\u0159epe\u0159e",
+            "district": "P\u0159epe\u0159e"
+        },
+        "ds_id": "hu5axzx"
+    },
+    "P\u0159epychy": {
+        "address": {
+            "street": "45",
+            "zip": "533 16",
+            "city": "P\u0159epychy",
+            "district": "P\u0159epychy"
+        },
+        "ds_id": "v6ia49v"
+    },
+    "P\u0159erov nad Labem": {
+        "address": {
+            "street": "38",
+            "zip": "289 16",
+            "city": "P\u0159erov nad Labem",
+            "district": "P\u0159erov nad Labem"
+        },
+        "ds_id": "7etb5xc"
+    },
+    "P\u0159erubenice": {
+        "address": {
+            "street": "42",
+            "zip": "270 54",
+            "city": "P\u0159erubenice",
+            "district": "P\u0159erubenice"
+        },
+        "ds_id": "w5ejd4h"
+    },
+    "P\u0159eska\u010de": {
+        "address": {
+            "street": "45",
+            "zip": "671 40",
+            "city": "P\u0159eska\u010de",
+            "district": "P\u0159eska\u010de"
+        },
+        "ds_id": "99qb8bu"
+    },
+    "P\u0159estanov": {
+        "address": {
+            "street": "18",
+            "zip": "403 17",
+            "city": "P\u0159estanov",
+            "district": "P\u0159estanov"
+        },
+        "ds_id": "4vmasmq"
+    },
+    "P\u0159estavlky": {
+        "address": {
+            "street": "109",
+            "zip": "750 02",
+            "city": "P\u0159estavlky",
+            "district": "P\u0159estavlky"
+        },
+        "ds_id": "2vhb5qb"
+    },
+    "P\u0159estavlky u \u010cer\u010dan": {
+        "address": {
+            "street": "48",
+            "zip": "257 23",
+            "city": "P\u0159estavlky u \u010cer\u010dan",
+            "district": "P\u0159estavlky u \u010cer\u010dan"
+        },
+        "ds_id": "rsgakc6"
+    },
+    "P\u0159e\u0161ovice": {
+        "address": {
+            "street": "29",
+            "zip": "675 57",
+            "city": "P\u0159e\u0161ovice",
+            "district": "P\u0159e\u0161ovice"
+        },
+        "ds_id": "xfwb2gh"
+    },
+    "P\u0159e\u0161t\u011bnice": {
+        "address": {
+            "street": "17",
+            "zip": "399 01",
+            "city": "P\u0159e\u0161t\u011bnice",
+            "district": "P\u0159e\u0161t\u011bnice"
+        },
+        "ds_id": "whcbw6p"
+    },
+    "P\u0159e\u0161\u0165ovice": {
+        "address": {
+            "street": "36",
+            "zip": "386 01",
+            "city": "P\u0159e\u0161\u0165ovice",
+            "district": "P\u0159e\u0161\u0165ovice"
+        },
+        "ds_id": "2cjbxae"
+    },
+    "P\u0159ev\u00fd\u0161ov": {
+        "address": {
+            "street": "89",
+            "zip": "503 51",
+            "city": "P\u0159ev\u00fd\u0161ov",
+            "district": "P\u0159ev\u00fd\u0161ov"
+        },
+        "ds_id": "qpfa9aw"
+    },
+    "P\u0159ezletice": {
+        "address": {
+            "street": "Vele\u0148sk\u00e1 48",
+            "zip": "250 73",
+            "city": "P\u0159ezletice",
+            "district": "P\u0159ezletice"
+        },
+        "ds_id": "y4jb5vi"
+    },
+    "P\u0159ibice": {
+        "address": {
+            "street": "348",
+            "zip": "691 24",
+            "city": "P\u0159ibice",
+            "district": "P\u0159ibice"
+        },
+        "ds_id": "raqb6e7"
+    },
+    "P\u0159\u00edbram Na Morav\u011b": {
+        "address": {
+            "street": "33",
+            "zip": "664 84",
+            "city": "P\u0159\u00edbram na Morav\u011b",
+            "district": "P\u0159\u00edbram na Morav\u011b"
+        },
+        "ds_id": "qepb44n"
+    },
+    "P\u0159\u00edbraz": {
+        "address": {
+            "street": "155",
+            "zip": "378 02",
+            "city": "P\u0159\u00edbraz",
+            "district": "P\u0159\u00edbraz"
+        },
+        "ds_id": "5rnatx9"
+    },
+    "P\u0159ibyslavice": {
+        "address": {
+            "street": "Na N\u00e1vsi 40",
+            "zip": "675 21",
+            "city": "P\u0159ibyslavice",
+            "district": "P\u0159ibyslavice"
+        },
+        "ds_id": "diia8jx"
+    },
+    "P\u0159\u00ed\u010dina": {
+        "address": {
+            "street": "67",
+            "zip": "270 35",
+            "city": "P\u0159\u00ed\u010dina",
+            "district": "P\u0159\u00ed\u010dina"
+        },
+        "ds_id": "rm7apwi"
+    },
+    "P\u0159\u00ed\u010dovy": {
+        "address": {
+            "street": "14",
+            "zip": "264 01",
+            "city": "P\u0159\u00ed\u010dovy",
+            "district": "P\u0159\u00ed\u010dovy"
+        },
+        "ds_id": "pynapap"
+    },
+    "P\u0159\u00edchovice": {
+        "address": {
+            "street": "37",
+            "zip": "334 01",
+            "city": "P\u0159\u00edchovice",
+            "district": "P\u0159\u00edchovice"
+        },
+        "ds_id": "ww9auzd"
+    },
+    "P\u0159\u00edkazy": {
+        "address": {
+            "street": "125",
+            "zip": "783 33",
+            "city": "P\u0159\u00edkazy",
+            "district": "P\u0159\u00edkazy"
+        },
+        "ds_id": "pi2asev"
+    },
+    "P\u0159\u00edkosice": {
+        "address": {
+            "street": "128",
+            "zip": "338 43",
+            "city": "P\u0159\u00edkosice",
+            "district": "P\u0159\u00edkosice"
+        },
+        "ds_id": "n48bh85"
+    },
+    "P\u0159\u00edkr\u00fd": {
+        "address": {
+            "street": "70",
+            "zip": "513 01",
+            "city": "P\u0159\u00edkr\u00fd",
+            "district": "P\u0159\u00edkr\u00fd"
+        },
+        "ds_id": "ktian9a"
+    },
+    "P\u0159\u00edlepy": {
+        "address": {
+            "street": "46",
+            "zip": "270 01",
+            "city": "P\u0159\u00edlepy",
+            "district": "P\u0159\u00edlepy"
+        },
+        "ds_id": "f7kaxd5"
+    },
+    "P\u0159\u00edluka": {
+        "address": {
+            "street": "80",
+            "zip": "539 44",
+            "city": "P\u0159\u00edluka",
+            "district": "P\u0159\u00edluka"
+        },
+        "ds_id": "v77a92f"
+    },
+    "P\u0159\u00edse\u010dn\u00e1": {
+        "address": {
+            "street": "25",
+            "zip": "381 01",
+            "city": "P\u0159\u00edse\u010dn\u00e1",
+            "district": "P\u0159\u00edse\u010dn\u00e1"
+        },
+        "ds_id": "psqam3g"
+    },
+    "P\u0159\u00edseka": {
+        "address": {
+            "street": "8",
+            "zip": "582 91",
+            "city": "P\u0159\u00edseka",
+            "district": "P\u0159\u00edseka"
+        },
+        "ds_id": "9vxbtic"
+    },
+    "P\u0159\u00edsnotice": {
+        "address": {
+            "street": "Vranovick\u00e1 75",
+            "zip": "664 63",
+            "city": "P\u0159\u00edsnotice",
+            "district": "P\u0159\u00edsnotice"
+        },
+        "ds_id": "xefa8zt"
+    },
+    "P\u0159istoupim": {
+        "address": {
+            "street": "80",
+            "zip": "282 01",
+            "city": "P\u0159istoupim",
+            "district": "P\u0159istoupim"
+        },
+        "ds_id": "qd4a8ur"
+    },
+    "P\u0159i\u0161imasy": {
+        "address": {
+            "street": "Jana \u010cerm\u00e1ka 80",
+            "zip": "282 01",
+            "city": "P\u0159i\u0161imasy",
+            "district": "P\u0159i\u0161imasy"
+        },
+        "ds_id": "2ekaspn"
+    },
+    "P\u0159\u00ed\u0161ov": {
+        "address": {
+            "street": "36",
+            "zip": "330 11",
+            "city": "P\u0159\u00ed\u0161ov",
+            "district": "P\u0159\u00ed\u0161ov"
+        },
+        "ds_id": "mcgavp8"
+    },
+    "P\u0159\u00ed\u0161ovice": {
+        "address": {
+            "street": "60",
+            "zip": "463 46",
+            "city": "P\u0159\u00ed\u0161ovice",
+            "district": "P\u0159\u00ed\u0161ovice"
+        },
+        "ds_id": "hm8bbw3"
+    },
+    "P\u0159\u00ed\u0161tpo": {
+        "address": {
+            "street": "57",
+            "zip": "675 51",
+            "city": "P\u0159\u00ed\u0161tpo",
+            "district": "P\u0159\u00ed\u0161tpo"
+        },
+        "ds_id": "wtra75g"
+    },
+    "P\u0159\u00edtluky": {
+        "address": {
+            "street": "Obecn\u00ed 11",
+            "zip": "691 04",
+            "city": "P\u0159\u00edtluky",
+            "district": "P\u0159\u00edtluky"
+        },
+        "ds_id": "b74a2tr"
+    },
+    "P\u0159\u00edv\u011btice": {
+        "address": {
+            "street": "76",
+            "zip": "338 28",
+            "city": "P\u0159\u00edv\u011btice",
+            "district": "P\u0159\u00edv\u011btice"
+        },
+        "ds_id": "sucay8y"
+    },
+    "P\u0159\u00edvrat": {
+        "address": {
+            "street": "11",
+            "zip": "560 02",
+            "city": "P\u0159\u00edvrat",
+            "district": "P\u0159\u00edvrat"
+        },
+        "ds_id": "xria3vf"
+    },
+    "Ps\u00e1rov": {
+        "address": {
+            "street": "45",
+            "zip": "392 01",
+            "city": "Ps\u00e1rov",
+            "district": "Ps\u00e1rov"
+        },
+        "ds_id": "vcaj2xw"
+    },
+    "Ps\u00e1\u0159e": {
+        "address": {
+            "street": "19",
+            "zip": "258 01",
+            "city": "Ps\u00e1\u0159e",
+            "district": "Ps\u00e1\u0159e"
+        },
+        "ds_id": "mzebxkz"
+    },
+    "Pstru\u017e\u00ed": {
+        "address": {
+            "street": "93",
+            "zip": "739 11",
+            "city": "Pstru\u017e\u00ed",
+            "district": "Pstru\u017e\u00ed"
+        },
+        "ds_id": "wwdaxsk"
+    },
+    "P\u0161ov": {
+        "address": {
+            "street": "48",
+            "zip": "364 52",
+            "city": "P\u0161ov",
+            "district": "P\u0161ov"
+        },
+        "ds_id": "spsb3ti"
+    },
+    "P\u0161ovlky": {
+        "address": {
+            "street": "97",
+            "zip": "270 31",
+            "city": "P\u0161ovlky",
+            "district": "P\u0161ovlky"
+        },
+        "ds_id": "hpvbgpk"
+    },
+    "Pten\u00ed": {
+        "address": {
+            "street": "36",
+            "zip": "798 43",
+            "city": "Pten\u00ed",
+            "district": "Pten\u00ed"
+        },
+        "ds_id": "5ptbbuu"
+    },
+    "Pten\u00edn": {
+        "address": {
+            "street": "58",
+            "zip": "334 52",
+            "city": "Pten\u00edn",
+            "district": "Pten\u00edn"
+        },
+        "ds_id": "bzaa4ds"
+    },
+    "Ptice": {
+        "address": {
+            "street": "Hlavn\u00ed 140",
+            "zip": "252 18",
+            "city": "Ptice",
+            "district": "Ptice"
+        },
+        "ds_id": "ywzata3"
+    },
+    "Pt\u00fdrov": {
+        "address": {
+            "street": "19",
+            "zip": "295 01",
+            "city": "Pt\u00fdrov",
+            "district": "Pt\u00fdrov"
+        },
+        "ds_id": "xt6atim"
+    },
+    "Puclice": {
+        "address": {
+            "street": "1",
+            "zip": "345 61",
+            "city": "Puclice",
+            "district": "Puclice"
+        },
+        "ds_id": "xwhbh8x"
+    },
+    "Pucov": {
+        "address": {
+            "street": "19",
+            "zip": "675 71",
+            "city": "Pucov",
+            "district": "Pucov"
+        },
+        "ds_id": "2nvbik9"
+    },
+    "Puklice": {
+        "address": {
+            "street": "24",
+            "zip": "588 31",
+            "city": "Puklice",
+            "district": "Puklice"
+        },
+        "ds_id": "rg2av95"
+    },
+    "Pule\u010dn\u00fd": {
+        "address": {
+            "street": "26",
+            "zip": "468 02",
+            "city": "Pule\u010dn\u00fd",
+            "district": "Pule\u010dn\u00fd"
+        },
+        "ds_id": "6bgaxkv"
+    },
+    "Pust\u00e1 Kamenice": {
+        "address": {
+            "street": "64",
+            "zip": "569 82",
+            "city": "Pust\u00e1 Kamenice",
+            "district": "Pust\u00e1 Kamenice"
+        },
+        "ds_id": "uavbp4z"
+    },
+    "Pust\u00e1 Polom": {
+        "address": {
+            "street": "Slezsk\u00e1 94",
+            "zip": "747 69",
+            "city": "Pust\u00e1 Polom",
+            "district": "Pust\u00e1 Polom"
+        },
+        "ds_id": "ur3b34h"
+    },
+    "Pust\u00e1 Rybn\u00e1": {
+        "address": {
+            "street": "48",
+            "zip": "572 01",
+            "city": "Pust\u00e1 Rybn\u00e1",
+            "district": "Pust\u00e1 Rybn\u00e1"
+        },
+        "ds_id": "6xta49r"
+    },
+    "Pust\u011bjov": {
+        "address": {
+            "street": "54",
+            "zip": "742 43",
+            "city": "Pust\u011bjov",
+            "district": "Pust\u011bjov"
+        },
+        "ds_id": "7pnaxsh"
+    },
+    "Pustim\u011b\u0159": {
+        "address": {
+            "street": "79",
+            "zip": "683 21",
+            "city": "Pustim\u011b\u0159",
+            "district": "Pustim\u011b\u0159sk\u00e9 Prusy"
+        },
+        "ds_id": "6t8bsqx"
+    },
+    "Pustina": {
+        "address": {
+            "street": "60",
+            "zip": "566 01",
+            "city": "Pustina",
+            "district": "Pustina"
+        },
+        "ds_id": "fq4a5ak"
+    },
+    "Pustov\u011bty": {
+        "address": {
+            "street": "62",
+            "zip": "270 23",
+            "city": "Pustov\u011bty",
+            "district": "Pustov\u011bty"
+        },
+        "ds_id": "aiaby85"
+    },
+    "Putim": {
+        "address": {
+            "street": "198",
+            "zip": "397 01",
+            "city": "Putim",
+            "district": "Putim"
+        },
+        "ds_id": "yjzam3d"
+    },
+    "Putimov": {
+        "address": {
+            "street": "47",
+            "zip": "393 01",
+            "city": "Putimov",
+            "district": "Putimov"
+        },
+        "ds_id": "vt5bua5"
+    },
+    "Py\u0161el": {
+        "address": {
+            "street": "52",
+            "zip": "675 71",
+            "city": "Py\u0161el",
+            "district": "Py\u0161el"
+        },
+        "ds_id": "tbqaqib"
+    },
+    "Rabakov": {
+        "address": {
+            "street": "1",
+            "zip": "294 04",
+            "city": "Rabakov",
+            "district": "Rabakov"
+        },
+        "ds_id": "2m7aypf"
+    },
+    "Rab\u0161tejnsk\u00e1 Lhota": {
+        "address": {
+            "street": "130",
+            "zip": "537 01",
+            "city": "Rab\u0161tejnsk\u00e1 Lhota",
+            "district": "Rab\u0161tejnsk\u00e1 Lhota"
+        },
+        "ds_id": "v9nb3h3"
+    },
+    "R\u00e1by": {
+        "address": {
+            "street": "5",
+            "zip": "533 52",
+            "city": "R\u00e1by",
+            "district": "R\u00e1by"
+        },
+        "ds_id": "y79a53c"
+    },
+    "Rabyn\u011b": {
+        "address": {
+            "street": "16",
+            "zip": "257 44",
+            "city": "Rabyn\u011b",
+            "district": "Bla\u017eenice"
+        },
+        "ds_id": "47uaqam"
+    },
+    "Rackov\u00e1": {
+        "address": {
+            "street": "45",
+            "zip": "760 01",
+            "city": "Rackov\u00e1",
+            "district": "Rackov\u00e1"
+        },
+        "ds_id": "tkpb2cs"
+    },
+    "R\u00e1covice": {
+        "address": {
+            "street": "45",
+            "zip": "675 32",
+            "city": "R\u00e1covice",
+            "district": "R\u00e1covice"
+        },
+        "ds_id": "inia9nb"
+    },
+    "Ra\u010detice": {
+        "address": {
+            "street": "11",
+            "zip": "438 01",
+            "city": "Ra\u010detice",
+            "district": "Ra\u010detice"
+        },
+        "ds_id": "tk3aqyh"
+    },
+    "Ra\u010dice": {
+        "address": {
+            "street": "5",
+            "zip": "675 55",
+            "city": "Ra\u010dice",
+            "district": "Ra\u010dice"
+        },
+        "ds_id": "yn8a9yi"
+    },
+    "Ra\u010dice - P\u00edstovice": {
+        "address": {
+            "street": "72",
+            "zip": "683 05",
+            "city": "Ra\u010dice-P\u00edstovice",
+            "district": "Ra\u010dice"
+        },
+        "ds_id": "uwibbux"
+    },
+    "Ra\u010d\u00edn": {
+        "address": {
+            "street": "18",
+            "zip": "592 11",
+            "city": "Ra\u010d\u00edn",
+            "district": "Ra\u010d\u00edn"
+        },
+        "ds_id": "fv9awxy"
+    },
+    "Ra\u010din\u011bves": {
+        "address": {
+            "street": "1",
+            "zip": "413 01",
+            "city": "Ra\u010din\u011bves",
+            "district": "Ra\u010din\u011bves"
+        },
+        "ds_id": "q52aq2e"
+    },
+    "Rad\u010dice": {
+        "address": {
+            "street": "90",
+            "zip": "468 22",
+            "city": "Rad\u010dice",
+            "district": "Rad\u010dice"
+        },
+        "ds_id": "jysb34k"
+    },
+    "Rad\u011bjov": {
+        "address": {
+            "street": "130",
+            "zip": "696 67",
+            "city": "Rad\u011bjov",
+            "district": "Rad\u011bjov"
+        },
+        "ds_id": "23qa7wb"
+    },
+    "Rad\u011bjovice": {
+        "address": {
+            "street": "10",
+            "zip": "387 73",
+            "city": "Rad\u011bjovice",
+            "district": "Rad\u011bjovice"
+        },
+        "ds_id": "bfjand4"
+    },
+    "Radenice": {
+        "address": {
+            "street": "32",
+            "zip": "591 01",
+            "city": "Radenice",
+            "district": "Radenice"
+        },
+        "ds_id": "eeja9vf"
+    },
+    "Raden\u00edn": {
+        "address": {
+            "street": "61",
+            "zip": "391 20",
+            "city": "Raden\u00edn",
+            "district": "Raden\u00edn"
+        },
+        "ds_id": "edvapyj"
+    },
+    "Rade\u0161\u00edn": {
+        "address": {
+            "street": "58",
+            "zip": "592 55",
+            "city": "Rade\u0161\u00edn",
+            "district": "Rade\u0161\u00edn"
+        },
+        "ds_id": "gprav99"
+    },
+    "Rade\u0161\u00ednsk\u00e1 Svratka": {
+        "address": {
+            "street": "134",
+            "zip": "592 33",
+            "city": "Rade\u0161\u00ednsk\u00e1 Svratka",
+            "district": "Rade\u0161\u00ednsk\u00e1 Svratka"
+        },
+        "ds_id": "rvsavw8"
+    },
+    "Rad\u011btice": {
+        "address": {
+            "street": "27",
+            "zip": "262 31",
+            "city": "Rad\u011btice",
+            "district": "Rad\u011btice"
+        },
+        "ds_id": "fw5at6p"
+    },
+    "Radhostice": {
+        "address": {
+            "street": "21",
+            "zip": "384 81",
+            "city": "Radhostice",
+            "district": "Radhostice"
+        },
+        "ds_id": "j9kedv6"
+    },
+    "Radho\u0161\u0165": {
+        "address": {
+            "street": "53",
+            "zip": "534 01",
+            "city": "Radho\u0161\u0165",
+            "district": "Radho\u0161\u0165"
+        },
+        "ds_id": "m6jbq9e"
+    },
+    "Rad\u00ed\u010d": {
+        "address": {
+            "street": "14",
+            "zip": "264 01",
+            "city": "Rad\u00ed\u010d",
+            "district": "Rad\u00ed\u010d"
+        },
+        "ds_id": "h2vbmw9"
+    },
+    "Rad\u00edkov": {
+        "address": {
+            "street": "48",
+            "zip": "753 01",
+            "city": "Rad\u00edkov",
+            "district": "Rad\u00edkov"
+        },
+        "ds_id": "mv4bm2y"
+    },
+    "Radim": {
+        "address": {
+            "street": "6",
+            "zip": "281 03",
+            "city": "Radim",
+            "district": "Radim"
+        },
+        "ds_id": "rvkbikc"
+    },
+    "Radimovice": {
+        "address": {
+            "street": "47",
+            "zip": "463 44",
+            "city": "Radimovice",
+            "district": "Radimovice"
+        },
+        "ds_id": "zw2bp3g"
+    },
+    "Radimovice u T\u00e1bora": {
+        "address": {
+            "street": "18",
+            "zip": "391 31",
+            "city": "Radimovice u T\u00e1bora",
+            "district": "Radimovice u T\u00e1bora"
+        },
+        "ds_id": "zjub7iy"
+    },
+    "Radimovice u \u017del\u010de": {
+        "address": {
+            "street": "40",
+            "zip": "390 02",
+            "city": "Radimovice u \u017del\u010de",
+            "district": "Radimovice u \u017del\u010de"
+        },
+        "ds_id": "kqta9x9"
+    },
+    "Radkov": {
+        "address": {
+            "street": "58",
+            "zip": "747 84",
+            "city": "Radkov",
+            "district": "Radkov"
+        },
+        "ds_id": "pa6bjfc"
+    },
+    "Radkova Lhota": {
+        "address": {
+            "street": "20",
+            "zip": "751 14",
+            "city": "Radkova Lhota",
+            "district": "Radkova Lhota"
+        },
+        "ds_id": "ycbasep"
+    },
+    "Radkovice": {
+        "address": {
+            "street": "65",
+            "zip": "334 01",
+            "city": "Radkovice",
+            "district": "Radkovice"
+        },
+        "ds_id": "n8mbhf3"
+    },
+    "Radkovice u Bud\u010de": {
+        "address": {
+            "street": "14",
+            "zip": "380 01",
+            "city": "Radkovice u Bud\u010de",
+            "district": "Radkovice u Bud\u010de"
+        },
+        "ds_id": "9pfj2mc"
+    },
+    "Radkovice u Hrotovic": {
+        "address": {
+            "street": "13",
+            "zip": "675 59",
+            "city": "Radkovice u Hrotovic",
+            "district": "Radkovice u Hrotovic"
+        },
+        "ds_id": "d5wbtc5"
+    },
+    "Radkovy": {
+        "address": {
+            "street": "38",
+            "zip": "751 14",
+            "city": "Radkovy",
+            "district": "Radkovy"
+        },
+        "ds_id": "5x7bree"
+    },
+    "R\u00e1dlo": {
+        "address": {
+            "street": "252",
+            "zip": "468 03",
+            "city": "R\u00e1dlo",
+            "district": "R\u00e1dlo"
+        },
+        "ds_id": "sfpan8s"
+    },
+    "Rad\u0148oves": {
+        "address": {
+            "street": "26",
+            "zip": "594 51",
+            "city": "Rad\u0148oves",
+            "district": "Rad\u0148oves"
+        },
+        "ds_id": "eteaw7g"
+    },
+    "Rad\u0148ovice": {
+        "address": {
+            "street": "61",
+            "zip": "592 31",
+            "city": "Rad\u0148ovice",
+            "district": "Rad\u0148ovice"
+        },
+        "ds_id": "2xiay5i"
+    },
+    "Radonice": {
+        "address": {
+            "street": "1",
+            "zip": "431 55",
+            "city": "Radonice",
+            "district": "Radonice"
+        },
+        "ds_id": "bbybbu9"
+    },
+    "Radon\u00edn": {
+        "address": {
+            "street": "39",
+            "zip": "675 21",
+            "city": "Radon\u00edn",
+            "district": "Radon\u00edn"
+        },
+        "ds_id": "tfmbwca"
+    },
+    "Radostice": {
+        "address": {
+            "street": "Sokolsk\u00e1 11",
+            "zip": "664 46",
+            "city": "Radostice",
+            "district": "Radostice"
+        },
+        "ds_id": "md5a2gs"
+    },
+    "Radost\u00edn": {
+        "address": {
+            "street": "14",
+            "zip": "591 01",
+            "city": "Radost\u00edn",
+            "district": "Radost\u00edn"
+        },
+        "ds_id": "zx4ayk4"
+    },
+    "Radostn\u00e1 pod Koz\u00e1kovem": {
+        "address": {
+            "street": "77",
+            "zip": "512 63",
+            "city": "Radostn\u00e1 pod Koz\u00e1kovem",
+            "district": "Lestkov"
+        },
+        "ds_id": "e7dapat"
+    },
+    "Rado\u0161ov": {
+        "address": {
+            "street": "38",
+            "zip": "675 07",
+            "city": "Rado\u0161ov",
+            "district": "Rado\u0161ov"
+        },
+        "ds_id": "96ka93n"
+    },
+    "Rado\u0161ovice": {
+        "address": {
+            "street": "7",
+            "zip": "373 41",
+            "city": "Rado\u0161ovice",
+            "district": "Rado\u0161ovice"
+        },
+        "ds_id": "x7nb7cb"
+    },
+    "Radotice": {
+        "address": {
+            "street": "1",
+            "zip": "675 32",
+            "city": "Radotice",
+            "district": "Radotice"
+        },
+        "ds_id": "peyjdu5"
+    },
+    "Radot\u00edn": {
+        "address": {
+            "street": "43",
+            "zip": "753 54",
+            "city": "Radot\u00edn",
+            "district": "Radot\u00edn"
+        },
+        "ds_id": "pejbina"
+    },
+    "Radovesice": {
+        "address": {
+            "street": "43",
+            "zip": "410 02",
+            "city": "Radovesice",
+            "district": "Radovesice"
+        },
+        "ds_id": "s3ubhjs"
+    },
+    "Radovesnice i": {
+        "address": {
+            "street": "Lo\u0161ansk\u00e1 23",
+            "zip": "280 02",
+            "city": "Radovesnice I",
+            "district": "Radovesnice I"
+        },
+        "ds_id": "uk4bmrx"
+    },
+    "Radovesnice II": {
+        "address": {
+            "street": "215",
+            "zip": "281 28",
+            "city": "Radovesnice II",
+            "district": "Radovesnice II"
+        },
+        "ds_id": "yiubpvu"
+    },
+    "Radslavice": {
+        "address": {
+            "street": "91",
+            "zip": "683 21",
+            "city": "Radslavice",
+            "district": "Radslavice"
+        },
+        "ds_id": "qpcbjmx"
+    },
+    "Radu\u0148": {
+        "address": {
+            "street": "Gudrichova 79",
+            "zip": "747 61",
+            "city": "Radu\u0148",
+            "district": "Radu\u0148"
+        },
+        "ds_id": "4bqazb7"
+    },
+    "Radvanec": {
+        "address": {
+            "street": "75",
+            "zip": "473 01",
+            "city": "Radvanec",
+            "district": "Radvanec"
+        },
+        "ds_id": "nkgan43"
+    },
+    "Radvanice": {
+        "address": {
+            "street": "9",
+            "zip": "751 21",
+            "city": "Radvanice",
+            "district": "Radvanice"
+        },
+        "ds_id": "85kasej"
+    },
+    "R\u00e1jec": {
+        "address": {
+            "street": "98",
+            "zip": "789 01",
+            "city": "R\u00e1jec",
+            "district": "R\u00e1jec"
+        },
+        "ds_id": "pgzbwzm"
+    },
+    "R\u00e1je\u010dko": {
+        "address": {
+            "street": "n\u00e1m. 1. m\u00e1je 250",
+            "zip": "679 02",
+            "city": "R\u00e1je\u010dko",
+            "district": "R\u00e1je\u010dko"
+        },
+        "ds_id": "fh7bg7p"
+    },
+    "Rajhradice": {
+        "address": {
+            "street": "Kr\u00e1tk\u00e1 379",
+            "zip": "664 61",
+            "city": "Rajhradice",
+            "district": "Rajhradice"
+        },
+        "ds_id": "ckua2gw"
+    },
+    "Rajnochovice": {
+        "address": {
+            "street": "144",
+            "zip": "768 71",
+            "city": "Rajnochovice",
+            "district": "Rajnochovice"
+        },
+        "ds_id": "gx5bbtq"
+    },
+    "Rakousy": {
+        "address": {
+            "street": "34",
+            "zip": "511 01",
+            "city": "Rakousy",
+            "district": "Rakousy"
+        },
+        "ds_id": "4qyb7jd"
+    },
+    "Rakov": {
+        "address": {
+            "street": "34",
+            "zip": "753 54",
+            "city": "Rakov",
+            "district": "Rakov"
+        },
+        "ds_id": "ttkbnfk"
+    },
+    "Rakov\u00e1": {
+        "address": {
+            "street": "68",
+            "zip": "337 01",
+            "city": "Rakov\u00e1",
+            "district": "Rakov\u00e1"
+        },
+        "ds_id": "spvbrgg"
+    },
+    "Rakov\u00e1 u Konice": {
+        "address": {
+            "street": "34",
+            "zip": "798 57",
+            "city": "Rakov\u00e1 u Konice",
+            "district": "Rakov\u00e1 u Konice"
+        },
+        "ds_id": "39sbtjv"
+    },
+    "Rakovice": {
+        "address": {
+            "street": "119",
+            "zip": "398 04",
+            "city": "Rakovice",
+            "district": "Rakovice"
+        },
+        "ds_id": "9habhi4"
+    },
+    "Rak\u016fvka": {
+        "address": {
+            "street": "29",
+            "zip": "798 57",
+            "city": "Rak\u016fvka",
+            "district": "Rak\u016fvka"
+        },
+        "ds_id": "k9rbgd4"
+    },
+    "Ran\u00e1": {
+        "address": {
+            "street": "114",
+            "zip": "439 24",
+            "city": "Ran\u00e1",
+            "district": "Ran\u00e1"
+        },
+        "ds_id": "z3ea964"
+    },
+    "Ran\u010d\u00ed\u0159ov": {
+        "address": {
+            "street": "36",
+            "zip": "586 01",
+            "city": "Ran\u010d\u00ed\u0159ov",
+            "district": "Ran\u010d\u00ed\u0159ov"
+        },
+        "ds_id": "zr3a9qz"
+    },
+    "Rant\u00ed\u0159ov": {
+        "address": {
+            "street": "78",
+            "zip": "588 41",
+            "city": "Rant\u00ed\u0159ov",
+            "district": "Rant\u00ed\u0159ov"
+        },
+        "ds_id": "68dav54"
+    },
+    "Rapot\u00edn": {
+        "address": {
+            "street": "\u0160umpersk\u00e1 775",
+            "zip": "788 14",
+            "city": "Rapot\u00edn",
+            "district": "Rapot\u00edn"
+        },
+        "ds_id": "nk3bjc2"
+    },
+    "Rap\u0161ach": {
+        "address": {
+            "street": "7",
+            "zip": "378 07",
+            "city": "Rap\u0161ach",
+            "district": "Rap\u0161ach"
+        },
+        "ds_id": "3q5am4s"
+    },
+    "Ra\u0161kovice": {
+        "address": {
+            "street": "207",
+            "zip": "739 04",
+            "city": "Ra\u0161kovice",
+            "district": "Ra\u0161kovice"
+        },
+        "ds_id": "xdjbbs2"
+    },
+    "Ra\u0161ov": {
+        "address": {
+            "street": "50",
+            "zip": "679 23",
+            "city": "Ra\u0161ov",
+            "district": "Ra\u0161ov"
+        },
+        "ds_id": "jc8b5zj"
+    },
+    "Ra\u0161ovice": {
+        "address": {
+            "street": "76",
+            "zip": "285 04",
+            "city": "Ra\u0161ovice",
+            "district": "Ra\u0161ovice"
+        },
+        "ds_id": "zpia7qq"
+    },
+    "Rataje": {
+        "address": {
+            "street": "70",
+            "zip": "258 01",
+            "city": "Rataje",
+            "district": "Rataje"
+        },
+        "ds_id": "n8taury"
+    },
+    "Ratbo\u0159": {
+        "address": {
+            "street": "Komensk\u00e9ho 8",
+            "zip": "281 41",
+            "city": "Ratbo\u0159",
+            "district": "Ratbo\u0159"
+        },
+        "ds_id": "c3xbqtd"
+    },
+    "Ratenice": {
+        "address": {
+            "street": "67",
+            "zip": "289 11",
+            "city": "Ratenice",
+            "district": "Ratenice"
+        },
+        "ds_id": "zasa73j"
+    },
+    "Ratibo\u0159": {
+        "address": {
+            "street": "75",
+            "zip": "756 21",
+            "city": "Ratibo\u0159",
+            "district": "Ratibo\u0159"
+        },
+        "ds_id": "24bb368"
+    },
+    "Ratibo\u0159sk\u00e9 Hory": {
+        "address": {
+            "street": "121",
+            "zip": "391 42",
+            "city": "Ratibo\u0159sk\u00e9 Hory",
+            "district": "Ratibo\u0159sk\u00e9 Hory"
+        },
+        "ds_id": "3drbr9c"
+    },
+    "Rat\u00ed\u0161kovice": {
+        "address": {
+            "street": "U Radnice 1300",
+            "zip": "696 02",
+            "city": "Rat\u00ed\u0161kovice",
+            "district": "Rat\u00ed\u0161kovice"
+        },
+        "ds_id": "kprbzen"
+    },
+    "Ratm\u011b\u0159ice": {
+        "address": {
+            "street": "72",
+            "zip": "257 03",
+            "city": "Ratm\u011b\u0159ice",
+            "district": "Ratm\u011b\u0159ice"
+        },
+        "ds_id": "vc5atkj"
+    },
+    "Razov\u00e1": {
+        "address": {
+            "street": "351",
+            "zip": "792 01",
+            "city": "Razov\u00e1",
+            "district": "Razov\u00e1"
+        },
+        "ds_id": "emabine"
+    },
+    "Ra\u017eice": {
+        "address": {
+            "street": "98",
+            "zip": "398 22",
+            "city": "Ra\u017eice",
+            "district": "Ra\u017eice"
+        },
+        "ds_id": "e2qb38f"
+    },
+    "Rebe\u0161ovice": {
+        "address": {
+            "street": "Z\u00e1meck\u00e1 12",
+            "zip": "664 61",
+            "city": "Rebe\u0161ovice",
+            "district": "Rebe\u0161ovice"
+        },
+        "ds_id": "3tja2f3"
+    },
+    "Rejchartice": {
+        "address": {
+            "street": "47",
+            "zip": "787 01",
+            "city": "Rejchartice",
+            "district": "Rejchartice"
+        },
+        "ds_id": "5tzbimm"
+    },
+    "Re\u0161ice": {
+        "address": {
+            "street": "97",
+            "zip": "671 73",
+            "city": "Re\u0161ice",
+            "district": "Re\u0161ice"
+        },
+        "ds_id": "7dfaz5k"
+    },
+    "Robl\u00edn": {
+        "address": {
+            "street": "Karl\u0161tejnsk\u00e1 4",
+            "zip": "252 26",
+            "city": "Robl\u00edn",
+            "district": "Robl\u00edn"
+        },
+        "ds_id": "ahsasm6"
+    },
+    "Rodinov": {
+        "address": {
+            "street": "46",
+            "zip": "394 70",
+            "city": "Rodinov",
+            "district": "Rodinov"
+        },
+        "ds_id": "anuawmn"
+    },
+    "Rodkov": {
+        "address": {
+            "street": "2",
+            "zip": "592 51",
+            "city": "Rodkov",
+            "district": "Rodkov"
+        },
+        "ds_id": "mqcax5m"
+    },
+    "Rodn\u00e1": {
+        "address": {
+            "street": "27",
+            "zip": "391 43",
+            "city": "Rodn\u00e1",
+            "district": "Rodn\u00e1"
+        },
+        "ds_id": "9daam37"
+    },
+    "Rodv\u00ednov": {
+        "address": {
+            "street": "72",
+            "zip": "377 01",
+            "city": "Rodv\u00ednov",
+            "district": "Rodv\u00ednov"
+        },
+        "ds_id": "bfyb7b8"
+    },
+    "Rohatec": {
+        "address": {
+            "street": "Kv\u011btn\u00e1 359",
+            "zip": "696 01",
+            "city": "Rohatec",
+            "district": "Rohatec"
+        },
+        "ds_id": "je6bbru"
+    },
+    "Rohatsko": {
+        "address": {
+            "street": "15",
+            "zip": "294 04",
+            "city": "Rohatsko",
+            "district": "Rohatsko"
+        },
+        "ds_id": "2hzarwm"
+    },
+    "Rohle": {
+        "address": {
+            "street": "56",
+            "zip": "789 74",
+            "city": "Rohle",
+            "district": "Rohle"
+        },
+        "ds_id": "amvbbry"
+    },
+    "Rohov": {
+        "address": {
+            "street": "Hlavn\u00ed 180",
+            "zip": "747 25",
+            "city": "Rohov",
+            "district": "Rohov"
+        },
+        "ds_id": "hx9bv95"
+    },
+    "Rohovl\u00e1dova B\u011bl\u00e1": {
+        "address": {
+            "street": "32",
+            "zip": "533 43",
+            "city": "Rohovl\u00e1dova B\u011bl\u00e1",
+            "district": "Rohovl\u00e1dova B\u011bl\u00e1"
+        },
+        "ds_id": "zukbbq5"
+    },
+    "Rohozec": {
+        "address": {
+            "street": "19",
+            "zip": "284 01",
+            "city": "Rohozec",
+            "district": "Rohozec"
+        },
+        "ds_id": "c3caujf"
+    },
+    "Rohozn\u00e1": {
+        "address": {
+            "street": "264",
+            "zip": "569 72",
+            "city": "Rohozn\u00e1",
+            "district": "Rohozn\u00e1"
+        },
+        "ds_id": "tsqbq8v"
+    },
+    "Rohoznice": {
+        "address": {
+            "street": "96",
+            "zip": "533 41",
+            "city": "Rohoznice",
+            "district": "Rohoznice"
+        },
+        "ds_id": "di8bsgt"
+    },
+    "Rohy": {
+        "address": {
+            "street": "52",
+            "zip": "675 05",
+            "city": "Rohy",
+            "district": "Rohy"
+        },
+        "ds_id": "cfsawge"
+    },
+    "Rochlov": {
+        "address": {
+            "street": "31",
+            "zip": "330 23",
+            "city": "Rochlov",
+            "district": "Rochlov"
+        },
+        "ds_id": "8psbh8u"
+    },
+    "Rochov": {
+        "address": {
+            "street": "63",
+            "zip": "413 01",
+            "city": "Rochov",
+            "district": "Rochov"
+        },
+        "ds_id": "bbaarxd"
+    },
+    "Rojet\u00edn": {
+        "address": {
+            "street": "50",
+            "zip": "594 51",
+            "city": "Rojet\u00edn",
+            "district": "Rojet\u00edn"
+        },
+        "ds_id": "33gjdyn"
+    },
+    "Rokle": {
+        "address": {
+            "street": "3",
+            "zip": "432 01",
+            "city": "Rokle",
+            "district": "Rokle"
+        },
+        "ds_id": "93vburj"
+    },
+    "Rokyt\u00e1": {
+        "address": {
+            "street": "35",
+            "zip": "295 01",
+            "city": "Rokyt\u00e1",
+            "district": "Horn\u00ed Rokyt\u00e1"
+        },
+        "ds_id": "e8nb5fn"
+    },
+    "Rokyt\u0148any": {
+        "address": {
+            "street": "27",
+            "zip": "507 23",
+            "city": "Rokyt\u0148any",
+            "district": "Horn\u00ed Rokyt\u0148any"
+        },
+        "ds_id": "4xybhb4"
+    },
+    "Rokytnice": {
+        "address": {
+            "street": "143",
+            "zip": "751 04",
+            "city": "Rokytnice",
+            "district": "Rokytnice"
+        },
+        "ds_id": "7tjb5kg"
+    },
+    "Rokytno": {
+        "address": {
+            "street": "21",
+            "zip": "533 04",
+            "city": "Rokytno",
+            "district": "Rokytno"
+        },
+        "ds_id": "94xa5a6"
+    },
+    "Rokytovec": {
+        "address": {
+            "street": "48",
+            "zip": "294 30",
+            "city": "Rokytovec",
+            "district": "Rokytovec"
+        },
+        "ds_id": "hrtanfw"
+    },
+    "Ropice": {
+        "address": {
+            "street": "110",
+            "zip": "739 61",
+            "city": "Ropice",
+            "district": "Ropice"
+        },
+        "ds_id": "q7hbih2"
+    },
+    "Roprachtice": {
+        "address": {
+            "street": "144",
+            "zip": "513 01",
+            "city": "Roprachtice",
+            "district": "Roprachtice"
+        },
+        "ds_id": "d2eb6g8"
+    },
+    "Rose\u010d": {
+        "address": {
+            "street": "46",
+            "zip": "378 46",
+            "city": "Rose\u010d",
+            "district": "Rose\u010d"
+        },
+        "ds_id": "rgxa8k8"
+    },
+    "Rosi\u010dka": {
+        "address": {
+            "street": "20",
+            "zip": "592 12",
+            "city": "Rosi\u010dka",
+            "district": "Rosi\u010dka"
+        },
+        "ds_id": "gxca39x"
+    },
+    "Rosovice": {
+        "address": {
+            "street": "60",
+            "zip": "262 11",
+            "city": "Rosovice",
+            "district": "Rosovice"
+        },
+        "ds_id": "gd8bih8"
+    },
+    "Rost\u011bnice - Zvonovice": {
+        "address": {
+            "street": "109",
+            "zip": "682 01",
+            "city": "Rost\u011bnice-Zvonovice",
+            "district": "Rost\u011bnice"
+        },
+        "ds_id": "ke7b8ib"
+    },
+    "Rostoklaty": {
+        "address": {
+            "street": "32",
+            "zip": "281 71",
+            "city": "Rostoklaty",
+            "district": "Rostoklaty"
+        },
+        "ds_id": "zysbihw"
+    },
+    "Ro\u0161t\u011bn\u00ed": {
+        "address": {
+            "street": "144",
+            "zip": "768 43",
+            "city": "Ro\u0161t\u011bn\u00ed",
+            "district": "Ro\u0161t\u011bn\u00ed"
+        },
+        "ds_id": "gwga628"
+    },
+    "Ro\u0161t\u00edn": {
+        "address": {
+            "street": "450",
+            "zip": "768 03",
+            "city": "Ro\u0161t\u00edn",
+            "district": "Ro\u0161t\u00edn"
+        },
+        "ds_id": "4pparei"
+    },
+    "Roubanina": {
+        "address": {
+            "street": "4",
+            "zip": "679 61",
+            "city": "Roubanina",
+            "district": "Roubanina"
+        },
+        "ds_id": "uqhbkyu"
+    },
+    "Roudn\u00e1": {
+        "address": {
+            "street": "46",
+            "zip": "392 01",
+            "city": "Roudn\u00e1",
+            "district": "Roudn\u00e1"
+        },
+        "ds_id": "pedb7cf"
+    },
+    "Roudn\u00e9": {
+        "address": {
+            "street": "Roudensk\u00e1 120",
+            "zip": "370 07",
+            "city": "Roudn\u00e9",
+            "district": "Roudn\u00e9"
+        },
+        "ds_id": "kc2au6r"
+    },
+    "Roudnice": {
+        "address": {
+            "street": "100",
+            "zip": "503 27",
+            "city": "Roudnice",
+            "district": "Roudnice"
+        },
+        "ds_id": "ht3bpgc"
+    },
+    "Roudno": {
+        "address": {
+            "street": "56",
+            "zip": "792 01",
+            "city": "Roudno",
+            "district": "Roudno"
+        },
+        "ds_id": "eedbwjj"
+    },
+    "Rouchovany": {
+        "address": {
+            "street": "35",
+            "zip": "675 57",
+            "city": "Rouchovany",
+            "district": "Rouchovany"
+        },
+        "ds_id": "t7gbqvz"
+    },
+    "Roupov": {
+        "address": {
+            "street": "91",
+            "zip": "334 53",
+            "city": "Roupov",
+            "district": "Roupov"
+        },
+        "ds_id": "u6wbrei"
+    },
+    "Rousk\u00e9": {
+        "address": {
+            "street": "64",
+            "zip": "753 53",
+            "city": "Rousk\u00e9",
+            "district": "Rousk\u00e9"
+        },
+        "ds_id": "4x6aumz"
+    },
+    "Rousm\u011brov": {
+        "address": {
+            "street": "16",
+            "zip": "591 01",
+            "city": "Rousm\u011brov",
+            "district": "Rousm\u011brov"
+        },
+        "ds_id": "citb63n"
+    },
+    "Rove\u010dn\u00e9": {
+        "address": {
+            "street": "82",
+            "zip": "592 65",
+            "city": "Rove\u010dn\u00e9",
+            "district": "Rove\u010dn\u00e9"
+        },
+        "ds_id": "7grbbpm"
+    },
+    "Rovensko": {
+        "address": {
+            "street": "59",
+            "zip": "789 01",
+            "city": "Rovensko",
+            "district": "Rovensko"
+        },
+        "ds_id": "hwvasfd"
+    },
+    "Rovn\u00e1": {
+        "address": {
+            "street": "46",
+            "zip": "395 01",
+            "city": "Rovn\u00e1",
+            "district": "Rovn\u00e1"
+        },
+        "ds_id": "3dnb4kf"
+    },
+    "Rozdrojovice": {
+        "address": {
+            "street": "Na D\u011bdin\u011b 7",
+            "zip": "664 34",
+            "city": "Rozdrojovice",
+            "district": "Rozdrojovice"
+        },
+        "ds_id": "s2aa2f7"
+    },
+    "Rozhovice": {
+        "address": {
+            "street": "46",
+            "zip": "538 03",
+            "city": "Rozhovice",
+            "district": "Rozhovice"
+        },
+        "ds_id": "4d9a3bg"
+    },
+    "Rozhran\u00ed": {
+        "address": {
+            "street": "74",
+            "zip": "569 03",
+            "city": "Rozhran\u00ed",
+            "district": "Rozhran\u00ed"
+        },
+        "ds_id": "iv8a5by"
+    },
+    "Rozko\u0161": {
+        "address": {
+            "street": "1",
+            "zip": "671 53",
+            "city": "Rozko\u0161",
+            "district": "Rozko\u0161"
+        },
+        "ds_id": "j9cbuyx"
+    },
+    "Rozse\u010d": {
+        "address": {
+            "street": "16",
+            "zip": "594 51",
+            "city": "Rozse\u010d",
+            "district": "Rozse\u010d"
+        },
+        "ds_id": "5maa9um"
+    },
+    "Rozse\u010d nad Kun\u0161t\u00e1tem": {
+        "address": {
+            "street": "106",
+            "zip": "679 73",
+            "city": "Rozse\u010d nad Kun\u0161t\u00e1tem",
+            "district": "Rozse\u010d nad Kun\u0161t\u00e1tem"
+        },
+        "ds_id": "nr2bzpm"
+    },
+    "Rozs\u00ed\u010dka": {
+        "address": {
+            "street": "17",
+            "zip": "679 74",
+            "city": "Rozs\u00ed\u010dka",
+            "district": "Rozs\u00ed\u010dka"
+        },
+        "ds_id": "h8za2fd"
+    },
+    "Rozsochatec": {
+        "address": {
+            "street": "97",
+            "zip": "582 72",
+            "city": "Rozsochatec",
+            "district": "Rozsochatec"
+        },
+        "ds_id": "ii8ax4a"
+    },
+    "Rozsochy": {
+        "address": {
+            "street": "146",
+            "zip": "592 57",
+            "city": "Rozsochy",
+            "district": "Rozsochy"
+        },
+        "ds_id": "rkca7t5"
+    },
+    "Rozst\u00e1n\u00ed": {
+        "address": {
+            "street": "80",
+            "zip": "571 01",
+            "city": "Rozst\u00e1n\u00ed",
+            "district": "Rozst\u00e1n\u00ed"
+        },
+        "ds_id": "5dpa3uw"
+    },
+    "Roztoky u Jilemnice": {
+        "address": {
+            "street": "240",
+            "zip": "512 31",
+            "city": "Roztoky u Jilemnice",
+            "district": "Roztoky u Jilemnice"
+        },
+        "ds_id": "mhmapcm"
+    },
+    "Roztoky u Semil": {
+        "address": {
+            "street": "99",
+            "zip": "513 01",
+            "city": "Roztoky u Semil",
+            "district": "Roztoky u Semil"
+        },
+        "ds_id": "vktan97"
+    },
+    "Rozvadov": {
+        "address": {
+            "street": "142",
+            "zip": "348 06",
+            "city": "Rozvadov",
+            "district": "Rozvadov"
+        },
+        "ds_id": "xhrbiju"
+    },
+    "Ro\u017emit\u00e1l Na \u0160umav\u011b": {
+        "address": {
+            "street": "131",
+            "zip": "382 92",
+            "city": "Ro\u017emit\u00e1l na \u0160umav\u011b",
+            "district": "Ro\u017emit\u00e1l na \u0160umav\u011b"
+        },
+        "ds_id": "mv7bbpw"
+    },
+    "Ro\u017en\u00e1": {
+        "address": {
+            "street": "8",
+            "zip": "592 52",
+            "city": "Ro\u017en\u00e1",
+            "district": "Ro\u017en\u00e1"
+        },
+        "ds_id": "4bmbbn8"
+    },
+    "Rpety": {
+        "address": {
+            "street": "26",
+            "zip": "268 01",
+            "city": "Rpety",
+            "district": "Rpety"
+        },
+        "ds_id": "vzjanwa"
+    },
+    "Rtyn\u011b nad B\u00edlinou": {
+        "address": {
+            "street": "34",
+            "zip": "417 62",
+            "city": "Rtyn\u011b nad B\u00edlinou",
+            "district": "Rtyn\u011b nad B\u00edlinou"
+        },
+        "ds_id": "bf9a8a2"
+    },
+    "Ruda": {
+        "address": {
+            "street": "32",
+            "zip": "594 01",
+            "city": "Ruda",
+            "district": "Ruda"
+        },
+        "ds_id": "b6xb4m9"
+    },
+    "Ruda nad Moravou": {
+        "address": {
+            "street": "9. kv\u011btna 40",
+            "zip": "789 63",
+            "city": "Ruda nad Moravou",
+            "district": "Ruda nad Moravou"
+        },
+        "ds_id": "iq3bbni"
+    },
+    "Rudice": {
+        "address": {
+            "street": "7",
+            "zip": "679 06",
+            "city": "Rudice",
+            "district": "Rudice"
+        },
+        "ds_id": "9fqa2ej"
+    },
+    "Rud\u00edkov": {
+        "address": {
+            "street": "2",
+            "zip": "675 05",
+            "city": "Rud\u00edkov",
+            "district": "Rud\u00edkov"
+        },
+        "ds_id": "9xsbbmp"
+    },
+    "Rudimov": {
+        "address": {
+            "street": "81",
+            "zip": "763 21",
+            "city": "Rudimov",
+            "district": "Rudimov"
+        },
+        "ds_id": "eczasrv"
+    },
+    "Rudka": {
+        "address": {
+            "street": "66",
+            "zip": "664 83",
+            "city": "Rudka",
+            "district": "Rudka"
+        },
+        "ds_id": "7eeakz8"
+    },
+    "Rudlice": {
+        "address": {
+            "street": "36",
+            "zip": "671 53",
+            "city": "Rudlice",
+            "district": "Rudlice"
+        },
+        "ds_id": "jzxa2a5"
+    },
+    "Rudn\u00e1 pod Prad\u011bdem": {
+        "address": {
+            "street": "89",
+            "zip": "793 31",
+            "city": "Rudn\u00e1 pod Prad\u011bdem",
+            "district": "Star\u00e1 Rudn\u00e1"
+        },
+        "ds_id": "nqgbijy"
+    },
+    "Rudn\u00edk": {
+        "address": {
+            "street": "51",
+            "zip": "543 72",
+            "city": "Rudn\u00edk",
+            "district": "Rudn\u00edk"
+        },
+        "ds_id": "z86bx3g"
+    },
+    "Rudolec": {
+        "address": {
+            "street": "47",
+            "zip": "592 14",
+            "city": "Rudolec",
+            "district": "Rudolec"
+        },
+        "ds_id": "wq8a55a"
+    },
+    "Rudoltice": {
+        "address": {
+            "street": "95",
+            "zip": "561 25",
+            "city": "Rudoltice",
+            "district": "Rudoltice"
+        },
+        "ds_id": "7cab3x3"
+    },
+    "Ruprechtov": {
+        "address": {
+            "street": "155",
+            "zip": "683 04",
+            "city": "Ruprechtov",
+            "district": "Ruprechtov"
+        },
+        "ds_id": "a3ha8mu"
+    },
+    "Rusava": {
+        "address": {
+            "street": "248",
+            "zip": "768 41",
+            "city": "Rusava",
+            "district": "Rusava"
+        },
+        "ds_id": "qjubwr4"
+    },
+    "Rus\u00edn": {
+        "address": {
+            "street": "53",
+            "zip": "793 97",
+            "city": "Rus\u00edn",
+            "district": "Rus\u00edn"
+        },
+        "ds_id": "yq3ar3v"
+    },
+    "Ru\u0161inov": {
+        "address": {
+            "street": "3",
+            "zip": "583 01",
+            "city": "Ru\u0161inov",
+            "district": "Ru\u0161inov"
+        },
+        "ds_id": "3nhawfk"
+    },
+    "R\u016f\u017e\u010fka": {
+        "address": {
+            "street": "320",
+            "zip": "756 25",
+            "city": "R\u016f\u017e\u010fka",
+            "district": "R\u016f\u017e\u010fka"
+        },
+        "ds_id": "y6hbbmt"
+    },
+    "R\u016f\u017een\u00e1": {
+        "address": {
+            "street": "7",
+            "zip": "589 01",
+            "city": "R\u016f\u017een\u00e1",
+            "district": "R\u016f\u017een\u00e1"
+        },
+        "ds_id": "a55aya2"
+    },
+    "R\u016f\u017eov\u00e1": {
+        "address": {
+            "street": "30",
+            "zip": "405 02",
+            "city": "R\u016f\u017eov\u00e1",
+            "district": "R\u016f\u017eov\u00e1"
+        },
+        "ds_id": "smcbpg7"
+    },
+    "Ryb\u00ed": {
+        "address": {
+            "street": "380",
+            "zip": "742 65",
+            "city": "Ryb\u00ed",
+            "district": "Ryb\u00ed"
+        },
+        "ds_id": "63wbndj"
+    },
+    "Rybitv\u00ed": {
+        "address": {
+            "street": "\u0160koln\u00ed 180",
+            "zip": "533 54",
+            "city": "Rybitv\u00ed",
+            "district": "Rybitv\u00ed"
+        },
+        "ds_id": "tpha5bt"
+    },
+    "Rybn\u00e1 nad Zdobnic\u00ed": {
+        "address": {
+            "street": "150",
+            "zip": "517 55",
+            "city": "Rybn\u00e1 nad Zdobnic\u00ed",
+            "district": "Rybn\u00e1 nad Zdobnic\u00ed"
+        },
+        "ds_id": "2isazgf"
+    },
+    "Rybn\u00e9": {
+        "address": {
+            "street": "51",
+            "zip": "588 27",
+            "city": "Rybn\u00e9",
+            "district": "Rybn\u00e9"
+        },
+        "ds_id": "m4za95v"
+    },
+    "Rybnice": {
+        "address": {
+            "street": "105",
+            "zip": "331 51",
+            "city": "Rybnice",
+            "district": "Rybnice"
+        },
+        "ds_id": "r65awcf"
+    },
+    "Rybn\u00ed\u010dek": {
+        "address": {
+            "street": "2",
+            "zip": "582 82",
+            "city": "Rybn\u00ed\u010dek",
+            "district": "Rybn\u00ed\u010dek"
+        },
+        "ds_id": "rhta5tw"
+    },
+    "Rybn\u00edk": {
+        "address": {
+            "street": "13",
+            "zip": "345 25",
+            "city": "Rybn\u00edk",
+            "district": "Rybn\u00edk"
+        },
+        "ds_id": "yziavaa"
+    },
+    "Rybn\u00edky": {
+        "address": {
+            "street": "32",
+            "zip": "263 01",
+            "city": "Rybn\u00edky",
+            "district": "Rybn\u00edky"
+        },
+        "ds_id": "7nkbn9w"
+    },
+    "Rybni\u0161t\u011b": {
+        "address": {
+            "street": "33",
+            "zip": "407 51",
+            "city": "Rybni\u0161t\u011b",
+            "district": "Rybni\u0161t\u011b"
+        },
+        "ds_id": "a2fbx48"
+    },
+    "Rychnov Na Morav\u011b": {
+        "address": {
+            "street": "63",
+            "zip": "569 34",
+            "city": "Rychnov na Morav\u011b",
+            "district": "Rychnov na Morav\u011b"
+        },
+        "ds_id": "4gsa5bp"
+    },
+    "Ryjice": {
+        "address": {
+            "street": "14",
+            "zip": "403 31",
+            "city": "Ryjice",
+            "district": "Ryjice"
+        },
+        "ds_id": "hvwa7jr"
+    },
+    "Rymice": {
+        "address": {
+            "street": "4",
+            "zip": "769 01",
+            "city": "Rymice",
+            "district": "Rymice"
+        },
+        "ds_id": "g4bbikg"
+    },
+    "Ryn\u00e1rec": {
+        "address": {
+            "street": "24",
+            "zip": "394 01",
+            "city": "Ryn\u00e1rec",
+            "district": "Ryn\u00e1rec"
+        },
+        "ds_id": "y33axaj"
+    },
+    "Rynholec": {
+        "address": {
+            "street": "n\u00e1m. 1. m\u00e1je 55",
+            "zip": "270 62",
+            "city": "Rynholec",
+            "district": "Rynholec"
+        },
+        "ds_id": "ujfbgyc"
+    },
+    "Rynoltice": {
+        "address": {
+            "street": "199",
+            "zip": "463 53",
+            "city": "Rynoltice",
+            "district": "Rynoltice"
+        },
+        "ds_id": "pzfawug"
+    },
+    "Ry\u017eovi\u0161t\u011b": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 105",
+            "zip": "793 56",
+            "city": "Ry\u017eovi\u0161t\u011b",
+            "district": "Ry\u017eovi\u0161t\u011b"
+        },
+        "ds_id": "94nb4bc"
+    },
+    "\u0158\u00e1sn\u00e1": {
+        "address": {
+            "street": "63",
+            "zip": "588 56",
+            "city": "\u0158\u00e1sn\u00e1",
+            "district": "\u0158\u00e1sn\u00e1"
+        },
+        "ds_id": "3uca9zu"
+    },
+    "\u0158e\u010dany nad Labem": {
+        "address": {
+            "street": "1. m\u00e1je 66",
+            "zip": "533 13",
+            "city": "\u0158e\u010dany nad Labem",
+            "district": "\u0158e\u010dany nad Labem"
+        },
+        "ds_id": "dszbbsb"
+    },
+    "\u0158e\u010dice": {
+        "address": {
+            "street": "37",
+            "zip": "396 01",
+            "city": "\u0158e\u010dice",
+            "district": "\u0158e\u010dice"
+        },
+        "ds_id": "nk9awnx"
+    },
+    "\u0158ehlovice": {
+        "address": {
+            "street": "1",
+            "zip": "403 13",
+            "city": "\u0158ehlovice",
+            "district": "\u0158ehlovice"
+        },
+        "ds_id": "bazbqym"
+    },
+    "\u0158eka": {
+        "address": {
+            "street": "73",
+            "zip": "739 55",
+            "city": "\u0158eka",
+            "district": "\u0158eka"
+        },
+        "ds_id": "ggxaxtb"
+    },
+    "\u0158em\u00ed\u010dov": {
+        "address": {
+            "street": "37",
+            "zip": "391 43",
+            "city": "\u0158em\u00ed\u010dov",
+            "district": "\u0158em\u00ed\u010dov"
+        },
+        "ds_id": "i6vaju8"
+    },
+    "\u0158en\u010de": {
+        "address": {
+            "street": "54",
+            "zip": "334 01",
+            "city": "\u0158en\u010de",
+            "district": "\u0158en\u010de"
+        },
+        "ds_id": "5aybnit"
+    },
+    "\u0158end\u011bjov": {
+        "address": {
+            "street": "28",
+            "zip": "285 22",
+            "city": "\u0158end\u011bjov",
+            "district": "Nov\u00fd Samechov"
+        },
+        "ds_id": "rdmaw25"
+    },
+    "\u0158epe\u010d": {
+        "address": {
+            "street": "83",
+            "zip": "391 61",
+            "city": "\u0158epe\u010d",
+            "district": "\u0158epe\u010d"
+        },
+        "ds_id": "nwbbv58"
+    },
+    "\u0158epice": {
+        "address": {
+            "street": "1",
+            "zip": "386 01",
+            "city": "\u0158epice",
+            "district": "\u0158epice"
+        },
+        "ds_id": "8a2bijq"
+    },
+    "\u0158ep\u00edn": {
+        "address": {
+            "street": "Hlavn\u00ed 8",
+            "zip": "277 33",
+            "city": "\u0158ep\u00edn",
+            "district": "\u0158ep\u00edn"
+        },
+        "ds_id": "4zqbbri"
+    },
+    "\u0158epi\u0161t\u011b": {
+        "address": {
+            "street": "M\u00edrov\u00e1 178",
+            "zip": "739 32",
+            "city": "\u0158epi\u0161t\u011b",
+            "district": "\u0158epi\u0161t\u011b"
+        },
+        "ds_id": "q98axt7"
+    },
+    "\u0158epn\u00edky": {
+        "address": {
+            "street": "34",
+            "zip": "538 65",
+            "city": "\u0158epn\u00edky",
+            "district": "\u0158epn\u00edky"
+        },
+        "ds_id": "c93a5ch"
+    },
+    "\u0158epov": {
+        "address": {
+            "street": "36",
+            "zip": "293 01",
+            "city": "\u0158epov",
+            "district": "\u0158epov"
+        },
+        "ds_id": "3d2as86"
+    },
+    "\u0158e\u0159ichy": {
+        "address": {
+            "street": "39",
+            "zip": "270 35",
+            "city": "\u0158e\u0159ichy",
+            "district": "\u0158e\u0159ichy"
+        },
+        "ds_id": "tyajd34"
+    },
+    "\u0158estoky": {
+        "address": {
+            "street": "18",
+            "zip": "538 51",
+            "city": "\u0158estoky",
+            "district": "\u0158estoky"
+        },
+        "ds_id": "m3ca5cb"
+    },
+    "\u0158etov\u00e1": {
+        "address": {
+            "street": "190",
+            "zip": "561 41",
+            "city": "\u0158etov\u00e1",
+            "district": "\u0158etov\u00e1"
+        },
+        "ds_id": "zwxb2ej"
+    },
+    "\u0158et\u016fvka": {
+        "address": {
+            "street": "53",
+            "zip": "561 41",
+            "city": "\u0158et\u016fvka",
+            "district": "\u0158et\u016fvka"
+        },
+        "ds_id": "wuma5c7"
+    },
+    "\u0158evni\u010dov": {
+        "address": {
+            "street": "Karlovarsk\u00e1 98",
+            "zip": "270 54",
+            "city": "\u0158evni\u010dov",
+            "district": "\u0158evni\u010dov"
+        },
+        "ds_id": "3t6bwp2"
+    },
+    "\u0158\u00edcmanice": {
+        "address": {
+            "street": "Komensk\u00e9ho 68",
+            "zip": "664 01",
+            "city": "\u0158\u00edcmanice",
+            "district": "\u0158\u00edcmanice"
+        },
+        "ds_id": "dwzb69a"
+    },
+    "\u0158\u00ed\u010dky": {
+        "address": {
+            "street": "48",
+            "zip": "664 83",
+            "city": "\u0158\u00ed\u010dky",
+            "district": "\u0158\u00ed\u010dky"
+        },
+        "ds_id": "i8fa2yt"
+    },
+    "\u0158\u00ed\u010dky v Orlick\u00fdch Hor\u00e1ch": {
+        "address": {
+            "street": "2",
+            "zip": "517 61",
+            "city": "\u0158\u00ed\u010dky v Orlick\u00fdch hor\u00e1ch",
+            "district": "\u0158\u00ed\u010dky v Orlick\u00fdch hor\u00e1ch"
+        },
+        "ds_id": "g59aqcu"
+    },
+    "\u0158\u00edde\u010d": {
+        "address": {
+            "street": "276",
+            "zip": "785 01",
+            "city": "\u0158\u00edde\u010d",
+            "district": "\u0158\u00edde\u010d"
+        },
+        "ds_id": "jusa8mq"
+    },
+    "\u0158\u00eddelov": {
+        "address": {
+            "street": "28",
+            "zip": "588 56",
+            "city": "\u0158\u00eddelov",
+            "district": "\u0158\u00eddelov"
+        },
+        "ds_id": "jjcbiij"
+    },
+    "\u0158\u00eddk\u00fd": {
+        "address": {
+            "street": "25",
+            "zip": "570 01",
+            "city": "\u0158\u00eddk\u00fd",
+            "district": "\u0158\u00eddk\u00fd"
+        },
+        "ds_id": "vn9a3kj"
+    },
+    "\u0158ikon\u00edn": {
+        "address": {
+            "street": "16",
+            "zip": "594 51",
+            "city": "\u0158ikon\u00edn",
+            "district": "\u0158ikon\u00edn"
+        },
+        "ds_id": "8zaedw9"
+    },
+    "\u0158\u00edkov": {
+        "address": {
+            "street": "51",
+            "zip": "552 03",
+            "city": "\u0158\u00edkov",
+            "district": "\u0158\u00edkov"
+        },
+        "ds_id": "6wxa722"
+    },
+    "\u0158\u00edkovice": {
+        "address": {
+            "street": "68",
+            "zip": "751 18",
+            "city": "\u0158\u00edkovice",
+            "district": "\u0158\u00edkovice"
+        },
+        "ds_id": "9sqa7m9"
+    },
+    "\u0158\u00edmov": {
+        "address": {
+            "street": "1",
+            "zip": "675 22",
+            "city": "\u0158\u00edmov",
+            "district": "\u0158\u00edmov"
+        },
+        "ds_id": "8imbqjf"
+    },
+    "\u0158imovice": {
+        "address": {
+            "street": "57",
+            "zip": "258 01",
+            "city": "\u0158imovice",
+            "district": "\u0158imovice"
+        },
+        "ds_id": "turakm5"
+    },
+    "\u0158\u00edpec": {
+        "address": {
+            "street": "39",
+            "zip": "391 81",
+            "city": "\u0158\u00edpec",
+            "district": "\u0158\u00edpec"
+        },
+        "ds_id": "dw7bij5"
+    },
+    "\u0158isuty": {
+        "address": {
+            "street": "84",
+            "zip": "273 78",
+            "city": "\u0158isuty",
+            "district": "\u0158isuty"
+        },
+        "ds_id": "cq2a89p"
+    },
+    "\u0158itka": {
+        "address": {
+            "street": "Na n\u00e1vsi 54",
+            "zip": "252 03",
+            "city": "\u0158itka",
+            "district": "\u0158itka"
+        },
+        "ds_id": "q7ka76z"
+    },
+    "\u0158itonice": {
+        "address": {
+            "street": "29",
+            "zip": "294 04",
+            "city": "\u0158itonice",
+            "district": "\u0158itonice"
+        },
+        "ds_id": "imuaprf"
+    },
+    "S\u00e1dek": {
+        "address": {
+            "street": "150",
+            "zip": "572 01",
+            "city": "S\u00e1dek",
+            "district": "S\u00e1dek"
+        },
+        "ds_id": "7mwa5c4"
+    },
+    "Sadov": {
+        "address": {
+            "street": "34",
+            "zip": "360 01",
+            "city": "Sadov",
+            "district": "Sadov"
+        },
+        "ds_id": "vzdbbke"
+    },
+    "Sala\u010dova Lhota": {
+        "address": {
+            "street": "32",
+            "zip": "395 01",
+            "city": "Sala\u010dova Lhota",
+            "district": "Sala\u010dova Lhota"
+        },
+        "ds_id": "22xayci"
+    },
+    "Sala\u0161": {
+        "address": {
+            "street": "85",
+            "zip": "687 06",
+            "city": "Sala\u0161",
+            "district": "Sala\u0161"
+        },
+        "ds_id": "sbeass3"
+    },
+    "Samop\u0161e": {
+        "address": {
+            "street": "17",
+            "zip": "285 06",
+            "city": "Samop\u0161e",
+            "district": "Samop\u0161e"
+        },
+        "ds_id": "kykas9s"
+    },
+    "Samoti\u0161ky": {
+        "address": {
+            "street": "Vyb\u00edralova 4",
+            "zip": "779 00",
+            "city": "Samoti\u0161ky",
+            "district": "Samoti\u0161ky"
+        },
+        "ds_id": "7guazck"
+    },
+    "Sam\u0161\u00edn": {
+        "address": {
+            "street": "38",
+            "zip": "395 01",
+            "city": "Sam\u0161\u00edn",
+            "district": "Sam\u0161\u00edn"
+        },
+        "ds_id": "bsdbgav"
+    },
+    "Sam\u0161ina": {
+        "address": {
+            "street": "54",
+            "zip": "506 01",
+            "city": "Sam\u0161ina",
+            "district": "Sam\u0161ina"
+        },
+        "ds_id": "9ujapqk"
+    },
+    "S\u00e1ny": {
+        "address": {
+            "street": "9. kv\u011btna 16",
+            "zip": "289 06",
+            "city": "S\u00e1ny",
+            "district": "S\u00e1ny"
+        },
+        "ds_id": "kt2bvub"
+    },
+    "S\u00e1zavka": {
+        "address": {
+            "street": "12",
+            "zip": "582 44",
+            "city": "S\u00e1zavka",
+            "district": "S\u00e1zavka"
+        },
+        "ds_id": "bs6bpuq"
+    },
+    "Sazen\u00e1": {
+        "address": {
+            "street": "1",
+            "zip": "273 24",
+            "city": "Sazen\u00e1",
+            "district": "Sazen\u00e1"
+        },
+        "ds_id": "akwbqvb"
+    },
+    "Sazom\u00edn": {
+        "address": {
+            "street": "43",
+            "zip": "591 01",
+            "city": "Sazom\u00edn",
+            "district": "Sazom\u00edn"
+        },
+        "ds_id": "bx5b57b"
+    },
+    "Sazovice": {
+        "address": {
+            "street": "180",
+            "zip": "763 01",
+            "city": "Sazovice",
+            "district": "Sazovice"
+        },
+        "ds_id": "zgmbjmt"
+    },
+    "Sb\u011b\u0159": {
+        "address": {
+            "street": "38",
+            "zip": "507 03",
+            "city": "Sb\u011b\u0159",
+            "district": "Sb\u011b\u0159"
+        },
+        "ds_id": "g9napjs"
+    },
+    "Sebe\u010dice": {
+        "address": {
+            "street": "43",
+            "zip": "338 08",
+            "city": "Sebe\u010dice",
+            "district": "Sebe\u010dice"
+        },
+        "ds_id": "hg3bh9n"
+    },
+    "Sebranice": {
+        "address": {
+            "street": "30",
+            "zip": "569 62",
+            "city": "Sebranice",
+            "district": "Sebranice"
+        },
+        "ds_id": "ge7a5dw"
+    },
+    "Sedlatice": {
+        "address": {
+            "street": "22",
+            "zip": "588 56",
+            "city": "Sedlatice",
+            "district": "Sedlatice"
+        },
+        "ds_id": "pp4awed"
+    },
+    "Sedlec": {
+        "address": {
+            "street": "96",
+            "zip": "675 71",
+            "city": "Sedlec",
+            "district": "Sedlec"
+        },
+        "ds_id": "fg5b8n6"
+    },
+    "Sedle\u010dko u Sob\u011bslav\u011b": {
+        "address": {
+            "street": "48",
+            "zip": "392 01",
+            "city": "Sedle\u010dko u Sob\u011bslav\u011b",
+            "district": "Sedle\u010dko u Sob\u011bslav\u011b"
+        },
+        "ds_id": "xswb7p7"
+    },
+    "Sedlejov": {
+        "address": {
+            "street": "45",
+            "zip": "588 62",
+            "city": "Sedlejov",
+            "district": "Sedlejov"
+        },
+        "ds_id": "maibpxv"
+    },
+    "Sedlet\u00edn": {
+        "address": {
+            "street": "10",
+            "zip": "583 01",
+            "city": "Sedlet\u00edn",
+            "district": "Sedlet\u00edn"
+        },
+        "ds_id": "3c6avzf"
+    },
+    "Sedli\u0161t\u011b": {
+        "address": {
+            "street": "63",
+            "zip": "335 01",
+            "city": "Sedli\u0161t\u011b",
+            "district": "Sedli\u0161t\u011b"
+        },
+        "ds_id": "7trbgwa"
+    },
+    "Sedlnice": {
+        "address": {
+            "street": "109",
+            "zip": "742 56",
+            "city": "Sedlnice",
+            "district": "Sedlnice"
+        },
+        "ds_id": "z3haxtz"
+    },
+    "Sej\u0159ek": {
+        "address": {
+            "street": "35",
+            "zip": "592 62",
+            "city": "Sej\u0159ek",
+            "district": "Sej\u0159ek"
+        },
+        "ds_id": "y4xauha"
+    },
+    "Seke\u0159ice": {
+        "address": {
+            "street": "8",
+            "zip": "507 03",
+            "city": "Seke\u0159ice",
+            "district": "Seke\u0159ice"
+        },
+        "ds_id": "f8da6xw"
+    },
+    "Seletice": {
+        "address": {
+            "street": "139",
+            "zip": "289 34",
+            "city": "Seletice",
+            "district": "Seletice"
+        },
+        "ds_id": "73mapvt"
+    },
+    "Selmice": {
+        "address": {
+            "street": "28",
+            "zip": "535 01",
+            "city": "Selmice",
+            "district": "Selmice"
+        },
+        "ds_id": "84fbt82"
+    },
+    "Seloutky": {
+        "address": {
+            "street": "58",
+            "zip": "798 04",
+            "city": "Seloutky",
+            "district": "Seloutky"
+        },
+        "ds_id": "bf6bim3"
+    },
+    "Seman\u00edn": {
+        "address": {
+            "street": "151",
+            "zip": "560 02",
+            "city": "Seman\u00edn",
+            "district": "Seman\u00edn"
+        },
+        "ds_id": "rbpbrat"
+    },
+    "Sem\u010dice": {
+        "address": {
+            "street": "10",
+            "zip": "294 46",
+            "city": "Sem\u010dice",
+            "district": "Sem\u010dice"
+        },
+        "ds_id": "2gcak53"
+    },
+    "Semice": {
+        "address": {
+            "street": "280",
+            "zip": "289 17",
+            "city": "Semice",
+            "district": "Semice"
+        },
+        "ds_id": "f5xaskm"
+    },
+    "Sem\u00edn": {
+        "address": {
+            "street": "138",
+            "zip": "535 01",
+            "city": "Sem\u00edn",
+            "district": "Sem\u00edn"
+        },
+        "ds_id": "3wyazn3"
+    },
+    "Semn\u011bvice": {
+        "address": {
+            "street": "34",
+            "zip": "346 01",
+            "city": "Semn\u011bvice",
+            "district": "Semn\u011bvice"
+        },
+        "ds_id": "265a65b"
+    },
+    "Semt\u011b\u0161": {
+        "address": {
+            "street": "17",
+            "zip": "286 01",
+            "city": "Semt\u011b\u0161",
+            "district": "Semt\u011b\u0161"
+        },
+        "ds_id": "b25akg7"
+    },
+    "Senec": {
+        "address": {
+            "street": "95",
+            "zip": "270 36",
+            "city": "Senec",
+            "district": "Senec"
+        },
+        "ds_id": "vngat2p"
+    },
+    "Senet\u00e1\u0159ov": {
+        "address": {
+            "street": "116",
+            "zip": "679 06",
+            "city": "Senet\u00e1\u0159ov",
+            "district": "Senet\u00e1\u0159ov"
+        },
+        "ds_id": "y85a3a3"
+    },
+    "Senice": {
+        "address": {
+            "street": "Hlavn\u00ed 25",
+            "zip": "290 01",
+            "city": "Senice",
+            "district": "Senice"
+        },
+        "ds_id": "xh2ajin"
+    },
+    "Senice Na Han\u00e9": {
+        "address": {
+            "street": "Jos. Vodi\u010dky 243",
+            "zip": "783 45",
+            "city": "Senice na Han\u00e9",
+            "district": "Senice na Han\u00e9"
+        },
+        "ds_id": "89pbbid"
+    },
+    "Seni\u010dka": {
+        "address": {
+            "street": "32",
+            "zip": "783 45",
+            "city": "Seni\u010dka",
+            "district": "Seni\u010dka"
+        },
+        "ds_id": "hjsaxjs"
+    },
+    "Seninka": {
+        "address": {
+            "street": "49",
+            "zip": "756 11",
+            "city": "Seninka",
+            "district": "Seninka"
+        },
+        "ds_id": "3a8bp95"
+    },
+    "Senohraby": {
+        "address": {
+            "street": "P\u0159\u00ed\u010dn\u00e1 61",
+            "zip": "251 66",
+            "city": "Senohraby",
+            "district": "Senohraby"
+        },
+        "ds_id": "967b6bm"
+    },
+    "Senorady": {
+        "address": {
+            "street": "120",
+            "zip": "675 75",
+            "city": "Senorady",
+            "district": "Senorady"
+        },
+        "ds_id": "vg2bzei"
+    },
+    "Seno\u017eaty": {
+        "address": {
+            "street": "166",
+            "zip": "394 56",
+            "city": "Seno\u017eaty",
+            "district": "Seno\u017eaty"
+        },
+        "ds_id": "pn5bbip"
+    },
+    "Sentice": {
+        "address": {
+            "street": "71",
+            "zip": "666 03",
+            "city": "Sentice",
+            "district": "Sentice"
+        },
+        "ds_id": "f8abhax"
+    },
+    "Scho\u0159ov": {
+        "address": {
+            "street": "18",
+            "zip": "286 01",
+            "city": "Scho\u0159ov",
+            "district": "Scho\u0159ov"
+        },
+        "ds_id": "a8rapx6"
+    },
+    "Sil\u016fvky": {
+        "address": {
+            "street": "Prachati\u010dky 39",
+            "zip": "664 46",
+            "city": "Sil\u016fvky",
+            "district": "Sil\u016fvky"
+        },
+        "ds_id": "7nsa2jt"
+    },
+    "Sir\u00e1": {
+        "address": {
+            "street": "52",
+            "zip": "337 01",
+            "city": "Sir\u00e1",
+            "district": "Sir\u00e1"
+        },
+        "ds_id": "23mbh9c"
+    },
+    "Sir\u00e1kov": {
+        "address": {
+            "street": "45",
+            "zip": "592 12",
+            "city": "Sir\u00e1kov",
+            "district": "Sir\u00e1kov"
+        },
+        "ds_id": "ewtaweg"
+    },
+    "Si\u0159ejovice": {
+        "address": {
+            "street": "37",
+            "zip": "410 02",
+            "city": "Si\u0159ejovice",
+            "district": "Si\u0159ejovice"
+        },
+        "ds_id": "v34aqwj"
+    },
+    "Sivice": {
+        "address": {
+            "street": "292",
+            "zip": "664 07",
+            "city": "Sivice",
+            "district": "Sivice"
+        },
+        "ds_id": "494brb4"
+    },
+    "Skalice": {
+        "address": {
+            "street": "92",
+            "zip": "671 71",
+            "city": "Skalice",
+            "district": "Skalice"
+        },
+        "ds_id": "8x9bmfb"
+    },
+    "Skalice nad Svitavou": {
+        "address": {
+            "street": "48",
+            "zip": "679 01",
+            "city": "Skalice nad Svitavou",
+            "district": "Skalice nad Svitavou"
+        },
+        "ds_id": "wewbitd"
+    },
+    "Skalice u \u010cesk\u00e9 L\u00edpy": {
+        "address": {
+            "street": "377",
+            "zip": "471 17",
+            "city": "Skalice u \u010cesk\u00e9 L\u00edpy",
+            "district": "Skalice u \u010cesk\u00e9 L\u00edpy"
+        },
+        "ds_id": "fzgbiuz"
+    },
+    "Skali\u010dka": {
+        "address": {
+            "street": "23",
+            "zip": "666 03",
+            "city": "Skali\u010dka",
+            "district": "Skali\u010dka"
+        },
+        "ds_id": "4nmbgvw"
+    },
+    "Skalka": {
+        "address": {
+            "street": "69",
+            "zip": "696 48",
+            "city": "Skalka",
+            "district": "Skalka"
+        },
+        "ds_id": "byzb3e2"
+    },
+    "Skalka u Doks": {
+        "address": {
+            "street": "44",
+            "zip": "472 01",
+            "city": "Skalka u Doks",
+            "district": "Skalka u Doks"
+        },
+        "ds_id": "bdibsyu"
+    },
+    "Skalsko": {
+        "address": {
+            "street": "89",
+            "zip": "294 26",
+            "city": "Skalsko",
+            "district": "Skalsko"
+        },
+        "ds_id": "mqub6qp"
+    },
+    "Sk\u00e1ly": {
+        "address": {
+            "street": "61",
+            "zip": "398 11",
+            "city": "Sk\u00e1ly",
+            "district": "Sk\u00e1ly"
+        },
+        "ds_id": "w84b32j"
+    },
+    "Skapce": {
+        "address": {
+            "street": "3",
+            "zip": "349 01",
+            "city": "Skapce",
+            "district": "Skapce"
+        },
+        "ds_id": "buwbia6"
+    },
+    "Ska\u0161ov": {
+        "address": {
+            "street": "55",
+            "zip": "336 01",
+            "city": "Ska\u0161ov",
+            "district": "Ska\u0161ov"
+        },
+        "ds_id": "7qiauz8"
+    },
+    "Ska\u0161tice": {
+        "address": {
+            "street": "113",
+            "zip": "767 01",
+            "city": "Ska\u0161tice",
+            "district": "Ska\u0161tice"
+        },
+        "ds_id": "qtibsep"
+    },
+    "Sklen\u00e9": {
+        "address": {
+            "street": "57",
+            "zip": "568 02",
+            "city": "Sklen\u00e9",
+            "district": "Sklen\u00e9"
+        },
+        "ds_id": "q8ga5dq"
+    },
+    "Sklen\u00e9 nad Oslavou": {
+        "address": {
+            "street": "85",
+            "zip": "591 01",
+            "city": "Sklen\u00e9 nad Oslavou",
+            "district": "Sklen\u00e9 nad Oslavou"
+        },
+        "ds_id": "rybaxwf"
+    },
+    "Sko\u010dice": {
+        "address": {
+            "street": "56",
+            "zip": "387 75",
+            "city": "Sko\u010dice",
+            "district": "Sko\u010dice"
+        },
+        "ds_id": "4yrbqvv"
+    },
+    "Skomelno": {
+        "address": {
+            "street": "94",
+            "zip": "338 28",
+            "city": "Skomelno",
+            "district": "Skomelno"
+        },
+        "ds_id": "dftbs9t"
+    },
+    "Skopytce": {
+        "address": {
+            "street": "44",
+            "zip": "392 01",
+            "city": "Skopytce",
+            "district": "Skopytce"
+        },
+        "ds_id": "qg8b64x"
+    },
+    "Skorkov": {
+        "address": {
+            "street": "32",
+            "zip": "294 74",
+            "city": "Skorkov",
+            "district": "Skorkov"
+        },
+        "ds_id": "mmmbith"
+    },
+    "Skoronice": {
+        "address": {
+            "street": "102",
+            "zip": "696 41",
+            "city": "Skoronice",
+            "district": "Skoronice"
+        },
+        "ds_id": "tqda2ii"
+    },
+    "Skoro\u0161ice": {
+        "address": {
+            "street": "93",
+            "zip": "790 65",
+            "city": "Skoro\u0161ice",
+            "district": "Skoro\u0161ice"
+        },
+        "ds_id": "7ezbg97"
+    },
+    "Skorotice": {
+        "address": {
+            "street": "27",
+            "zip": "592 62",
+            "city": "Skorotice",
+            "district": "Chl\u00e9bsk\u00e9"
+        },
+        "ds_id": "pxhbq46"
+    },
+    "Sko\u0159enice": {
+        "address": {
+            "street": "23",
+            "zip": "565 01",
+            "city": "Sko\u0159enice",
+            "district": "Sko\u0159enice"
+        },
+        "ds_id": "w3fa3s4"
+    },
+    "Sko\u0159ice": {
+        "address": {
+            "street": "4",
+            "zip": "338 43",
+            "city": "Sko\u0159ice",
+            "district": "Sko\u0159ice"
+        },
+        "ds_id": "hb4a3w5"
+    },
+    "Skotnice": {
+        "address": {
+            "street": "24",
+            "zip": "742 58",
+            "city": "Skotnice",
+            "district": "Skotnice"
+        },
+        "ds_id": "ausaxut"
+    },
+    "Skrbe\u0148": {
+        "address": {
+            "street": "Na N\u00e1vsi 131",
+            "zip": "783 35",
+            "city": "Skrbe\u0148",
+            "district": "Skrbe\u0148"
+        },
+        "ds_id": "2zsbz6z"
+    },
+    "Skrchov": {
+        "address": {
+            "street": "19",
+            "zip": "679 61",
+            "city": "Skrchov",
+            "district": "Skrchov"
+        },
+        "ds_id": "tq6a94d"
+    },
+    "Skr\u0161\u00edn": {
+        "address": {
+            "street": "48",
+            "zip": "434 01",
+            "city": "Skr\u0161\u00edn",
+            "district": "Skr\u0161\u00edn"
+        },
+        "ds_id": "c35a35a"
+    },
+    "Skr\u00fdchov u Mal\u0161ic": {
+        "address": {
+            "street": "33",
+            "zip": "391 75",
+            "city": "Skr\u00fdchov u Mal\u0161ic",
+            "district": "Skr\u00fdchov u Mal\u0161ic"
+        },
+        "ds_id": "fbiedzz"
+    },
+    "Skryje": {
+        "address": {
+            "street": "38",
+            "zip": "594 55",
+            "city": "Skryje",
+            "district": "Skryje"
+        },
+        "ds_id": "3jkb5tm"
+    },
+    "Sk\u0159in\u00e1\u0159ov": {
+        "address": {
+            "street": "28",
+            "zip": "594 53",
+            "city": "Sk\u0159in\u00e1\u0159ov",
+            "district": "Sk\u0159in\u00e1\u0159ov"
+        },
+        "ds_id": "gk2bgx5"
+    },
+    "Sk\u0159ipel": {
+        "address": {
+            "street": "55",
+            "zip": "267 24",
+            "city": "Sk\u0159ipel",
+            "district": "Sk\u0159ipel"
+        },
+        "ds_id": "p2bat37"
+    },
+    "Sk\u0159ipov": {
+        "address": {
+            "street": "80",
+            "zip": "747 45",
+            "city": "Sk\u0159ipov",
+            "district": "Sk\u0159ipov"
+        },
+        "ds_id": "vbabbh4"
+    },
+    "Sk\u0159\u00edpov": {
+        "address": {
+            "street": "169",
+            "zip": "798 52",
+            "city": "Sk\u0159\u00edpov",
+            "district": "Sk\u0159\u00edpov"
+        },
+        "ds_id": "4y2arup"
+    },
+    "Sk\u0159ivany": {
+        "address": {
+            "street": "Dr. Vojt\u011bcha 199",
+            "zip": "503 52",
+            "city": "Sk\u0159ivany",
+            "district": "Sk\u0159ivany"
+        },
+        "ds_id": "kgca6qs"
+    },
+    "Skuhrov": {
+        "address": {
+            "street": "63",
+            "zip": "468 22",
+            "city": "Skuhrov",
+            "district": "Hunt\u00ed\u0159ov"
+        },
+        "ds_id": "ivfavr5"
+    },
+    "Skuhrov nad B\u011blou": {
+        "address": {
+            "street": "84",
+            "zip": "517 03",
+            "city": "Skuhrov nad B\u011blou",
+            "district": "Skuhrov nad B\u011blou"
+        },
+        "ds_id": "mxxa55d"
+    },
+    "Skvr\u0148ov": {
+        "address": {
+            "street": "75",
+            "zip": "281 44",
+            "city": "Skvr\u0148ov",
+            "district": "Skvr\u0148ov"
+        },
+        "ds_id": "zsnb5yu"
+    },
+    "Slab\u010dice": {
+        "address": {
+            "street": "53",
+            "zip": "398 47",
+            "city": "Slab\u010dice",
+            "district": "Slab\u010dice"
+        },
+        "ds_id": "t9wb48d"
+    },
+    "Slan\u00e1": {
+        "address": {
+            "street": "94",
+            "zip": "512 01",
+            "city": "Slan\u00e1",
+            "district": "Slan\u00e1"
+        },
+        "ds_id": "j7pbp7f"
+    },
+    "Slan\u00edk": {
+        "address": {
+            "street": "55",
+            "zip": "386 01",
+            "city": "Slan\u00edk",
+            "district": "Slan\u00edk"
+        },
+        "ds_id": "mm2jdzd"
+    },
+    "Slapsko": {
+        "address": {
+            "street": "21",
+            "zip": "391 43",
+            "city": "Slapsko",
+            "district": "Slapsko"
+        },
+        "ds_id": "ainapuu"
+    },
+    "Slapy": {
+        "address": {
+            "street": "33",
+            "zip": "391 76",
+            "city": "Slapy",
+            "district": "Slapy"
+        },
+        "ds_id": "7krb66j"
+    },
+    "Slatina": {
+        "address": {
+            "street": "54",
+            "zip": "569 43",
+            "city": "Slatina",
+            "district": "Slatina"
+        },
+        "ds_id": "d6ya3vq"
+    },
+    "Slatina nad \u00dapou": {
+        "address": {
+            "street": "65",
+            "zip": "549 47",
+            "city": "Slatina nad \u00dapou",
+            "district": "Slatina nad \u00dapou"
+        },
+        "ds_id": "6u4bpxm"
+    },
+    "Slatina nad Zdobnic\u00ed": {
+        "address": {
+            "street": "198",
+            "zip": "517 56",
+            "city": "Slatina nad Zdobnic\u00ed",
+            "district": "Slatina nad Zdobnic\u00ed"
+        },
+        "ds_id": "ha8a6pf"
+    },
+    "Slatinice": {
+        "address": {
+            "street": "50",
+            "zip": "783 42",
+            "city": "Slatinice",
+            "district": "Slatinice"
+        },
+        "ds_id": "c6db46p"
+    },
+    "Slatinky": {
+        "address": {
+            "street": "111",
+            "zip": "783 42",
+            "city": "Slatinky",
+            "district": "Slatinky"
+        },
+        "ds_id": "d8ibiz9"
+    },
+    "Slatiny": {
+        "address": {
+            "street": "19",
+            "zip": "506 01",
+            "city": "Slatiny",
+            "district": "Slatiny"
+        },
+        "ds_id": "8dgbwwz"
+    },
+    "Slav\u010de": {
+        "address": {
+            "street": "52",
+            "zip": "373 21",
+            "city": "Slav\u010de",
+            "district": "Slav\u010de"
+        },
+        "ds_id": "87rb5s4"
+    },
+    "Slav\u011btice": {
+        "address": {
+            "street": "58",
+            "zip": "675 55",
+            "city": "Slav\u011btice",
+            "district": "Slav\u011btice"
+        },
+        "ds_id": "kjnbgas"
+    },
+    "Slavhostice": {
+        "address": {
+            "street": "116",
+            "zip": "507 32",
+            "city": "Slavhostice",
+            "district": "Slavhostice"
+        },
+        "ds_id": "z9fay28"
+    },
+    "Slavi\u010dky": {
+        "address": {
+            "street": "29",
+            "zip": "675 01",
+            "city": "Slavi\u010dky",
+            "district": "Slavi\u010dky"
+        },
+        "ds_id": "k8aanwe"
+    },
+    "Slav\u00edkov": {
+        "address": {
+            "street": "2",
+            "zip": "582 65",
+            "city": "Slav\u00edkov",
+            "district": "Slav\u00edkov"
+        },
+        "ds_id": "xg3ayn2"
+    },
+    "Slav\u00edkovice": {
+        "address": {
+            "street": "7",
+            "zip": "675 31",
+            "city": "Slav\u00edkovice",
+            "district": "Slav\u00edkovice"
+        },
+        "ds_id": "xx6bnzh"
+    },
+    "Slavkov": {
+        "address": {
+            "street": "114",
+            "zip": "687 64",
+            "city": "Slavkov",
+            "district": "Slavkov"
+        },
+        "ds_id": "gpjbixc"
+    },
+    "Slavkov pod Host\u00fdnem": {
+        "address": {
+            "street": "14",
+            "zip": "768 61",
+            "city": "Slavkov pod Host\u00fdnem",
+            "district": "Slavkov pod Host\u00fdnem"
+        },
+        "ds_id": "m99arf8"
+    },
+    "Slavn\u00ed\u010d": {
+        "address": {
+            "street": "14",
+            "zip": "582 55",
+            "city": "Slavn\u00ed\u010d",
+            "district": "Slavn\u00ed\u010d"
+        },
+        "ds_id": "5f8a5u7"
+    },
+    "Slavo\u0161ov": {
+        "address": {
+            "street": "50",
+            "zip": "285 22",
+            "city": "Slavo\u0161ov",
+            "district": "Slavo\u0161ov"
+        },
+        "ds_id": "7wabiwh"
+    },
+    "Slepotice": {
+        "address": {
+            "street": "101",
+            "zip": "530 02",
+            "city": "Slepotice",
+            "district": "Slepotice"
+        },
+        "ds_id": "hz7a3zf"
+    },
+    "Slezsk\u00e9 Pavlovice": {
+        "address": {
+            "street": "16",
+            "zip": "793 99",
+            "city": "Slezsk\u00e9 Pavlovice",
+            "district": "Slezsk\u00e9 Pavlovice"
+        },
+        "ds_id": "waibyqs"
+    },
+    "Slezsk\u00e9 Rudoltice": {
+        "address": {
+            "street": "64",
+            "zip": "793 97",
+            "city": "Slezsk\u00e9 Rudoltice",
+            "district": "Slezsk\u00e9 Rudoltice"
+        },
+        "ds_id": "vxibth3"
+    },
+    "Slopn\u00e9": {
+        "address": {
+            "street": "112",
+            "zip": "763 23",
+            "city": "Slopn\u00e9",
+            "district": "Slopn\u00e9"
+        },
+        "ds_id": "n6aasrp"
+    },
+    "Sloupnice": {
+        "address": {
+            "street": "196",
+            "zip": "565 53",
+            "city": "Sloupnice",
+            "district": "Horn\u00ed Sloupnice"
+        },
+        "ds_id": "hcvbbgv"
+    },
+    "Sloupno": {
+        "address": {
+            "street": "12",
+            "zip": "583 01",
+            "city": "Sloupno",
+            "district": "Sloupno"
+        },
+        "ds_id": "ztwarta"
+    },
+    "Sloup v \u010cech\u00e1ch": {
+        "address": {
+            "street": "Komensk\u00e9ho 236",
+            "zip": "471 52",
+            "city": "Sloup v \u010cech\u00e1ch",
+            "district": "Sloup v \u010cech\u00e1ch"
+        },
+        "ds_id": "fhbbjyw"
+    },
+    "Slove\u010d": {
+        "address": {
+            "street": "142",
+            "zip": "289 03",
+            "city": "Slove\u010d",
+            "district": "Slove\u010d"
+        },
+        "ds_id": "9j4akh7"
+    },
+    "Slov\u011bnice": {
+        "address": {
+            "street": "29",
+            "zip": "257 26",
+            "city": "Slov\u011bnice",
+            "district": "Slov\u011bnice"
+        },
+        "ds_id": "fysayx7"
+    },
+    "Sluhy": {
+        "address": {
+            "street": "7",
+            "zip": "250 63",
+            "city": "Sluhy",
+            "district": "Sluhy"
+        },
+        "ds_id": "s4war4d"
+    },
+    "Slune\u010dn\u00e1": {
+        "address": {
+            "street": "104",
+            "zip": "473 01",
+            "city": "Slune\u010dn\u00e1",
+            "district": "Slune\u010dn\u00e1"
+        },
+        "ds_id": "d2sau4x"
+    },
+    "Slup": {
+        "address": {
+            "street": "42",
+            "zip": "671 28",
+            "city": "Slup",
+            "district": "Slup"
+        },
+        "ds_id": "k86aj57"
+    },
+    "Slu\u0161tice": {
+        "address": {
+            "street": "21",
+            "zip": "250 84",
+            "city": "Slu\u0161tice",
+            "district": "Slu\u0161tice"
+        },
+        "ds_id": "ng3apv5"
+    },
+    "Slu\u017e\u00e1tky": {
+        "address": {
+            "street": "8",
+            "zip": "582 91",
+            "city": "Slu\u017e\u00e1tky",
+            "district": "Slu\u017e\u00e1tky"
+        },
+        "ds_id": "rehat9u"
+    },
+    "Slu\u017eovice": {
+        "address": {
+            "street": "135",
+            "zip": "747 28",
+            "city": "Slu\u017eovice",
+            "district": "Slu\u017eovice"
+        },
+        "ds_id": "2wdb2xz"
+    },
+    "Sm\u011bd\u010dice": {
+        "address": {
+            "street": "32",
+            "zip": "338 24",
+            "city": "Sm\u011bd\u010dice",
+            "district": "Sm\u011bd\u010dice"
+        },
+        "ds_id": "ceway9p"
+    },
+    "Smetanova Lhota": {
+        "address": {
+            "street": "85",
+            "zip": "398 04",
+            "city": "Smetanova Lhota",
+            "district": "Smetanova Lhota"
+        },
+        "ds_id": "4wzbwfg"
+    },
+    "Smilkov": {
+        "address": {
+            "street": "46",
+            "zip": "257 89",
+            "city": "Smilkov",
+            "district": "Smilkov"
+        },
+        "ds_id": "drca6zu"
+    },
+    "Smilovice": {
+        "address": {
+            "street": "11",
+            "zip": "294 42",
+            "city": "Smilovice",
+            "district": "Smilovice"
+        },
+        "ds_id": "7pramff"
+    },
+    "Smilovy Hory": {
+        "address": {
+            "street": "70",
+            "zip": "391 52",
+            "city": "Smilovy Hory",
+            "district": "Smilovy Hory"
+        },
+        "ds_id": "fasanht"
+    },
+    "Smoln\u00e9 Pece": {
+        "address": {
+            "street": "143",
+            "zip": "362 25",
+            "city": "Smoln\u00e9 Pece",
+            "district": "Smoln\u00e9 Pece"
+        },
+        "ds_id": "adbbivi"
+    },
+    "Smolnice": {
+        "address": {
+            "street": "104",
+            "zip": "439 14",
+            "city": "Smolnice",
+            "district": "Smolnice"
+        },
+        "ds_id": "tnqavr2"
+    },
+    "Smolotely": {
+        "address": {
+            "street": "21",
+            "zip": "262 63",
+            "city": "Smolotely",
+            "district": "Smolotely"
+        },
+        "ds_id": "abra3r2"
+    },
+    "Smr\u010dek": {
+        "address": {
+            "street": "61",
+            "zip": "538 51",
+            "city": "Smr\u010dek",
+            "district": "Smr\u010dek"
+        },
+        "ds_id": "62xb3hx"
+    },
+    "Smr\u010dn\u00e1": {
+        "address": {
+            "street": "22",
+            "zip": "588 01",
+            "city": "Smr\u010dn\u00e1",
+            "district": "Smr\u010dn\u00e1"
+        },
+        "ds_id": "77tawnm"
+    },
+    "Smr\u017eice": {
+        "address": {
+            "street": "J. Krezy 40",
+            "zip": "798 17",
+            "city": "Smr\u017eice",
+            "district": "Smr\u017eice"
+        },
+        "ds_id": "d7rbbfg"
+    },
+    "Smr\u017eov": {
+        "address": {
+            "street": "12",
+            "zip": "379 01",
+            "city": "Smr\u017eov",
+            "district": "Smr\u017eov"
+        },
+        "ds_id": "546b7rz"
+    },
+    "Sn\u011bdovice": {
+        "address": {
+            "street": "99",
+            "zip": "411 74",
+            "city": "Sn\u011bdovice",
+            "district": "Sn\u011bdovice"
+        },
+        "ds_id": "gdiaykc"
+    },
+    "Sn\u011bt": {
+        "address": {
+            "street": "64",
+            "zip": "257 68",
+            "city": "Sn\u011bt",
+            "district": "Sn\u011bt"
+        },
+        "ds_id": "4qnrft2"
+    },
+    "Snov\u00eddky": {
+        "address": {
+            "street": "1",
+            "zip": "683 33",
+            "city": "Snov\u00eddky",
+            "district": "Snov\u00eddky"
+        },
+        "ds_id": "q86bpak"
+    },
+    "Sob\u010dice": {
+        "address": {
+            "street": "25",
+            "zip": "508 01",
+            "city": "Sob\u010dice",
+            "district": "Sob\u010dice"
+        },
+        "ds_id": "pjwapmk"
+    },
+    "Sob\u011bhrdy": {
+        "address": {
+            "street": "60",
+            "zip": "256 01",
+            "city": "Sob\u011bhrdy",
+            "district": "Sob\u011bhrdy"
+        },
+        "ds_id": "tgsauit"
+    },
+    "Sob\u011bchleby": {
+        "address": {
+            "street": "141",
+            "zip": "753 54",
+            "city": "Sob\u011bchleby",
+            "district": "Sob\u011bchleby"
+        },
+        "ds_id": "p5fbsbd"
+    },
+    "Sob\u011bkury": {
+        "address": {
+            "street": "47",
+            "zip": "334 01",
+            "city": "Sob\u011bkury",
+            "district": "Sob\u011bkury"
+        },
+        "ds_id": "jtwbbex"
+    },
+    "Sob\u011bnov": {
+        "address": {
+            "street": "52",
+            "zip": "382 41",
+            "city": "Sob\u011bnov",
+            "district": "Sob\u011bnov"
+        },
+        "ds_id": "9jmb78i"
+    },
+    "Sob\u011bslavice": {
+        "address": {
+            "street": "50",
+            "zip": "463 45",
+            "city": "Sob\u011bslavice",
+            "district": "Sob\u011bslavice"
+        },
+        "ds_id": "2g5aupx"
+    },
+    "Sob\u011bsuky": {
+        "address": {
+            "street": "23",
+            "zip": "768 02",
+            "city": "Sob\u011bsuky",
+            "district": "Sob\u011bsuky"
+        },
+        "ds_id": "xwpaviu"
+    },
+    "Sob\u011b\u0161ice": {
+        "address": {
+            "street": "125",
+            "zip": "342 01",
+            "city": "Sob\u011b\u0161ice",
+            "district": "Sob\u011b\u0161ice"
+        },
+        "ds_id": "narbx27"
+    },
+    "Sob\u011b\u0161\u00edn": {
+        "address": {
+            "street": "35",
+            "zip": "285 06",
+            "city": "Sob\u011b\u0161\u00edn",
+            "district": "Sob\u011b\u0161\u00edn"
+        },
+        "ds_id": "h8qbzgj"
+    },
+    "Sob\u011b\u0161ovice": {
+        "address": {
+            "street": "10",
+            "zip": "739 38",
+            "city": "Sob\u011b\u0161ovice",
+            "district": "Sob\u011b\u0161ovice"
+        },
+        "ds_id": "nfwbrpm"
+    },
+    "Sob\u011btuchy": {
+        "address": {
+            "street": "4",
+            "zip": "537 01",
+            "city": "Sob\u011btuchy",
+            "district": "Pouchobrady"
+        },
+        "ds_id": "zzra5dk"
+    },
+    "Sob\u00ed\u0148ov": {
+        "address": {
+            "street": "200",
+            "zip": "582 62",
+            "city": "Sob\u00ed\u0148ov",
+            "district": "Sob\u00ed\u0148ov"
+        },
+        "ds_id": "2cuax98"
+    },
+    "Sob\u00ed\u0161ky": {
+        "address": {
+            "street": "8",
+            "zip": "751 21",
+            "city": "Sob\u00ed\u0161ky",
+            "district": "Sob\u00ed\u0161ky"
+        },
+        "ds_id": "3hfasf4"
+    },
+    "Sobkovice": {
+        "address": {
+            "street": "1",
+            "zip": "561 64",
+            "city": "Sobkovice",
+            "district": "Sobkovice"
+        },
+        "ds_id": "sh5a3j6"
+    },
+    "Sobot\u00edn": {
+        "address": {
+            "street": "54",
+            "zip": "788 16",
+            "city": "Sobot\u00edn",
+            "district": "Sobot\u00edn"
+        },
+        "ds_id": "difbiwx"
+    },
+    "Sobotovice": {
+        "address": {
+            "street": "176",
+            "zip": "664 67",
+            "city": "Sobotovice",
+            "district": "Sobotovice"
+        },
+        "ds_id": "4q6biv7"
+    },
+    "Sob\u016flky": {
+        "address": {
+            "street": "105",
+            "zip": "697 01",
+            "city": "Sob\u016flky",
+            "district": "Sob\u016flky"
+        },
+        "ds_id": "wvha2jw"
+    },
+    "Sojovice": {
+        "address": {
+            "street": "166",
+            "zip": "294 75",
+            "city": "Sojovice",
+            "district": "Sojovice"
+        },
+        "ds_id": "5cwaua5"
+    },
+    "Sokole\u010d": {
+        "address": {
+            "street": "Kol\u00ednsk\u00e1 424",
+            "zip": "290 01",
+            "city": "Sokole\u010d",
+            "district": "Sokole\u010d"
+        },
+        "ds_id": "5iuavhc"
+    },
+    "Sokolnice": {
+        "address": {
+            "street": "Komensk\u00e9ho 435",
+            "zip": "664 52",
+            "city": "Sokolnice",
+            "district": "Sokolnice"
+        },
+        "ds_id": "a2mbbe3"
+    },
+    "Sopotnice": {
+        "address": {
+            "street": "273",
+            "zip": "561 15",
+            "city": "Sopotnice",
+            "district": "Sopotnice"
+        },
+        "ds_id": "ygzb7sh"
+    },
+    "Sop\u0159e\u010d": {
+        "address": {
+            "street": "100",
+            "zip": "533 16",
+            "city": "Sop\u0159e\u010d",
+            "district": "Sop\u0159e\u010d"
+        },
+        "ds_id": "cp9azpw"
+    },
+    "Sosnov\u00e1": {
+        "address": {
+            "street": "35",
+            "zip": "470 01",
+            "city": "Sosnov\u00e1",
+            "district": "Sosnov\u00e1"
+        },
+        "ds_id": "txvbiva"
+    },
+    "Sou\u0148ov": {
+        "address": {
+            "street": "14",
+            "zip": "286 01",
+            "city": "Sou\u0148ov",
+            "district": "Sou\u0148ov"
+        },
+        "ds_id": "t94bgi8"
+    },
+    "Sousedovice": {
+        "address": {
+            "street": "23",
+            "zip": "386 01",
+            "city": "Sousedovice",
+            "district": "Sousedovice"
+        },
+        "ds_id": "fmhbsrq"
+    },
+    "Soutice": {
+        "address": {
+            "street": "104",
+            "zip": "257 71",
+            "city": "Soutice",
+            "district": "Soutice"
+        },
+        "ds_id": "6h4biqy"
+    },
+    "Sovolusky": {
+        "address": {
+            "street": "35",
+            "zip": "535 01",
+            "city": "Sovolusky",
+            "district": "Sovolusky"
+        },
+        "ds_id": "mhiazpq"
+    },
+    "Sp\u00e1\u0148ov": {
+        "address": {
+            "street": "17",
+            "zip": "344 01",
+            "city": "Sp\u00e1\u0148ov",
+            "district": "Sp\u00e1\u0148ov"
+        },
+        "ds_id": "7bsavc4"
+    },
+    "Sp\u011blkov": {
+        "address": {
+            "street": "19",
+            "zip": "592 03",
+            "city": "Sp\u011blkov",
+            "district": "Sp\u011blkov"
+        },
+        "ds_id": "8yfayr6"
+    },
+    "Spe\u0161ov": {
+        "address": {
+            "street": "22",
+            "zip": "679 02",
+            "city": "Spe\u0161ov",
+            "district": "Spe\u0161ov"
+        },
+        "ds_id": "vqtbiq4"
+    },
+    "Spojil": {
+        "address": {
+            "street": "Na Okraj\u00edch 100",
+            "zip": "530 02",
+            "city": "Spojil",
+            "district": "Spojil"
+        },
+        "ds_id": "mxnb46j"
+    },
+    "Spomy\u0161l": {
+        "address": {
+            "street": "120",
+            "zip": "277 05",
+            "city": "Spomy\u0161l",
+            "district": "Spomy\u0161l"
+        },
+        "ds_id": "8d9b6gv"
+    },
+    "Spo\u0159ice": {
+        "address": {
+            "street": "Lipov\u00e1 201",
+            "zip": "431 01",
+            "city": "Spo\u0159ice",
+            "district": "Spo\u0159ice"
+        },
+        "ds_id": "c7maqz5"
+    },
+    "Spytihn\u011bv": {
+        "address": {
+            "street": "359",
+            "zip": "763 64",
+            "city": "Spytihn\u011bv",
+            "district": "Spytihn\u011bv"
+        },
+        "ds_id": "6m7b3ut"
+    },
+    "Srbce": {
+        "address": {
+            "street": "2",
+            "zip": "798 27",
+            "city": "Srbce",
+            "district": "Srbce"
+        },
+        "ds_id": "8draxvt"
+    },
+    "Srbe\u010d": {
+        "address": {
+            "street": "16",
+            "zip": "270 65",
+            "city": "Srbe\u010d",
+            "district": "Srbe\u010d"
+        },
+        "ds_id": "d7xanrd"
+    },
+    "Srbice": {
+        "address": {
+            "street": "25",
+            "zip": "345 43",
+            "city": "Srbice",
+            "district": "Srbice"
+        },
+        "ds_id": "m8ea9ct"
+    },
+    "Srbsk\u00e1 Kamenice": {
+        "address": {
+            "street": "54",
+            "zip": "407 15",
+            "city": "Srbsk\u00e1 Kamenice",
+            "district": "Srbsk\u00e1 Kamenice"
+        },
+        "ds_id": "4dgatrm"
+    },
+    "Srbsko": {
+        "address": {
+            "street": "K Z\u00e1v\u011brce 16",
+            "zip": "267 18",
+            "city": "Srbsko",
+            "district": "Srbsko"
+        },
+        "ds_id": "iyra7b7"
+    },
+    "Srby": {
+        "address": {
+            "street": "70",
+            "zip": "346 01",
+            "city": "Srby",
+            "district": "Srby"
+        },
+        "ds_id": "bfgayq7"
+    },
+    "Srch": {
+        "address": {
+            "street": "Pardubick\u00e1 100",
+            "zip": "533 52",
+            "city": "Srch",
+            "district": "Srch"
+        },
+        "ds_id": "as2a5ee"
+    },
+    "Srn\u00ed": {
+        "address": {
+            "street": "113",
+            "zip": "341 92",
+            "city": "Srn\u00ed",
+            "district": "Srn\u00ed"
+        },
+        "ds_id": "faebxv3"
+    },
+    "Srn\u00edn": {
+        "address": {
+            "street": "42",
+            "zip": "381 01",
+            "city": "Srn\u00edn",
+            "district": "Srn\u00edn"
+        },
+        "ds_id": "387axby"
+    },
+    "Srnojedy": {
+        "address": {
+            "street": "Ke H\u0159i\u0161ti 8",
+            "zip": "530 02",
+            "city": "Srnojedy",
+            "district": "Srnojedy"
+        },
+        "ds_id": "kxibiq7"
+    },
+    "Srubec": {
+        "address": {
+            "street": "Ledenick\u00e1-\u0160karda 92",
+            "zip": "370 06",
+            "city": "Srubec",
+            "district": "Srubec"
+        },
+        "ds_id": "ujcbtbf"
+    },
+    "Sruby": {
+        "address": {
+            "street": "28",
+            "zip": "565 44",
+            "city": "Sruby",
+            "district": "Sruby"
+        },
+        "ds_id": "fxwa3qh"
+    },
+    "Stachy": {
+        "address": {
+            "street": "200",
+            "zip": "384 73",
+            "city": "Stachy",
+            "district": "Stachy"
+        },
+        "ds_id": "gnsbbdj"
+    },
+    "St\u00e1j": {
+        "address": {
+            "street": "42",
+            "zip": "588 27",
+            "city": "St\u00e1j",
+            "district": "St\u00e1j"
+        },
+        "ds_id": "hkja65j"
+    },
+    "St\u00e1lky": {
+        "address": {
+            "street": "5",
+            "zip": "671 06",
+            "city": "St\u00e1lky",
+            "district": "St\u00e1lky"
+        },
+        "ds_id": "dphbnwf"
+    },
+    "Sta\u0148kovice": {
+        "address": {
+            "street": "Postoloprtsk\u00e1 8",
+            "zip": "439 49",
+            "city": "Sta\u0148kovice",
+            "district": "Sta\u0148kovice"
+        },
+        "ds_id": "c78bk94"
+    },
+    "Stanovice": {
+        "address": {
+            "street": "44",
+            "zip": "360 01",
+            "city": "Stanovice",
+            "district": "Stanovice"
+        },
+        "ds_id": "w38bbcw"
+    },
+    "Stanovi\u0161t\u011b": {
+        "address": {
+            "street": "13",
+            "zip": "664 84",
+            "city": "Stanovi\u0161t\u011b",
+            "district": "Stanovi\u0161t\u011b"
+        },
+        "ds_id": "z95bix4"
+    },
+    "Star\u00e1 \u010cerven\u00e1 Voda": {
+        "address": {
+            "street": "204",
+            "zip": "790 53",
+            "city": "Star\u00e1 \u010cerven\u00e1 Voda",
+            "district": "Star\u00e1 \u010cerven\u00e1 Voda"
+        },
+        "ds_id": "caqasgw"
+    },
+    "Star\u00e1 Hu\u0165": {
+        "address": {
+            "street": "Karla \u010capka 430",
+            "zip": "262 02",
+            "city": "Star\u00e1 Hu\u0165",
+            "district": "Star\u00e1 Hu\u0165"
+        },
+        "ds_id": "kuzbgqy"
+    },
+    "Star\u00e1 Lys\u00e1": {
+        "address": {
+            "street": "56",
+            "zip": "289 26",
+            "city": "Star\u00e1 Lys\u00e1",
+            "district": "Star\u00e1 Lys\u00e1"
+        },
+        "ds_id": "zbrasx7"
+    },
+    "Star\u00e1 Paka": {
+        "address": {
+            "street": "Revolu\u010dn\u00ed 180",
+            "zip": "507 91",
+            "city": "Star\u00e1 Paka",
+            "district": "Star\u00e1 Paka"
+        },
+        "ds_id": "ytha6e6"
+    },
+    "Star\u00e1 Ves": {
+        "address": {
+            "street": "75",
+            "zip": "750 02",
+            "city": "Star\u00e1 Ves",
+            "district": "Star\u00e1 Ves"
+        },
+        "ds_id": "9yna8uf"
+    },
+    "Star\u00e1 Ves nad Ond\u0159ejnic\u00ed": {
+        "address": {
+            "street": "Z\u00e1meck\u00e1 1",
+            "zip": "739 23",
+            "city": "Star\u00e1 Ves nad Ond\u0159ejnic\u00ed",
+            "district": "Star\u00e1 Ves"
+        },
+        "ds_id": "asxbfrf"
+    },
+    "Star\u00e1 Voda": {
+        "address": {
+            "street": "88",
+            "zip": "353 01",
+            "city": "Star\u00e1 Voda",
+            "district": "Star\u00e1 Voda"
+        },
+        "ds_id": "xnqbywe"
+    },
+    "Star\u00e9 B\u0159\u00ed\u0161t\u011b": {
+        "address": {
+            "street": "11",
+            "zip": "396 01",
+            "city": "Star\u00e9 B\u0159\u00ed\u0161t\u011b",
+            "district": "Star\u00e9 B\u0159\u00ed\u0161t\u011b"
+        },
+        "ds_id": "z98a8k4"
+    },
+    "Star\u00e9 Hamry": {
+        "address": {
+            "street": "283",
+            "zip": "739 15",
+            "city": "Star\u00e9 Hamry",
+            "district": "Star\u00e9 Hamry"
+        },
+        "ds_id": "naxbbc2"
+    },
+    "Star\u00e9 He\u0159minovy": {
+        "address": {
+            "street": "129",
+            "zip": "793 12",
+            "city": "Star\u00e9 He\u0159minovy",
+            "district": "Star\u00e9 He\u0159minovy"
+        },
+        "ds_id": "hsebips"
+    },
+    "Star\u00e9 Hobz\u00ed": {
+        "address": {
+            "street": "35",
+            "zip": "378 71",
+            "city": "Star\u00e9 Hobz\u00ed",
+            "district": "Star\u00e9 Hobz\u00ed"
+        },
+        "ds_id": "py3b78t"
+    },
+    "Star\u00e9 Hod\u011bjovice": {
+        "address": {
+            "street": "Na N\u00e1vsi 30",
+            "zip": "370 08",
+            "city": "Star\u00e9 Hod\u011bjovice",
+            "district": "Star\u00e9 Hod\u011bjovice"
+        },
+        "ds_id": "ftqauxp"
+    },
+    "Star\u00e9 Hradi\u0161t\u011b": {
+        "address": {
+            "street": "Hradeck\u00e1 428",
+            "zip": "533 52",
+            "city": "Star\u00e9 Hradi\u0161t\u011b",
+            "district": "Star\u00e9 Hradi\u0161t\u011b"
+        },
+        "ds_id": "jkba5e9"
+    },
+    "Star\u00e9 Hrady": {
+        "address": {
+            "street": "17",
+            "zip": "507 23",
+            "city": "Star\u00e9 Hrady",
+            "district": "Star\u00e9 Hrady"
+        },
+        "ds_id": "y3ya9mn"
+    },
+    "Star\u00e9 Jesen\u010dany": {
+        "address": {
+            "street": "57",
+            "zip": "530 02",
+            "city": "Star\u00e9 Jesen\u010dany",
+            "district": "Star\u00e9 Jesen\u010dany"
+        },
+        "ds_id": "udka5e5"
+    },
+    "Star\u00e9 K\u0159e\u010dany": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "Star\u00e9 K\u0159e\u010dany 39, 40761 Star\u00e9 K\u0159e\u010dany",
+            "district": ""
+        },
+        "ds_id": "8y5bin2"
+    },
+    "Star\u00e9 M\u00edsto": {
+        "address": {
+            "street": "70",
+            "zip": "506 01",
+            "city": "Star\u00e9 M\u00edsto",
+            "district": "Star\u00e9 M\u00edsto"
+        },
+        "ds_id": "he8bz6b"
+    },
+    "Star\u00e9 Sedli\u0161t\u011b": {
+        "address": {
+            "street": "359",
+            "zip": "348 01",
+            "city": "Star\u00e9 Sedli\u0161t\u011b",
+            "district": "Star\u00e9 Sedli\u0161t\u011b"
+        },
+        "ds_id": "b59biqd"
+    },
+    "Star\u00e9 Sedlo": {
+        "address": {
+            "street": "Z\u00e1meck\u00e1 100",
+            "zip": "356 01",
+            "city": "Star\u00e9 Sedlo",
+            "district": "Star\u00e9 Sedlo"
+        },
+        "ds_id": "jcfbwfq"
+    },
+    "Star\u00e9 Smrkovice": {
+        "address": {
+            "street": "90",
+            "zip": "508 01",
+            "city": "Star\u00e9 Smrkovice",
+            "district": "Star\u00e9 Smrkovice"
+        },
+        "ds_id": "69rbzxu"
+    },
+    "Star\u00e9 T\u011bchanovice": {
+        "address": {
+            "street": "48",
+            "zip": "749 01",
+            "city": "Star\u00e9 T\u011bchanovice",
+            "district": "Star\u00e9 T\u011bchanovice"
+        },
+        "ds_id": "r9naycn"
+    },
+    "Star\u00e9 \u017dd\u00e1nice": {
+        "address": {
+            "street": "11",
+            "zip": "533 44",
+            "city": "Star\u00e9 \u017dd\u00e1nice",
+            "district": "Star\u00e9 \u017dd\u00e1nice"
+        },
+        "ds_id": "y5ibqr7"
+    },
+    "Starosedlsk\u00fd Hr\u00e1dek": {
+        "address": {
+            "street": "51",
+            "zip": "262 72",
+            "city": "Starosedlsk\u00fd Hr\u00e1dek",
+            "district": "Starosedlsk\u00fd Hr\u00e1dek"
+        },
+        "ds_id": "ry4a7gb"
+    },
+    "Starovice": {
+        "address": {
+            "street": "180",
+            "zip": "693 01",
+            "city": "Starovice",
+            "district": "Starovice"
+        },
+        "ds_id": "6qwbg6v"
+    },
+    "Starovi\u010dky": {
+        "address": {
+            "street": "43",
+            "zip": "691 68",
+            "city": "Starovi\u010dky",
+            "district": "Starovi\u010dky"
+        },
+        "ds_id": "x69ane9"
+    },
+    "Star\u00fd Hrozenkov": {
+        "address": {
+            "street": "3",
+            "zip": "687 74",
+            "city": "Star\u00fd Hrozenkov",
+            "district": "Star\u00fd Hrozenkov"
+        },
+        "ds_id": "dhnbbc6"
+    },
+    "Star\u00fd Ji\u010d\u00edn": {
+        "address": {
+            "street": "133",
+            "zip": "742 31",
+            "city": "Star\u00fd Ji\u010d\u00edn",
+            "district": "Star\u00fd Ji\u010d\u00edn"
+        },
+        "ds_id": "48cbwvk"
+    },
+    "Star\u00fd Kol\u00edn": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 117",
+            "zip": "281 23",
+            "city": "Star\u00fd Kol\u00edn",
+            "district": "Star\u00fd Kol\u00edn"
+        },
+        "ds_id": "pwmbtvf"
+    },
+    "Star\u00fd Mate\u0159ov": {
+        "address": {
+            "street": "38",
+            "zip": "530 02",
+            "city": "Star\u00fd Mate\u0159ov",
+            "district": "Star\u00fd Mate\u0159ov"
+        },
+        "ds_id": "dx6a5ft"
+    },
+    "Star\u00fd Pet\u0159\u00edn": {
+        "address": {
+            "street": "23",
+            "zip": "671 06",
+            "city": "Star\u00fd Pet\u0159\u00edn",
+            "district": "Star\u00fd Pet\u0159\u00edn"
+        },
+        "ds_id": "5qkbjen"
+    },
+    "Star\u00fd Poddvorov": {
+        "address": {
+            "street": "230",
+            "zip": "696 16",
+            "city": "Star\u00fd Poddvorov",
+            "district": "Star\u00fd Poddvorov"
+        },
+        "ds_id": "unnb4vh"
+    },
+    "Star\u00fd \u0160achov": {
+        "address": {
+            "street": "80",
+            "zip": "405 02",
+            "city": "Star\u00fd \u0160achov",
+            "district": "Mal\u00fd \u0160achov"
+        },
+        "ds_id": "tj7atrt"
+    },
+    "Star\u00fd Vestec": {
+        "address": {
+            "street": "67",
+            "zip": "289 16",
+            "city": "Star\u00fd Vestec",
+            "district": "Star\u00fd Vestec"
+        },
+        "ds_id": "gbpbghx"
+    },
+    "Sta\u0159echovice": {
+        "address": {
+            "street": "71",
+            "zip": "798 41",
+            "city": "Sta\u0159echovice",
+            "district": "Sta\u0159echovice"
+        },
+        "ds_id": "3jyaufd"
+    },
+    "Sta\u0159\u00ed\u010d": {
+        "address": {
+            "street": "Chlebovick\u00e1 201",
+            "zip": "739 43",
+            "city": "Sta\u0159\u00ed\u010d",
+            "district": "Sta\u0159\u00ed\u010d"
+        },
+        "ds_id": "4qdbbbc"
+    },
+    "Sta\u0161ov": {
+        "address": {
+            "street": "114",
+            "zip": "267 51",
+            "city": "Sta\u0161ov",
+            "district": "Sta\u0161ov"
+        },
+        "ds_id": "9hda673"
+    },
+    "Stavenice": {
+        "address": {
+            "street": "43",
+            "zip": "789 73",
+            "city": "Stavenice",
+            "district": "Stavenice"
+        },
+        "ds_id": "ti2bvja"
+    },
+    "Stav\u011b\u0161ice": {
+        "address": {
+            "street": "9",
+            "zip": "696 38",
+            "city": "Stav\u011b\u0161ice",
+            "district": "Stav\u011b\u0161ice"
+        },
+        "ds_id": "us8a2az"
+    },
+    "St\u00e9blov\u00e1": {
+        "address": {
+            "street": "12",
+            "zip": "533 45",
+            "city": "St\u00e9blov\u00e1",
+            "district": "St\u00e9blov\u00e1"
+        },
+        "ds_id": "tgkbg8w"
+    },
+    "Stebno": {
+        "address": {
+            "street": "22",
+            "zip": "400 02",
+            "city": "Stebno",
+            "district": "Stebno"
+        },
+        "ds_id": "9n5bu4f"
+    },
+    "St\u011bbo\u0159ice": {
+        "address": {
+            "street": "28",
+            "zip": "747 51",
+            "city": "St\u011bbo\u0159ice",
+            "district": "St\u011bbo\u0159ice"
+        },
+        "ds_id": "4d3bpzj"
+    },
+    "Stehel\u010deves": {
+        "address": {
+            "street": "Hlavn\u00ed 43",
+            "zip": "273 42",
+            "city": "Stehel\u010deves",
+            "district": "Stehel\u010deves"
+        },
+        "ds_id": "n6vbnzm"
+    },
+    "Stehlovice": {
+        "address": {
+            "street": "46",
+            "zip": "398 43",
+            "city": "Stehlovice",
+            "district": "Stehlovice"
+        },
+        "ds_id": "xjpaqb6"
+    },
+    "St\u00ednava": {
+        "address": {
+            "street": "20",
+            "zip": "798 03",
+            "city": "St\u00ednava",
+            "district": "St\u00ednava"
+        },
+        "ds_id": "cq5awwk"
+    },
+    "Stoj\u010d\u00edn": {
+        "address": {
+            "street": "22",
+            "zip": "394 68",
+            "city": "Stoj\u010d\u00edn",
+            "district": "Stoj\u010d\u00edn"
+        },
+        "ds_id": "gy4awpf"
+    },
+    "Stojice": {
+        "address": {
+            "street": "36",
+            "zip": "535 01",
+            "city": "Stojice",
+            "district": "Stojice"
+        },
+        "ds_id": "cucbitk"
+    },
+    "Stolany": {
+        "address": {
+            "street": "114",
+            "zip": "538 03",
+            "city": "Stolany",
+            "district": "Stolany"
+        },
+        "ds_id": "xiqa5fi"
+    },
+    "Stonava": {
+        "address": {
+            "street": "730",
+            "zip": "735 34",
+            "city": "Stonava",
+            "district": "Stonava"
+        },
+        "ds_id": "wd5ba9k"
+    },
+    "Sto\u0161\u00edkovice Na Louce": {
+        "address": {
+            "street": "12",
+            "zip": "671 61",
+            "city": "Sto\u0161\u00edkovice na Louce",
+            "district": "Sto\u0161\u00edkovice na Louce"
+        },
+        "ds_id": "m7fbng5"
+    },
+    "Sto\u017eec": {
+        "address": {
+            "street": "25",
+            "zip": "384 44",
+            "city": "Sto\u017eec",
+            "district": "Sto\u017eec"
+        },
+        "ds_id": "3kjbqpa"
+    },
+    "Sto\u017eice": {
+        "address": {
+            "street": "63",
+            "zip": "389 01",
+            "city": "Sto\u017eice",
+            "district": "Sto\u017eice"
+        },
+        "ds_id": "uxzb5bp"
+    },
+    "Stradonice": {
+        "address": {
+            "street": "11",
+            "zip": "273 71",
+            "city": "Stradonice",
+            "district": "Stradonice"
+        },
+        "ds_id": "7pja95k"
+    },
+    "Stradou\u0148": {
+        "address": {
+            "street": "98",
+            "zip": "538 63",
+            "city": "Stradou\u0148",
+            "district": "Stradou\u0148"
+        },
+        "ds_id": "y64b7vt"
+    },
+    "Strahovice": {
+        "address": {
+            "street": "190",
+            "zip": "747 24",
+            "city": "Strahovice",
+            "district": "Strahovice"
+        },
+        "ds_id": "323bisu"
+    },
+    "Stracho\u0148ovice": {
+        "address": {
+            "street": "19",
+            "zip": "588 56",
+            "city": "Stracho\u0148ovice",
+            "district": "Stracho\u0148ovice"
+        },
+        "ds_id": "peravy6"
+    },
+    "Strachotice": {
+        "address": {
+            "street": "79",
+            "zip": "671 29",
+            "city": "Strachotice",
+            "district": "Strachotice"
+        },
+        "ds_id": "atwa2m5"
+    },
+    "Strachot\u00edn": {
+        "address": {
+            "street": "Osvobozen\u00ed 87",
+            "zip": "693 01",
+            "city": "Strachot\u00edn",
+            "district": "Strachot\u00edn"
+        },
+        "ds_id": "z2ma2kb"
+    },
+    "Strachujov": {
+        "address": {
+            "street": "6",
+            "zip": "592 42",
+            "city": "Strachujov",
+            "district": "Strachujov"
+        },
+        "ds_id": "65jbs63"
+    },
+    "Strakov": {
+        "address": {
+            "street": "3",
+            "zip": "570 01",
+            "city": "Strakov",
+            "district": "Strakov"
+        },
+        "ds_id": "v4kbxhj"
+    },
+    "Straky": {
+        "address": {
+            "street": "215",
+            "zip": "289 25",
+            "city": "Straky",
+            "district": "Straky"
+        },
+        "ds_id": "mkuba9q"
+    },
+    "Stran\u010dice": {
+        "address": {
+            "street": "Revolu\u010dn\u00ed 383",
+            "zip": "251 63",
+            "city": "Stran\u010dice",
+            "district": "Stran\u010dice"
+        },
+        "ds_id": "juyajxi"
+    },
+    "Str\u00e1neck\u00e1 Zho\u0159": {
+        "address": {
+            "street": "35",
+            "zip": "594 42",
+            "city": "Str\u00e1neck\u00e1 Zho\u0159",
+            "district": "Str\u00e1neck\u00e1 Zho\u0159"
+        },
+        "ds_id": "h9sa9z6"
+    },
+    "Str\u00e1n\u00ed": {
+        "address": {
+            "street": "Na kopci 321",
+            "zip": "687 65",
+            "city": "Str\u00e1n\u00ed",
+            "district": "Str\u00e1n\u00ed"
+        },
+        "ds_id": "32aba8z"
+    },
+    "Str\u00e1nka": {
+        "address": {
+            "street": "70",
+            "zip": "277 35",
+            "city": "Str\u00e1nka",
+            "district": "Str\u00e1nka"
+        },
+        "ds_id": "eb5avi6"
+    },
+    "Strann\u00fd": {
+        "address": {
+            "street": "39",
+            "zip": "257 56",
+            "city": "Strann\u00fd",
+            "district": "Strann\u00fd"
+        },
+        "ds_id": "zf2apdw"
+    },
+    "Stra\u0161ice": {
+        "address": {
+            "street": "276",
+            "zip": "338 45",
+            "city": "Stra\u0161ice",
+            "district": "Stra\u0161ice"
+        },
+        "ds_id": "58rbiar"
+    },
+    "Stra\u0161\u00edn": {
+        "address": {
+            "street": "16",
+            "zip": "342 01",
+            "city": "Stra\u0161\u00edn",
+            "district": "Stra\u0161\u00edn"
+        },
+        "ds_id": "w32bx23"
+    },
+    "Stra\u0161kov-Vodochody": {
+        "address": {
+            "street": "2",
+            "zip": "411 84",
+            "city": "Stra\u0161kov-Vodochody",
+            "district": "Stra\u0161kov"
+        },
+        "ds_id": "fi6a33d"
+    },
+    "Stra\u0161nov": {
+        "address": {
+            "street": "36",
+            "zip": "294 31",
+            "city": "Stra\u0161nov",
+            "district": "Stra\u0161nov"
+        },
+        "ds_id": "ppza8rg"
+    },
+    "Stra\u0161ov": {
+        "address": {
+            "street": "93",
+            "zip": "533 16",
+            "city": "Stra\u0161ov",
+            "district": "Stra\u0161ov"
+        },
+        "ds_id": "bpxa3xn"
+    },
+    "Stratov": {
+        "address": {
+            "street": "90",
+            "zip": "289 22",
+            "city": "Stratov",
+            "district": "Stratov"
+        },
+        "ds_id": "k25au93"
+    },
+    "Stra\u017eisko": {
+        "address": {
+            "street": "1",
+            "zip": "798 44",
+            "city": "Stra\u017eisko",
+            "district": "Stra\u017eisko"
+        },
+        "ds_id": "3p9aqv3"
+    },
+    "Str\u00e1\u017ei\u0161t\u011b": {
+        "address": {
+            "street": "19",
+            "zip": "294 13",
+            "city": "Str\u00e1\u017ei\u0161t\u011b",
+            "district": "Str\u00e1\u017ei\u0161t\u011b"
+        },
+        "ds_id": "w5aajvf"
+    },
+    "Str\u00e1\u017en\u00e1": {
+        "address": {
+            "street": "21",
+            "zip": "563 01",
+            "city": "Str\u00e1\u017en\u00e1",
+            "district": "Str\u00e1\u017en\u00e1"
+        },
+        "ds_id": "jnjb6fq"
+    },
+    "Str\u00e1\u017e nad Nisou": {
+        "address": {
+            "street": "Schwarzova 262",
+            "zip": "463 03",
+            "city": "Str\u00e1\u017e nad Nisou",
+            "district": "Str\u00e1\u017e nad Nisou"
+        },
+        "ds_id": "3pdatnb"
+    },
+    "Str\u00e1\u017e nad Oh\u0159\u00ed": {
+        "address": {
+            "street": "21",
+            "zip": "363 01",
+            "city": "Str\u00e1\u017e nad Oh\u0159\u00ed",
+            "district": "Str\u00e1\u017e nad Oh\u0159\u00ed"
+        },
+        "ds_id": "q4sb47y"
+    },
+    "Str\u00e1\u017en\u00e9": {
+        "address": {
+            "street": "129",
+            "zip": "543 52",
+            "city": "Str\u00e1\u017en\u00e9",
+            "district": "Str\u00e1\u017en\u00e9"
+        },
+        "ds_id": "57sbxe5"
+    },
+    "Str\u00e1\u017eovice": {
+        "address": {
+            "street": "196",
+            "zip": "696 38",
+            "city": "Str\u00e1\u017eovice",
+            "district": "Str\u00e1\u017eovice"
+        },
+        "ds_id": "qn6b8b6"
+    },
+    "Strenice": {
+        "address": {
+            "street": "23",
+            "zip": "294 30",
+            "city": "Strenice",
+            "district": "Strenice"
+        },
+        "ds_id": "rcuapgc"
+    },
+    "Strha\u0159e": {
+        "address": {
+            "street": "36",
+            "zip": "679 23",
+            "city": "Strha\u0159e",
+            "district": "Strha\u0159e"
+        },
+        "ds_id": "xtbj2vy"
+    },
+    "Strojetice": {
+        "address": {
+            "street": "95",
+            "zip": "257 65",
+            "city": "Strojetice",
+            "district": "Strojetice"
+        },
+        "ds_id": "4m2akm2"
+    },
+    "Strope\u0161\u00edn": {
+        "address": {
+            "street": "3",
+            "zip": "675 55",
+            "city": "Strope\u0161\u00edn",
+            "district": "Strope\u0161\u00edn"
+        },
+        "ds_id": "zuebyea"
+    },
+    "Struha\u0159ov": {
+        "address": {
+            "street": "Mnichovick\u00e1 179",
+            "zip": "251 64",
+            "city": "Struha\u0159ov",
+            "district": "Struha\u0159ov"
+        },
+        "ds_id": "jdkaum9"
+    },
+    "Strukov": {
+        "address": {
+            "street": "33",
+            "zip": "784 01",
+            "city": "Strukov",
+            "district": "Strukov"
+        },
+        "ds_id": "7ufb2t6"
+    },
+    "Strunkovice nad Voly\u0148kou": {
+        "address": {
+            "street": "26",
+            "zip": "387 01",
+            "city": "Strunkovice nad Voly\u0148kou",
+            "district": "Strunkovice nad Voly\u0148kou"
+        },
+        "ds_id": "fa7b7fx"
+    },
+    "Strup\u010dice": {
+        "address": {
+            "street": "51",
+            "zip": "431 14",
+            "city": "Strup\u010dice",
+            "district": "Strup\u010dice"
+        },
+        "ds_id": "4ecaqyb"
+    },
+    "Stru\u017einec": {
+        "address": {
+            "street": "191",
+            "zip": "512 51",
+            "city": "Stru\u017einec",
+            "district": "Stru\u017einec"
+        },
+        "ds_id": "akbaumd"
+    },
+    "Stru\u017en\u00e1": {
+        "address": {
+            "street": "83",
+            "zip": "364 71",
+            "city": "Stru\u017en\u00e1",
+            "district": "Stru\u017en\u00e1"
+        },
+        "ds_id": "qkmb6bv"
+    },
+    "Stru\u017enice": {
+        "address": {
+            "street": "188",
+            "zip": "470 02",
+            "city": "Stru\u017enice",
+            "district": "Stru\u017enice"
+        },
+        "ds_id": "hizapzy"
+    },
+    "Str\u00fd\u010dice": {
+        "address": {
+            "street": "10",
+            "zip": "373 41",
+            "city": "Str\u00fd\u010dice",
+            "district": "Str\u00fd\u010dice"
+        },
+        "ds_id": "9ameecg"
+    },
+    "St\u0159edokluky": {
+        "address": {
+            "street": "Lidick\u00e1 61",
+            "zip": "252 68",
+            "city": "St\u0159edokluky",
+            "district": "St\u0159edokluky"
+        },
+        "ds_id": "xr8bmsb"
+    },
+    "St\u0159elice": {
+        "address": {
+            "street": "122",
+            "zip": "671 53",
+            "city": "St\u0159elice",
+            "district": "St\u0159elice"
+        },
+        "ds_id": "q9ca2kf"
+    },
+    "St\u0159eln\u00e1": {
+        "address": {
+            "street": "38",
+            "zip": "756 12",
+            "city": "St\u0159eln\u00e1",
+            "district": "St\u0159eln\u00e1"
+        },
+        "ds_id": "5jcb34b"
+    },
+    "St\u0159elsk\u00e9 Ho\u0161tice": {
+        "address": {
+            "street": "83",
+            "zip": "387 15",
+            "city": "St\u0159elsk\u00e9 Ho\u0161tice",
+            "district": "St\u0159elsk\u00e9 Ho\u0161tice"
+        },
+        "ds_id": "9nfba7h"
+    },
+    "St\u0159emo\u0161ice": {
+        "address": {
+            "street": "62",
+            "zip": "538 54",
+            "city": "St\u0159emo\u0161ice",
+            "district": "St\u0159emo\u0161ice"
+        },
+        "ds_id": "v3za29n"
+    },
+    "St\u0159emy": {
+        "address": {
+            "street": "27",
+            "zip": "277 34",
+            "city": "St\u0159emy",
+            "district": "St\u0159emy"
+        },
+        "ds_id": "9v5a6u8"
+    },
+    "St\u0159e\u0148": {
+        "address": {
+            "street": "19",
+            "zip": "783 32",
+            "city": "St\u0159e\u0148",
+            "district": "St\u0159e\u0148"
+        },
+        "ds_id": "tr5auyz"
+    },
+    "St\u0159eva\u010d": {
+        "address": {
+            "street": "49",
+            "zip": "507 22",
+            "city": "St\u0159eva\u010d",
+            "district": "St\u0159eva\u010d"
+        },
+        "ds_id": "qn9bvy3"
+    },
+    "St\u0159ezim\u00ed\u0159": {
+        "address": {
+            "street": "110",
+            "zip": "257 87",
+            "city": "St\u0159ezim\u00ed\u0159",
+            "district": "St\u0159ezim\u00ed\u0159"
+        },
+        "ds_id": "i4ubqfz"
+    },
+    "St\u0159\u00edbrn\u00e1": {
+        "address": {
+            "street": "670",
+            "zip": "358 01",
+            "city": "St\u0159\u00edbrn\u00e1",
+            "district": "St\u0159\u00edbrn\u00e1"
+        },
+        "ds_id": "y8xbpy6"
+    },
+    "St\u0159\u00edbrn\u00e1 Skalice": {
+        "address": {
+            "street": "S\u00e1zavsk\u00e1 323",
+            "zip": "281 67",
+            "city": "St\u0159\u00edbrn\u00e1 Skalice",
+            "district": "St\u0159\u00edbrn\u00e1 Skalice"
+        },
+        "ds_id": "yu6ba7n"
+    },
+    "St\u0159\u00edbrn\u00e9 Hory": {
+        "address": {
+            "street": "65",
+            "zip": "582 22",
+            "city": "St\u0159\u00edbrn\u00e9 Hory",
+            "district": "St\u0159\u00edbrn\u00e9 Hory"
+        },
+        "ds_id": "5t7avxh"
+    },
+    "St\u0159\u00edbrnice": {
+        "address": {
+            "street": "91",
+            "zip": "752 01",
+            "city": "St\u0159\u00edbrnice",
+            "district": "St\u0159\u00edbrnice"
+        },
+        "ds_id": "y7gawhh"
+    },
+    "St\u0159\u00edb\u0159ec, St\u0159\u00edb\u0159ec 149": {
+        "address": {
+            "street": "149",
+            "zip": "378 18",
+            "city": "St\u0159\u00edb\u0159ec",
+            "district": "St\u0159\u00edb\u0159ec"
+        },
+        "ds_id": "u5xb6iw"
+    },
+    "St\u0159\u00edlky": {
+        "address": {
+            "street": "Kory\u010dansk\u00e1 47",
+            "zip": "768 04",
+            "city": "St\u0159\u00edlky",
+            "district": "St\u0159\u00edlky"
+        },
+        "ds_id": "ighbis4"
+    },
+    "St\u0159\u00edte\u017e": {
+        "address": {
+            "street": "34",
+            "zip": "592 51",
+            "city": "St\u0159\u00edte\u017e",
+            "district": "St\u0159\u00edte\u017e"
+        },
+        "ds_id": "qktbhmq"
+    },
+    "St\u0159\u00edte\u017e nad Be\u010dvou": {
+        "address": {
+            "street": "193",
+            "zip": "756 52",
+            "city": "St\u0159\u00edte\u017e nad Be\u010dvou",
+            "district": "St\u0159\u00edte\u017e nad Be\u010dvou"
+        },
+        "ds_id": "jqbbyv5"
+    },
+    "St\u0159\u00edte\u017e nad Ludinou": {
+        "address": {
+            "street": "122",
+            "zip": "753 63",
+            "city": "St\u0159\u00edte\u017e nad Ludinou",
+            "district": "St\u0159\u00edte\u017e nad Ludinou"
+        },
+        "ds_id": "a9cbj73"
+    },
+    "St\u0159\u00edte\u017e pod K\u0159eme\u0161n\u00edkem": {
+        "address": {
+            "street": "7",
+            "zip": "393 01",
+            "city": "St\u0159\u00edte\u017e pod K\u0159eme\u0161n\u00edkem",
+            "district": "St\u0159\u00edte\u017e pod K\u0159eme\u0161n\u00edkem"
+        },
+        "ds_id": "exhbgba"
+    },
+    "St\u0159\u00ed\u017eov": {
+        "address": {
+            "street": "63",
+            "zip": "374 01",
+            "city": "St\u0159\u00ed\u017eov",
+            "district": "St\u0159\u00ed\u017eov"
+        },
+        "ds_id": "w7tamvq"
+    },
+    "St\u0159\u00ed\u017eovice": {
+        "address": {
+            "street": "66",
+            "zip": "332 07",
+            "city": "St\u0159\u00ed\u017eovice",
+            "district": "St\u0159\u00ed\u017eovice"
+        },
+        "ds_id": "2f3bj6b"
+    },
+    "Stud\u00e1nka": {
+        "address": {
+            "street": "170",
+            "zip": "347 01",
+            "city": "Stud\u00e1nka",
+            "district": "Stud\u00e1nka"
+        },
+        "ds_id": "j52bjex"
+    },
+    "Studen\u00e1": {
+        "address": {
+            "street": "n\u00e1m. Sv. J. Nepomuck\u00e9ho 18",
+            "zip": "378 56",
+            "city": "Studen\u00e1",
+            "district": "Studen\u00e1"
+        },
+        "ds_id": "ni8b29p"
+    },
+    "Studen\u00e9": {
+        "address": {
+            "street": "15",
+            "zip": "561 64",
+            "city": "Studen\u00e9",
+            "district": "Studen\u00e9"
+        },
+        "ds_id": "x6aa3ij"
+    },
+    "Studenec": {
+        "address": {
+            "street": "364",
+            "zip": "512 33",
+            "city": "Studenec",
+            "district": "Studenec"
+        },
+        "ds_id": "7kubutg"
+    },
+    "Studen\u011bves": {
+        "address": {
+            "street": "39",
+            "zip": "273 79",
+            "city": "Studen\u011bves",
+            "district": "Studen\u011bves"
+        },
+        "ds_id": "87cakuy"
+    },
+    "Studen\u00fd": {
+        "address": {
+            "street": "45",
+            "zip": "257 68",
+            "city": "Studen\u00fd",
+            "district": "Studen\u00fd"
+        },
+        "ds_id": "y76bged"
+    },
+    "Studnice": {
+        "address": {
+            "street": "66",
+            "zip": "683 08",
+            "city": "Studnice",
+            "district": "Studnice"
+        },
+        "ds_id": "5k7bj7q"
+    },
+    "Stupava": {
+        "address": {
+            "street": "47",
+            "zip": "686 01",
+            "city": "Stupava",
+            "district": "Stupava"
+        },
+        "ds_id": "gm4argr"
+    },
+    "Stvol\u00ednky": {
+        "address": {
+            "street": "53",
+            "zip": "471 02",
+            "city": "Stvol\u00ednky",
+            "district": "Stvol\u00ednky"
+        },
+        "ds_id": "am3an3u"
+    },
+    "Stvolov\u00e1": {
+        "address": {
+            "street": "39",
+            "zip": "679 61",
+            "city": "Stvolov\u00e1",
+            "district": "Stvolov\u00e1"
+        },
+        "ds_id": "gf3a2km"
+    },
+    "Sud\u011bjov": {
+        "address": {
+            "street": "24",
+            "zip": "285 04",
+            "city": "Sud\u011bjov",
+            "district": "Sud\u011bjov"
+        },
+        "ds_id": "ekbbxsr"
+    },
+    "Sudice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed P. Arno\u0161ta Jureczky 13",
+            "zip": "747 25",
+            "city": "Sudice",
+            "district": "Sudice"
+        },
+        "ds_id": "6hbba64"
+    },
+    "Sudislav nad Orlic\u00ed": {
+        "address": {
+            "street": "65",
+            "zip": "562 01",
+            "city": "Sudislav nad Orlic\u00ed",
+            "district": "Sudislav nad Orlic\u00ed"
+        },
+        "ds_id": "8bza5fe"
+    },
+    "Sudkov": {
+        "address": {
+            "street": "96",
+            "zip": "788 21",
+            "city": "Sudkov",
+            "district": "Sudkov"
+        },
+        "ds_id": "7kxbige"
+    },
+    "Sudom\u011b\u0159": {
+        "address": {
+            "street": "9",
+            "zip": "294 25",
+            "city": "Sudom\u011b\u0159",
+            "district": "Sudom\u011b\u0159"
+        },
+        "ds_id": "93dam6h"
+    },
+    "Sudom\u011b\u0159ice": {
+        "address": {
+            "street": "322",
+            "zip": "696 66",
+            "city": "Sudom\u011b\u0159ice",
+            "district": "Sudom\u011b\u0159ice"
+        },
+        "ds_id": "5fxb4vd"
+    },
+    "Sudom\u011b\u0159ice u Bechyn\u011b": {
+        "address": {
+            "street": "105",
+            "zip": "391 72",
+            "city": "Sudom\u011b\u0159ice u Bechyn\u011b",
+            "district": "Sudom\u011b\u0159ice u Bechyn\u011b"
+        },
+        "ds_id": "b9gb6mg"
+    },
+    "Sudom\u011b\u0159ice u T\u00e1bora": {
+        "address": {
+            "street": "27",
+            "zip": "391 36",
+            "city": "Sudom\u011b\u0159ice u T\u00e1bora",
+            "district": "Sudom\u011b\u0159ice u T\u00e1bora"
+        },
+        "ds_id": "neiamvu"
+    },
+    "Sudovo Hlavno": {
+        "address": {
+            "street": "15",
+            "zip": "294 76",
+            "city": "Sudovo Hlavno",
+            "district": "Sudovo Hlavno"
+        },
+        "ds_id": "aedate6"
+    },
+    "Sudslava": {
+        "address": {
+            "street": "64",
+            "zip": "561 13",
+            "city": "Sudslava",
+            "district": "Sudslava"
+        },
+        "ds_id": "xaxbj5w"
+    },
+    "Such\u00e1": {
+        "address": {
+            "street": "1",
+            "zip": "588 33",
+            "city": "Such\u00e1",
+            "district": "Such\u00e1"
+        },
+        "ds_id": "zpcbuet"
+    },
+    "Such\u00e1 Lhota": {
+        "address": {
+            "street": "12",
+            "zip": "570 01",
+            "city": "Such\u00e1 Lhota",
+            "district": "Such\u00e1 Lhota"
+        },
+        "ds_id": "g5aa5g6"
+    },
+    "Such\u00e1 Loz": {
+        "address": {
+            "street": "72",
+            "zip": "687 53",
+            "city": "Such\u00e1 Loz",
+            "district": "Such\u00e1 Loz"
+        },
+        "ds_id": "p3vba7s"
+    },
+    "Suchodol": {
+        "address": {
+            "street": "8",
+            "zip": "261 01",
+            "city": "Suchodol",
+            "district": "Suchodol"
+        },
+        "ds_id": "74hak4i"
+    },
+    "Suchohrdly": {
+        "address": {
+            "street": "T\u011b\u0161etick\u00e1 114",
+            "zip": "669 02",
+            "city": "Suchohrdly",
+            "district": "Suchohrdly"
+        },
+        "ds_id": "s3rbtwu"
+    },
+    "Suchohrdly u Miroslavi": {
+        "address": {
+            "street": "86",
+            "zip": "671 72",
+            "city": "Suchohrdly u Miroslavi",
+            "district": "Suchohrdly u Miroslavi"
+        },
+        "ds_id": "38zbjz3"
+    },
+    "Suchomasty": {
+        "address": {
+            "street": "31",
+            "zip": "267 22",
+            "city": "Suchomasty",
+            "district": "Suchomasty"
+        },
+        "ds_id": "bbvbm7c"
+    },
+    "Suchonice": {
+        "address": {
+            "street": "29",
+            "zip": "783 57",
+            "city": "Suchonice",
+            "district": "Suchonice"
+        },
+        "ds_id": "k3zasgs"
+    },
+    "Suchov": {
+        "address": {
+            "street": "63",
+            "zip": "696 71",
+            "city": "Suchov",
+            "district": "Suchov"
+        },
+        "ds_id": "m38a2j4"
+    },
+    "Such\u00fd": {
+        "address": {
+            "street": "99",
+            "zip": "680 01",
+            "city": "Such\u00fd",
+            "district": "Such\u00fd"
+        },
+        "ds_id": "gvhbj6i"
+    },
+    "Sukorady": {
+        "address": {
+            "street": "70",
+            "zip": "508 01",
+            "city": "Sukorady",
+            "district": "Sukorady"
+        },
+        "ds_id": "4rxbsfz"
+    },
+    "Sulejovice": {
+        "address": {
+            "street": "N\u00e1ves 5",
+            "zip": "411 11",
+            "city": "Sulejovice",
+            "district": "Sulejovice"
+        },
+        "ds_id": "x8was7r"
+    },
+    "Sul\u00edkov": {
+        "address": {
+            "street": "37",
+            "zip": "679 62",
+            "city": "Sul\u00edkov",
+            "district": "Sul\u00edkov"
+        },
+        "ds_id": "4hna2ie"
+    },
+    "Sulimov": {
+        "address": {
+            "street": "51",
+            "zip": "768 21",
+            "city": "Sulimov",
+            "district": "Sulimov"
+        },
+        "ds_id": "rfdargj"
+    },
+    "Sulislav": {
+        "address": {
+            "street": "42",
+            "zip": "349 01",
+            "city": "Sulislav",
+            "district": "Sulislav"
+        },
+        "ds_id": "ez2bibj"
+    },
+    "Sulkovec": {
+        "address": {
+            "street": "50",
+            "zip": "592 65",
+            "city": "Sulkovec",
+            "district": "Sulkovec"
+        },
+        "ds_id": "xkgaxvx"
+    },
+    "Sup\u00edkovice": {
+        "address": {
+            "street": "130",
+            "zip": "790 51",
+            "city": "Sup\u00edkovice",
+            "district": "Sup\u00edkovice"
+        },
+        "ds_id": "scvbj9r"
+    },
+    "Sv\u00e1rov": {
+        "address": {
+            "street": "Hlavn\u00ed 1",
+            "zip": "273 51",
+            "city": "Sv\u00e1rov",
+            "district": "Sv\u00e1rov"
+        },
+        "ds_id": "3zbbqcd"
+    },
+    "Svat\u00e1": {
+        "address": {
+            "street": "40",
+            "zip": "267 51",
+            "city": "Svat\u00e1",
+            "district": "Svat\u00e1"
+        },
+        "ds_id": "3ewaqfv"
+    },
+    "Svat\u00e1 Ma\u0159\u00ed": {
+        "address": {
+            "street": "34",
+            "zip": "385 01",
+            "city": "Svat\u00e1 Ma\u0159\u00ed",
+            "district": "Svat\u00e1 Ma\u0159\u00ed"
+        },
+        "ds_id": "hjkbj9v"
+    },
+    "Svat\u00e9 Pole": {
+        "address": {
+            "street": "36",
+            "zip": "263 01",
+            "city": "Svat\u00e9 Pole",
+            "district": "Svat\u00e9 Pole"
+        },
+        "ds_id": "9nmanhe"
+    },
+    "Svatobo\u0159ice-Mist\u0159\u00edn": {
+        "address": {
+            "street": "Hlavn\u00ed 1000",
+            "zip": "696 04",
+            "city": "Svatobo\u0159ice-Mist\u0159\u00edn",
+            "district": "Svatobo\u0159ice"
+        },
+        "ds_id": "siwba5v"
+    },
+    "Svatojansk\u00fd \u00dajezd": {
+        "address": {
+            "street": "54",
+            "zip": "507 81",
+            "city": "Svatojansk\u00fd \u00dajezd",
+            "district": "Svatojansk\u00fd \u00dajezd"
+        },
+        "ds_id": "ucibuvh"
+    },
+    "Svato\u0148ovice": {
+        "address": {
+            "street": "70",
+            "zip": "747 87",
+            "city": "Svato\u0148ovice",
+            "district": "Svato\u0148ovice"
+        },
+        "ds_id": "48maxue"
+    },
+    "Svatoslav": {
+        "address": {
+            "street": "29",
+            "zip": "675 07",
+            "city": "Svatoslav",
+            "district": "Svatoslav"
+        },
+        "ds_id": "ic7a886"
+    },
+    "Svat\u00fd Jan": {
+        "address": {
+            "street": "33",
+            "zip": "262 56",
+            "city": "Svat\u00fd Jan",
+            "district": "Dr\u00e1\u017ekov"
+        },
+        "ds_id": "7htaj88"
+    },
+    "Svat\u00fd Jan nad Mal\u0161\u00ed": {
+        "address": {
+            "street": "13",
+            "zip": "373 23",
+            "city": "Svat\u00fd Jan nad Mal\u0161\u00ed",
+            "district": "Svat\u00fd Jan nad Mal\u0161\u00ed"
+        },
+        "ds_id": "knybruu"
+    },
+    "Svat\u00fd Jan pod Skalou": {
+        "address": {
+            "street": "6",
+            "zip": "266 01",
+            "city": "Svat\u00fd Jan pod Skalou",
+            "district": "Svat\u00fd Jan pod Skalou"
+        },
+        "ds_id": "e3pbn43"
+    },
+    "Svat\u00fd Ji\u0159\u00ed": {
+        "address": {
+            "street": "44",
+            "zip": "565 01",
+            "city": "Svat\u00fd Ji\u0159\u00ed",
+            "district": "Svat\u00fd Ji\u0159\u00ed"
+        },
+        "ds_id": "rwja5g2"
+    },
+    "Svat\u00fd Mikul\u00e1\u0161": {
+        "address": {
+            "street": "23",
+            "zip": "284 01",
+            "city": "Svat\u00fd Mikul\u00e1\u0161",
+            "district": "Svat\u00fd Mikul\u00e1\u0161"
+        },
+        "ds_id": "3b7ba5r"
+    },
+    "Sv\u00e9bohov": {
+        "address": {
+            "street": "64",
+            "zip": "789 01",
+            "city": "Sv\u00e9bohov",
+            "district": "Sv\u00e9bohov"
+        },
+        "ds_id": "8shaxix"
+    },
+    "Sv\u00e9myslice": {
+        "address": {
+            "street": "18",
+            "zip": "250 91",
+            "city": "Sv\u00e9myslice",
+            "district": "Sv\u00e9myslice"
+        },
+        "ds_id": "uydatxc"
+    },
+    "Sv\u00e9pravice": {
+        "address": {
+            "street": "60",
+            "zip": "393 01",
+            "city": "Sv\u00e9pravice",
+            "district": "Sv\u00e9pravice"
+        },
+        "ds_id": "yt7bqb2"
+    },
+    "Sv\u00e9radice": {
+        "address": {
+            "street": "146",
+            "zip": "341 01",
+            "city": "Sv\u00e9radice",
+            "district": "Sv\u00e9radice"
+        },
+        "ds_id": "ptbbibd"
+    },
+    "Sv\u00e9sedlice": {
+        "address": {
+            "street": "58",
+            "zip": "783 54",
+            "city": "Sv\u00e9sedlice",
+            "district": "Sv\u00e9sedlice"
+        },
+        "ds_id": "2uzaw5b"
+    },
+    "Sv\u011btce": {
+        "address": {
+            "street": "15",
+            "zip": "378 21",
+            "city": "Sv\u011btce",
+            "district": "Sv\u011btce"
+        },
+        "ds_id": "8kied96"
+    },
+    "Sv\u011btec": {
+        "address": {
+            "street": "Z\u00e1mek 1",
+            "zip": "417 53",
+            "city": "Sv\u011btec",
+            "district": "Sv\u011btec"
+        },
+        "ds_id": "hrmba5z"
+    },
+    "Sv\u011btice": {
+        "address": {
+            "street": "U H\u0159i\u0161t\u011b 151",
+            "zip": "251 01",
+            "city": "Sv\u011btice",
+            "district": "Sv\u011btice"
+        },
+        "ds_id": "tfzakyz"
+    },
+    "Sv\u011btl\u00e1": {
+        "address": {
+            "street": "55",
+            "zip": "679 63",
+            "city": "Sv\u011btl\u00e1",
+            "district": "Sv\u011btl\u00e1"
+        },
+        "ds_id": "ruqbmdm"
+    },
+    "Sv\u011btl\u00e1 Hora": {
+        "address": {
+            "street": "374",
+            "zip": "793 31",
+            "city": "Sv\u011btl\u00e1 Hora",
+            "district": "Sv\u011btl\u00e1"
+        },
+        "ds_id": "8ycba46"
+    },
+    "Sv\u011btl\u00e1 pod Je\u0161t\u011bdem": {
+        "address": {
+            "street": "48",
+            "zip": "463 43",
+            "city": "Sv\u011btl\u00e1 pod Je\u0161t\u011bdem",
+            "district": "Hodky"
+        },
+        "ds_id": "zhpat6e"
+    },
+    "Sv\u011btl\u00edk": {
+        "address": {
+            "street": "27",
+            "zip": "382 16",
+            "city": "Sv\u011btl\u00edk",
+            "district": "Sv\u011btl\u00edk"
+        },
+        "ds_id": "t2pamub"
+    },
+    "Sv\u011btnov": {
+        "address": {
+            "street": "62",
+            "zip": "591 02",
+            "city": "Sv\u011btnov",
+            "district": "Sv\u011btnov"
+        },
+        "ds_id": "je9azet"
+    },
+    "Sviadnov": {
+        "address": {
+            "street": "Na drah\u00e1ch 119",
+            "zip": "739 25",
+            "city": "Sviadnov",
+            "district": "Sviadnov"
+        },
+        "ds_id": "sy5b39q"
+    },
+    "Sv\u00eddnice": {
+        "address": {
+            "street": "99",
+            "zip": "538 24",
+            "city": "Sv\u00eddnice",
+            "district": "Sv\u00eddnice"
+        },
+        "ds_id": "2pua5gx"
+    },
+    "Svijansk\u00fd \u00dajezd": {
+        "address": {
+            "street": "27",
+            "zip": "463 45",
+            "city": "Svijansk\u00fd \u00dajezd",
+            "district": "Svijansk\u00fd \u00dajezd"
+        },
+        "ds_id": "qqeat6i"
+    },
+    "Svijany": {
+        "address": {
+            "street": "71",
+            "zip": "463 46",
+            "city": "Svijany",
+            "district": "Svijany"
+        },
+        "ds_id": "256bj9m"
+    },
+    "Svina\u0159e": {
+        "address": {
+            "street": "Obecn\u00ed 42",
+            "zip": "267 28",
+            "city": "Svina\u0159e",
+            "district": "Svina\u0159e"
+        },
+        "ds_id": "niibhcr"
+    },
+    "Svina\u0159ov": {
+        "address": {
+            "street": "U V\u00fdboru 176",
+            "zip": "273 05",
+            "city": "Svina\u0159ov",
+            "district": "Svina\u0159ov"
+        },
+        "ds_id": "xbzauni"
+    },
+    "Svin\u010dany": {
+        "address": {
+            "street": "52",
+            "zip": "535 01",
+            "city": "Svin\u010dany",
+            "district": "Svin\u010dany"
+        },
+        "ds_id": "watazpk"
+    },
+    "Svino\u0161ice": {
+        "address": {
+            "street": "1",
+            "zip": "679 22",
+            "city": "Svino\u0161ice",
+            "district": "Svino\u0161ice"
+        },
+        "ds_id": "sjvavzj"
+    },
+    "Sviny": {
+        "address": {
+            "street": "35",
+            "zip": "594 51",
+            "city": "Sviny",
+            "district": "Sviny"
+        },
+        "ds_id": "mufbg9e"
+    },
+    "Svobodn\u00e9 He\u0159manice": {
+        "address": {
+            "street": "Sokolovsk\u00e1 94",
+            "zip": "793 12",
+            "city": "Svobodn\u00e9 He\u0159manice",
+            "district": "Svobodn\u00e9 He\u0159manice"
+        },
+        "ds_id": "5wqaxxq"
+    },
+    "Svojek": {
+        "address": {
+            "street": "1",
+            "zip": "507 91",
+            "city": "Svojek",
+            "district": "Svojek"
+        },
+        "ds_id": "jyaavhj"
+    },
+    "Svojetice": {
+        "address": {
+            "street": "Na Kopci 14",
+            "zip": "251 62",
+            "city": "Svojetice",
+            "district": "Svojetice"
+        },
+        "ds_id": "39aakyt"
+    },
+    "Svojet\u00edn": {
+        "address": {
+            "street": "20",
+            "zip": "270 04",
+            "city": "Svojet\u00edn",
+            "district": "Svojet\u00edn"
+        },
+        "ds_id": "brsaj2z"
+    },
+    "Svojkov": {
+        "address": {
+            "street": "12",
+            "zip": "471 53",
+            "city": "Svojkov",
+            "district": "Svojkov"
+        },
+        "ds_id": "99za9an"
+    },
+    "Svojkovice": {
+        "address": {
+            "street": "44",
+            "zip": "588 56",
+            "city": "Svojkovice",
+            "district": "Svojkovice"
+        },
+        "ds_id": "krpa66y"
+    },
+    "Svoj\u0161ice": {
+        "address": {
+            "street": "121",
+            "zip": "281 07",
+            "city": "Svoj\u0161ice",
+            "district": "Svoj\u0161ice"
+        },
+        "ds_id": "sc6ak8j"
+    },
+    "Svoj\u0161\u00edn": {
+        "address": {
+            "street": "",
+            "zip": " ",
+            "city": "Svoj\u0161\u00edn 21, 34901 Svoj\u0161\u00edn",
+            "district": ""
+        },
+        "ds_id": "pudasuy"
+    },
+    "Svor": {
+        "address": {
+            "street": "195",
+            "zip": "471 51",
+            "city": "Svor",
+            "district": "Svor"
+        },
+        "ds_id": "n7rbj8c"
+    },
+    "Svrabov": {
+        "address": {
+            "street": "21",
+            "zip": "391 31",
+            "city": "Svrabov",
+            "district": "Svrabov"
+        },
+        "ds_id": "9pmjdx6"
+    },
+    "Svratouch": {
+        "address": {
+            "street": "290",
+            "zip": "539 42",
+            "city": "Svratouch",
+            "district": "Svratouch"
+        },
+        "ds_id": "bvkb372"
+    },
+    "Sychrov": {
+        "address": {
+            "street": "1",
+            "zip": "463 44",
+            "city": "Sychrov",
+            "district": "Sychrov"
+        },
+        "ds_id": "5s8ba3t"
+    },
+    "S\u00fdko\u0159ice": {
+        "address": {
+            "street": "75",
+            "zip": "270 24",
+            "city": "S\u00fdko\u0159ice",
+            "district": "S\u00fdko\u0159ice"
+        },
+        "ds_id": "ki3aj2v"
+    },
+    "Synalov": {
+        "address": {
+            "street": "54",
+            "zip": "679 23",
+            "city": "Synalov",
+            "district": "Synalov"
+        },
+        "ds_id": "mr4asj5"
+    },
+    "Synkov-Slemeno": {
+        "address": {
+            "street": "48",
+            "zip": "516 01",
+            "city": "Synkov-Slemeno",
+            "district": "Synkov"
+        },
+        "ds_id": "agta7ri"
+    },
+    "Syrov": {
+        "address": {
+            "street": "13",
+            "zip": "396 01",
+            "city": "Syrov",
+            "district": "Syrov"
+        },
+        "ds_id": "4r8atet"
+    },
+    "Syrovice": {
+        "address": {
+            "street": "298",
+            "zip": "664 67",
+            "city": "Syrovice",
+            "district": "Syrovice"
+        },
+        "ds_id": "pbfake4"
+    },
+    "Syrov\u00edn": {
+        "address": {
+            "street": "70",
+            "zip": "696 84",
+            "city": "Syrov\u00edn",
+            "district": "Syrov\u00edn"
+        },
+        "ds_id": "btxbxei"
+    },
+    "Sy\u0159enov": {
+        "address": {
+            "street": "68",
+            "zip": "512 51",
+            "city": "Sy\u0159enov",
+            "district": "Sy\u0159enov"
+        },
+        "ds_id": "3yfbs5n"
+    },
+    "Sytno": {
+        "address": {
+            "street": "72",
+            "zip": "349 01",
+            "city": "Sytno",
+            "district": "Sytno"
+        },
+        "ds_id": "eh3awrd"
+    },
+    "\u0160abina": {
+        "address": {
+            "street": "80",
+            "zip": "356 01",
+            "city": "\u0160abina",
+            "district": "\u0160abina"
+        },
+        "ds_id": "6cxbq3i"
+    },
+    "\u0160afov": {
+        "address": {
+            "street": "78",
+            "zip": "671 06",
+            "city": "\u0160afov",
+            "district": "\u0160afov"
+        },
+        "ds_id": "xy2bj88"
+    },
+    "\u0160akvice": {
+        "address": {
+            "street": "Hlavn\u00ed 12",
+            "zip": "691 67",
+            "city": "\u0160akvice",
+            "district": "\u0160akvice"
+        },
+        "ds_id": "r8sa25x"
+    },
+    "\u0160anov": {
+        "address": {
+            "street": "119",
+            "zip": "270 31",
+            "city": "\u0160anov",
+            "district": "\u0160anov"
+        },
+        "ds_id": "pfmas7v"
+    },
+    "\u0160aratice": {
+        "address": {
+            "street": "N\u00e1ves 83",
+            "zip": "683 52",
+            "city": "\u0160aratice",
+            "district": "\u0160aratice"
+        },
+        "ds_id": "cetbbkq"
+    },
+    "\u0160ardice": {
+        "address": {
+            "street": "601",
+            "zip": "696 13",
+            "city": "\u0160ardice",
+            "district": "\u0160ardice"
+        },
+        "ds_id": "3mibbjw"
+    },
+    "\u0160\u00e1rovcova Lhota": {
+        "address": {
+            "street": "80",
+            "zip": "507 59",
+            "city": "\u0160\u00e1rovcova Lhota",
+            "district": "\u0160\u00e1rovcova Lhota"
+        },
+        "ds_id": "danbzke"
+    },
+    "\u0160arovy": {
+        "address": {
+            "street": "100",
+            "zip": "763 51",
+            "city": "\u0160arovy",
+            "district": "\u0160arovy"
+        },
+        "ds_id": "4vcbrnw"
+    },
+    "\u0160ebest\u011bnice": {
+        "address": {
+            "street": "60",
+            "zip": "286 01",
+            "city": "\u0160ebest\u011bnice",
+            "district": "\u0160ebest\u011bnice"
+        },
+        "ds_id": "vmpakgw"
+    },
+    "\u0160ebetov": {
+        "address": {
+            "street": "108",
+            "zip": "679 35",
+            "city": "\u0160ebetov",
+            "district": "\u0160ebetov"
+        },
+        "ds_id": "mqxbudk"
+    },
+    "\u0160eb\u00ed\u0159ov": {
+        "address": {
+            "street": "31",
+            "zip": "391 43",
+            "city": "\u0160eb\u00ed\u0159ov",
+            "district": "\u0160eb\u00ed\u0159ov"
+        },
+        "ds_id": "fdtbw43"
+    },
+    "\u0160ebkovice": {
+        "address": {
+            "street": "1",
+            "zip": "675 45",
+            "city": "\u0160ebkovice",
+            "district": "\u0160ebkovice"
+        },
+        "ds_id": "cvwbzx9"
+    },
+    "\u0160ebrov - Kate\u0159ina": {
+        "address": {
+            "street": "64",
+            "zip": "679 22",
+            "city": "\u0160ebrov-Kate\u0159ina",
+            "district": "\u0160ebrov"
+        },
+        "ds_id": "cnha69e"
+    },
+    "\u0160edivec": {
+        "address": {
+            "street": "57",
+            "zip": "564 01",
+            "city": "\u0160edivec",
+            "district": "\u0160edivec"
+        },
+        "ds_id": "3bea3jy"
+    },
+    "\u0160ele\u0161ovice": {
+        "address": {
+            "street": "93",
+            "zip": "767 01",
+            "city": "\u0160ele\u0161ovice",
+            "district": "\u0160ele\u0161ovice"
+        },
+        "ds_id": "k2rb6mc"
+    },
+    "\u0160emnice": {
+        "address": {
+            "street": "25",
+            "zip": "362 72",
+            "city": "\u0160emnice",
+            "district": "Dubina"
+        },
+        "ds_id": "5e3b7np"
+    },
+    "\u0160enov u Nov\u00e9ho Ji\u010d\u00edna": {
+        "address": {
+            "street": "Dukelsk\u00e1 245",
+            "zip": "742 42",
+            "city": "\u0160enov u Nov\u00e9ho Ji\u010d\u00edna",
+            "district": "\u0160enov u Nov\u00e9ho Ji\u010d\u00edna"
+        },
+        "ds_id": "dzwaxv8"
+    },
+    "\u0160erkovice": {
+        "address": {
+            "street": "33",
+            "zip": "666 01",
+            "city": "\u0160erkovice",
+            "district": "\u0160erkovice"
+        },
+        "ds_id": "3vwbq5f"
+    },
+    "\u0160estajovice": {
+        "address": {
+            "street": "Husova 60",
+            "zip": "250 92",
+            "city": "\u0160estajovice",
+            "district": "\u0160estajovice"
+        },
+        "ds_id": "vm4b5e2"
+    },
+    "\u0160et\u011bjovice": {
+        "address": {
+            "street": "8",
+            "zip": "257 68",
+            "city": "\u0160et\u011bjovice",
+            "district": "\u0160et\u011bjovice"
+        },
+        "ds_id": "nhnbj52"
+    },
+    "\u0160ilhe\u0159ovice": {
+        "address": {
+            "street": "St\u0159edn\u00ed 305",
+            "zip": "747 15",
+            "city": "\u0160ilhe\u0159ovice",
+            "district": "\u0160ilhe\u0159ovice"
+        },
+        "ds_id": "c2abj2t"
+    },
+    "\u0160imanov": {
+        "address": {
+            "street": "58",
+            "zip": "588 42",
+            "city": "\u0160imanov",
+            "district": "\u0160imanov"
+        },
+        "ds_id": "52qbtem"
+    },
+    "\u0160imonovice": {
+        "address": {
+            "street": "Minkovick\u00e1 70",
+            "zip": "463 12",
+            "city": "\u0160imonovice",
+            "district": "\u0160imonovice"
+        },
+        "ds_id": "xh6jdrq"
+    },
+    "\u0160indelov\u00e1": {
+        "address": {
+            "street": "117",
+            "zip": "358 01",
+            "city": "\u0160indelov\u00e1",
+            "district": "\u0160indelov\u00e1"
+        },
+        "ds_id": "gq5bz3z"
+    },
+    "\u0160\u00edpy": {
+        "address": {
+            "street": "19",
+            "zip": "270 34",
+            "city": "\u0160\u00edpy",
+            "district": "\u0160\u00edpy"
+        },
+        "ds_id": "empjdu9"
+    },
+    "\u0160irok\u00e1 Niva": {
+        "address": {
+            "street": "79",
+            "zip": "792 01",
+            "city": "\u0160irok\u00e1 Niva",
+            "district": "\u0160irok\u00e1 Niva"
+        },
+        "ds_id": "tdvb3wu"
+    },
+    "\u0160irok\u00fd D\u016fl": {
+        "address": {
+            "street": "100",
+            "zip": "572 01",
+            "city": "\u0160irok\u00fd D\u016fl",
+            "district": "\u0160irok\u00fd D\u016fl"
+        },
+        "ds_id": "9mna3ms"
+    },
+    "\u0160i\u0161ma": {
+        "address": {
+            "street": "59",
+            "zip": "751 11",
+            "city": "\u0160i\u0161ma",
+            "district": "\u0160i\u0161ma"
+        },
+        "ds_id": "vvaasgk"
+    },
+    "\u0160itbo\u0159ice": {
+        "address": {
+            "street": "Osvobozen\u00ed 92",
+            "zip": "691 76",
+            "city": "\u0160itbo\u0159ice",
+            "district": "\u0160itbo\u0159ice"
+        },
+        "ds_id": "evubbis"
+    },
+    "\u0160krdlovice": {
+        "address": {
+            "street": "48",
+            "zip": "591 01",
+            "city": "\u0160krdlovice",
+            "district": "\u0160krdlovice"
+        },
+        "ds_id": "wnsarsw"
+    },
+    "\u0160kvo\u0159etice": {
+        "address": {
+            "street": "100",
+            "zip": "388 01",
+            "city": "\u0160kvo\u0159etice",
+            "district": "\u0160kvo\u0159etice"
+        },
+        "ds_id": "i9eamuf"
+    },
+    "\u0160lapanov": {
+        "address": {
+            "street": "40",
+            "zip": "582 51",
+            "city": "\u0160lapanov",
+            "district": "\u0160lapanov"
+        },
+        "ds_id": "kkfbpuj"
+    },
+    "\u0160l\u00e9glov": {
+        "address": {
+            "street": "1",
+            "zip": "788 25",
+            "city": "\u0160l\u00e9glov",
+            "district": "\u0160l\u00e9glov"
+        },
+        "ds_id": "8zijdut"
+    },
+    "\u0160o\u0161\u016fvka": {
+        "address": {
+            "street": "187",
+            "zip": "679 13",
+            "city": "\u0160o\u0161\u016fvka",
+            "district": "\u0160o\u0161\u016fvka"
+        },
+        "ds_id": "9u6bjyi"
+    },
+    "\u0160pi\u010dky": {
+        "address": {
+            "street": "56",
+            "zip": "753 66",
+            "city": "\u0160pi\u010dky",
+            "district": "\u0160pi\u010dky"
+        },
+        "ds_id": "g3cbxqu"
+    },
+    "\u0160t\u00e1blovice": {
+        "address": {
+            "street": "166",
+            "zip": "747 82",
+            "city": "\u0160t\u00e1blovice",
+            "district": "\u0160t\u00e1blovice"
+        },
+        "ds_id": "4dyb2cn"
+    },
+    "\u0160\u0165\u00e1hlavy": {
+        "address": {
+            "street": "Masarykova 169",
+            "zip": "332 03",
+            "city": "\u0160\u0165\u00e1hlavy",
+            "district": "\u0160\u0165\u00e1hlavy"
+        },
+        "ds_id": "7vhbbcq"
+    },
+    "\u0160tarnov": {
+        "address": {
+            "street": "131",
+            "zip": "783 14",
+            "city": "\u0160tarnov",
+            "district": "\u0160tarnov"
+        },
+        "ds_id": "8tdaurn"
+    },
+    "\u0160t\u011bdr\u00e1": {
+        "address": {
+            "street": "43",
+            "zip": "364 52",
+            "city": "\u0160t\u011bdr\u00e1",
+            "district": "\u0160t\u011bdr\u00e1"
+        },
+        "ds_id": "ymnasuv"
+    },
+    "\u0160t\u011bchov": {
+        "address": {
+            "street": "29",
+            "zip": "679 71",
+            "city": "\u0160t\u011bchov",
+            "district": "\u0160t\u011bchov"
+        },
+        "ds_id": "n2hb4wz"
+    },
+    "\u0160t\u011bchovice": {
+        "address": {
+            "street": "64",
+            "zip": "387 16",
+            "city": "\u0160t\u011bchovice",
+            "district": "\u0160t\u011bchovice"
+        },
+        "ds_id": "xmcau4n"
+    },
+    "\u0160t\u011bm\u011bchy": {
+        "address": {
+            "street": "43",
+            "zip": "675 27",
+            "city": "\u0160t\u011bm\u011bchy",
+            "district": "\u0160t\u011bm\u011bchy"
+        },
+        "ds_id": "yvxbirg"
+    },
+    "\u0160t\u011bnovice": {
+        "address": {
+            "street": "\u010ci\u017eick\u00e1 133",
+            "zip": "332 09",
+            "city": "\u0160t\u011bnovice",
+            "district": "\u0160t\u011bnovice"
+        },
+        "ds_id": "rpnbhd6"
+    },
+    "\u0160t\u011bnovick\u00fd Borek": {
+        "address": {
+            "street": "28",
+            "zip": "332 09",
+            "city": "\u0160t\u011bnovick\u00fd Borek",
+            "district": "\u0160t\u011bnovick\u00fd Borek"
+        },
+        "ds_id": "j64atxi"
+    },
+    "\u0160t\u011bp\u00e1nkovice": {
+        "address": {
+            "street": "Slezsk\u00e1 520",
+            "zip": "747 28",
+            "city": "\u0160t\u011bp\u00e1nkovice",
+            "district": "\u0160t\u011bp\u00e1nkovice"
+        },
+        "ds_id": "qrybba5"
+    },
+    "\u0160t\u011bp\u00e1novice": {
+        "address": {
+            "street": "30",
+            "zip": "666 02",
+            "city": "\u0160t\u011bp\u00e1novice",
+            "district": "\u0160t\u011bp\u00e1novice"
+        },
+        "ds_id": "yu9ayum"
+    },
+    "\u0160t\u011bpkov": {
+        "address": {
+            "street": "33",
+            "zip": "675 26",
+            "city": "\u0160t\u011bpkov",
+            "district": "\u0160t\u011bpkov"
+        },
+        "ds_id": "cjaajc9"
+    },
+    "\u0160t\u011btkovice": {
+        "address": {
+            "street": "75",
+            "zip": "264 01",
+            "city": "\u0160t\u011btkovice",
+            "district": "\u0160t\u011btkovice"
+        },
+        "ds_id": "z2qap98"
+    },
+    "\u0160t\u00edhlice": {
+        "address": {
+            "street": "5",
+            "zip": "281 63",
+            "city": "\u0160t\u00edhlice",
+            "district": "\u0160t\u00edhlice"
+        },
+        "ds_id": "tuja9ba"
+    },
+    "\u0160tichov": {
+        "address": {
+            "street": "28",
+            "zip": "345 62",
+            "city": "\u0160tichov",
+            "district": "\u0160tichov"
+        },
+        "ds_id": "z2cbzmh"
+    },
+    "\u0160tichovice": {
+        "address": {
+            "street": "36",
+            "zip": "331 41",
+            "city": "\u0160tichovice",
+            "district": "\u0160tichovice"
+        },
+        "ds_id": "infbjzb"
+    },
+    "\u0160tipoklasy": {
+        "address": {
+            "street": "20",
+            "zip": "284 01",
+            "city": "\u0160tipoklasy",
+            "district": "\u0160tipoklasy"
+        },
+        "ds_id": "uiuakqg"
+    },
+    "\u0160t\u00edtina": {
+        "address": {
+            "street": "Hlavn\u00ed 68",
+            "zip": "747 91",
+            "city": "\u0160t\u00edtina",
+            "district": "\u0160t\u00edtina"
+        },
+        "ds_id": "pcqb2jx"
+    },
+    "\u0160t\u00edtn\u00e1 nad Vl\u00e1\u0159\u00ed-Popov": {
+        "address": {
+            "street": "72",
+            "zip": "763 33",
+            "city": "\u0160t\u00edtn\u00e1 nad Vl\u00e1\u0159\u00ed-Popov",
+            "district": "\u0160t\u00edtn\u00e1 nad Vl\u00e1\u0159\u00ed"
+        },
+        "ds_id": "bkcbres"
+    },
+    "\u0160t\u00edtov": {
+        "address": {
+            "street": "23",
+            "zip": "338 43",
+            "city": "\u0160t\u00edtov",
+            "district": "\u0160t\u00edtov"
+        },
+        "ds_id": "ykkbiba"
+    },
+    "\u0160tudlov": {
+        "address": {
+            "street": "26",
+            "zip": "569 04",
+            "city": "\u0160tudlov",
+            "district": "\u0160tudlov"
+        },
+        "ds_id": "bg5a5hr"
+    },
+    "\u0160ub\u00ed\u0159ov": {
+        "address": {
+            "street": "40",
+            "zip": "798 52",
+            "city": "\u0160ub\u00ed\u0159ov",
+            "district": "\u0160ub\u00ed\u0159ov"
+        },
+        "ds_id": "35sax4y"
+    },
+    "\u0160umavsk\u00e9 Ho\u0161tice": {
+        "address": {
+            "street": "9",
+            "zip": "384 71",
+            "city": "\u0160umavsk\u00e9 Ho\u0161tice",
+            "district": "\u0160umavsk\u00e9 Ho\u0161tice"
+        },
+        "ds_id": "vp2ba6a"
+    },
+    "\u0160umice": {
+        "address": {
+            "street": "11",
+            "zip": "671 75",
+            "city": "\u0160umice",
+            "district": "\u0160umice"
+        },
+        "ds_id": "nv8b8gd"
+    },
+    "\u0160umn\u00e1": {
+        "address": {
+            "street": "149",
+            "zip": "671 02",
+            "city": "\u0160umn\u00e1",
+            "district": "\u0160umn\u00e1"
+        },
+        "ds_id": "kwrba6d"
+    },
+    "\u0160umvald": {
+        "address": {
+            "street": "17",
+            "zip": "783 85",
+            "city": "\u0160umvald",
+            "district": "\u0160umvald"
+        },
+        "ds_id": "b5gba6h"
+    },
+    "\u0160v\u00e1bov": {
+        "address": {
+            "street": "37",
+            "zip": "588 51",
+            "city": "\u0160v\u00e1bov",
+            "district": "\u0160v\u00e1bov"
+        },
+        "ds_id": "vtiax26"
+    },
+    "Tachlovice": {
+        "address": {
+            "street": "Jakubsk\u00e1 n\u00e1ves 8",
+            "zip": "252 17",
+            "city": "Tachlovice",
+            "district": "Tachlovice"
+        },
+        "ds_id": "utbapxu"
+    },
+    "T\u00e1l\u00edn": {
+        "address": {
+            "street": "11",
+            "zip": "398 15",
+            "city": "T\u00e1l\u00edn",
+            "district": "T\u00e1l\u00edn"
+        },
+        "ds_id": "cn7bq6a"
+    },
+    "Tasov": {
+        "address": {
+            "street": "240",
+            "zip": "675 79",
+            "city": "Tasov",
+            "district": "Tasov"
+        },
+        "ds_id": "vxmbg6y"
+    },
+    "Tasovice": {
+        "address": {
+            "street": "67",
+            "zip": "671 25",
+            "city": "Tasovice",
+            "district": "Tasovice"
+        },
+        "ds_id": "x9pa2rj"
+    },
+    "Ta\u0161ov": {
+        "address": {
+            "street": "51",
+            "zip": "400 02",
+            "city": "Ta\u0161ov",
+            "district": "Ta\u0161ov"
+        },
+        "ds_id": "yv2a8ef"
+    },
+    "Tatce": {
+        "address": {
+            "street": "Podedvorem 81",
+            "zip": "289 11",
+            "city": "Tatce",
+            "district": "Tatce"
+        },
+        "ds_id": "xwebuj2"
+    },
+    "Tatenice": {
+        "address": {
+            "street": "86",
+            "zip": "561 31",
+            "city": "Tatenice",
+            "district": "Tatenice"
+        },
+        "ds_id": "uzxba3x"
+    },
+    "Tatin\u00e1": {
+        "address": {
+            "street": "24",
+            "zip": "330 11",
+            "city": "Tatin\u00e1",
+            "district": "Tatin\u00e1"
+        },
+        "ds_id": "9dvbib6"
+    },
+    "Tatobity": {
+        "address": {
+            "street": "85",
+            "zip": "512 53",
+            "city": "Tatobity",
+            "district": "Tatobity"
+        },
+        "ds_id": "mw6awjk"
+    },
+    "Tatrovice": {
+        "address": {
+            "street": "26",
+            "zip": "357 35",
+            "city": "Tatrovice",
+            "district": "Tatrovice"
+        },
+        "ds_id": "wwcefq2"
+    },
+    "Tav\u00edkovice": {
+        "address": {
+            "street": "1",
+            "zip": "671 40",
+            "city": "Tav\u00edkovice",
+            "district": "Tav\u00edkovice"
+        },
+        "ds_id": "smia2s3"
+    },
+    "Te\u010dovice": {
+        "address": {
+            "street": "185",
+            "zip": "763 02",
+            "city": "Te\u010dovice",
+            "district": "Te\u010dovice"
+        },
+        "ds_id": "9gebkbd"
+    },
+    "Tehov": {
+        "address": {
+            "street": "2",
+            "zip": "258 01",
+            "city": "Tehov",
+            "district": "Tehov"
+        },
+        "ds_id": "393auip"
+    },
+    "Tehovec": {
+        "address": {
+            "street": "Tehoveck\u00e1 22",
+            "zip": "251 62",
+            "city": "Tehovec",
+            "district": "Tehovec"
+        },
+        "ds_id": "ysqawuc"
+    },
+    "T\u011bcha\u0159ovice": {
+        "address": {
+            "street": "10",
+            "zip": "262 31",
+            "city": "T\u011bcha\u0159ovice",
+            "district": "T\u011bcha\u0159ovice"
+        },
+        "ds_id": "5qeb74t"
+    },
+    "T\u011bchlovice": {
+        "address": {
+            "street": "37",
+            "zip": "405 02",
+            "city": "T\u011bchlovice",
+            "district": "T\u011bchlovice"
+        },
+        "ds_id": "bjna7hy"
+    },
+    "T\u011bchobuz": {
+        "address": {
+            "street": "60",
+            "zip": "395 01",
+            "city": "T\u011bchobuz",
+            "district": "T\u011bchobuz"
+        },
+        "ds_id": "t5tbj4h"
+    },
+    "T\u011bchon\u00edn": {
+        "address": {
+            "street": "80",
+            "zip": "561 66",
+            "city": "T\u011bchon\u00edn",
+            "district": "T\u011bchon\u00edn"
+        },
+        "ds_id": "by4bq3x"
+    },
+    "Telec\u00ed": {
+        "address": {
+            "street": "156",
+            "zip": "569 94",
+            "city": "Telec\u00ed",
+            "district": "Telec\u00ed"
+        },
+        "ds_id": "iexa3nk"
+    },
+    "Telnice": {
+        "address": {
+            "street": "R\u016f\u017eov\u00e1 243",
+            "zip": "664 59",
+            "city": "Telnice",
+            "district": "Telnice"
+        },
+        "ds_id": "aqkaq33"
+    },
+    "Temel\u00edn": {
+        "address": {
+            "street": "104",
+            "zip": "373 01",
+            "city": "Temel\u00edn",
+            "district": "Temel\u00edn"
+        },
+        "ds_id": "tsmb3jy"
+    },
+    "Teme\u0161v\u00e1r": {
+        "address": {
+            "street": "45",
+            "zip": "397 01",
+            "city": "Teme\u0161v\u00e1r",
+            "district": "Teme\u0161v\u00e1r"
+        },
+        "ds_id": "tp4bzjs"
+    },
+    "T\u011bmice": {
+        "address": {
+            "street": "53",
+            "zip": "394 96",
+            "city": "T\u011bmice",
+            "district": "T\u011bmice"
+        },
+        "ds_id": "cfpa8tg"
+    },
+    "T\u011bn\u011b": {
+        "address": {
+            "street": "91",
+            "zip": "338 45",
+            "city": "T\u011bn\u011b",
+            "district": "T\u011bn\u011b"
+        },
+        "ds_id": "jcibj4m"
+    },
+    "Teplice nad Be\u010dvou": {
+        "address": {
+            "street": "53",
+            "zip": "753 01",
+            "city": "Teplice nad Be\u010dvou",
+            "district": "Teplice nad Be\u010dvou"
+        },
+        "ds_id": "ai9bj4t"
+    },
+    "Tepli\u010dka": {
+        "address": {
+            "street": "40",
+            "zip": "364 64",
+            "city": "Tepli\u010dka",
+            "district": "Tepli\u010dka"
+        },
+        "ds_id": "fpxb643"
+    },
+    "Tepl\u00fd\u0161ovice": {
+        "address": {
+            "street": "24",
+            "zip": "256 01",
+            "city": "Tepl\u00fd\u0161ovice",
+            "district": "Tepl\u00fd\u0161ovice"
+        },
+        "ds_id": "ascajhg"
+    },
+    "Tere\u0161ov": {
+        "address": {
+            "street": "108",
+            "zip": "338 08",
+            "city": "Tere\u0161ov",
+            "district": "Tere\u0161ov"
+        },
+        "ds_id": "h66bicy"
+    },
+    "T\u011brlicko": {
+        "address": {
+            "street": "M\u00e1jov\u00e1 474",
+            "zip": "735 42",
+            "city": "T\u011brlicko",
+            "district": "Horn\u00ed T\u011brlicko"
+        },
+        "ds_id": "2m4ba2f"
+    },
+    "T\u011b\u0161any": {
+        "address": {
+            "street": "141",
+            "zip": "664 54",
+            "city": "T\u011b\u0161any",
+            "district": "T\u011b\u0161any"
+        },
+        "ds_id": "rutba2i"
+    },
+    "T\u011b\u0161etice": {
+        "address": {
+            "street": "62",
+            "zip": "671 61",
+            "city": "T\u011b\u0161etice",
+            "district": "T\u011b\u0161etice"
+        },
+        "ds_id": "sgyb5dm"
+    },
+    "T\u011b\u0161kov": {
+        "address": {
+            "street": "35",
+            "zip": "337 01",
+            "city": "T\u011b\u0161kov",
+            "district": "T\u011b\u0161kov"
+        },
+        "ds_id": "qsua8hv"
+    },
+    "T\u011b\u0161kovice": {
+        "address": {
+            "street": "170",
+            "zip": "747 64",
+            "city": "T\u011b\u0161kovice",
+            "district": "T\u011b\u0161kovice"
+        },
+        "ds_id": "2rkaxwc"
+    },
+    "T\u011b\u0161ovice": {
+        "address": {
+            "street": "21",
+            "zip": "356 01",
+            "city": "T\u011b\u0161ovice",
+            "district": "T\u011b\u0161ovice"
+        },
+        "ds_id": "u5iamks"
+    },
+    "Tet\u010dice": {
+        "address": {
+            "street": "Palack\u00e9ho 177",
+            "zip": "664 17",
+            "city": "Tet\u010dice",
+            "district": "Tet\u010dice"
+        },
+        "ds_id": "5vua2q2"
+    },
+    "Tet\u00edn": {
+        "address": {
+            "street": "Na Kn\u00ed\u017eec\u00ed 2",
+            "zip": "266 01",
+            "city": "Tet\u00edn",
+            "district": "Tet\u00edn"
+        },
+        "ds_id": "kjuatkp"
+    },
+    "Tetov": {
+        "address": {
+            "street": "22",
+            "zip": "533 16",
+            "city": "Tetov",
+            "district": "Tetov"
+        },
+        "ds_id": "kaea5hj"
+    },
+    "Tcho\u0159ovice": {
+        "address": {
+            "street": "77",
+            "zip": "388 01",
+            "city": "Tcho\u0159ovice",
+            "district": "Tcho\u0159ovice"
+        },
+        "ds_id": "2wrarjr"
+    },
+    "Tich\u00e1": {
+        "address": {
+            "street": "1",
+            "zip": "742 74",
+            "city": "Tich\u00e1",
+            "district": "Tich\u00e1"
+        },
+        "ds_id": "799bazw"
+    },
+    "Tichonice": {
+        "address": {
+            "street": "30",
+            "zip": "257 63",
+            "city": "Tichonice",
+            "district": "Tichonice"
+        },
+        "ds_id": "jjfa77i"
+    },
+    "Tichov": {
+        "address": {
+            "street": "48",
+            "zip": "766 01",
+            "city": "Tichov",
+            "district": "Tichov"
+        },
+        "ds_id": "mvzbyd3"
+    },
+    "Tis": {
+        "address": {
+            "street": "112",
+            "zip": "582 43",
+            "city": "Tis",
+            "district": "Tis"
+        },
+        "ds_id": "9rxax3g"
+    },
+    "Tis\u00e1": {
+        "address": {
+            "street": "205",
+            "zip": "403 36",
+            "city": "Tis\u00e1",
+            "district": "Tis\u00e1"
+        },
+        "ds_id": "q6tayk8"
+    },
+    "T\u00edsek": {
+        "address": {
+            "street": "62",
+            "zip": "743 01",
+            "city": "T\u00edsek",
+            "district": "T\u00edsek"
+        },
+        "ds_id": "dqdbj56"
+    },
+    "Tisem": {
+        "address": {
+            "street": "36",
+            "zip": "257 56",
+            "city": "Tisem",
+            "district": "Tisem"
+        },
+        "ds_id": "ctranjq"
+    },
+    "Tismice": {
+        "address": {
+            "street": "136",
+            "zip": "282 01",
+            "city": "Tismice",
+            "district": "Tismice"
+        },
+        "ds_id": "geba765"
+    },
+    "Tisov\u00e1": {
+        "address": {
+            "street": "5",
+            "zip": "348 01",
+            "city": "Tisov\u00e1",
+            "district": "Tisov\u00e1"
+        },
+        "ds_id": "syfbics"
+    },
+    "Tisovec": {
+        "address": {
+            "street": "19",
+            "zip": "539 73",
+            "city": "Tisovec",
+            "district": "D\u0159eve\u0161"
+        },
+        "ds_id": "u3pa5hf"
+    },
+    "Tis u Blatna": {
+        "address": {
+            "street": "1",
+            "zip": "331 65",
+            "city": "Tis u Blatna",
+            "district": "Tis u Blatna"
+        },
+        "ds_id": "ugtbrb8"
+    },
+    "Ti\u0161ice": {
+        "address": {
+            "street": "Marie Podvalov\u00e9 334",
+            "zip": "277 15",
+            "city": "Ti\u0161ice",
+            "district": "Chr\u00e1st"
+        },
+        "ds_id": "kf3b5r2"
+    },
+    "Ti\u0161novsk\u00e1 Nov\u00e1 Ves": {
+        "address": {
+            "street": "29",
+            "zip": "594 51",
+            "city": "Ti\u0161novsk\u00e1 Nov\u00e1 Ves",
+            "district": "Ti\u0161novsk\u00e1 Nov\u00e1 Ves"
+        },
+        "ds_id": "nk6a8zz"
+    },
+    "Tlu\u010dn\u00e1": {
+        "address": {
+            "street": "Hlavn\u00ed 25",
+            "zip": "330 26",
+            "city": "Tlu\u010dn\u00e1",
+            "district": "Tlu\u010dn\u00e1"
+        },
+        "ds_id": "nifbtpu"
+    },
+    "Tluma\u010dov": {
+        "address": {
+            "street": "107",
+            "zip": "344 01",
+            "city": "Tluma\u010dov",
+            "district": "Tluma\u010dov"
+        },
+        "ds_id": "qwcavdq"
+    },
+    "Tlustice": {
+        "address": {
+            "street": "203",
+            "zip": "268 01",
+            "city": "Tlustice",
+            "district": "Tlustice"
+        },
+        "ds_id": "n66apyf"
+    },
+    "Tma\u0148": {
+        "address": {
+            "street": "S\u00eddli\u0161t\u011b 50",
+            "zip": "267 21",
+            "city": "Tma\u0148",
+            "district": "Tma\u0148"
+        },
+        "ds_id": "tauatbk"
+    },
+    "To\u010dn\u00edk": {
+        "address": {
+            "street": "57",
+            "zip": "267 51",
+            "city": "To\u010dn\u00edk",
+            "district": "To\u010dn\u00edk"
+        },
+        "ds_id": "pziakhe"
+    },
+    "Tochovice": {
+        "address": {
+            "street": "11",
+            "zip": "262 81",
+            "city": "Tochovice",
+            "district": "Tochovice"
+        },
+        "ds_id": "796bmcz"
+    },
+    "Tojice": {
+        "address": {
+            "street": "4",
+            "zip": "335 01",
+            "city": "Tojice",
+            "district": "Tojice"
+        },
+        "ds_id": "iviaje2"
+    },
+    "Tomice": {
+        "address": {
+            "street": "32",
+            "zip": "257 68",
+            "city": "Tomice",
+            "district": "Tomice"
+        },
+        "ds_id": "dfbakns"
+    },
+    "Topolany": {
+        "address": {
+            "street": "51",
+            "zip": "682 01",
+            "city": "Topolany",
+            "district": "Topolany"
+        },
+        "ds_id": "wkubj2k"
+    },
+    "Topoln\u00e1": {
+        "address": {
+            "street": "420",
+            "zip": "687 11",
+            "city": "Topoln\u00e1",
+            "district": "Topoln\u00e1"
+        },
+        "ds_id": "m4tbwty"
+    },
+    "Tou\u0161ice": {
+        "address": {
+            "street": "16",
+            "zip": "281 63",
+            "city": "Tou\u0161ice",
+            "district": "Tou\u0161ice"
+        },
+        "ds_id": "dmrbug2"
+    },
+    "Tou\u017eet\u00edn": {
+        "address": {
+            "street": "42",
+            "zip": "440 01",
+            "city": "Tou\u017eet\u00edn",
+            "district": "Tou\u017eet\u00edn"
+        },
+        "ds_id": "fvdazq8"
+    },
+    "Tov\u00e9\u0159": {
+        "address": {
+            "street": "18",
+            "zip": "783 16",
+            "city": "Tov\u00e9\u0159",
+            "district": "Tov\u00e9\u0159"
+        },
+        "ds_id": "mieawwe"
+    },
+    "Traplice": {
+        "address": {
+            "street": "404",
+            "zip": "687 04",
+            "city": "Traplice",
+            "district": "Traplice"
+        },
+        "ds_id": "dwebaz9"
+    },
+    "Trav\u010dice": {
+        "address": {
+            "street": "150",
+            "zip": "412 01",
+            "city": "Trav\u010dice",
+            "district": "Trav\u010dice"
+        },
+        "ds_id": "mtjbj2p"
+    },
+    "Trbou\u0161any": {
+        "address": {
+            "street": "113",
+            "zip": "664 64",
+            "city": "Trbou\u0161any",
+            "district": "Trbou\u0161any"
+        },
+        "ds_id": "ht9a2s8"
+    },
+    "Trhanov": {
+        "address": {
+            "street": "63",
+            "zip": "345 33",
+            "city": "Trhanov",
+            "district": "Trhanov"
+        },
+        "ds_id": "cj3asw4"
+    },
+    "Trhov\u00e9 Du\u0161n\u00edky": {
+        "address": {
+            "street": "116",
+            "zip": "261 01",
+            "city": "Trhov\u00e9 Du\u0161n\u00edky",
+            "district": "Trhov\u00e9 Du\u0161n\u00edky"
+        },
+        "ds_id": "yxhbzv2"
+    },
+    "Trnava": {
+        "address": {
+            "street": "156",
+            "zip": "763 18",
+            "city": "Trnava",
+            "district": "Trnava"
+        },
+        "ds_id": "tzfbzzv"
+    },
+    "Trn\u00e1vka": {
+        "address": {
+            "street": "1",
+            "zip": "742 58",
+            "city": "Trn\u00e1vka",
+            "district": "Trn\u00e1vka"
+        },
+        "ds_id": "6mka7kv"
+    },
+    "Trnov\u00e1": {
+        "address": {
+            "street": "181",
+            "zip": "330 13",
+            "city": "Trnov\u00e1",
+            "district": "Trnov\u00e1"
+        },
+        "ds_id": "p5cb4ng"
+    },
+    "Trnovany": {
+        "address": {
+            "street": "37",
+            "zip": "412 01",
+            "city": "Trnovany",
+            "district": "Trnovany"
+        },
+        "ds_id": "5mybtri"
+    },
+    "Trnov\u00e9 Pole": {
+        "address": {
+            "street": "31",
+            "zip": "671 78",
+            "city": "Trnov\u00e9 Pole",
+            "district": "Trnov\u00e9 Pole"
+        },
+        "ds_id": "c38ars7"
+    },
+    "Trojanovice": {
+        "address": {
+            "street": "210",
+            "zip": "744 01",
+            "city": "Trojanovice",
+            "district": "Trojanovice"
+        },
+        "ds_id": "2yzbsk8"
+    },
+    "Trojovice": {
+        "address": {
+            "street": "77",
+            "zip": "538 33",
+            "city": "Trojovice",
+            "district": "Trojovice"
+        },
+        "ds_id": "gcna3dm"
+    },
+    "Trokavec": {
+        "address": {
+            "street": "40",
+            "zip": "338 43",
+            "city": "Trokavec",
+            "district": "Trokavec"
+        },
+        "ds_id": "3rqbicp"
+    },
+    "Troskovice": {
+        "address": {
+            "street": "6",
+            "zip": "512 63",
+            "city": "Troskovice",
+            "district": "Jivina"
+        },
+        "ds_id": "gyban5j"
+    },
+    "Troubelice": {
+        "address": {
+            "street": "352",
+            "zip": "783 83",
+            "city": "Troubelice",
+            "district": "Troubelice"
+        },
+        "ds_id": "x9ebzsq"
+    },
+    "Troubky": {
+        "address": {
+            "street": "D\u011bdina 286",
+            "zip": "751 02",
+            "city": "Troubky",
+            "district": "Troubky"
+        },
+        "ds_id": "9uyb8nq"
+    },
+    "Troubky-Zdislavice": {
+        "address": {
+            "street": "10",
+            "zip": "768 02",
+            "city": "Troubky-Zdislavice",
+            "district": "Troubky"
+        },
+        "ds_id": "gzyatw5"
+    },
+    "Troubsko": {
+        "address": {
+            "street": "Z\u00e1meck\u00e1 150",
+            "zip": "664 41",
+            "city": "Troubsko",
+            "district": "Troubsko"
+        },
+        "ds_id": "7j6bawk"
+    },
+    "Trp\u00edk": {
+        "address": {
+            "street": "6",
+            "zip": "563 01",
+            "city": "Trp\u00edk",
+            "district": "Trp\u00edk"
+        },
+        "ds_id": "5uya5hb"
+    },
+    "Trp\u00edn": {
+        "address": {
+            "street": "77",
+            "zip": "569 74",
+            "city": "Trp\u00edn",
+            "district": "Trp\u00edn"
+        },
+        "ds_id": "em9a5i6"
+    },
+    "Trp\u00edsty": {
+        "address": {
+            "street": "18",
+            "zip": "349 01",
+            "city": "Trp\u00edsty",
+            "district": "Trp\u00edsty"
+        },
+        "ds_id": "wihavc8"
+    },
+    "Trpi\u0161ovice": {
+        "address": {
+            "street": "33",
+            "zip": "584 01",
+            "city": "Trpi\u0161ovice",
+            "district": "Ko\u0148kovice"
+        },
+        "ds_id": "pqsbgb7"
+    },
+    "Trst\u011bnice": {
+        "address": {
+            "street": "122",
+            "zip": "671 71",
+            "city": "Trst\u011bnice",
+            "district": "Trst\u011bnice"
+        },
+        "ds_id": "qypbj34"
+    },
+    "Tr\u0161ice": {
+        "address": {
+            "street": "50",
+            "zip": "783 57",
+            "city": "Tr\u0161ice",
+            "district": "Tr\u0161ice"
+        },
+        "ds_id": "wsvbawp"
+    },
+    "Trub\u00edn": {
+        "address": {
+            "street": "Obecn\u00ed 26",
+            "zip": "267 01",
+            "city": "Trub\u00edn",
+            "district": "Trub\u00edn"
+        },
+        "ds_id": "c5yaj8m"
+    },
+    "Trubsk\u00e1": {
+        "address": {
+            "street": "61",
+            "zip": "266 01",
+            "city": "Trubsk\u00e1",
+            "district": "Trubsk\u00e1"
+        },
+        "ds_id": "mw9aj8h"
+    },
+    "Truskovice": {
+        "address": {
+            "street": "73",
+            "zip": "389 01",
+            "city": "Truskovice",
+            "district": "Truskovice"
+        },
+        "ds_id": "5cmbtbb"
+    },
+    "Trusnov": {
+        "address": {
+            "street": "62",
+            "zip": "534 01",
+            "city": "Trusnov",
+            "district": "Trusnov"
+        },
+        "ds_id": "vkqazka"
+    },
+    "Tr\u017eek": {
+        "address": {
+            "street": "21",
+            "zip": "570 01",
+            "city": "Tr\u017eek",
+            "district": "Tr\u017eek"
+        },
+        "ds_id": "p24a3m3"
+    },
+    "T\u0159anovice": {
+        "address": {
+            "street": "250",
+            "zip": "739 53",
+            "city": "T\u0159anovice",
+            "district": "T\u0159anovice"
+        },
+        "ds_id": "zevbq7d"
+    },
+    "T\u0159eba\u0159ov": {
+        "address": {
+            "street": "44",
+            "zip": "569 33",
+            "city": "T\u0159eba\u0159ov",
+            "district": "T\u0159eba\u0159ov"
+        },
+        "ds_id": "ijtbuc7"
+    },
+    "T\u0159eb\u010dice": {
+        "address": {
+            "street": "2",
+            "zip": "335 01",
+            "city": "T\u0159eb\u010dice",
+            "district": "T\u0159eb\u010dice"
+        },
+        "ds_id": "bh4aqdd"
+    },
+    "T\u0159eb\u011bjice": {
+        "address": {
+            "street": "1",
+            "zip": "392 01",
+            "city": "T\u0159eb\u011bjice",
+            "district": "T\u0159eb\u011bjice"
+        },
+        "ds_id": "af5amum"
+    },
+    "T\u0159ebe\u0148": {
+        "address": {
+            "street": "31",
+            "zip": "351 34",
+            "city": "T\u0159ebe\u0148",
+            "district": "T\u0159ebe\u0148"
+        },
+        "ds_id": "ntaamiy"
+    },
+    "T\u0159ebestovice": {
+        "address": {
+            "street": "\u017delezni\u010dn\u00ed 127",
+            "zip": "289 12",
+            "city": "T\u0159ebestovice",
+            "district": "T\u0159ebestovice"
+        },
+        "ds_id": "idybgsv"
+    },
+    "T\u0159ebe\u0161ice": {
+        "address": {
+            "street": "39",
+            "zip": "257 26",
+            "city": "T\u0159ebe\u0161ice",
+            "district": "T\u0159ebe\u0161ice"
+        },
+        "ds_id": "s97jdyu"
+    },
+    "T\u0159eb\u011btice": {
+        "address": {
+            "street": "51",
+            "zip": "769 01",
+            "city": "T\u0159eb\u011btice",
+            "district": "T\u0159eb\u011btice"
+        },
+        "ds_id": "366b3wq"
+    },
+    "T\u0159eb\u011bt\u00edn": {
+        "address": {
+            "street": "13",
+            "zip": "285 22",
+            "city": "T\u0159eb\u011bt\u00edn",
+            "district": "T\u0159eb\u011bt\u00edn"
+        },
+        "ds_id": "5b5akqc"
+    },
+    "T\u0159ebichovice": {
+        "address": {
+            "street": "89",
+            "zip": "273 06",
+            "city": "T\u0159ebichovice",
+            "district": "T\u0159ebichovice"
+        },
+        "ds_id": "rhmbsh2"
+    },
+    "T\u0159eb\u00edvlice": {
+        "address": {
+            "street": "Komensk\u00e9ho n\u00e1m\u011bst\u00ed 17",
+            "zip": "411 15",
+            "city": "T\u0159eb\u00edvlice",
+            "district": "T\u0159eb\u00edvlice"
+        },
+        "ds_id": "jijbayr"
+    },
+    "T\u0159eb\u00edz": {
+        "address": {
+            "street": "57",
+            "zip": "273 75",
+            "city": "T\u0159eb\u00edz",
+            "district": "T\u0159eb\u00edz"
+        },
+        "ds_id": "txdrft5"
+    },
+    "T\u0159ebnou\u0161eves": {
+        "address": {
+            "street": "80",
+            "zip": "508 01",
+            "city": "T\u0159ebnou\u0161eves",
+            "district": "T\u0159ebnou\u0161eves"
+        },
+        "ds_id": "vv6appd"
+    },
+    "T\u0159eboc": {
+        "address": {
+            "street": "86",
+            "zip": "270 54",
+            "city": "T\u0159eboc",
+            "district": "T\u0159eboc"
+        },
+        "ds_id": "4jba7bw"
+    },
+    "T\u0159ebohostice": {
+        "address": {
+            "street": "8",
+            "zip": "386 01",
+            "city": "T\u0159ebohostice",
+            "district": "T\u0159ebohostice"
+        },
+        "ds_id": "daxa2j8"
+    },
+    "T\u0159ebom": {
+        "address": {
+            "street": "114",
+            "zip": "747 25",
+            "city": "T\u0159ebom",
+            "district": "T\u0159ebom"
+        },
+        "ds_id": "3febw2u"
+    },
+    "T\u0159ebon\u00edn": {
+        "address": {
+            "street": "14",
+            "zip": "286 01",
+            "city": "T\u0159ebon\u00edn",
+            "district": "T\u0159ebon\u00edn"
+        },
+        "ds_id": "6h7a8dx"
+    },
+    "T\u0159ebosice": {
+        "address": {
+            "street": "12",
+            "zip": "530 02",
+            "city": "T\u0159ebosice",
+            "district": "T\u0159ebosice"
+        },
+        "ds_id": "g6rbwxt"
+    },
+    "T\u0159ebotov": {
+        "address": {
+            "street": "Klidn\u00e1 69",
+            "zip": "252 26",
+            "city": "T\u0159ebotov",
+            "district": "T\u0159ebotov"
+        },
+        "ds_id": "arabayv"
+    },
+    "T\u0159ebovice": {
+        "address": {
+            "street": "238",
+            "zip": "561 24",
+            "city": "T\u0159ebovice",
+            "district": "T\u0159ebovice"
+        },
+        "ds_id": "q8dbfqr"
+    },
+    "T\u0159ebovle": {
+        "address": {
+            "street": "53",
+            "zip": "281 63",
+            "city": "T\u0159ebovle",
+            "district": "T\u0159ebovle"
+        },
+        "ds_id": "byhauty"
+    },
+    "T\u0159ebsko": {
+        "address": {
+            "street": "4",
+            "zip": "262 42",
+            "city": "T\u0159ebsko",
+            "district": "T\u0159ebsko"
+        },
+        "ds_id": "avnau3i"
+    },
+    "T\u0159ebusice": {
+        "address": {
+            "street": "133",
+            "zip": "273 41",
+            "city": "T\u0159ebusice",
+            "district": "T\u0159ebusice"
+        },
+        "ds_id": "7s6akne"
+    },
+    "T\u0159ebu\u0161\u00edn": {
+        "address": {
+            "street": "33",
+            "zip": "412 01",
+            "city": "T\u0159ebu\u0161\u00edn",
+            "district": "T\u0159ebu\u0161\u00edn"
+        },
+        "ds_id": "q2ia36h"
+    },
+    "T\u0159eme\u0161n\u00e1": {
+        "address": {
+            "street": "304",
+            "zip": "793 82",
+            "city": "T\u0159eme\u0161n\u00e1",
+            "district": "T\u0159eme\u0161n\u00e1"
+        },
+        "ds_id": "q92bkhb"
+    },
+    "T\u0159eme\u0161n\u00e9": {
+        "address": {
+            "street": "16",
+            "zip": "348 06",
+            "city": "T\u0159eme\u0161n\u00e9",
+            "district": "Bezd\u011bkov"
+        },
+        "ds_id": "ggrbkhf"
+    },
+    "T\u0159e\u0161ovice": {
+        "address": {
+            "street": "40",
+            "zip": "386 01",
+            "city": "T\u0159e\u0161ovice",
+            "district": "T\u0159e\u0161ovice"
+        },
+        "ds_id": "curjdzg"
+    },
+    "T\u0159e\u0161tice": {
+        "address": {
+            "street": "19",
+            "zip": "588 56",
+            "city": "T\u0159e\u0161tice",
+            "district": "T\u0159e\u0161tice"
+        },
+        "ds_id": "ucqa77e"
+    },
+    "T\u0159e\u0161tina": {
+        "address": {
+            "street": "10",
+            "zip": "789 73",
+            "city": "T\u0159e\u0161tina",
+            "district": "T\u0159e\u0161tina"
+        },
+        "ds_id": "t6kbtnb"
+    },
+    "T\u0159ib\u0159ichy": {
+        "address": {
+            "street": "10",
+            "zip": "537 01",
+            "city": "T\u0159ib\u0159ichy",
+            "district": "T\u0159ib\u0159ichy"
+        },
+        "ds_id": "buqb6yb"
+    },
+    "T\u0159i Dvory": {
+        "address": {
+            "street": "271",
+            "zip": "280 02",
+            "city": "T\u0159i Dvory",
+            "district": "T\u0159i Dvory"
+        },
+        "ds_id": "dbmbkg2"
+    },
+    "T\u0159i Sekery": {
+        "address": {
+            "street": "82",
+            "zip": "353 01",
+            "city": "T\u0159i Sekery",
+            "district": "T\u0159i Sekery"
+        },
+        "ds_id": "xrcbqjj"
+    },
+    "T\u0159i Studn\u011b": {
+        "address": {
+            "street": "25",
+            "zip": "592 04",
+            "city": "T\u0159i Studn\u011b",
+            "district": "T\u0159i Studn\u011b"
+        },
+        "ds_id": "8xnaq7c"
+    },
+    "T\u0159t\u011bnice": {
+        "address": {
+            "street": "127",
+            "zip": "507 04",
+            "city": "T\u0159t\u011bnice",
+            "district": "T\u0159t\u011bnice"
+        },
+        "ds_id": "xqna6nr"
+    },
+    "T\u0159tice": {
+        "address": {
+            "street": "80",
+            "zip": "271 01",
+            "city": "T\u0159tice",
+            "district": "T\u0159tice"
+        },
+        "ds_id": "tq3bkfe"
+    },
+    "Tu\u010dapy": {
+        "address": {
+            "street": "19",
+            "zip": "391 26",
+            "city": "Tu\u010dapy",
+            "district": "Tu\u010dapy"
+        },
+        "ds_id": "6fdb5eu"
+    },
+    "Tu\u010d\u00edn": {
+        "address": {
+            "street": "127",
+            "zip": "751 16",
+            "city": "Tu\u010d\u00edn",
+            "district": "Tu\u010d\u00edn"
+        },
+        "ds_id": "8iib2wh"
+    },
+    "Tuha\u0148": {
+        "address": {
+            "street": "91",
+            "zip": "277 41",
+            "city": "Tuha\u0148",
+            "district": "Tuha\u0148"
+        },
+        "ds_id": "ar3biir"
+    },
+    "Tuchlovice": {
+        "address": {
+            "street": "U Star\u00e9 \u0161koly 83",
+            "zip": "273 02",
+            "city": "Tuchlovice",
+            "district": "Tuchlovice"
+        },
+        "ds_id": "j6tbsyq"
+    },
+    "Tuchom\u011b\u0159ice": {
+        "address": {
+            "street": "V Kn\u011b\u017e\u00edvce 212",
+            "zip": "252 67",
+            "city": "Tuchom\u011b\u0159ice",
+            "district": "Tuchom\u011b\u0159ice"
+        },
+        "ds_id": "uzrbxr5"
+    },
+    "Tuchoraz": {
+        "address": {
+            "street": "99",
+            "zip": "282 01",
+            "city": "Tuchoraz",
+            "district": "Tuchoraz"
+        },
+        "ds_id": "4fyedpb"
+    },
+    "Tucho\u0159ice": {
+        "address": {
+            "street": "123",
+            "zip": "439 69",
+            "city": "Tucho\u0159ice",
+            "district": "Tucho\u0159ice"
+        },
+        "ds_id": "mzkbawt"
+    },
+    "Tuklaty": {
+        "address": {
+            "street": "Na Valech 19",
+            "zip": "250 82",
+            "city": "Tuklaty",
+            "district": "Tuklaty"
+        },
+        "ds_id": "nszbkj8"
+    },
+    "Tule\u0161ice": {
+        "address": {
+            "street": "18",
+            "zip": "671 73",
+            "city": "Tule\u0161ice",
+            "district": "Tule\u0161ice"
+        },
+        "ds_id": "3eta2sx"
+    },
+    "Tun\u011bchody": {
+        "address": {
+            "street": "2",
+            "zip": "537 01",
+            "city": "Tun\u011bchody",
+            "district": "Tun\u011bchody"
+        },
+        "ds_id": "pfia5iy"
+    },
+    "Tupadly": {
+        "address": {
+            "street": "4",
+            "zip": "277 21",
+            "city": "Tupadly",
+            "district": "Tupadly"
+        },
+        "ds_id": "ptea7yc"
+    },
+    "Tupesy": {
+        "address": {
+            "street": "135",
+            "zip": "687 07",
+            "city": "Tupesy",
+            "district": "Tupesy"
+        },
+        "ds_id": "4e2bav7"
+    },
+    "Turkovice": {
+        "address": {
+            "street": "2",
+            "zip": "533 63",
+            "city": "Turkovice",
+            "district": "Turkovice"
+        },
+        "ds_id": "kg8a3xi"
+    },
+    "Turovec": {
+        "address": {
+            "street": "41",
+            "zip": "391 21",
+            "city": "Turovec",
+            "district": "Turovec"
+        },
+        "ds_id": "z3zb6e3"
+    },
+    "Turovice": {
+        "address": {
+            "street": "39",
+            "zip": "751 14",
+            "city": "Turovice",
+            "district": "Turovice"
+        },
+        "ds_id": "73cbnwz"
+    },
+    "Tursko": {
+        "address": {
+            "street": "\u010cestm\u00edrovo n\u00e1m\u011bst\u00ed 59",
+            "zip": "252 65",
+            "city": "Tursko",
+            "district": "Tursko"
+        },
+        "ds_id": "igsajrx"
+    },
+    "Tu\u0159any": {
+        "address": {
+            "street": "10",
+            "zip": "273 79",
+            "city": "Tu\u0159any",
+            "district": "Tu\u0159any"
+        },
+        "ds_id": "hymakvs"
+    },
+    "Tu\u0159ice": {
+        "address": {
+            "street": "10",
+            "zip": "294 74",
+            "city": "Tu\u0159ice",
+            "district": "Tu\u0159ice"
+        },
+        "ds_id": "gg2amg9"
+    },
+    "Tu\u0161ovice": {
+        "address": {
+            "street": "37",
+            "zip": "262 72",
+            "city": "Tu\u0161ovice",
+            "district": "Tu\u0161ovice"
+        },
+        "ds_id": "kwxanga"
+    },
+    "Tu\u017eice": {
+        "address": {
+            "street": "35",
+            "zip": "341 42",
+            "city": "Tu\u017eice",
+            "district": "Tu\u017eice"
+        },
+        "ds_id": "hg9avjj"
+    },
+    "Tvaro\u017en\u00e1": {
+        "address": {
+            "street": "40",
+            "zip": "664 05",
+            "city": "Tvaro\u017en\u00e1",
+            "district": "Tvaro\u017en\u00e1"
+        },
+        "ds_id": "tmrbavb"
+    },
+    "Tvaro\u017en\u00e1 Lhota": {
+        "address": {
+            "street": "190",
+            "zip": "696 62",
+            "city": "Tvaro\u017en\u00e1 Lhota",
+            "district": "Tvaro\u017en\u00e1 Lhota"
+        },
+        "ds_id": "7h8b46c"
+    },
+    "Tvorovice": {
+        "address": {
+            "street": "51",
+            "zip": "798 23",
+            "city": "Tvorovice",
+            "district": "Tvorovice"
+        },
+        "ds_id": "ewuj2yk"
+    },
+    "Tvo\u0159ihr\u00e1z": {
+        "address": {
+            "street": "169",
+            "zip": "671 34",
+            "city": "Tvo\u0159ihr\u00e1z",
+            "district": "Tvo\u0159ihr\u00e1z"
+        },
+        "ds_id": "en5a2rv"
+    },
+    "Tvrdkov": {
+        "address": {
+            "street": "57",
+            "zip": "793 44",
+            "city": "Tvrdkov",
+            "district": "Tvrdkov"
+        },
+        "ds_id": "48fbkii"
+    },
+    "Tvrdonice": {
+        "address": {
+            "street": "n\u00e1m. M\u00edru 96",
+            "zip": "691 53",
+            "city": "Tvrdonice",
+            "district": "Tvrdonice"
+        },
+        "ds_id": "iugbave"
+    },
+    "Tvrzice": {
+        "address": {
+            "street": "44",
+            "zip": "384 22",
+            "city": "Tvrzice",
+            "district": "Tvrzice"
+        },
+        "ds_id": "znuamtt"
+    },
+    "T\u00fd\u010dek": {
+        "address": {
+            "street": "95",
+            "zip": "338 08",
+            "city": "T\u00fd\u010dek",
+            "district": "T\u00fd\u010dek"
+        },
+        "ds_id": "454avu7"
+    },
+    "Tym\u00e1kov": {
+        "address": {
+            "street": "40",
+            "zip": "332 01",
+            "city": "Tym\u00e1kov",
+            "district": "Tym\u00e1kov"
+        },
+        "ds_id": "7d8a9pg"
+    },
+    "T\u00fdnec": {
+        "address": {
+            "street": "69",
+            "zip": "340 21",
+            "city": "T\u00fdnec",
+            "district": "T\u00fdnec"
+        },
+        "ds_id": "tdybrjs"
+    },
+    "T\u00fdni\u0161t\u011b": {
+        "address": {
+            "street": "7",
+            "zip": "334 01",
+            "city": "T\u00fdni\u0161t\u011b",
+            "district": "T\u00fdni\u0161t\u011b"
+        },
+        "ds_id": "ghtau22"
+    },
+    "T\u00fdni\u0161\u0165ko": {
+        "address": {
+            "street": "78",
+            "zip": "566 01",
+            "city": "T\u00fdni\u0161\u0165ko",
+            "district": "T\u00fdni\u0161\u0165ko"
+        },
+        "ds_id": "x8ta5iu"
+    },
+    "T\u00fdn nad Be\u010dvou": {
+        "address": {
+            "street": "N\u00e1ves B. Smetany 68",
+            "zip": "751 31",
+            "city": "T\u00fdn nad Be\u010dvou",
+            "district": "T\u00fdn nad Be\u010dvou"
+        },
+        "ds_id": "77ibvpt"
+    },
+    "\u00dabislavice": {
+        "address": {
+            "street": "53",
+            "zip": "507 92",
+            "city": "\u00dabislavice",
+            "district": "\u00dabislavice"
+        },
+        "ds_id": "nchbsgm"
+    },
+    "Ublo": {
+        "address": {
+            "street": "74",
+            "zip": "763 12",
+            "city": "Ublo",
+            "district": "Ublo"
+        },
+        "ds_id": "b53b7ei"
+    },
+    "\u00dabo\u010d": {
+        "address": {
+            "street": "60",
+            "zip": "345 43",
+            "city": "\u00dabo\u010d",
+            "district": "\u00dabo\u010d"
+        },
+        "ds_id": "i97aveb"
+    },
+    "Ubu\u0161\u00ednek": {
+        "address": {
+            "street": "41",
+            "zip": "592 65",
+            "city": "Ubu\u0161\u00ednek",
+            "district": "Ubu\u0161\u00ednek"
+        },
+        "ds_id": "su8awfr"
+    },
+    "\u00dadlice": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 12",
+            "zip": "431 41",
+            "city": "\u00dadlice",
+            "district": "\u00dadlice"
+        },
+        "ds_id": "ufub6fk"
+    },
+    "Uheln\u00e1": {
+        "address": {
+            "street": "163",
+            "zip": "790 70",
+            "city": "Uheln\u00e1",
+            "district": "Uheln\u00e1"
+        },
+        "ds_id": "ijza7n4"
+    },
+    "\u00daherce": {
+        "address": {
+            "street": "K Mexiku 94",
+            "zip": "330 23",
+            "city": "\u00daherce",
+            "district": "\u00daherce"
+        },
+        "ds_id": "ksja4dn"
+    },
+    "Uher\u010dice": {
+        "address": {
+            "street": "48",
+            "zip": "671 07",
+            "city": "Uher\u010dice",
+            "district": "Uher\u010dice"
+        },
+        "ds_id": "qgmbauw"
+    },
+    "\u00daher\u010dice": {
+        "address": {
+            "street": "32",
+            "zip": "538 03",
+            "city": "\u00daher\u010dice",
+            "district": "\u00daher\u010dice"
+        },
+        "ds_id": "q5xa3dh"
+    },
+    "Uhersko": {
+        "address": {
+            "street": "34",
+            "zip": "533 73",
+            "city": "Uhersko",
+            "district": "Uhersko"
+        },
+        "ds_id": "6dzazk6"
+    },
+    "Uhl\u00ed\u0159ov": {
+        "address": {
+            "street": "55",
+            "zip": "747 84",
+            "city": "Uhl\u00ed\u0159ov",
+            "district": "Uhl\u00ed\u0159ov"
+        },
+        "ds_id": "xkabkj3"
+    },
+    "Uhl\u00ed\u0159sk\u00e1 Lhota": {
+        "address": {
+            "street": "69",
+            "zip": "281 26",
+            "city": "Uhl\u00ed\u0159sk\u00e1 Lhota",
+            "district": "Uhl\u00ed\u0159sk\u00e1 Lhota"
+        },
+        "ds_id": "qyyak2w"
+    },
+    "\u00daholi\u010dky": {
+        "address": {
+            "street": "N\u00e1ves 10",
+            "zip": "252 64",
+            "city": "\u00daholi\u010dky",
+            "district": "\u00daholi\u010dky"
+        },
+        "ds_id": "68vb4q6"
+    },
+    "\u00dahonice": {
+        "address": {
+            "street": "Na N\u00e1vsi 24",
+            "zip": "252 18",
+            "city": "\u00dahonice",
+            "district": "\u00dahonice"
+        },
+        "ds_id": "s93ajrt"
+    },
+    "\u00daho\u0159ilka": {
+        "address": {
+            "street": "22",
+            "zip": "582 53",
+            "city": "\u00daho\u0159ilka",
+            "district": "\u00daho\u0159ilka"
+        },
+        "ds_id": "ezcayep"
+    },
+    "\u00dah\u0159etice": {
+        "address": {
+            "street": "36",
+            "zip": "538 32",
+            "city": "\u00dah\u0159etice",
+            "district": "\u00dah\u0159etice"
+        },
+        "ds_id": "aqha3e6"
+    },
+    "\u00dah\u0159etick\u00e1 Lhota": {
+        "address": {
+            "street": "9",
+            "zip": "530 02",
+            "city": "\u00dah\u0159etick\u00e1 Lhota",
+            "district": "\u00dah\u0159etick\u00e1 Lhota"
+        },
+        "ds_id": "bdfb5bx"
+    },
+    "Uh\u0159ice": {
+        "address": {
+            "street": "84",
+            "zip": "768 33",
+            "city": "Uh\u0159ice",
+            "district": "Uh\u0159ice"
+        },
+        "ds_id": "m2sjdnh"
+    },
+    "Uh\u0159i\u010dice": {
+        "address": {
+            "street": "111",
+            "zip": "752 01",
+            "city": "Uh\u0159i\u010dice",
+            "district": "Uh\u0159i\u010dice"
+        },
+        "ds_id": "suxbvgx"
+    },
+    "Uh\u0159\u00ednov": {
+        "address": {
+            "street": "23",
+            "zip": "594 41",
+            "city": "Uh\u0159\u00ednov",
+            "district": "Uh\u0159\u00ednov"
+        },
+        "ds_id": "fdbaqh2"
+    },
+    "Uhy": {
+        "address": {
+            "street": "31",
+            "zip": "273 24",
+            "city": "Uhy",
+            "district": "Uhy"
+        },
+        "ds_id": "srwakvp"
+    },
+    "Uj\u010dov": {
+        "address": {
+            "street": "19",
+            "zip": "592 62",
+            "city": "Uj\u010dov",
+            "district": "Uj\u010dov"
+        },
+        "ds_id": "wcabs67"
+    },
+    "\u00dajezd": {
+        "address": {
+            "street": "83",
+            "zip": "783 96",
+            "city": "\u00dajezd",
+            "district": "\u00dajezd"
+        },
+        "ds_id": "6v3bat9"
+    },
+    "\u00dajezdec": {
+        "address": {
+            "street": "49",
+            "zip": "277 45",
+            "city": "\u00dajezdec",
+            "district": "\u00dajezdec"
+        },
+        "ds_id": "nmcakbs"
+    },
+    "\u00dajezde\u010dek": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Bo\u017eeny N\u011bmcov\u00e9 2",
+            "zip": "415 01",
+            "city": "\u00dajezde\u010dek",
+            "district": "\u00dajezde\u010dek"
+        },
+        "ds_id": "dkdaqna"
+    },
+    "\u00dajezd Nade M\u017e\u00ed": {
+        "address": {
+            "street": "47",
+            "zip": "330 33",
+            "city": "\u00dajezd nade M\u017e\u00ed",
+            "district": "\u00dajezd nade M\u017e\u00ed"
+        },
+        "ds_id": "cizbidh"
+    },
+    "\u00dajezd pod Troskami": {
+        "address": {
+            "street": "29",
+            "zip": "512 63",
+            "city": "\u00dajezd pod Troskami",
+            "district": "\u00dajezd pod Troskami"
+        },
+        "ds_id": "szhasvd"
+    },
+    "\u00dajezd u Boskovic": {
+        "address": {
+            "street": "66",
+            "zip": "680 01",
+            "city": "\u00dajezd u Boskovic",
+            "district": "\u00dajezd u Boskovic"
+        },
+        "ds_id": "9qvbpiv"
+    },
+    "\u00dajezd u \u010cern\u00e9 Hory": {
+        "address": {
+            "street": "108",
+            "zip": "679 22",
+            "city": "\u00dajezd u \u010cern\u00e9 Hory",
+            "district": "\u00dajezd u \u010cern\u00e9 Hory"
+        },
+        "ds_id": "d88b4w7"
+    },
+    "\u00dajezd u Chocn\u011b": {
+        "address": {
+            "street": "85",
+            "zip": "565 01",
+            "city": "\u00dajezd u Chocn\u011b",
+            "district": "\u00dajezd u Chocn\u011b"
+        },
+        "ds_id": "8z4a5iq"
+    },
+    "\u00dajezd u Pl\u00e1nice": {
+        "address": {
+            "street": "25",
+            "zip": "339 01",
+            "city": "\u00dajezd u Pl\u00e1nice",
+            "district": "\u00dajezd u Pl\u00e1nice"
+        },
+        "ds_id": "adkajuc"
+    },
+    "\u00dajezd u P\u0159elou\u010de": {
+        "address": {
+            "street": "25",
+            "zip": "533 16",
+            "city": "\u00dajezd u P\u0159elou\u010de",
+            "district": "\u00dajezd u P\u0159elou\u010de"
+        },
+        "ds_id": "vaha3xc"
+    },
+    "\u00dajezd u Rosic": {
+        "address": {
+            "street": "111",
+            "zip": "664 84",
+            "city": "\u00dajezd u Rosic",
+            "district": "\u00dajezd u Rosic"
+        },
+        "ds_id": "aukbkix"
+    },
+    "\u00dajezd u Sezemic": {
+        "address": {
+            "street": "30",
+            "zip": "533 04",
+            "city": "\u00dajezd u Sezemic",
+            "district": "\u00dajezd u Sezemic"
+        },
+        "ds_id": "htda5jg"
+    },
+    "\u00dajezd u Svat\u00e9ho K\u0159\u00ed\u017ee": {
+        "address": {
+            "street": "27",
+            "zip": "338 24",
+            "city": "\u00dajezd u Svat\u00e9ho K\u0159\u00ed\u017ee",
+            "district": "\u00dajezd u Svat\u00e9ho K\u0159\u00ed\u017ee"
+        },
+        "ds_id": "rgrbvab"
+    },
+    "\u00dajezd u Ti\u0161nova": {
+        "address": {
+            "street": "28",
+            "zip": "594 55",
+            "city": "\u00dajezd u Ti\u0161nova",
+            "district": "\u00dajezd u Ti\u0161nova"
+        },
+        "ds_id": "qh4b4bn"
+    },
+    "Ujkovice": {
+        "address": {
+            "street": "38",
+            "zip": "294 04",
+            "city": "Ujkovice",
+            "district": "Ujkovice"
+        },
+        "ds_id": "w9gasn9"
+    },
+    "\u00dalehle": {
+        "address": {
+            "street": "28",
+            "zip": "387 19",
+            "city": "\u00dalehle",
+            "district": "\u00dalehle"
+        },
+        "ds_id": "pkbb8jn"
+    },
+    "\u00dalibice": {
+        "address": {
+            "street": "53",
+            "zip": "507 07",
+            "city": "\u00dalibice",
+            "district": "\u00dalibice"
+        },
+        "ds_id": "3ibapnt"
+    },
+    "\u00dalice": {
+        "address": {
+            "street": "50",
+            "zip": "330 33",
+            "city": "\u00dalice",
+            "district": "\u00dalice"
+        },
+        "ds_id": "6wrbuq6"
+    },
+    "\u00damon\u00edn": {
+        "address": {
+            "street": "31",
+            "zip": "285 46",
+            "city": "\u00damon\u00edn",
+            "district": "\u00damon\u00edn"
+        },
+        "ds_id": "d5eakr4"
+    },
+    "\u00damyslovice": {
+        "address": {
+            "street": "58",
+            "zip": "290 01",
+            "city": "\u00damyslovice",
+            "district": "\u00damyslovice"
+        },
+        "ds_id": "pajan7d"
+    },
+    "\u00dananov": {
+        "address": {
+            "street": "463",
+            "zip": "671 31",
+            "city": "\u00dananov",
+            "district": "\u00dananov"
+        },
+        "ds_id": "4exbk8a"
+    },
+    "Un\u010d\u00edn": {
+        "address": {
+            "street": "24",
+            "zip": "592 42",
+            "city": "Un\u010d\u00edn",
+            "district": "Un\u010d\u00edn"
+        },
+        "ds_id": "m4wbkgw"
+    },
+    "\u00danehle": {
+        "address": {
+            "street": "6",
+            "zip": "349 01",
+            "city": "\u00danehle",
+            "district": "\u00danehle"
+        },
+        "ds_id": "b5jaytg"
+    },
+    "\u00dan\u011bjovice": {
+        "address": {
+            "street": "30",
+            "zip": "345 43",
+            "city": "\u00dan\u011bjovice",
+            "district": "\u00dan\u011bjovice"
+        },
+        "ds_id": "t3gave5"
+    },
+    "\u00dan\u011b\u0161ov": {
+        "address": {
+            "street": "76",
+            "zip": "330 38",
+            "city": "\u00dan\u011b\u0161ov",
+            "district": "\u00dan\u011b\u0161ov"
+        },
+        "ds_id": "ue6bkiq"
+    },
+    "\u00dan\u011btice": {
+        "address": {
+            "street": "6",
+            "zip": "336 01",
+            "city": "\u00dan\u011btice",
+            "district": "\u00dan\u011btice"
+        },
+        "ds_id": "pb8atyx"
+    },
+    "\u00danice": {
+        "address": {
+            "street": "2",
+            "zip": "386 01",
+            "city": "\u00danice",
+            "district": "Hubenov"
+        },
+        "ds_id": "8vib757"
+    },
+    "Un\u00edn": {
+        "address": {
+            "street": "44",
+            "zip": "679 24",
+            "city": "Un\u00edn",
+            "district": "Un\u00edn"
+        },
+        "ds_id": "ckxap5t"
+    },
+    "Unkovice": {
+        "address": {
+            "street": "28",
+            "zip": "664 63",
+            "city": "Unkovice",
+            "district": "Unkovice"
+        },
+        "ds_id": "b62bsa6"
+    },
+    "\u00dapohlavy": {
+        "address": {
+            "street": "61",
+            "zip": "410 02",
+            "city": "\u00dapohlavy",
+            "district": "\u00dapohlavy"
+        },
+        "ds_id": "f89a36p"
+    },
+    "Urbanice": {
+        "address": {
+            "street": "12",
+            "zip": "535 01",
+            "city": "Urbanice",
+            "district": "Urbanice"
+        },
+        "ds_id": "3dxa5j9"
+    },
+    "Urbanov": {
+        "address": {
+            "street": "50",
+            "zip": "588 62",
+            "city": "Urbanov",
+            "district": "Urbanov"
+        },
+        "ds_id": "8wsatym"
+    },
+    "Ur\u010dice": {
+        "address": {
+            "street": "81",
+            "zip": "798 04",
+            "city": "Ur\u010dice",
+            "district": "Ur\u010dice"
+        },
+        "ds_id": "mbhbath"
+    },
+    "\u00dasiln\u00e9": {
+        "address": {
+            "street": "43",
+            "zip": "370 10",
+            "city": "\u00dasiln\u00e9",
+            "district": "\u00dasiln\u00e9"
+        },
+        "ds_id": "g9abyx2"
+    },
+    "\u00dasilov": {
+        "address": {
+            "street": "33",
+            "zip": "345 06",
+            "city": "\u00dasilov",
+            "district": "\u00dasilov"
+        },
+        "ds_id": "4uravez"
+    },
+    "\u00dasobrno": {
+        "address": {
+            "street": "81",
+            "zip": "679 39",
+            "city": "\u00dasobrno",
+            "district": "\u00dasobrno"
+        },
+        "ds_id": "tzqa2yp"
+    },
+    "\u00dast\u00ed": {
+        "address": {
+            "street": "33",
+            "zip": "753 01",
+            "city": "\u00dast\u00ed",
+            "district": "\u00dast\u00ed"
+        },
+        "ds_id": "mu8bqt9"
+    },
+    "\u00dast\u00edn": {
+        "address": {
+            "street": "9",
+            "zip": "783 46",
+            "city": "\u00dast\u00edn",
+            "district": "\u00dast\u00edn"
+        },
+        "ds_id": "bnaaw64"
+    },
+    "\u00dastra\u0161ice": {
+        "address": {
+            "street": "55",
+            "zip": "390 02",
+            "city": "\u00dastra\u0161ice",
+            "district": "\u00dastra\u0161ice"
+        },
+        "ds_id": "xeiawnr"
+    },
+    "\u00dastra\u0161\u00edn": {
+        "address": {
+            "street": "3",
+            "zip": "393 01",
+            "city": "\u00dastra\u0161\u00edn",
+            "district": "\u00dastra\u0161\u00edn"
+        },
+        "ds_id": "qsxav6s"
+    },
+    "\u00dastup": {
+        "address": {
+            "street": "36",
+            "zip": "679 74",
+            "city": "\u00dastup",
+            "district": "\u00dastup"
+        },
+        "ds_id": "n3na24i"
+    },
+    "\u00dasu\u0161\u00ed": {
+        "address": {
+            "street": "3",
+            "zip": "666 01",
+            "city": "\u00dasu\u0161\u00ed",
+            "district": "\u00dasu\u0161\u00ed"
+        },
+        "ds_id": "h9pbkc7"
+    },
+    "\u00dat\u011bchov": {
+        "address": {
+            "street": "65",
+            "zip": "571 01",
+            "city": "\u00dat\u011bchov",
+            "district": "\u00dat\u011bchov"
+        },
+        "ds_id": "nx9a3vk"
+    },
+    "\u00dat\u011bchovice": {
+        "address": {
+            "street": "25",
+            "zip": "395 01",
+            "city": "\u00dat\u011bchovice",
+            "district": "\u00dat\u011bchovice"
+        },
+        "ds_id": "9bcbgbv"
+    },
+    "\u00dat\u011bchovice pod Stra\u017ei\u0161t\u011bm": {
+        "address": {
+            "street": "57",
+            "zip": "395 01",
+            "city": "\u00dat\u011bchovice pod Stra\u017ei\u0161t\u011bm",
+            "district": "\u00dat\u011bchovice pod Stra\u017ei\u0161t\u011bm"
+        },
+        "ds_id": "yjwayeg"
+    },
+    "\u00dat\u011bchovi\u010dky": {
+        "address": {
+            "street": "39",
+            "zip": "395 01",
+            "city": "\u00dat\u011bchovi\u010dky",
+            "district": "\u00dat\u011bchovi\u010dky"
+        },
+        "ds_id": "mwdanzq"
+    },
+    "\u00datu\u0161ice": {
+        "address": {
+            "street": "59",
+            "zip": "332 09",
+            "city": "\u00datu\u0161ice",
+            "district": "\u00datu\u0161ice"
+        },
+        "ds_id": "uxea83q"
+    },
+    "\u00datvina": {
+        "address": {
+            "street": "80",
+            "zip": "364 01",
+            "city": "\u00datvina",
+            "district": "\u00datvina"
+        },
+        "ds_id": "ewmbi4j"
+    },
+    "\u00davalno": {
+        "address": {
+            "street": "58",
+            "zip": "793 91",
+            "city": "\u00davalno",
+            "district": "\u00davalno"
+        },
+        "ds_id": "sxnbasy"
+    },
+    "Uzenice": {
+        "address": {
+            "street": "28",
+            "zip": "388 01",
+            "city": "Uzenice",
+            "district": "Uzenice"
+        },
+        "ds_id": "kxcb7ec"
+    },
+    "Uzeni\u010dky": {
+        "address": {
+            "street": "48",
+            "zip": "388 01",
+            "city": "Uzeni\u010dky",
+            "district": "Uzeni\u010dky"
+        },
+        "ds_id": "qvjamtw"
+    },
+    "\u00da\u017eice": {
+        "address": {
+            "street": "38",
+            "zip": "285 04",
+            "city": "\u00da\u017eice",
+            "district": "\u00da\u017eice"
+        },
+        "ds_id": "nwpakry"
+    },
+    "Vacenovice": {
+        "address": {
+            "street": "Na D\u011bdin\u011b 243",
+            "zip": "696 06",
+            "city": "Vacenovice",
+            "district": "Vacenovice"
+        },
+        "ds_id": "h6dbas4"
+    },
+    "V\u00e1clavice": {
+        "address": {
+            "street": "3",
+            "zip": "256 01",
+            "city": "V\u00e1clavice",
+            "district": "V\u00e1clavice"
+        },
+        "ds_id": "yhgaj34"
+    },
+    "V\u00e1clavovice": {
+        "address": {
+            "street": "Obecn\u00ed 130",
+            "zip": "739 34",
+            "city": "V\u00e1clavovice",
+            "district": "V\u00e1clavovice"
+        },
+        "ds_id": "ge4bfqx"
+    },
+    "V\u00e1clavov u Brunt\u00e1lu": {
+        "address": {
+            "street": "69",
+            "zip": "792 01",
+            "city": "V\u00e1clavov u Brunt\u00e1lu",
+            "district": "Horn\u00ed V\u00e1clavov"
+        },
+        "ds_id": "3v7ar49"
+    },
+    "V\u00e1clavy": {
+        "address": {
+            "street": "36",
+            "zip": "270 35",
+            "city": "V\u00e1clavy",
+            "district": "V\u00e1clavy"
+        },
+        "ds_id": "pp5j2yh"
+    },
+    "Vacov": {
+        "address": {
+            "street": "35",
+            "zip": "384 86",
+            "city": "Vacov",
+            "district": "Vacov"
+        },
+        "ds_id": "6t5b43z"
+    },
+    "Vacovice": {
+        "address": {
+            "street": "23",
+            "zip": "387 19",
+            "city": "Vacovice",
+            "district": "Vacovice"
+        },
+        "ds_id": "xbmb52s"
+    },
+    "Vala\u0161sk\u00e1 Byst\u0159ice": {
+        "address": {
+            "street": "316",
+            "zip": "756 27",
+            "city": "Vala\u0161sk\u00e1 Byst\u0159ice",
+            "district": "Vala\u0161sk\u00e1 Byst\u0159ice"
+        },
+        "ds_id": "ftibhmt"
+    },
+    "Vala\u0161sk\u00e1 Polanka": {
+        "address": {
+            "street": "270",
+            "zip": "756 11",
+            "city": "Vala\u0161sk\u00e1 Polanka",
+            "district": "Vala\u0161sk\u00e1 Polanka"
+        },
+        "ds_id": "6ivbsar"
+    },
+    "Vala\u0161sk\u00e1 Senice": {
+        "address": {
+            "street": "145",
+            "zip": "756 14",
+            "city": "Vala\u0161sk\u00e1 Senice",
+            "district": "Vala\u0161sk\u00e1 Senice"
+        },
+        "ds_id": "3n4bspj"
+    },
+    "Vala\u0161sk\u00e9 P\u0159\u00edkazy": {
+        "address": {
+            "street": "1",
+            "zip": "756 12",
+            "city": "Vala\u0161sk\u00e9 P\u0159\u00edkazy",
+            "district": "Vala\u0161sk\u00e9 P\u0159\u00edkazy"
+        },
+        "ds_id": "xxjasrj"
+    },
+    "Valdice": {
+        "address": {
+            "street": "Ji\u010d\u00ednsk\u00e1 37",
+            "zip": "507 11",
+            "city": "Valdice",
+            "district": "Valdice"
+        },
+        "ds_id": "bn3a6qy"
+    },
+    "Vald\u00edkov": {
+        "address": {
+            "street": "8",
+            "zip": "675 03",
+            "city": "Vald\u00edkov",
+            "district": "Vald\u00edkov"
+        },
+        "ds_id": "2x2b7qk"
+    },
+    "Vale\u010d": {
+        "address": {
+            "street": "109",
+            "zip": "675 53",
+            "city": "Vale\u010d",
+            "district": "Vale\u010d"
+        },
+        "ds_id": "yniap3k"
+    },
+    "Valchov": {
+        "address": {
+            "street": "97",
+            "zip": "680 01",
+            "city": "Valchov",
+            "district": "Valchov"
+        },
+        "ds_id": "iajbhjw"
+    },
+    "Valke\u0159ice": {
+        "address": {
+            "street": "299",
+            "zip": "407 24",
+            "city": "Valke\u0159ice",
+            "district": "Valke\u0159ice"
+        },
+        "ds_id": "kcxa7hu"
+    },
+    "Val\u0161ov": {
+        "address": {
+            "street": "72",
+            "zip": "792 01",
+            "city": "Val\u0161ov",
+            "district": "Val\u0161ov"
+        },
+        "ds_id": "jbnbnvw"
+    },
+    "Valtrovice": {
+        "address": {
+            "street": "7",
+            "zip": "671 28",
+            "city": "Valtrovice",
+            "district": "Valtrovice"
+        },
+        "ds_id": "ykhbund"
+    },
+    "Valy": {
+        "address": {
+            "street": "100",
+            "zip": "535 01",
+            "city": "Valy",
+            "district": "Valy"
+        },
+        "ds_id": "4fmb656"
+    },
+    "Vanov": {
+        "address": {
+            "street": "2",
+            "zip": "588 56",
+            "city": "Vanov",
+            "district": "Vanov"
+        },
+        "ds_id": "8vmbvs4"
+    },
+    "Vanovice": {
+        "address": {
+            "street": "132",
+            "zip": "679 36",
+            "city": "Vanovice",
+            "district": "Vanovice"
+        },
+        "ds_id": "fcfatab"
+    },
+    "Van\u016fvek": {
+        "address": {
+            "street": "3",
+            "zip": "588 56",
+            "city": "Van\u016fvek",
+            "district": "Van\u016fvek"
+        },
+        "ds_id": "93aayhk"
+    },
+    "V\u00e1penice": {
+        "address": {
+            "street": "75",
+            "zip": "687 74",
+            "city": "V\u00e1penice",
+            "district": "V\u00e1penice"
+        },
+        "ds_id": "js8arh5"
+    },
+    "V\u00e1penn\u00e1": {
+        "address": {
+            "street": "442",
+            "zip": "790 64",
+            "city": "V\u00e1penn\u00e1",
+            "district": "V\u00e1penn\u00e1"
+        },
+        "ds_id": "cmibkdq"
+    },
+    "V\u00e1penn\u00fd Podol": {
+        "address": {
+            "street": "74",
+            "zip": "538 03",
+            "city": "V\u00e1penn\u00fd Podol",
+            "district": "V\u00e1penn\u00fd Podol"
+        },
+        "ds_id": "zw8a3dd"
+    },
+    "V\u00e1pno": {
+        "address": {
+            "street": "26",
+            "zip": "533 16",
+            "city": "V\u00e1pno",
+            "district": "V\u00e1pno"
+        },
+        "ds_id": "b68a5k3"
+    },
+    "V\u00e1povice": {
+        "address": {
+            "street": "23",
+            "zip": "588 56",
+            "city": "V\u00e1povice",
+            "district": "V\u00e1povice"
+        },
+        "ds_id": "zfxazqz"
+    },
+    "Varva\u017eov": {
+        "address": {
+            "street": "13",
+            "zip": "397 01",
+            "city": "Varva\u017eov",
+            "district": "Varva\u017eov"
+        },
+        "ds_id": "ypzbhia"
+    },
+    "Vat\u00edn": {
+        "address": {
+            "street": "82",
+            "zip": "591 01",
+            "city": "Vat\u00edn",
+            "district": "Vat\u00edn"
+        },
+        "ds_id": "inmaxb8"
+    },
+    "Vav\u0159inec": {
+        "address": {
+            "street": "92",
+            "zip": "679 13",
+            "city": "Vav\u0159inec",
+            "district": "Vav\u0159inec"
+        },
+        "ds_id": "s9sbisy"
+    },
+    "V\u00e1\u017eany": {
+        "address": {
+            "street": "20",
+            "zip": "687 37",
+            "city": "V\u00e1\u017eany",
+            "district": "V\u00e1\u017eany"
+        },
+        "ds_id": "3t9bkcx"
+    },
+    "V\u00e1\u017eany nad Litavou": {
+        "address": {
+            "street": "125",
+            "zip": "684 01",
+            "city": "V\u00e1\u017eany nad Litavou",
+            "district": "V\u00e1\u017eany nad Litavou"
+        },
+        "ds_id": "2z3a25t"
+    },
+    "V\u010deln\u00e1": {
+        "address": {
+            "street": "Husova 212",
+            "zip": "373 82",
+            "city": "V\u010deln\u00e1",
+            "district": "V\u010deln\u00e1"
+        },
+        "ds_id": "pk7b5se"
+    },
+    "V\u010delni\u010dka": {
+        "address": {
+            "street": "67",
+            "zip": "394 70",
+            "city": "V\u010delni\u010dka",
+            "district": "V\u010delni\u010dka"
+        },
+        "ds_id": "994awxj"
+    },
+    "V\u011bcov": {
+        "address": {
+            "street": "61",
+            "zip": "592 44",
+            "city": "V\u011bcov",
+            "district": "V\u011bcov"
+        },
+        "ds_id": "zrybj3z"
+    },
+    "V\u011bdomice": {
+        "address": {
+            "street": "Na pr\u016fhonu 270",
+            "zip": "413 01",
+            "city": "V\u011bdomice",
+            "district": "V\u011bdomice"
+        },
+        "ds_id": "tnfbus7"
+    },
+    "Vedrovice": {
+        "address": {
+            "street": "326",
+            "zip": "671 75",
+            "city": "Vedrovice",
+            "district": "Vedrovice"
+        },
+        "ds_id": "f7ebj38"
+    },
+    "V\u011bchnov": {
+        "address": {
+            "street": "73",
+            "zip": "593 01",
+            "city": "V\u011bchnov",
+            "district": "V\u011bchnov"
+        },
+        "ds_id": "7awax5d"
+    },
+    "Vejprnice": {
+        "address": {
+            "street": "M\u00edrov\u00e1 17",
+            "zip": "330 27",
+            "city": "Vejprnice",
+            "district": "Vejprnice"
+        },
+        "ds_id": "yjtbarh"
+    },
+    "Vejvanov": {
+        "address": {
+            "street": "47",
+            "zip": "338 28",
+            "city": "Vejvanov",
+            "district": "Vejvanov"
+        },
+        "ds_id": "4ztazeh"
+    },
+    "Vejvanovice": {
+        "address": {
+            "street": "11",
+            "zip": "538 62",
+            "city": "Vejvanovice",
+            "district": "Vejvanovice"
+        },
+        "ds_id": "vrsa5ks"
+    },
+    "Velatice": {
+        "address": {
+            "street": "92",
+            "zip": "664 05",
+            "city": "Velatice",
+            "district": "Velatice"
+        },
+        "ds_id": "h5ka28d"
+    },
+    "Vele\u010d\u00edn": {
+        "address": {
+            "street": "49",
+            "zip": "331 65",
+            "city": "Vele\u010d\u00edn",
+            "district": "Vele\u010d\u00edn"
+        },
+        "ds_id": "kiyawdy"
+    },
+    "Velehrad": {
+        "address": {
+            "street": "Hradi\u0161\u0165sk\u00e1 231",
+            "zip": "687 06",
+            "city": "Velehrad",
+            "district": "Velehrad"
+        },
+        "ds_id": "psibark"
+    },
+    "Velem\u00edn": {
+        "address": {
+            "street": "96",
+            "zip": "411 31",
+            "city": "Velem\u00edn",
+            "district": "Velem\u00edn"
+        },
+        "ds_id": "6vdaqwd"
+    },
+    "Velemy\u0161leves": {
+        "address": {
+            "street": "100",
+            "zip": "438 01",
+            "city": "Velemy\u0161leves",
+            "district": "Velemy\u0161leves"
+        },
+        "ds_id": "xu2aqrc"
+    },
+    "Vele\u0148": {
+        "address": {
+            "street": "Hlavn\u00ed 7",
+            "zip": "250 63",
+            "city": "Vele\u0148",
+            "district": "Vele\u0148"
+        },
+        "ds_id": "8web5cw"
+    },
+    "Velenice": {
+        "address": {
+            "street": "148",
+            "zip": "470 02",
+            "city": "Velenice",
+            "district": "Velenice"
+        },
+        "ds_id": "xkfeftc"
+    },
+    "Velenka": {
+        "address": {
+            "street": "44",
+            "zip": "289 12",
+            "city": "Velenka",
+            "district": "Velenka"
+        },
+        "ds_id": "tuab8cg"
+    },
+    "Velenov": {
+        "address": {
+            "street": "74",
+            "zip": "680 01",
+            "city": "Velenov",
+            "district": "Velenov"
+        },
+        "ds_id": "8gaazv2"
+    },
+    "Vele\u0161ovice": {
+        "address": {
+            "street": "152",
+            "zip": "683 01",
+            "city": "Vele\u0161ovice",
+            "district": "Vele\u0161ovice"
+        },
+        "ds_id": "yn5bkbj"
+    },
+    "Veletiny": {
+        "address": {
+            "street": "218",
+            "zip": "687 33",
+            "city": "Veletiny",
+            "district": "Veletiny"
+        },
+        "ds_id": "c6gbstk"
+    },
+    "Veletov": {
+        "address": {
+            "street": "5",
+            "zip": "280 02",
+            "city": "Veletov",
+            "district": "Veletov"
+        },
+        "ds_id": "qttatdh"
+    },
+    "Velhartice": {
+        "address": {
+            "street": "134",
+            "zip": "341 42",
+            "city": "Velhartice",
+            "district": "Velhartice"
+        },
+        "ds_id": "976bq79"
+    },
+    "Velichov": {
+        "address": {
+            "street": "13",
+            "zip": "363 01",
+            "city": "Velichov",
+            "district": "Velichov"
+        },
+        "ds_id": "pvubkbn"
+    },
+    "Velik\u00e1 Ves": {
+        "address": {
+            "street": "Hlavn\u00ed 69",
+            "zip": "250 70",
+            "city": "Velik\u00e1 Ves",
+            "district": "Velik\u00e1 Ves"
+        },
+        "ds_id": "643akj4"
+    },
+    "Velim": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Obr\u00e1nc\u016f m\u00edru 120",
+            "zip": "281 01",
+            "city": "Velim",
+            "district": "Velim"
+        },
+        "ds_id": "ey9bars"
+    },
+    "Veliny": {
+        "address": {
+            "street": "60",
+            "zip": "534 01",
+            "city": "Veliny",
+            "district": "Veliny"
+        },
+        "ds_id": "dr2bqwq"
+    },
+    "Veli\u0161": {
+        "address": {
+            "street": "4",
+            "zip": "507 21",
+            "city": "Veli\u0161",
+            "district": "Veli\u0161"
+        },
+        "ds_id": "xfeatvf"
+    },
+    "Velk\u00e1 Bukov\u00e1": {
+        "address": {
+            "street": "82",
+            "zip": "270 23",
+            "city": "Velk\u00e1 Bukov\u00e1",
+            "district": "Velk\u00e1 Bukov\u00e1"
+        },
+        "ds_id": "2sda7g5"
+    },
+    "Velk\u00e1 Bukovina": {
+        "address": {
+            "street": "178",
+            "zip": "407 29",
+            "city": "Velk\u00e1 Bukovina",
+            "district": "Velk\u00e1 Bukovina"
+        },
+        "ds_id": "96hbkep"
+    },
+    "Velk\u00e1 Dobr\u00e1": {
+        "address": {
+            "street": "Karlovarsk\u00e1 15",
+            "zip": "273 61",
+            "city": "Velk\u00e1 Dobr\u00e1",
+            "district": "Velk\u00e1 Dobr\u00e1"
+        },
+        "ds_id": "bt5baqd"
+    },
+    "Velk\u00e1 Hle\u010fsebe": {
+        "address": {
+            "street": "Plze\u0148sk\u00e1 32",
+            "zip": "353 01",
+            "city": "Velk\u00e1 Hle\u010fsebe",
+            "district": "Velk\u00e1 Hle\u010fsebe"
+        },
+        "ds_id": "r9jbapp"
+    },
+    "Velk\u00e1 Chmeli\u0161tn\u00e1": {
+        "address": {
+            "street": "40",
+            "zip": "270 34",
+            "city": "Velk\u00e1 Chmeli\u0161tn\u00e1",
+            "district": "Velk\u00e1 Chmeli\u0161tn\u00e1"
+        },
+        "ds_id": "8vwawrx"
+    },
+    "Velk\u00e1 Chy\u0161ka": {
+        "address": {
+            "street": "69",
+            "zip": "394 28",
+            "city": "Velk\u00e1 Chy\u0161ka",
+            "district": "Velk\u00e1 Chy\u0161ka"
+        },
+        "ds_id": "j58awqu"
+    },
+    "Velk\u00e1 Kra\u0161": {
+        "address": {
+            "street": "132",
+            "zip": "790 58",
+            "city": "Velk\u00e1 Kra\u0161",
+            "district": "Velk\u00e1 Kra\u0161"
+        },
+        "ds_id": "zc8bkev"
+    },
+    "Velk\u00e1 Le\u010dice": {
+        "address": {
+            "street": "85",
+            "zip": "262 05",
+            "city": "Velk\u00e1 Le\u010dice",
+            "district": "Velk\u00e1 Le\u010dice"
+        },
+        "ds_id": "b7bas9w"
+    },
+    "Velk\u00e1 Lhota": {
+        "address": {
+            "street": "33",
+            "zip": "757 01",
+            "city": "Velk\u00e1 Lhota",
+            "district": "Velk\u00e1 Lhota"
+        },
+        "ds_id": "uaaatu2"
+    },
+    "Velk\u00e1 Losenice": {
+        "address": {
+            "street": "360",
+            "zip": "592 11",
+            "city": "Velk\u00e1 Losenice",
+            "district": "Velk\u00e1 Losenice"
+        },
+        "ds_id": "qjxbkez"
+    },
+    "Velk\u00e1 nad Veli\u010dkou": {
+        "address": {
+            "street": "151",
+            "zip": "696 74",
+            "city": "Velk\u00e1 nad Veli\u010dkou",
+            "district": "Velk\u00e1 nad Veli\u010dkou"
+        },
+        "ds_id": "57ybaqy"
+    },
+    "Velk\u00e1 Polom": {
+        "address": {
+            "street": "Opavsk\u00e1 58",
+            "zip": "747 64",
+            "city": "Velk\u00e1 Polom",
+            "district": "Velk\u00e1 Polom"
+        },
+        "ds_id": "k9nbsq7"
+    },
+    "Velk\u00e1 Skrovnice": {
+        "address": {
+            "street": "30",
+            "zip": "562 01",
+            "city": "Velk\u00e1 Skrovnice",
+            "district": "Velk\u00e1 Skrovnice"
+        },
+        "ds_id": "9wza33x"
+    },
+    "Velk\u00e1 \u0160t\u00e1hle": {
+        "address": {
+            "street": "49",
+            "zip": "793 51",
+            "city": "Velk\u00e1 \u0160t\u00e1hle",
+            "district": "Velk\u00e1 \u0160t\u00e1hle"
+        },
+        "ds_id": "nbmbu9w"
+    },
+    "Velk\u00e1 Turn\u00e1": {
+        "address": {
+            "street": "41",
+            "zip": "386 01",
+            "city": "Velk\u00e1 Turn\u00e1",
+            "district": "Velk\u00e1 Turn\u00e1"
+        },
+        "ds_id": "zgtawxp"
+    },
+    "Velk\u00e9 Albrechtice": {
+        "address": {
+            "street": "119",
+            "zip": "742 91",
+            "city": "Velk\u00e9 Albrechtice",
+            "district": "Velk\u00e9 Albrechtice"
+        },
+        "ds_id": "ixsbkfh"
+    },
+    "Velk\u00e9 B\u0159ezno": {
+        "address": {
+            "street": "D\u011b\u010d\u00ednsk\u00e1 211",
+            "zip": "403 23",
+            "city": "Velk\u00e9 B\u0159ezno",
+            "district": "Velk\u00e9 B\u0159ezno"
+        },
+        "ds_id": "kmebaq8"
+    },
+    "Velk\u00e9 Heraltice": {
+        "address": {
+            "street": "Opavsk\u00e1 142",
+            "zip": "747 75",
+            "city": "Velk\u00e9 Heraltice",
+            "district": "Velk\u00e9 Heraltice"
+        },
+        "ds_id": "22ubapj"
+    },
+    "Velk\u00e9 Host\u011br\u00e1dky": {
+        "address": {
+            "street": "66",
+            "zip": "691 74",
+            "city": "Velk\u00e9 Host\u011br\u00e1dky",
+            "district": "Velk\u00e9 Host\u011br\u00e1dky"
+        },
+        "ds_id": "pjmbnns"
+    },
+    "Velk\u00e9 Ho\u0161tice": {
+        "address": {
+            "street": "Z\u00e1meck\u00e1 195",
+            "zip": "747 31",
+            "city": "Velk\u00e9 Ho\u0161tice",
+            "district": "Velk\u00e9 Ho\u0161tice"
+        },
+        "ds_id": "c4zazcz"
+    },
+    "Velk\u00e9 Hyd\u010dice": {
+        "address": {
+            "street": "18",
+            "zip": "341 01",
+            "city": "Velk\u00e9 Hyd\u010dice",
+            "district": "Velk\u00e9 Hyd\u010dice"
+        },
+        "ds_id": "mcabidb"
+    },
+    "Velk\u00e9 Chvojno": {
+        "address": {
+            "street": "55",
+            "zip": "403 34",
+            "city": "Velk\u00e9 Chvojno",
+            "district": "Velk\u00e9 Chvojno"
+        },
+        "ds_id": "mjvbqd4"
+    },
+    "Velk\u00e9 Janovice": {
+        "address": {
+            "street": "47",
+            "zip": "593 01",
+            "city": "Velk\u00e9 Janovice",
+            "district": "Velk\u00e9 Janovice"
+        },
+        "ds_id": "69ubpks"
+    },
+    "Velk\u00e9 Karlovice": {
+        "address": {
+            "street": "1",
+            "zip": "756 06",
+            "city": "Velk\u00e9 Karlovice",
+            "district": "Velk\u00e9 Karlovice"
+        },
+        "ds_id": "pinb3s5"
+    },
+    "Velk\u00e9 Kun\u011btice": {
+        "address": {
+            "street": "146",
+            "zip": "790 52",
+            "city": "Velk\u00e9 Kun\u011btice",
+            "district": "Velk\u00e9 Kun\u011btice"
+        },
+        "ds_id": "tdaa7nw"
+    },
+    "Velk\u00e9 Losiny": {
+        "address": {
+            "street": "Rud\u00e9 arm\u00e1dy 321",
+            "zip": "788 15",
+            "city": "Velk\u00e9 Losiny",
+            "district": "Velk\u00e9 Losiny"
+        },
+        "ds_id": "hgabapt"
+    },
+    "Velk\u00e9 Popovice": {
+        "address": {
+            "street": "Ringhofferova 1",
+            "zip": "251 69",
+            "city": "Velk\u00e9 Popovice",
+            "district": "Velk\u00e9 Popovice"
+        },
+        "ds_id": "xwbb6w4"
+    },
+    "Velk\u00e9 P\u0159\u00edlepy": {
+        "address": {
+            "street": "Pra\u017esk\u00e1 162",
+            "zip": "252 64",
+            "city": "Velk\u00e9 P\u0159\u00edlepy",
+            "district": "Velk\u00e9 P\u0159\u00edlepy"
+        },
+        "ds_id": "qj4efnb"
+    },
+    "Velk\u00e9 P\u0159\u00edto\u010dno": {
+        "address": {
+            "street": "V\u00edt\u011bzn\u00e1 16",
+            "zip": "273 51",
+            "city": "Velk\u00e9 P\u0159\u00edto\u010dno",
+            "district": "Velk\u00e9 P\u0159\u00edto\u010dno"
+        },
+        "ds_id": "himbzd9"
+    },
+    "Velk\u00e9 Tresn\u00e9": {
+        "address": {
+            "street": "1",
+            "zip": "592 65",
+            "city": "Velk\u00e9 Tresn\u00e9",
+            "district": "Velk\u00e9 Tresn\u00e9"
+        },
+        "ds_id": "wgjbpkw"
+    },
+    "Velk\u00e9 V\u0161elisy": {
+        "address": {
+            "street": "81",
+            "zip": "294 27",
+            "city": "Velk\u00e9 V\u0161elisy",
+            "district": "Velk\u00e9 V\u0161elisy"
+        },
+        "ds_id": "p4nbirk"
+    },
+    "Velk\u00e9 \u017dernoseky": {
+        "address": {
+            "street": "63",
+            "zip": "412 01",
+            "city": "Velk\u00e9 \u017dernoseky",
+            "district": "Velk\u00e9 \u017dernoseky"
+        },
+        "ds_id": "wetbu6g"
+    },
+    "Velk\u00fd Beranov": {
+        "address": {
+            "street": "58",
+            "zip": "588 21",
+            "city": "Velk\u00fd Beranov",
+            "district": "Velk\u00fd Beranov"
+        },
+        "ds_id": "aasbgvb"
+    },
+    "Velk\u00fd Bor": {
+        "address": {
+            "street": "71",
+            "zip": "341 01",
+            "city": "Velk\u00fd Bor",
+            "district": "Velk\u00fd Bor"
+        },
+        "ds_id": "iyuauy4"
+    },
+    "Velk\u00fd Borek": {
+        "address": {
+            "street": "Vrutick\u00e1 20",
+            "zip": "277 31",
+            "city": "Velk\u00fd Borek",
+            "district": "Velk\u00fd Borek"
+        },
+        "ds_id": "33cajrm"
+    },
+    "Velk\u00fd Chlumec": {
+        "address": {
+            "street": "72",
+            "zip": "267 24",
+            "city": "Velk\u00fd Chlumec",
+            "district": "Mal\u00fd Chlumec"
+        },
+        "ds_id": "wtuavsd"
+    },
+    "Velk\u00fd Karlov": {
+        "address": {
+            "street": "68",
+            "zip": "671 28",
+            "city": "Velk\u00fd Karlov",
+            "district": "Velk\u00fd Karlov"
+        },
+        "ds_id": "swva289"
+    },
+    "Velk\u00fd Luh": {
+        "address": {
+            "street": "22",
+            "zip": "351 34",
+            "city": "Velk\u00fd Luh",
+            "district": "Velk\u00fd Luh"
+        },
+        "ds_id": "xkjamiv"
+    },
+    "Velk\u00fd Malahov": {
+        "address": {
+            "street": "28",
+            "zip": "346 01",
+            "city": "Velk\u00fd Malahov",
+            "district": "Velk\u00fd Malahov"
+        },
+        "ds_id": "5e6bvbk"
+    },
+    "Velk\u00fd O\u0159echov": {
+        "address": {
+            "street": "208",
+            "zip": "763 07",
+            "city": "Velk\u00fd O\u0159echov",
+            "district": "Velk\u00fd O\u0159echov"
+        },
+        "ds_id": "nftb32p"
+    },
+    "Velk\u00fd Osek": {
+        "address": {
+            "street": "Revolu\u010dn\u00ed 36",
+            "zip": "281 51",
+            "city": "Velk\u00fd Osek",
+            "district": "Velk\u00fd Osek"
+        },
+        "ds_id": "a52bam3"
+    },
+    "Velk\u00fd Rybn\u00edk": {
+        "address": {
+            "street": "58",
+            "zip": "393 01",
+            "city": "Velk\u00fd Rybn\u00edk",
+            "district": "Velk\u00fd Rybn\u00edk"
+        },
+        "ds_id": "xckbqwe"
+    },
+    "Velk\u00fd T\u0159ebe\u0161ov": {
+        "address": {
+            "street": "2",
+            "zip": "552 03",
+            "city": "Velk\u00fd T\u0159ebe\u0161ov",
+            "district": "Velk\u00fd T\u0159ebe\u0161ov"
+        },
+        "ds_id": "zgqa9as"
+    },
+    "Velk\u00fd T\u00fdnec": {
+        "address": {
+            "street": "Z\u00e1meck\u00e1 35",
+            "zip": "783 72",
+            "city": "Velk\u00fd T\u00fdnec",
+            "district": "Velk\u00fd T\u00fdnec"
+        },
+        "ds_id": "uqkbams"
+    },
+    "Velk\u00fd Valtinov": {
+        "address": {
+            "street": "46",
+            "zip": "471 25",
+            "city": "Velk\u00fd Valtinov",
+            "district": "Velk\u00fd Valtinov"
+        },
+        "ds_id": "bb6an66"
+    },
+    "V\u011blopol\u00ed": {
+        "address": {
+            "street": "48",
+            "zip": "739 59",
+            "city": "V\u011blopol\u00ed",
+            "district": "V\u011blopol\u00ed"
+        },
+        "ds_id": "feva7mp"
+    },
+    "Velt\u011b\u017ee": {
+        "address": {
+            "street": "Peruck\u00e1 73",
+            "zip": "440 01",
+            "city": "Velt\u011b\u017ee",
+            "district": "Velt\u011b\u017ee"
+        },
+        "ds_id": "jhkbp45"
+    },
+    "Veltruby": {
+        "address": {
+            "street": "Sportovn\u00ed 239",
+            "zip": "280 02",
+            "city": "Veltruby",
+            "district": "Veltruby"
+        },
+        "ds_id": "v68bn6r"
+    },
+    "Vendol\u00ed": {
+        "address": {
+            "street": "103",
+            "zip": "569 14",
+            "city": "Vendol\u00ed",
+            "district": "Vendol\u00ed"
+        },
+        "ds_id": "6i3a5kn"
+    },
+    "Vendryn\u011b": {
+        "address": {
+            "street": "500",
+            "zip": "739 94",
+            "city": "Vendryn\u011b",
+            "district": "Vendryn\u011b"
+        },
+        "ds_id": "5deb2v4"
+    },
+    "Vep\u0159\u00edkov": {
+        "address": {
+            "street": "53",
+            "zip": "583 01",
+            "city": "Vep\u0159\u00edkov",
+            "district": "Vep\u0159\u00edkov"
+        },
+        "ds_id": "gazawk5"
+    },
+    "Vep\u0159ov\u00e1": {
+        "address": {
+            "street": "36",
+            "zip": "592 11",
+            "city": "Vep\u0159ov\u00e1",
+            "district": "Vep\u0159ov\u00e1"
+        },
+        "ds_id": "p4uav3g"
+    },
+    "Verm\u011b\u0159ovice": {
+        "address": {
+            "street": "14",
+            "zip": "561 52",
+            "city": "Verm\u011b\u0159ovice",
+            "district": "Verm\u011b\u0159ovice"
+        },
+        "ds_id": "b4pa3ks"
+    },
+    "Vern\u00ed\u0159ovice": {
+        "address": {
+            "street": "53",
+            "zip": "788 15",
+            "city": "Vern\u00ed\u0159ovice",
+            "district": "Vern\u00ed\u0159ovice"
+        },
+        "ds_id": "wbpawwa"
+    },
+    "V\u011brovany": {
+        "address": {
+            "street": "325",
+            "zip": "783 75",
+            "city": "V\u011brovany",
+            "district": "Rakodavy"
+        },
+        "ds_id": "pkebv8j"
+    },
+    "Veru\u0161i\u010dky": {
+        "address": {
+            "street": "5",
+            "zip": "364 52",
+            "city": "Veru\u0161i\u010dky",
+            "district": "Veru\u0161i\u010dky"
+        },
+        "ds_id": "cwaaqjx"
+    },
+    "Ve\u0159ovice": {
+        "address": {
+            "street": "670",
+            "zip": "742 73",
+            "city": "Ve\u0159ovice",
+            "district": "Ve\u0159ovice"
+        },
+        "ds_id": "rjgbakd"
+    },
+    "Vesce": {
+        "address": {
+            "street": "33",
+            "zip": "392 01",
+            "city": "Vesce",
+            "district": "Vesce"
+        },
+        "ds_id": "wp3b7xr"
+    },
+    "Vesel\u00e1": {
+        "address": {
+            "street": "31",
+            "zip": "394 70",
+            "city": "Vesel\u00e1",
+            "district": "Vesel\u00e1"
+        },
+        "ds_id": "pjtazyn"
+    },
+    "Vesel\u00e9": {
+        "address": {
+            "street": "153",
+            "zip": "405 02",
+            "city": "Vesel\u00e9",
+            "district": "Vesel\u00e9"
+        },
+        "ds_id": "78patvb"
+    },
+    "Vesel\u00ed": {
+        "address": {
+            "street": "68",
+            "zip": "535 01",
+            "city": "Vesel\u00ed",
+            "district": "Vesel\u00ed"
+        },
+        "ds_id": "q83bzmp"
+    },
+    "Veselice": {
+        "address": {
+            "street": "43",
+            "zip": "294 04",
+            "city": "Veselice",
+            "district": "Veselice"
+        },
+        "ds_id": "nuxasbi"
+    },
+    "Vesel\u00ed\u010dko": {
+        "address": {
+            "street": "24",
+            "zip": "398 42",
+            "city": "Vesel\u00ed\u010dko",
+            "district": "Vesel\u00ed\u010dko"
+        },
+        "ds_id": "aq4bxn5"
+    },
+    "Vesel\u00fd \u017d\u010f\u00e1r": {
+        "address": {
+            "street": "204",
+            "zip": "580 01",
+            "city": "Vesel\u00fd \u017d\u010f\u00e1r",
+            "district": "Vesel\u00fd \u017d\u010f\u00e1r"
+        },
+        "ds_id": "8kga8nu"
+    },
+    "Vestec": {
+        "address": {
+            "street": "26",
+            "zip": "289 33",
+            "city": "Vestec",
+            "district": "Vestec"
+        },
+        "ds_id": "niqaunn"
+    },
+    "V\u011bst\u00edn": {
+        "address": {
+            "street": "26",
+            "zip": "592 65",
+            "city": "V\u011bst\u00edn",
+            "district": "V\u011bst\u00edn"
+        },
+        "ds_id": "mpabpk2"
+    },
+    "Ves Tou\u0161kov": {
+        "address": {
+            "street": "17",
+            "zip": "333 01",
+            "city": "Ves Tou\u0161kov",
+            "district": "Ves Tou\u0161kov"
+        },
+        "ds_id": "qvyb6r3"
+    },
+    "V\u011b\u0161\u00edn": {
+        "address": {
+            "street": "3",
+            "zip": "262 43",
+            "city": "V\u011b\u0161\u00edn",
+            "district": "V\u011b\u0161\u00edn"
+        },
+        "ds_id": "j6wbgmn"
+    },
+    "V\u011bte\u0159ov": {
+        "address": {
+            "street": "207",
+            "zip": "697 01",
+            "city": "V\u011bte\u0159ov",
+            "district": "V\u011bte\u0159ov"
+        },
+        "ds_id": "2dcb6u7"
+    },
+    "V\u011btru\u0161ice": {
+        "address": {
+            "street": "Vltavsk\u00e1 14",
+            "zip": "250 67",
+            "city": "V\u011btru\u0161ice",
+            "district": "V\u011btru\u0161ice"
+        },
+        "ds_id": "4pebqfq"
+    },
+    "V\u011bt\u0159kovice": {
+        "address": {
+            "street": "197",
+            "zip": "747 43",
+            "city": "V\u011bt\u0159kovice",
+            "district": "V\u011bt\u0159kovice"
+        },
+        "ds_id": "i27bjnh"
+    },
+    "Vev\u010dice": {
+        "address": {
+            "street": "10",
+            "zip": "671 53",
+            "city": "Vev\u010dice",
+            "district": "Vev\u010dice"
+        },
+        "ds_id": "q5rbp3k"
+    },
+    "Veversk\u00e9 Kn\u00ednice": {
+        "address": {
+            "street": "260",
+            "zip": "664 81",
+            "city": "Veversk\u00e9 Kn\u00ednice",
+            "district": "Veversk\u00e9 Kn\u00ednice"
+        },
+        "ds_id": "zkbajti"
+    },
+    "V\u011b\u017e": {
+        "address": {
+            "street": "17",
+            "zip": "582 56",
+            "city": "V\u011b\u017e",
+            "district": "V\u011b\u017e"
+        },
+        "ds_id": "2n3avw5"
+    },
+    "V\u011b\u017eky": {
+        "address": {
+            "street": "17",
+            "zip": "751 19",
+            "city": "V\u011b\u017eky",
+            "district": "V\u011b\u017eky"
+        },
+        "ds_id": "6njasgh"
+    },
+    "V\u011b\u017en\u00e1": {
+        "address": {
+            "street": "1",
+            "zip": "395 01",
+            "city": "V\u011b\u017en\u00e1",
+            "district": "V\u011b\u017en\u00e1"
+        },
+        "ds_id": "jscauac"
+    },
+    "V\u011b\u017enice": {
+        "address": {
+            "street": "49",
+            "zip": "588 27",
+            "city": "V\u011b\u017enice",
+            "district": "V\u011b\u017enice"
+        },
+        "ds_id": "h7fajbq"
+    },
+    "V\u011b\u017eni\u010dka": {
+        "address": {
+            "street": "39",
+            "zip": "588 13",
+            "city": "V\u011b\u017eni\u010dka",
+            "district": "V\u011b\u017eni\u010dka"
+        },
+        "ds_id": "gx8azgq"
+    },
+    "V\u011b\u017eovat\u00e1 Pl\u00e1n\u011b": {
+        "address": {
+            "street": "8",
+            "zip": "382 32",
+            "city": "V\u011b\u017eovat\u00e1 Pl\u00e1n\u011b",
+            "district": "V\u011b\u017eovat\u00e1 Pl\u00e1n\u011b"
+        },
+        "ds_id": "848b3sv"
+    },
+    "Vchynice": {
+        "address": {
+            "street": "46",
+            "zip": "410 02",
+            "city": "Vchynice",
+            "district": "Vchynice"
+        },
+        "ds_id": "5wfbwyw"
+    },
+    "V\u00edcem\u011b\u0159ice": {
+        "address": {
+            "street": "26",
+            "zip": "798 26",
+            "city": "V\u00edcem\u011b\u0159ice",
+            "district": "V\u00edcem\u011b\u0159ice"
+        },
+        "ds_id": "u2qbimr"
+    },
+    "V\u00edcemil": {
+        "address": {
+            "street": "21",
+            "zip": "378 21",
+            "city": "V\u00edcemil",
+            "district": "V\u00edcemil"
+        },
+        "ds_id": "77fb72v"
+    },
+    "V\u00edcenice": {
+        "address": {
+            "street": "31",
+            "zip": "676 02",
+            "city": "V\u00edcenice",
+            "district": "V\u00edcenice"
+        },
+        "ds_id": "695aqjk"
+    },
+    "V\u00edcenice u N\u00e1m\u011b\u0161t\u011b nad Oslavou": {
+        "address": {
+            "street": "125",
+            "zip": "675 71",
+            "city": "V\u00edcenice u N\u00e1m\u011b\u0161t\u011b nad Oslavou",
+            "district": "V\u00edcenice u N\u00e1m\u011b\u0161t\u011b nad Oslavou"
+        },
+        "ds_id": "64sbjka"
+    },
+    "V\u00edcov": {
+        "address": {
+            "street": "46",
+            "zip": "798 03",
+            "city": "V\u00edcov",
+            "district": "V\u00edcov"
+        },
+        "ds_id": "ubrbmbq"
+    },
+    "Vid\u010de": {
+        "address": {
+            "street": "96",
+            "zip": "756 53",
+            "city": "Vid\u010de",
+            "district": "Vid\u010de"
+        },
+        "ds_id": "8qjbrsm"
+    },
+    "V\u00edde\u0148": {
+        "address": {
+            "street": "40",
+            "zip": "594 01",
+            "city": "V\u00edde\u0148",
+            "district": "V\u00edde\u0148"
+        },
+        "ds_id": "fv3bjm4"
+    },
+    "Vidice": {
+        "address": {
+            "street": "43",
+            "zip": "346 01",
+            "city": "Vidice",
+            "district": "Vidice"
+        },
+        "ds_id": "j4ga4ac"
+    },
+    "Vidim": {
+        "address": {
+            "street": "4",
+            "zip": "277 21",
+            "city": "Vidim",
+            "district": "Vidim"
+        },
+        "ds_id": "w6jbz2a"
+    },
+    "Vidlat\u00e1 Se\u010d": {
+        "address": {
+            "street": "86",
+            "zip": "570 01",
+            "city": "Vidlat\u00e1 Se\u010d",
+            "district": "Vidlat\u00e1 Se\u010d"
+        },
+        "ds_id": "fcca5me"
+    },
+    "Vidon\u00edn": {
+        "address": {
+            "street": "36",
+            "zip": "594 57",
+            "city": "Vidon\u00edn",
+            "district": "Vidon\u00edn"
+        },
+        "ds_id": "brka8q7"
+    },
+    "Vidov": {
+        "address": {
+            "street": "51",
+            "zip": "370 07",
+            "city": "Vidov",
+            "district": "Vidov"
+        },
+        "ds_id": "uj8bqi8"
+    },
+    "Vigantice": {
+        "address": {
+            "street": "203",
+            "zip": "756 61",
+            "city": "Vigantice",
+            "district": "Vigantice"
+        },
+        "ds_id": "cumajse"
+    },
+    "Vikantice": {
+        "address": {
+            "street": "131",
+            "zip": "788 25",
+            "city": "Vikantice",
+            "district": "Vikantice"
+        },
+        "ds_id": "ffuashb"
+    },
+    "Vik\u00fd\u0159ovice": {
+        "address": {
+            "street": "Petrovsk\u00e1 168",
+            "zip": "788 13",
+            "city": "Vik\u00fd\u0159ovice",
+            "district": "Vik\u00fd\u0159ovice"
+        },
+        "ds_id": "fvybvy6"
+    },
+    "V\u00edlanec": {
+        "address": {
+            "street": "43",
+            "zip": "588 35",
+            "city": "V\u00edlanec",
+            "district": "V\u00edlanec"
+        },
+        "ds_id": "hema5wc"
+    },
+    "Vil\u00e9movice": {
+        "address": {
+            "street": "18",
+            "zip": "679 06",
+            "city": "Vil\u00e9movice",
+            "district": "Vil\u00e9movice"
+        },
+        "ds_id": "dswbm5e"
+    },
+    "Vilice": {
+        "address": {
+            "street": "66",
+            "zip": "391 43",
+            "city": "Vilice",
+            "district": "Vilice"
+        },
+        "ds_id": "we7ajs7"
+    },
+    "Vinary": {
+        "address": {
+            "street": "67",
+            "zip": "538 63",
+            "city": "Vinary",
+            "district": "Vinary"
+        },
+        "ds_id": "p5ma5ma"
+    },
+    "Vina\u0159e": {
+        "address": {
+            "street": "44",
+            "zip": "286 01",
+            "city": "Vina\u0159e",
+            "district": "Vina\u0159e"
+        },
+        "ds_id": "terby5j"
+    },
+    "Vina\u0159ice": {
+        "address": {
+            "street": "10",
+            "zip": "267 01",
+            "city": "Vina\u0159ice",
+            "district": "Vina\u0159ice"
+        },
+        "ds_id": "sjhb7du"
+    },
+    "Vincencov": {
+        "address": {
+            "street": "63",
+            "zip": "798 04",
+            "city": "Vincencov",
+            "district": "Vincencov"
+        },
+        "ds_id": "iuabxjk"
+    },
+    "Vinec": {
+        "address": {
+            "street": "49",
+            "zip": "293 01",
+            "city": "Vinec",
+            "district": "Vinec"
+        },
+        "ds_id": "rabamg3"
+    },
+    "Vini\u010dn\u00e9 \u0160umice": {
+        "address": {
+            "street": "23",
+            "zip": "664 06",
+            "city": "Vini\u010dn\u00e9 \u0160umice",
+            "district": "Vini\u010dn\u00e9 \u0160umice"
+        },
+        "ds_id": "6zabwqd"
+    },
+    "Vint\u00ed\u0159ov": {
+        "address": {
+            "street": "62",
+            "zip": "357 35",
+            "city": "Vint\u00ed\u0159ov",
+            "district": "Vint\u00ed\u0159ov"
+        },
+        "ds_id": "mmtav5e"
+    },
+    "V\u00edska": {
+        "address": {
+            "street": "50",
+            "zip": "583 01",
+            "city": "V\u00edska",
+            "district": "V\u00edska"
+        },
+        "ds_id": "c2da9pt"
+    },
+    "V\u00edska u Jev\u00ed\u010dka": {
+        "address": {
+            "street": "3",
+            "zip": "569 43",
+            "city": "V\u00edska u Jev\u00ed\u010dka",
+            "district": "V\u00edska u Jev\u00ed\u010dka"
+        },
+        "ds_id": "ywwa5m6"
+    },
+    "V\u00edsky": {
+        "address": {
+            "street": "1",
+            "zip": "338 43",
+            "city": "V\u00edsky",
+            "district": "V\u00edsky"
+        },
+        "ds_id": "iu9bifa"
+    },
+    "Vi\u0161\u0148ov\u00e1": {
+        "address": {
+            "street": "153",
+            "zip": "262 61",
+            "city": "Vi\u0161\u0148ov\u00e1",
+            "district": "Vi\u0161\u0148ov\u00e1"
+        },
+        "ds_id": "cu2b4qj"
+    },
+    "V\u00edtanov": {
+        "address": {
+            "street": "126",
+            "zip": "539 01",
+            "city": "V\u00edtanov",
+            "district": "V\u00edtanov"
+        },
+        "ds_id": "7fpb263"
+    },
+    "Vit\u010dice": {
+        "address": {
+            "street": "31",
+            "zip": "798 27",
+            "city": "Vit\u010dice",
+            "district": "Vit\u010dice"
+        },
+        "ds_id": "p85ash7"
+    },
+    "V\u00edt\u011bjeves": {
+        "address": {
+            "street": "65",
+            "zip": "569 06",
+            "city": "V\u00edt\u011bjeves",
+            "district": "V\u00edt\u011bjeves"
+        },
+        "ds_id": "9p7a5m3"
+    },
+    "Vit\u011bjovice": {
+        "address": {
+            "street": "32",
+            "zip": "384 27",
+            "city": "Vit\u011bjovice",
+            "district": "Vit\u011bjovice"
+        },
+        "ds_id": "637apcd"
+    },
+    "V\u00edt\u011bzn\u00e1": {
+        "address": {
+            "street": "123",
+            "zip": "544 62",
+            "city": "V\u00edt\u011bzn\u00e1",
+            "district": "Kocl\u00e9\u0159ov"
+        },
+        "ds_id": "v83a696"
+    },
+    "Vitice": {
+        "address": {
+            "street": "95",
+            "zip": "281 06",
+            "city": "Vitice",
+            "district": "Vitice"
+        },
+        "ds_id": "jf8akaf"
+    },
+    "Vit\u00edn": {
+        "address": {
+            "street": "75",
+            "zip": "373 63",
+            "city": "Vit\u00edn",
+            "district": "Vit\u00edn"
+        },
+        "ds_id": "jvrathc"
+    },
+    "Vitin\u011bves": {
+        "address": {
+            "street": "110",
+            "zip": "506 01",
+            "city": "Vitin\u011bves",
+            "district": "Vitin\u011bves"
+        },
+        "ds_id": "m9ybqge"
+    },
+    "V\u00edtkovice": {
+        "address": {
+            "street": "243",
+            "zip": "512 38",
+            "city": "V\u00edtkovice",
+            "district": "V\u00edtkovice"
+        },
+        "ds_id": "7mtbfp5"
+    },
+    "V\u00edtonice": {
+        "address": {
+            "street": "82",
+            "zip": "768 61",
+            "city": "V\u00edtonice",
+            "district": "V\u00edtonice"
+        },
+        "ds_id": "jukbvbt"
+    },
+    "Vi\u017eina": {
+        "address": {
+            "street": "36",
+            "zip": "267 24",
+            "city": "Vi\u017eina",
+            "district": "Vi\u017eina"
+        },
+        "ds_id": "tugbjnb"
+    },
+    "Vla\u010dice": {
+        "address": {
+            "street": "38",
+            "zip": "286 01",
+            "city": "Vla\u010dice",
+            "district": "V\u00fd\u010dapy"
+        },
+        "ds_id": "r7zatj6"
+    },
+    "Vlachova Lhota": {
+        "address": {
+            "street": "68",
+            "zip": "766 01",
+            "city": "Vlachova Lhota",
+            "district": "Vlachova Lhota"
+        },
+        "ds_id": "ffgb3vj"
+    },
+    "Vlachovice": {
+        "address": {
+            "street": "20",
+            "zip": "592 31",
+            "city": "Vlachovice",
+            "district": "Vlachovice"
+        },
+        "ds_id": "u3sas6c"
+    },
+    "Vlasatice": {
+        "address": {
+            "street": "149",
+            "zip": "691 30",
+            "city": "Vlasatice",
+            "district": "Vlasatice"
+        },
+        "ds_id": "annbjbr"
+    },
+    "Vlastec": {
+        "address": {
+            "street": "48",
+            "zip": "397 01",
+            "city": "Vlastec",
+            "district": "Vlastec"
+        },
+        "ds_id": "tnma744"
+    },
+    "Vlast\u011bjovice": {
+        "address": {
+            "street": "4",
+            "zip": "285 23",
+            "city": "Vlast\u011bjovice",
+            "district": "Vlast\u011bjovice"
+        },
+        "ds_id": "e7ybjis"
+    },
+    "Vlastibo\u0159": {
+        "address": {
+            "street": "45",
+            "zip": "392 01",
+            "city": "Vlastibo\u0159",
+            "district": "Vlastibo\u0159"
+        },
+        "ds_id": "aypb5nt"
+    },
+    "Vlastibo\u0159ice": {
+        "address": {
+            "street": "23",
+            "zip": "463 44",
+            "city": "Vlastibo\u0159ice",
+            "district": "Vlastibo\u0159ice"
+        },
+        "ds_id": "de2bjp2"
+    },
+    "Vlastislav": {
+        "address": {
+            "street": "8",
+            "zip": "411 14",
+            "city": "Vlastislav",
+            "district": "Vlastislav"
+        },
+        "ds_id": "j4jarx9"
+    },
+    "Vl\u010dat\u00edn": {
+        "address": {
+            "street": "1",
+            "zip": "675 05",
+            "city": "Vl\u010dat\u00edn",
+            "district": "Vl\u010dat\u00edn"
+        },
+        "ds_id": "fhea9mw"
+    },
+    "Vl\u010det\u00ednec": {
+        "address": {
+            "street": "32",
+            "zip": "378 42",
+            "city": "Vl\u010det\u00ednec",
+            "district": "Vl\u010det\u00ednec"
+        },
+        "ds_id": "ewibvfn"
+    },
+    "Vl\u010deves": {
+        "address": {
+            "street": "50",
+            "zip": "392 01",
+            "city": "Vl\u010deves",
+            "district": "Vl\u010deves"
+        },
+        "ds_id": "qsjb7i3"
+    },
+    "Vl\u010d\u00ed": {
+        "address": {
+            "street": "13",
+            "zip": "334 01",
+            "city": "Vl\u010d\u00ed",
+            "district": "Vl\u010d\u00ed"
+        },
+        "ds_id": "fidauhi"
+    },
+    "Vl\u010dice": {
+        "address": {
+            "street": "95",
+            "zip": "790 65",
+            "city": "Vl\u010dice",
+            "district": "Vl\u010dice"
+        },
+        "ds_id": "64yaww6"
+    },
+    "Vl\u010d\u00ed Hab\u0159ina": {
+        "address": {
+            "street": "104",
+            "zip": "533 41",
+            "city": "Vl\u010d\u00ed Hab\u0159ina",
+            "district": "Vl\u010d\u00ed Hab\u0159ina"
+        },
+        "ds_id": "ihga5nt"
+    },
+    "Vl\u010dkov": {
+        "address": {
+            "street": "42",
+            "zip": "560 02",
+            "city": "Vl\u010dkov",
+            "district": "Vl\u010dkov"
+        },
+        "ds_id": "k9ua523"
+    },
+    "Vl\u010dnov": {
+        "address": {
+            "street": "124",
+            "zip": "687 61",
+            "city": "Vl\u010dnov",
+            "district": "Vl\u010dnov"
+        },
+        "ds_id": "nx3bqjq"
+    },
+    "Vl\u010dtejn": {
+        "address": {
+            "street": "34",
+            "zip": "332 04",
+            "city": "Vl\u010dtejn",
+            "district": "Vl\u010dtejn"
+        },
+        "ds_id": "jj5br4e"
+    },
+    "Vlkan\u010dice": {
+        "address": {
+            "street": "18",
+            "zip": "281 63",
+            "city": "Vlkan\u010dice",
+            "district": "Vlkan\u010dice"
+        },
+        "ds_id": "emda8bd"
+    },
+    "Vlkane\u010d": {
+        "address": {
+            "street": "20",
+            "zip": "285 64",
+            "city": "Vlkane\u010d",
+            "district": "Vlkane\u010d"
+        },
+        "ds_id": "rk2brq2"
+    },
+    "Vlkanov": {
+        "address": {
+            "street": "15",
+            "zip": "582 91",
+            "city": "Vlkanov",
+            "district": "Vlkanov"
+        },
+        "ds_id": "kx8b4m5"
+    },
+    "Vlkava": {
+        "address": {
+            "street": "Boleslavsk\u00e1 147",
+            "zip": "294 43",
+            "city": "Vlkava",
+            "district": "Vlkava"
+        },
+        "ds_id": "c9aavsm"
+    },
+    "Vlko\u0161": {
+        "address": {
+            "street": "Ke Ml\u00fdnu 206",
+            "zip": "751 19",
+            "city": "Vlko\u0161",
+            "district": "Vlko\u0161"
+        },
+        "ds_id": "ez5a7yi"
+    },
+    "Vlkov": {
+        "address": {
+            "street": "104",
+            "zip": "594 53",
+            "city": "Vlkov",
+            "district": "Vlkov"
+        },
+        "ds_id": "v5uajcz"
+    },
+    "Vlkovice": {
+        "address": {
+            "street": "21",
+            "zip": "353 01",
+            "city": "Vlkovice",
+            "district": "Vlkovice"
+        },
+        "ds_id": "uw5b74y"
+    },
+    "Vlkov pod O\u0161kobrhem": {
+        "address": {
+            "street": "42",
+            "zip": "289 04",
+            "city": "Vlkov pod O\u0161kobrhem",
+            "district": "Vlkov pod O\u0161kobrhem"
+        },
+        "ds_id": "zktbsek"
+    },
+    "Vlksice": {
+        "address": {
+            "street": "4",
+            "zip": "399 01",
+            "city": "Vlksice",
+            "district": "Vlksice"
+        },
+        "ds_id": "6ysap5d"
+    },
+    "Vnorovy": {
+        "address": {
+            "street": "Hlavn\u00ed 750",
+            "zip": "696 61",
+            "city": "Vnorovy",
+            "district": "Vnorovy"
+        },
+        "ds_id": "i88baim"
+    },
+    "Vod\u011brady": {
+        "address": {
+            "street": "77",
+            "zip": "566 01",
+            "city": "Vod\u011brady",
+            "district": "Vod\u011brady"
+        },
+        "ds_id": "j7va3hc"
+    },
+    "Vodice": {
+        "address": {
+            "street": "20",
+            "zip": "391 53",
+            "city": "Vodice",
+            "district": "Vodice"
+        },
+        "ds_id": "kzgaqgh"
+    },
+    "Vodochody": {
+        "address": {
+            "street": "\u0160kolsk\u00e1 59",
+            "zip": "250 69",
+            "city": "Vodochody",
+            "district": "Vodochody"
+        },
+        "ds_id": "fwcakku"
+    },
+    "Vodranty": {
+        "address": {
+            "street": "25",
+            "zip": "286 01",
+            "city": "Vodranty",
+            "district": "Vodranty"
+        },
+        "ds_id": "7cnasjt"
+    },
+    "Vodslivy": {
+        "address": {
+            "street": "6",
+            "zip": "257 24",
+            "city": "Vodslivy",
+            "district": "Vodslivy"
+        },
+        "ds_id": "pwta67c"
+    },
+    "Vohan\u010dice": {
+        "address": {
+            "street": "29",
+            "zip": "666 01",
+            "city": "Vohan\u010dice",
+            "district": "Vohan\u010dice"
+        },
+        "ds_id": "4sza2yj"
+    },
+    "Vochov": {
+        "address": {
+            "street": "46",
+            "zip": "330 23",
+            "city": "Vochov",
+            "district": "Vochov"
+        },
+        "ds_id": "mhcbndt"
+    },
+    "Vojkov": {
+        "address": {
+            "street": "16",
+            "zip": "257 53",
+            "city": "Vojkov",
+            "district": "Vojkov"
+        },
+        "ds_id": "ev2anun"
+    },
+    "Vojkovice": {
+        "address": {
+            "street": "57",
+            "zip": "362 73",
+            "city": "Vojkovice",
+            "district": "Vojkovice"
+        },
+        "ds_id": "bhtbpej"
+    },
+    "Vojn\u00edkov": {
+        "address": {
+            "street": "",
+            "zip": "397 01",
+            "city": "Vojn\u00edkov",
+            "district": "Vojn\u00edkov"
+        },
+        "ds_id": "95wap6s"
+    },
+    "Vojslavice": {
+        "address": {
+            "street": "40",
+            "zip": "396 01",
+            "city": "Vojslavice",
+            "district": "Vojslavice"
+        },
+        "ds_id": "y6panxp"
+    },
+    "Vojtanov": {
+        "address": {
+            "street": "Horn\u00ed Vojtanov 40",
+            "zip": "351 34",
+            "city": "Vojtanov",
+            "district": "Vojtanov"
+        },
+        "ds_id": "mrqb3xd"
+    },
+    "Vojt\u011bchov": {
+        "address": {
+            "street": "120",
+            "zip": "539 01",
+            "city": "Vojt\u011bchov",
+            "district": "Vojt\u011bchov"
+        },
+        "ds_id": "tara5np"
+    },
+    "Vokov": {
+        "address": {
+            "street": "38",
+            "zip": "393 01",
+            "city": "Vokov",
+            "district": "Vokov"
+        },
+        "ds_id": "573aydx"
+    },
+    "Volanice": {
+        "address": {
+            "street": "130",
+            "zip": "507 03",
+            "city": "Volanice",
+            "district": "Volanice"
+        },
+        "ds_id": "wnpa35z"
+    },
+    "Vol\u00e1rna": {
+        "address": {
+            "street": "137",
+            "zip": "280 02",
+            "city": "Vol\u00e1rna",
+            "district": "Vol\u00e1rna"
+        },
+        "ds_id": "id6at4s"
+    },
+    "Volduchy": {
+        "address": {
+            "street": "125",
+            "zip": "338 22",
+            "city": "Volduchy",
+            "district": "Volduchy"
+        },
+        "ds_id": "ucmbiif"
+    },
+    "Vole\u010d": {
+        "address": {
+            "street": "72",
+            "zip": "533 41",
+            "city": "Vole\u010d",
+            "district": "Vole\u010d"
+        },
+        "ds_id": "28vazjr"
+    },
+    "Volenice": {
+        "address": {
+            "street": "26",
+            "zip": "262 72",
+            "city": "Volenice",
+            "district": "Bubovice"
+        },
+        "ds_id": "g7ib6hm"
+    },
+    "Volev\u010dice": {
+        "address": {
+            "street": "27",
+            "zip": "588 56",
+            "city": "Volev\u010dice",
+            "district": "Volev\u010dice"
+        },
+        "ds_id": "uttbwiw"
+    },
+    "Volfartice": {
+        "address": {
+            "street": "59",
+            "zip": "471 12",
+            "city": "Volfartice",
+            "district": "Volfartice"
+        },
+        "ds_id": "rveb7ah"
+    },
+    "Volf\u00ed\u0159ov": {
+        "address": {
+            "street": "42",
+            "zip": "380 01",
+            "city": "Volf\u00ed\u0159ov",
+            "district": "Volf\u00ed\u0159ov"
+        },
+        "ds_id": "m23b4dj"
+    },
+    "Vonoklasy": {
+        "address": {
+            "street": "Na N\u00e1vsi 4",
+            "zip": "252 28",
+            "city": "Vonoklasy",
+            "district": "Vonoklasy"
+        },
+        "ds_id": "6wnb638"
+    },
+    "Vortov\u00e1": {
+        "address": {
+            "street": "95",
+            "zip": "539 61",
+            "city": "Vortov\u00e1",
+            "district": "Vortov\u00e1"
+        },
+        "ds_id": "gi7byus"
+    },
+    "Voznice": {
+        "address": {
+            "street": "7",
+            "zip": "263 01",
+            "city": "Voznice",
+            "district": "Voznice"
+        },
+        "ds_id": "6apap23"
+    },
+    "Vr\u00e1b\u010de": {
+        "address": {
+            "street": "Ves-Na N\u00e1vsi 33",
+            "zip": "370 01",
+            "city": "Vr\u00e1b\u010de",
+            "district": "Vr\u00e1b\u010de"
+        },
+        "ds_id": "sjpbipp"
+    },
+    "Vracovice": {
+        "address": {
+            "street": "88",
+            "zip": "671 02",
+            "city": "Vracovice",
+            "district": "Vracovice"
+        },
+        "ds_id": "436bp4v"
+    },
+    "Vra\u010dovice-Orlov": {
+        "address": {
+            "street": "11",
+            "zip": "566 01",
+            "city": "Vra\u010dovice-Orlov",
+            "district": "Vra\u010dovice"
+        },
+        "ds_id": "ezub6zq"
+    },
+    "Vra\u0148any": {
+        "address": {
+            "street": "37",
+            "zip": "277 07",
+            "city": "Vra\u0148any",
+            "district": "Vra\u0148any"
+        },
+        "ds_id": "eirbgn7"
+    },
+    "Vran\u010dice": {
+        "address": {
+            "street": "14",
+            "zip": "262 31",
+            "city": "Vran\u010dice",
+            "district": "Vran\u010dice"
+        },
+        "ds_id": "qr3ayx4"
+    },
+    "Vran\u00e9 nad Vltavou": {
+        "address": {
+            "street": "B\u0159ezovsk\u00e1 112",
+            "zip": "252 46",
+            "city": "Vran\u00e9 nad Vltavou",
+            "district": "Vran\u00e9 nad Vltavou"
+        },
+        "ds_id": "jr6bgyi"
+    },
+    "Vranov": {
+        "address": {
+            "street": "24",
+            "zip": "664 32",
+            "city": "Vranov",
+            "district": "Vranov"
+        },
+        "ds_id": "xnzazv8"
+    },
+    "Vranov\u00e1": {
+        "address": {
+            "street": "2",
+            "zip": "679 62",
+            "city": "Vranov\u00e1",
+            "district": "Vranov\u00e1"
+        },
+        "ds_id": "chfa29w"
+    },
+    "Vranov\u00e1 Lhota": {
+        "address": {
+            "street": "61",
+            "zip": "571 01",
+            "city": "Vranov\u00e1 Lhota",
+            "district": "Vranov\u00e1 Lhota"
+        },
+        "ds_id": "qi3bn7a"
+    },
+    "Vranovice": {
+        "address": {
+            "street": "\u0160koln\u00ed 1",
+            "zip": "691 25",
+            "city": "Vranovice",
+            "district": "Vranovice"
+        },
+        "ds_id": "3dubfw9"
+    },
+    "Vranovice-Kel\u010dice": {
+        "address": {
+            "street": "31",
+            "zip": "798 08",
+            "city": "Vranovice-Kel\u010dice",
+            "district": "Kel\u010dice"
+        },
+        "ds_id": "y2eashz"
+    },
+    "Vranovsk\u00e1 Ves": {
+        "address": {
+            "street": "111",
+            "zip": "671 51",
+            "city": "Vranovsk\u00e1 Ves",
+            "district": "Vranovsk\u00e1 Ves"
+        },
+        "ds_id": "a43bprf"
+    },
+    "Vratisl\u00e1vka": {
+        "address": {
+            "street": "15",
+            "zip": "594 51",
+            "city": "Vratisl\u00e1vka",
+            "district": "Vratisl\u00e1vka"
+        },
+        "ds_id": "7ikatsz"
+    },
+    "Vr\u00e1tkov": {
+        "address": {
+            "street": "17",
+            "zip": "282 01",
+            "city": "Vr\u00e1tkov",
+            "district": "Vr\u00e1tkov"
+        },
+        "ds_id": "7rwbyty"
+    },
+    "Vr\u00e1tno": {
+        "address": {
+            "street": "39",
+            "zip": "294 26",
+            "city": "Vr\u00e1tno",
+            "district": "Vr\u00e1tno"
+        },
+        "ds_id": "z3kamgx"
+    },
+    "Vr\u00e1to": {
+        "address": {
+            "street": "20",
+            "zip": "370 01",
+            "city": "Vr\u00e1to",
+            "district": "Vr\u00e1to"
+        },
+        "ds_id": "diked69"
+    },
+    "Vr\u00e1\u017e": {
+        "address": {
+            "street": "Kv\u011btnov\u00e1 344",
+            "zip": "267 11",
+            "city": "Vr\u00e1\u017e",
+            "district": "Vr\u00e1\u017e"
+        },
+        "ds_id": "7bpa7p7"
+    },
+    "Vra\u017ekov": {
+        "address": {
+            "street": "2",
+            "zip": "413 01",
+            "city": "Vra\u017ekov",
+            "district": "Vra\u017ekov"
+        },
+        "ds_id": "4mrbjn8"
+    },
+    "Vra\u017en\u00e9": {
+        "address": {
+            "street": "37",
+            "zip": "742 35",
+            "city": "Vra\u017en\u00e9",
+            "district": "Vra\u017en\u00e9"
+        },
+        "ds_id": "cpgar52"
+    },
+    "Vr\u00e1\u017en\u00e9": {
+        "address": {
+            "street": "34",
+            "zip": "569 43",
+            "city": "Vr\u00e1\u017en\u00e9",
+            "district": "Vr\u00e1\u017en\u00e9"
+        },
+        "ds_id": "332a5nj"
+    },
+    "Vrb\u00e1tky": {
+        "address": {
+            "street": "41",
+            "zip": "798 13",
+            "city": "Vrb\u00e1tky",
+            "district": "Vrb\u00e1tky"
+        },
+        "ds_id": "3cvbu2m"
+    },
+    "Vrbat\u016fv Kostelec": {
+        "address": {
+            "street": "42",
+            "zip": "539 56",
+            "city": "Vrbat\u016fv Kostelec",
+            "district": "Vrbat\u016fv Kostelec"
+        },
+        "ds_id": "cvba5pb"
+    },
+    "Vrb\u010dany": {
+        "address": {
+            "street": "25",
+            "zip": "280 02",
+            "city": "Vrb\u010dany",
+            "district": "Vrb\u010dany"
+        },
+        "ds_id": "bcjb748"
+    },
+    "Vrbice": {
+        "address": {
+            "street": "50",
+            "zip": "384 73",
+            "city": "Vrbice",
+            "district": "Vrbice"
+        },
+        "ds_id": "p4tedzv"
+    },
+    "Vrbi\u010dany": {
+        "address": {
+            "street": "76",
+            "zip": "273 74",
+            "city": "Vrbi\u010dany",
+            "district": "Vrbi\u010dany"
+        },
+        "ds_id": "xjbbzpf"
+    },
+    "Vrbno nad Lesy": {
+        "address": {
+            "street": "26",
+            "zip": "439 06",
+            "city": "Vrbno nad Lesy",
+            "district": "Vrbno nad Lesy"
+        },
+        "ds_id": "9p4bfy3"
+    },
+    "Vrbov\u00e1 Lhota": {
+        "address": {
+            "street": "Pod\u011bbradsk\u00e1 25",
+            "zip": "289 11",
+            "city": "Vrbov\u00e1 Lhota",
+            "district": "Vrbov\u00e1 Lhota"
+        },
+        "ds_id": "crtbgte"
+    },
+    "Vrbovec": {
+        "address": {
+            "street": "146",
+            "zip": "671 24",
+            "city": "Vrbovec",
+            "district": "Vrbovec"
+        },
+        "ds_id": "v2faj5z"
+    },
+    "Vrcovice": {
+        "address": {
+            "street": "63",
+            "zip": "397 01",
+            "city": "Vrcovice",
+            "district": "Vrcovice"
+        },
+        "ds_id": "ek4b7cm"
+    },
+    "Vr\u010de\u0148": {
+        "address": {
+            "street": "1",
+            "zip": "335 41",
+            "city": "Vr\u010de\u0148",
+            "district": "Vr\u010de\u0148"
+        },
+        "ds_id": "d8ma8n9"
+    },
+    "Vrdy": {
+        "address": {
+            "street": "Smetanovo n\u00e1m. 28",
+            "zip": "285 71",
+            "city": "Vrdy",
+            "district": "Vrdy"
+        },
+        "ds_id": "mggbq64"
+    },
+    "Vrhave\u010d": {
+        "address": {
+            "street": "23",
+            "zip": "339 01",
+            "city": "Vrhave\u010d",
+            "district": "Mal\u00e1 V\u00edska"
+        },
+        "ds_id": "3xnbjjv"
+    },
+    "Vrchoslavice": {
+        "address": {
+            "street": "100",
+            "zip": "798 27",
+            "city": "Vrchoslavice",
+            "district": "Vrchoslavice"
+        },
+        "ds_id": "hqnbp9d"
+    },
+    "Vrchovany": {
+        "address": {
+            "street": "26",
+            "zip": "472 01",
+            "city": "Vrchovany",
+            "district": "Vrchovany"
+        },
+        "ds_id": "2y4bf95"
+    },
+    "Vrchy": {
+        "address": {
+            "street": "65",
+            "zip": "742 45",
+            "city": "Vrchy",
+            "district": "Vrchy"
+        },
+        "ds_id": "hjhbwky"
+    },
+    "Vrskma\u0148": {
+        "address": {
+            "street": "46",
+            "zip": "431 15",
+            "city": "Vrskma\u0148",
+            "district": "Vrskma\u0148"
+        },
+        "ds_id": "qcfa337"
+    },
+    "Vr\u0161ce": {
+        "address": {
+            "street": "91",
+            "zip": "507 33",
+            "city": "Vr\u0161ce",
+            "district": "Vr\u0161ce"
+        },
+        "ds_id": "hn4a85u"
+    },
+    "Vr\u0161ovice": {
+        "address": {
+            "street": "9",
+            "zip": "747 61",
+            "city": "Vr\u0161ovice",
+            "district": "Vr\u0161ovice"
+        },
+        "ds_id": "mgrar5w"
+    },
+    "Vrutice": {
+        "address": {
+            "street": "35",
+            "zip": "411 47",
+            "city": "Vrutice",
+            "district": "Vrutice"
+        },
+        "ds_id": "854byzk"
+    },
+    "V\u0159esina": {
+        "address": {
+            "street": "Hlavn\u00ed 24",
+            "zip": "742 85",
+            "city": "V\u0159esina",
+            "district": "V\u0159esina"
+        },
+        "ds_id": "mwaazct"
+    },
+    "V\u0159eskovice": {
+        "address": {
+            "street": "112",
+            "zip": "334 01",
+            "city": "V\u0159eskovice",
+            "district": "V\u0159eskovice"
+        },
+        "ds_id": "dhuann3"
+    },
+    "V\u0159esn\u00edk": {
+        "address": {
+            "street": "46",
+            "zip": "507 71",
+            "city": "V\u0159esn\u00edk",
+            "district": "V\u0159esn\u00edk"
+        },
+        "ds_id": "hpya6cj"
+    },
+    "V\u0159esov\u00e1": {
+        "address": {
+            "street": "3",
+            "zip": "357 35",
+            "city": "V\u0159esov\u00e1",
+            "district": "V\u0159esov\u00e1"
+        },
+        "ds_id": "8eia7fm"
+    },
+    "V\u0159esovice": {
+        "address": {
+            "street": "72",
+            "zip": "696 48",
+            "city": "V\u0159esovice",
+            "district": "V\u0159esovice"
+        },
+        "ds_id": "btca26j"
+    },
+    "Vsti\u0161": {
+        "address": {
+            "street": "107",
+            "zip": "334 41",
+            "city": "Vsti\u0161",
+            "district": "Vsti\u0161"
+        },
+        "ds_id": "7beb6qd"
+    },
+    "V\u0161ehrdy": {
+        "address": {
+            "street": "2",
+            "zip": "331 41",
+            "city": "V\u0161ehrdy",
+            "district": "V\u0161ehrdy"
+        },
+        "ds_id": "v5jbid7"
+    },
+    "V\u0161echlapy": {
+        "address": {
+            "street": "5",
+            "zip": "257 26",
+            "city": "V\u0161echlapy",
+            "district": "V\u0161echlapy"
+        },
+        "ds_id": "qs6jd2r"
+    },
+    "V\u0161echovice": {
+        "address": {
+            "street": "32",
+            "zip": "666 03",
+            "city": "V\u0161echovice",
+            "district": "V\u0161echovice"
+        },
+        "ds_id": "8m8a24b"
+    },
+    "V\u0161ejany": {
+        "address": {
+            "street": "Hlavn\u00ed 120",
+            "zip": "294 43",
+            "city": "V\u0161ejany",
+            "district": "V\u0161ejany"
+        },
+        "ds_id": "f34bah8"
+    },
+    "V\u0161ekary": {
+        "address": {
+            "street": "16",
+            "zip": "345 62",
+            "city": "V\u0161ekary",
+            "district": "V\u0161ekary"
+        },
+        "ds_id": "jhsa3e2"
+    },
+    "V\u0161elibice": {
+        "address": {
+            "street": "65",
+            "zip": "463 48",
+            "city": "V\u0161elibice",
+            "district": "V\u0161elibice"
+        },
+        "ds_id": "npkbmc9"
+    },
+    "V\u0161emina": {
+        "address": {
+            "street": "162",
+            "zip": "763 15",
+            "city": "V\u0161emina",
+            "district": "V\u0161emina"
+        },
+        "ds_id": "7atbage"
+    },
+    "V\u0161emyslice": {
+        "address": {
+            "street": "9",
+            "zip": "373 02",
+            "city": "V\u0161emyslice",
+            "district": "Nezna\u0161ov"
+        },
+        "ds_id": "zahb64r"
+    },
+    "V\u0161e\u0148": {
+        "address": {
+            "street": "10",
+            "zip": "512 65",
+            "city": "V\u0161e\u0148",
+            "district": "V\u0161e\u0148"
+        },
+        "ds_id": "whibagi"
+    },
+    "V\u0161enice": {
+        "address": {
+            "street": "13",
+            "zip": "338 24",
+            "city": "V\u0161enice",
+            "district": "V\u0161enice"
+        },
+        "ds_id": "dxdavvx"
+    },
+    "V\u0161enory": {
+        "address": {
+            "street": "U Silnice 151",
+            "zip": "252 31",
+            "city": "V\u0161enory",
+            "district": "V\u0161enory"
+        },
+        "ds_id": "r3qaw5f"
+    },
+    "V\u0161epadly": {
+        "address": {
+            "street": "14",
+            "zip": "345 43",
+            "city": "V\u0161epadly",
+            "district": "V\u0161epadly"
+        },
+        "ds_id": "dm2avfu"
+    },
+    "V\u0161eradice": {
+        "address": {
+            "street": "18",
+            "zip": "267 26",
+            "city": "V\u0161eradice",
+            "district": "V\u0161eradice"
+        },
+        "ds_id": "f4ya7qz"
+    },
+    "V\u0161eradov": {
+        "address": {
+            "street": "39",
+            "zip": "539 01",
+            "city": "V\u0161eradov",
+            "district": "V\u0161eradov"
+        },
+        "ds_id": "rpgb53b"
+    },
+    "V\u0161estary": {
+        "address": {
+            "street": "Jaroslava Ba\u0165chy 141",
+            "zip": "251 63",
+            "city": "V\u0161estary",
+            "district": "V\u0161estary"
+        },
+        "ds_id": "mmqa8gh"
+    },
+    "V\u0161estudy": {
+        "address": {
+            "street": "7",
+            "zip": "277 46",
+            "city": "V\u0161estudy",
+            "district": "V\u0161estudy"
+        },
+        "ds_id": "s6ga88y"
+    },
+    "V\u0161esulov": {
+        "address": {
+            "street": "51",
+            "zip": "270 34",
+            "city": "V\u0161esulov",
+            "district": "V\u0161esulov"
+        },
+        "ds_id": "j3pauqj"
+    },
+    "V\u0161evily": {
+        "address": {
+            "street": "70",
+            "zip": "262 72",
+            "city": "V\u0161evily",
+            "district": "V\u0161evily"
+        },
+        "ds_id": "mfsa69a"
+    },
+    "V\u00fd\u010dapy": {
+        "address": {
+            "street": "79",
+            "zip": "674 01",
+            "city": "V\u00fd\u010dapy",
+            "district": "V\u00fd\u010dapy"
+        },
+        "ds_id": "s8wbmja"
+    },
+    "Vyd\u0159\u00ed": {
+        "address": {
+            "street": "51",
+            "zip": "378 02",
+            "city": "Vyd\u0159\u00ed",
+            "district": "Vyd\u0159\u00ed"
+        },
+        "ds_id": "brbb7rd"
+    },
+    "Vyk\u00e1\u0148": {
+        "address": {
+            "street": "24",
+            "zip": "289 15",
+            "city": "Vyk\u00e1\u0148",
+            "district": "Vyk\u00e1\u0148"
+        },
+        "ds_id": "nkvb727"
+    },
+    "Vyklantice": {
+        "address": {
+            "street": "24",
+            "zip": "394 27",
+            "city": "Vyklantice",
+            "district": "Star\u00e9 Vyklantice"
+        },
+        "ds_id": "h5ebpwg"
+    },
+    "V\u00fdkleky": {
+        "address": {
+            "street": "72",
+            "zip": "751 25",
+            "city": "V\u00fdkleky",
+            "district": "V\u00fdkleky"
+        },
+        "ds_id": "qzraukq"
+    },
+    "V\u00fdprachtice": {
+        "address": {
+            "street": "3",
+            "zip": "561 34",
+            "city": "V\u00fdprachtice",
+            "district": "V\u00fdprachtice"
+        },
+        "ds_id": "sribv9y"
+    },
+    "V\u00fdrov": {
+        "address": {
+            "street": "105",
+            "zip": "331 41",
+            "city": "V\u00fdrov",
+            "district": "Hada\u010dka"
+        },
+        "ds_id": "c5sa8ws"
+    },
+    "V\u00fdrovice": {
+        "address": {
+            "street": "63",
+            "zip": "671 34",
+            "city": "V\u00fdrovice",
+            "district": "V\u00fdrovice"
+        },
+        "ds_id": "cqxbjkq"
+    },
+    "Vyskytn\u00e1": {
+        "address": {
+            "street": "74",
+            "zip": "394 05",
+            "city": "Vyskytn\u00e1",
+            "district": "Vyskytn\u00e1"
+        },
+        "ds_id": "cwybagt"
+    },
+    "Vyskytn\u00e1 nad Jihlavou": {
+        "address": {
+            "street": "67",
+            "zip": "588 41",
+            "city": "Vyskytn\u00e1 nad Jihlavou",
+            "district": "Vyskytn\u00e1 nad Jihlavou"
+        },
+        "ds_id": "6ktax23"
+    },
+    "Vyso\u010dany": {
+        "address": {
+            "street": "130",
+            "zip": "679 13",
+            "city": "Vyso\u010dany",
+            "district": "Molenburk"
+        },
+        "ds_id": "dkaa2zc"
+    },
+    "Vyso\u010dina": {
+        "address": {
+            "street": "55",
+            "zip": "539 01",
+            "city": "Vyso\u010dina",
+            "district": "D\u0159ev\u00edkov"
+        },
+        "ds_id": "ya6bt88"
+    },
+    "Vysok\u00e1": {
+        "address": {
+            "street": "1",
+            "zip": "580 01",
+            "city": "Vysok\u00e1",
+            "district": "Vysok\u00e1"
+        },
+        "ds_id": "v25a52x"
+    },
+    "Vysok\u00e1 Lhota": {
+        "address": {
+            "street": "17",
+            "zip": "395 01",
+            "city": "Vysok\u00e1 Lhota",
+            "district": "Vysok\u00e1 Lhota"
+        },
+        "ds_id": "dfwbgwq"
+    },
+    "Vysok\u00e1 Libyn\u011b": {
+        "address": {
+            "street": "83",
+            "zip": "331 41",
+            "city": "Vysok\u00e1 Libyn\u011b",
+            "district": "Vysok\u00e1 Libyn\u011b"
+        },
+        "ds_id": "zmkbzyd"
+    },
+    "Vysok\u00e1 Pec": {
+        "address": {
+            "street": "Julia Fu\u010d\u00edka 46",
+            "zip": "431 59",
+            "city": "Vysok\u00e1 Pec",
+            "district": "Vysok\u00e1 Pec"
+        },
+        "ds_id": "4stbpnp"
+    },
+    "Vysok\u00e1 u P\u0159\u00edbram\u011b": {
+        "address": {
+            "street": "128",
+            "zip": "262 42",
+            "city": "Vysok\u00e1 u P\u0159\u00edbram\u011b",
+            "district": "Vysok\u00e1 u P\u0159\u00edbram\u011b"
+        },
+        "ds_id": "xemakbn"
+    },
+    "Vysok\u00e9": {
+        "address": {
+            "street": "34",
+            "zip": "591 01",
+            "city": "Vysok\u00e9",
+            "district": "Vysok\u00e9"
+        },
+        "ds_id": "zdba93s"
+    },
+    "Vysok\u00e9 Chvojno": {
+        "address": {
+            "street": "Sob\u011bslavova 2",
+            "zip": "533 21",
+            "city": "Vysok\u00e9 Chvojno",
+            "district": "Vysok\u00e9 Chvojno"
+        },
+        "ds_id": "wfva5p4"
+    },
+    "Vysok\u00e9 Popovice": {
+        "address": {
+            "street": "35",
+            "zip": "664 84",
+            "city": "Vysok\u00e9 Popovice",
+            "district": "Vysok\u00e9 Popovice"
+        },
+        "ds_id": "34wa2v9"
+    },
+    "Vysok\u00e9 Studnice": {
+        "address": {
+            "street": "122",
+            "zip": "588 21",
+            "city": "Vysok\u00e9 Studnice",
+            "district": "Vysok\u00e9 Studnice"
+        },
+        "ds_id": "25abn2u"
+    },
+    "Vysok\u00fd \u00dajezd": {
+        "address": {
+            "street": "Tyr\u0161ova n\u00e1ves 113",
+            "zip": "267 16",
+            "city": "Vysok\u00fd \u00dajezd",
+            "district": "Vysok\u00fd \u00dajezd"
+        },
+        "ds_id": "9ftap3g"
+    },
+    "Vystr\u010denovice": {
+        "address": {
+            "street": "4",
+            "zip": "588 56",
+            "city": "Vystr\u010denovice",
+            "district": "Vystr\u010denovice"
+        },
+        "ds_id": "z7sat9q"
+    },
+    "Vystrkov": {
+        "address": {
+            "street": "90",
+            "zip": "396 01",
+            "city": "Vystrkov",
+            "district": "Vystrkov"
+        },
+        "ds_id": "h4mbgcp"
+    },
+    "Vy\u0161ehn\u011bvice": {
+        "address": {
+            "street": "8",
+            "zip": "533 41",
+            "city": "Vy\u0161ehn\u011bvice",
+            "district": "Vy\u0161ehn\u011bvice"
+        },
+        "ds_id": "svtbspn"
+    },
+    "Vy\u0161eho\u0159\u00ed": {
+        "address": {
+            "street": "50",
+            "zip": "789 01",
+            "city": "Vy\u0161eho\u0159\u00ed",
+            "district": "Vy\u0161eho\u0159\u00ed"
+        },
+        "ds_id": "2x5bvdh"
+    },
+    "V\u00fd\u0161kov": {
+        "address": {
+            "street": "44",
+            "zip": "440 01",
+            "city": "V\u00fd\u0161kov",
+            "district": "V\u00fd\u0161kov"
+        },
+        "ds_id": "hfkaqsy"
+    },
+    "Vy\u0161kovec": {
+        "address": {
+            "street": "65",
+            "zip": "687 74",
+            "city": "Vy\u0161kovec",
+            "district": "Vy\u0161kovec"
+        },
+        "ds_id": "5dsarhu"
+    },
+    "Vy\u0161n\u00ed Lhoty": {
+        "address": {
+            "street": "244",
+            "zip": "739 51",
+            "city": "Vy\u0161n\u00ed Lhoty",
+            "district": "Vy\u0161n\u00ed Lhoty"
+        },
+        "ds_id": "924bk7r"
+    },
+    "V\u00fd\u0161ovice": {
+        "address": {
+            "street": "80",
+            "zip": "798 09",
+            "city": "V\u00fd\u0161ovice",
+            "district": "V\u00fd\u0161ovice"
+        },
+        "ds_id": "ikyasiq"
+    },
+    "V\u00fd\u017eerky": {
+        "address": {
+            "street": "71",
+            "zip": "281 63",
+            "city": "V\u00fd\u017eerky",
+            "district": "V\u00fd\u017eerky"
+        },
+        "ds_id": "yxkbpiy"
+    },
+    "Vy\u017eice": {
+        "address": {
+            "street": "74",
+            "zip": "538 03",
+            "city": "Vy\u017eice",
+            "district": "Vy\u017eice"
+        },
+        "ds_id": "686a5py"
+    },
+    "Vy\u017elovka": {
+        "address": {
+            "street": "Na N\u00e1vsi 57",
+            "zip": "281 63",
+            "city": "Vy\u017elovka",
+            "district": "Vy\u017elovka"
+        },
+        "ds_id": "pu9ap3r"
+    },
+    "Xaverov": {
+        "address": {
+            "street": "3",
+            "zip": "285 06",
+            "city": "Xaverov",
+            "district": "Xaverov"
+        },
+        "ds_id": "ra4au2w"
+    },
+    "Z\u00e1be\u0161tn\u00ed Lhota": {
+        "address": {
+            "street": "13",
+            "zip": "751 27",
+            "city": "Z\u00e1be\u0161tn\u00ed Lhota",
+            "district": "Z\u00e1be\u0161tn\u00ed Lhota"
+        },
+        "ds_id": "gfsbzmt"
+    },
+    "Z\u00e1blat\u00ed": {
+        "address": {
+            "street": "3",
+            "zip": "379 01",
+            "city": "Z\u00e1blat\u00ed",
+            "district": "Z\u00e1blat\u00ed"
+        },
+        "ds_id": "64kb8af"
+    },
+    "Z\u00e1born\u00e1": {
+        "address": {
+            "street": "49",
+            "zip": "588 13",
+            "city": "Z\u00e1born\u00e1",
+            "district": "Z\u00e1born\u00e1"
+        },
+        "ds_id": "i2hazrm"
+    },
+    "Z\u00e1bo\u0159\u00ed": {
+        "address": {
+            "street": "88",
+            "zip": "387 34",
+            "city": "Z\u00e1bo\u0159\u00ed",
+            "district": "Z\u00e1bo\u0159\u00ed"
+        },
+        "ds_id": "5teandn"
+    },
+    "Z\u00e1bo\u0159\u00ed nad Labem": {
+        "address": {
+            "street": "\u0160koln\u00ed 164",
+            "zip": "285 74",
+            "city": "Z\u00e1bo\u0159\u00ed nad Labem",
+            "district": "Z\u00e1bo\u0159\u00ed nad Labem"
+        },
+        "ds_id": "w9yby9a"
+    },
+    "Z\u00e1brd\u00ed": {
+        "address": {
+            "street": "41",
+            "zip": "383 01",
+            "city": "Z\u00e1brd\u00ed",
+            "district": "Z\u00e1brd\u00ed"
+        },
+        "ds_id": "vb8eeb9"
+    },
+    "Zabru\u0161any": {
+        "address": {
+            "street": "1",
+            "zip": "417 71",
+            "city": "Zabru\u0161any",
+            "district": "Zabru\u0161any"
+        },
+        "ds_id": "wtjbutj"
+    },
+    "Zadn\u00ed Chodov": {
+        "address": {
+            "street": "100",
+            "zip": "348 15",
+            "city": "Zadn\u00ed Chodov",
+            "district": "Zadn\u00ed Chodov"
+        },
+        "ds_id": "mskby63"
+    },
+    "Zadn\u00ed St\u0159\u00edte\u017e": {
+        "address": {
+            "street": "1",
+            "zip": "391 43",
+            "city": "Zadn\u00ed St\u0159\u00edte\u017e",
+            "district": "Zadn\u00ed St\u0159\u00edte\u017e"
+        },
+        "ds_id": "ykredjk"
+    },
+    "Zadn\u00ed T\u0159eba\u0148": {
+        "address": {
+            "street": "Na N\u00e1vsi 6",
+            "zip": "267 29",
+            "city": "Zadn\u00ed T\u0159eba\u0148",
+            "district": "Zadn\u00ed T\u0159eba\u0148"
+        },
+        "ds_id": "qigasxb"
+    },
+    "Zadn\u00ed Vyd\u0159\u00ed": {
+        "address": {
+            "street": "28",
+            "zip": "588 56",
+            "city": "Zadn\u00ed Vyd\u0159\u00ed",
+            "district": "Zadn\u00ed Vyd\u0159\u00ed"
+        },
+        "ds_id": "iujayie"
+    },
+    "Zadn\u00ed Zho\u0159ec": {
+        "address": {
+            "street": "44",
+            "zip": "594 44",
+            "city": "Zadn\u00ed Zho\u0159ec",
+            "district": "Zadn\u00ed Zho\u0159ec"
+        },
+        "ds_id": "adhav7f"
+    },
+    "Z\u00e1dol\u00ed": {
+        "address": {
+            "street": "12",
+            "zip": "566 01",
+            "city": "Z\u00e1dol\u00ed",
+            "district": "St\u0159\u00edhanov"
+        },
+        "ds_id": "gmza3tt"
+    },
+    "Z\u00e1dub-Z\u00e1vi\u0161\u00edn": {
+        "address": {
+            "street": "22",
+            "zip": "353 01",
+            "city": "Z\u00e1dub-Z\u00e1vi\u0161\u00edn",
+            "district": "Z\u00e1dub"
+        },
+        "ds_id": "ydsbjvc"
+    },
+    "Z\u00e1dve\u0159ice-Rakov\u00e1": {
+        "address": {
+            "street": "460",
+            "zip": "763 12",
+            "city": "Z\u00e1dve\u0159ice-Rakov\u00e1",
+            "district": "Z\u00e1dve\u0159ice"
+        },
+        "ds_id": "d63arin"
+    },
+    "Zah\u00e1j\u00ed": {
+        "address": {
+            "street": "4",
+            "zip": "373 48",
+            "city": "Zah\u00e1j\u00ed",
+            "district": "Zah\u00e1j\u00ed"
+        },
+        "ds_id": "fbsjdxj"
+    },
+    "Zahor\u010dice": {
+        "address": {
+            "street": "4",
+            "zip": "387 19",
+            "city": "Zahor\u010dice",
+            "district": "Zahor\u010dice"
+        },
+        "ds_id": "ptgedjp"
+    },
+    "Z\u00e1hornice": {
+        "address": {
+            "street": "Hlavn\u00ed 72",
+            "zip": "289 03",
+            "city": "Z\u00e1hornice",
+            "district": "Z\u00e1hornice"
+        },
+        "ds_id": "pkhbjvg"
+    },
+    "Z\u00e1horovice": {
+        "address": {
+            "street": "382",
+            "zip": "687 71",
+            "city": "Z\u00e1horovice",
+            "district": "Z\u00e1horovice"
+        },
+        "ds_id": "seqa4c6"
+    },
+    "Zaho\u0159any": {
+        "address": {
+            "street": "7",
+            "zip": "344 01",
+            "city": "Zaho\u0159any",
+            "district": "Zaho\u0159any"
+        },
+        "ds_id": "a98bheu"
+    },
+    "Z\u00e1ho\u0159\u00ed": {
+        "address": {
+            "street": "8",
+            "zip": "398 18",
+            "city": "Z\u00e1ho\u0159\u00ed",
+            "district": "Horn\u00ed Z\u00e1ho\u0159\u00ed"
+        },
+        "ds_id": "emfedwp"
+    },
+    "Zahr\u00e1dka": {
+        "address": {
+            "street": "39",
+            "zip": "330 38",
+            "city": "Zahr\u00e1dka",
+            "district": "H\u016frky"
+        },
+        "ds_id": "fp5biew"
+    },
+    "Zahr\u00e1dky": {
+        "address": {
+            "street": "108",
+            "zip": "471 01",
+            "city": "Zahr\u00e1dky",
+            "district": "Zahr\u00e1dky"
+        },
+        "ds_id": "gaqbvmb"
+    },
+    "Z\u00e1chlum\u00ed": {
+        "address": {
+            "street": "98",
+            "zip": "561 86",
+            "city": "Z\u00e1chlum\u00ed",
+            "district": "Z\u00e1chlum\u00ed"
+        },
+        "ds_id": "kvya3kn"
+    },
+    "Zachot\u00edn": {
+        "address": {
+            "street": "37",
+            "zip": "393 01",
+            "city": "Zachot\u00edn",
+            "district": "Zachot\u00edn"
+        },
+        "ds_id": "5gwbpr2"
+    },
+    "Zaje\u010d\u00ed": {
+        "address": {
+            "street": "\u0160koln\u00ed 401",
+            "zip": "691 05",
+            "city": "Zaje\u010d\u00ed",
+            "district": "Zaje\u010d\u00ed"
+        },
+        "ds_id": "3iwbjwr"
+    },
+    "Zaje\u010dice": {
+        "address": {
+            "street": "4",
+            "zip": "538 35",
+            "city": "Zaje\u010dice",
+            "district": "Zaje\u010dice"
+        },
+        "ds_id": "ft8b3ir"
+    },
+    "Zaje\u010dov": {
+        "address": {
+            "street": "265",
+            "zip": "267 63",
+            "city": "Zaje\u010dov",
+            "district": "Zaje\u010dov"
+        },
+        "ds_id": "wfkb4qa"
+    },
+    "Z\u00e1jezd": {
+        "address": {
+            "street": "26",
+            "zip": "273 43",
+            "city": "Z\u00e1jezd",
+            "district": "Z\u00e1jezd"
+        },
+        "ds_id": "vccaj2p"
+    },
+    "Z\u00e1jezdec": {
+        "address": {
+            "street": "38",
+            "zip": "538 51",
+            "city": "Z\u00e1jezdec",
+            "district": "Z\u00e1jezdec"
+        },
+        "ds_id": "f2fa5qq"
+    },
+    "Zaj\u00ed\u010dkov": {
+        "address": {
+            "street": "47",
+            "zip": "393 01",
+            "city": "Zaj\u00ed\u010dkov",
+            "district": "Zaj\u00ed\u010dkov"
+        },
+        "ds_id": "uvgb3be"
+    },
+    "Z\u00e1kolany": {
+        "address": {
+            "street": "55",
+            "zip": "273 28",
+            "city": "Z\u00e1kolany",
+            "district": "Z\u00e1kolany"
+        },
+        "ds_id": "t85bvnk"
+    },
+    "Zak\u0159any": {
+        "address": {
+            "street": "7",
+            "zip": "664 84",
+            "city": "Zak\u0159any",
+            "district": "Zak\u0159any"
+        },
+        "ds_id": "jbuaz7t"
+    },
+    "Z\u00e1les\u00ed": {
+        "address": {
+            "street": "27",
+            "zip": "671 02",
+            "city": "Z\u00e1les\u00ed",
+            "district": "Z\u00e1les\u00ed"
+        },
+        "ds_id": "qxzaz6a"
+    },
+    "Z\u00e1lesn\u00e1 Zho\u0159": {
+        "address": {
+            "street": "33",
+            "zip": "664 84",
+            "city": "Z\u00e1lesn\u00e1 Zho\u0159",
+            "district": "Z\u00e1lesn\u00e1 Zho\u0159"
+        },
+        "ds_id": "wj6az5s"
+    },
+    "Zale\u0161any": {
+        "address": {
+            "street": "50",
+            "zip": "280 02",
+            "city": "Zale\u0161any",
+            "district": "Zale\u0161any"
+        },
+        "ds_id": "v79efms"
+    },
+    "Z\u00e1lezlice": {
+        "address": {
+            "street": "111",
+            "zip": "277 45",
+            "city": "Z\u00e1lezlice",
+            "district": "Z\u00e1lezlice"
+        },
+        "ds_id": "srmbjwv"
+    },
+    "Z\u00e1lezly": {
+        "address": {
+            "street": "7",
+            "zip": "384 81",
+            "city": "Z\u00e1lezly",
+            "district": "Z\u00e1lezly"
+        },
+        "ds_id": "h6yb625"
+    },
+    "Z\u00e1l\u0161\u00ed": {
+        "address": {
+            "street": "50",
+            "zip": "565 01",
+            "city": "Z\u00e1l\u0161\u00ed",
+            "district": "Z\u00e1l\u0161\u00ed"
+        },
+        "ds_id": "qtqa5qk"
+    },
+    "Zalu\u017eany": {
+        "address": {
+            "street": "145",
+            "zip": "262 84",
+            "city": "Zalu\u017eany",
+            "district": "Zalu\u017eany"
+        },
+        "ds_id": "yyjbaek"
+    },
+    "Z\u00e1lu\u017e\u00ed": {
+        "address": {
+            "street": "13",
+            "zip": "413 01",
+            "city": "Z\u00e1lu\u017e\u00ed",
+            "district": "Z\u00e1lu\u017e\u00ed"
+        },
+        "ds_id": "dw4buw7"
+    },
+    "Z\u00e1lu\u017eice": {
+        "address": {
+            "street": "22",
+            "zip": "438 01",
+            "city": "Z\u00e1lu\u017eice",
+            "district": "Z\u00e1lu\u017eice"
+        },
+        "ds_id": "dr8a38m"
+    },
+    "Z\u00e1mrsk": {
+        "address": {
+            "street": "95",
+            "zip": "565 43",
+            "city": "Z\u00e1mrsk",
+            "district": "Z\u00e1mrsk"
+        },
+        "ds_id": "pbxbsz5"
+    },
+    "Z\u00e1mrsky": {
+        "address": {
+            "street": "23",
+            "zip": "753 01",
+            "city": "Z\u00e1mrsky",
+            "district": "Z\u00e1mrsky"
+        },
+        "ds_id": "td9asik"
+    },
+    "Z\u00e1rubice": {
+        "address": {
+            "street": "5",
+            "zip": "675 52",
+            "city": "Z\u00e1rubice",
+            "district": "Z\u00e1rubice"
+        },
+        "ds_id": "r62a8pi"
+    },
+    "Z\u00e1ryby": {
+        "address": {
+            "street": "147",
+            "zip": "277 13",
+            "city": "Z\u00e1ryby",
+            "district": "Z\u00e1ryby"
+        },
+        "ds_id": "ze6ar67"
+    },
+    "Z\u00e1\u0159eck\u00e1 Lhota": {
+        "address": {
+            "street": "5",
+            "zip": "565 01",
+            "city": "Z\u00e1\u0159eck\u00e1 Lhota",
+            "district": "Z\u00e1\u0159eck\u00e1 Lhota"
+        },
+        "ds_id": "rfaa3tm"
+    },
+    "Z\u00e1\u0159\u00ed\u010d\u00ed": {
+        "address": {
+            "street": "25",
+            "zip": "768 11",
+            "city": "Z\u00e1\u0159\u00ed\u010d\u00ed",
+            "district": "Z\u00e1\u0159\u00ed\u010d\u00ed"
+        },
+        "ds_id": "xrmarid"
+    },
+    "Zast\u00e1vka": {
+        "address": {
+            "street": "Hutn\u00ed osada 14",
+            "zip": "664 84",
+            "city": "Zast\u00e1vka",
+            "district": "Zast\u00e1vka"
+        },
+        "ds_id": "38baz47"
+    },
+    "Z\u00e1st\u0159izly": {
+        "address": {
+            "street": "31",
+            "zip": "768 05",
+            "city": "Z\u00e1st\u0159izly",
+            "district": "Z\u00e1st\u0159izly"
+        },
+        "ds_id": "8iwari9"
+    },
+    "Za\u0161ov\u00e1": {
+        "address": {
+            "street": "36",
+            "zip": "756 51",
+            "city": "Za\u0161ov\u00e1",
+            "district": "Za\u0161ov\u00e1"
+        },
+        "ds_id": "fdzbaew"
+    },
+    "Za\u0161ovice": {
+        "address": {
+            "street": "2",
+            "zip": "675 21",
+            "city": "Za\u0161ovice",
+            "district": "Za\u0161ovice"
+        },
+        "ds_id": "pc4aq7n"
+    },
+    "Z\u00e1tor": {
+        "address": {
+            "street": "107",
+            "zip": "793 16",
+            "city": "Z\u00e1tor",
+            "district": "Z\u00e1tor"
+        },
+        "ds_id": "6kqbad4"
+    },
+    "Z\u00e1vada": {
+        "address": {
+            "street": "106",
+            "zip": "747 19",
+            "city": "Z\u00e1vada",
+            "district": "Z\u00e1vada"
+        },
+        "ds_id": "epzaxyj"
+    },
+    "Zavidov": {
+        "address": {
+            "street": "110",
+            "zip": "270 35",
+            "city": "Zavidov",
+            "district": "Zavidov"
+        },
+        "ds_id": "z4dau2q"
+    },
+    "Z\u00e1vist": {
+        "address": {
+            "street": "2",
+            "zip": "679 22",
+            "city": "Z\u00e1vist",
+            "district": "Z\u00e1vist"
+        },
+        "ds_id": "7whj2si"
+    },
+    "Z\u00e1vi\u0161ice": {
+        "address": {
+            "street": "115",
+            "zip": "742 21",
+            "city": "Z\u00e1vi\u0161ice",
+            "district": "Z\u00e1vi\u0161ice"
+        },
+        "ds_id": "4v8bnvn"
+    },
+    "Zavlekov": {
+        "address": {
+            "street": "56",
+            "zip": "341 42",
+            "city": "Zavlekov",
+            "district": "Zavlekov"
+        },
+        "ds_id": "qhebieq"
+    },
+    "Z\u00e1vraty": {
+        "address": {
+            "street": "4",
+            "zip": "370 01",
+            "city": "Z\u00e1vraty",
+            "district": "Z\u00e1vraty"
+        },
+        "ds_id": "ewfb7sq"
+    },
+    "Zbe\u010dno": {
+        "address": {
+            "street": "7",
+            "zip": "270 24",
+            "city": "Zbe\u010dno",
+            "district": "Zbe\u010dno"
+        },
+        "ds_id": "z7kbgxt"
+    },
+    "Zbel\u00edtov": {
+        "address": {
+            "street": "62",
+            "zip": "399 01",
+            "city": "Zbel\u00edtov",
+            "district": "Zbel\u00edtov"
+        },
+        "ds_id": "7ambw6j"
+    },
+    "Zbenice": {
+        "address": {
+            "street": "61",
+            "zip": "262 31",
+            "city": "Zbenice",
+            "district": "Zbenice"
+        },
+        "ds_id": "gvsak5c"
+    },
+    "Zb\u011b\u0161i\u010dky": {
+        "address": {
+            "street": "13",
+            "zip": "398 43",
+            "city": "Zb\u011b\u0161i\u010dky",
+            "district": "Zb\u011b\u0161i\u010dky"
+        },
+        "ds_id": "f3wbw7d"
+    },
+    "Zbilidy": {
+        "address": {
+            "street": "14",
+            "zip": "588 05",
+            "city": "Zbilidy",
+            "district": "Zbilidy"
+        },
+        "ds_id": "2acj2t3"
+    },
+    "Zbinohy": {
+        "address": {
+            "street": "13",
+            "zip": "588 42",
+            "city": "Zbinohy",
+            "district": "Zbinohy"
+        },
+        "ds_id": "nt3au4t"
+    },
+    "Zbizuby": {
+        "address": {
+            "street": "51",
+            "zip": "285 04",
+            "city": "Zbizuby",
+            "district": "Zbizuby"
+        },
+        "ds_id": "9agbi46"
+    },
+    "Zblovice": {
+        "address": {
+            "street": "12",
+            "zip": "671 07",
+            "city": "Zblovice",
+            "district": "Zblovice"
+        },
+        "ds_id": "czkaz5z"
+    },
+    "Zborov": {
+        "address": {
+            "street": "28",
+            "zip": "789 01",
+            "city": "Zborov",
+            "district": "Zborov"
+        },
+        "ds_id": "wr4a3cz"
+    },
+    "Zborovice": {
+        "address": {
+            "street": "Hlavn\u00ed 37",
+            "zip": "768 32",
+            "city": "Zborovice",
+            "district": "Zborovice"
+        },
+        "ds_id": "jjrjdqf"
+    },
+    "Zborovy": {
+        "address": {
+            "street": "20",
+            "zip": "340 34",
+            "city": "Zborovy",
+            "district": "Zborovy"
+        },
+        "ds_id": "29rawsf"
+    },
+    "Zbo\u017e\u00ed\u010dko": {
+        "address": {
+            "street": "69",
+            "zip": "289 25",
+            "city": "Zbo\u017e\u00ed\u010dko",
+            "district": "Zbo\u017e\u00ed\u010dko"
+        },
+        "ds_id": "55maj2j"
+    },
+    "Zbraslav": {
+        "address": {
+            "street": "Komensk\u00e9ho 105",
+            "zip": "664 84",
+            "city": "Zbraslav",
+            "district": "Zbraslav"
+        },
+        "ds_id": "kz6badd"
+    },
+    "Zbraslavec": {
+        "address": {
+            "street": "45",
+            "zip": "679 72",
+            "city": "Zbraslavec",
+            "district": "Zbraslavec"
+        },
+        "ds_id": "7f3arss"
+    },
+    "Zbraslavice": {
+        "address": {
+            "street": "7",
+            "zip": "285 21",
+            "city": "Zbraslavice",
+            "district": "Zbraslavice"
+        },
+        "ds_id": "rbkb3mw"
+    },
+    "Zbra\u0161\u00edn": {
+        "address": {
+            "street": "23",
+            "zip": "440 01",
+            "city": "Zbra\u0161\u00edn",
+            "district": "Zbra\u0161\u00edn"
+        },
+        "ds_id": "zakburp"
+    },
+    "Zb\u016fch": {
+        "address": {
+            "street": "N\u00e1m\u011bst\u00ed 205",
+            "zip": "330 22",
+            "city": "Zb\u016fch",
+            "district": "Zb\u016fch"
+        },
+        "ds_id": "c23btkp"
+    },
+    "Zbuzany": {
+        "address": {
+            "street": "Na N\u00e1vsi 1",
+            "zip": "252 25",
+            "city": "Zbuzany",
+            "district": "Zbuzany"
+        },
+        "ds_id": "b5nange"
+    },
+    "Zbyslavice": {
+        "address": {
+            "street": "Ve Dvo\u0159e 81",
+            "zip": "742 83",
+            "city": "Zbyslavice",
+            "district": "Zbyslavice"
+        },
+        "ds_id": "av9brbh"
+    },
+    "Zbytiny": {
+        "address": {
+            "street": "3",
+            "zip": "384 41",
+            "city": "Zbytiny",
+            "district": "Zbytiny"
+        },
+        "ds_id": "usze6wj"
+    },
+    "Zd\u011bchov": {
+        "address": {
+            "street": "175",
+            "zip": "756 07",
+            "city": "Zd\u011bchov",
+            "district": "Zd\u011bchov"
+        },
+        "ds_id": "hb7arj3"
+    },
+    "Zdechovice": {
+        "address": {
+            "street": "5",
+            "zip": "533 11",
+            "city": "Zdechovice",
+            "district": "Zdechovice"
+        },
+        "ds_id": "zkza5qh"
+    },
+    "Zdemyslice": {
+        "address": {
+            "street": "159",
+            "zip": "336 01",
+            "city": "Zdemyslice",
+            "district": "Zdemyslice"
+        },
+        "ds_id": "zapbiek"
+    },
+    "Zde\u0148kov": {
+        "address": {
+            "street": "39",
+            "zip": "588 56",
+            "city": "Zde\u0148kov",
+            "district": "Zde\u0148kov"
+        },
+        "ds_id": "55iawdn"
+    },
+    "Zderaz": {
+        "address": {
+            "street": "54",
+            "zip": "539 44",
+            "city": "Zderaz",
+            "district": "Zderaz"
+        },
+        "ds_id": "qmhb3ik"
+    },
+    "Zd\u011bt\u00edn": {
+        "address": {
+            "street": "49",
+            "zip": "798 43",
+            "city": "Zd\u011bt\u00edn",
+            "district": "Zd\u011bt\u00edn"
+        },
+        "ds_id": "gx2bm6t"
+    },
+    "Zdiby": {
+        "address": {
+            "street": "Pr\u016fb\u011b\u017en\u00e1 11",
+            "zip": "250 66",
+            "city": "Zdiby",
+            "district": "Velt\u011b\u017e"
+        },
+        "ds_id": "vt2b6m8"
+    },
+    "Zd\u00edkov": {
+        "address": {
+            "street": "215",
+            "zip": "384 72",
+            "city": "Zd\u00edkov",
+            "district": "Zd\u00edkov"
+        },
+        "ds_id": "pg7babg"
+    },
+    "Zdounky": {
+        "address": {
+            "street": "27",
+            "zip": "768 02",
+            "city": "Zdounky",
+            "district": "Zdounky"
+        },
+        "ds_id": "epwbabk"
+    },
+    "Zduchovice": {
+        "address": {
+            "street": "55",
+            "zip": "262 63",
+            "city": "Zduchovice",
+            "district": "Zduchovice"
+        },
+        "ds_id": "e3yap3v"
+    },
+    "Zelen\u00e1 Hora": {
+        "address": {
+            "street": "32",
+            "zip": "683 21",
+            "city": "Zelen\u00e1 Hora",
+            "district": "Zelen\u00e1 Hora"
+        },
+        "ds_id": "ih6bpjp"
+    },
+    "Zeleneck\u00e1 Lhota": {
+        "address": {
+            "street": "8",
+            "zip": "507 23",
+            "city": "Zeleneck\u00e1 Lhota",
+            "district": "Zeleneck\u00e1 Lhota"
+        },
+        "ds_id": "vc2a5xm"
+    },
+    "Zem\u011btice": {
+        "address": {
+            "street": "52",
+            "zip": "334 52",
+            "city": "Zem\u011btice",
+            "district": "Zem\u011btice"
+        },
+        "ds_id": "pwwauu9"
+    },
+    "Zho\u0159": {
+        "address": {
+            "street": "64",
+            "zip": "588 26",
+            "city": "Zho\u0159",
+            "district": "Zho\u0159"
+        },
+        "ds_id": "bisbaa7"
+    },
+    "Zho\u0159ec": {
+        "address": {
+            "street": "50",
+            "zip": "395 01",
+            "city": "Zho\u0159ec",
+            "district": "Zho\u0159ec"
+        },
+        "ds_id": "9c7ayec"
+    },
+    "Zho\u0159 u Mlad\u00e9 Vo\u017eice": {
+        "address": {
+            "street": "51",
+            "zip": "391 43",
+            "city": "Zho\u0159 u Mlad\u00e9 Vo\u017eice",
+            "district": "Zho\u0159 u Mlad\u00e9 Vo\u017eice"
+        },
+        "ds_id": "h3xawfv"
+    },
+    "Zho\u0159 u T\u00e1bora": {
+        "address": {
+            "street": "50",
+            "zip": "390 02",
+            "city": "Zho\u0159 u T\u00e1bora",
+            "district": "Zho\u0159 u T\u00e1bora"
+        },
+        "ds_id": "86vb8je"
+    },
+    "Zichovec": {
+        "address": {
+            "street": "100",
+            "zip": "273 74",
+            "city": "Zichovec",
+            "district": "Zichovec"
+        },
+        "ds_id": "t48apuk"
+    },
+    "Zl\u00e1manec": {
+        "address": {
+            "street": "95",
+            "zip": "687 12",
+            "city": "Zl\u00e1manec",
+            "district": "Zl\u00e1manec"
+        },
+        "ds_id": "2jdbvqc"
+    },
+    "Zlat\u00e1": {
+        "address": {
+            "street": "7",
+            "zip": "250 83",
+            "city": "Zlat\u00e1",
+            "district": "Zlat\u00e1"
+        },
+        "ds_id": "et7a6rc"
+    },
+    "Zlat\u00e1 Koruna": {
+        "address": {
+            "street": "55",
+            "zip": "382 02",
+            "city": "Zlat\u00e1 Koruna",
+            "district": "Zlat\u00e1 Koruna"
+        },
+        "ds_id": "6uzb2aq"
+    },
+    "Zlat\u00e1 Ole\u0161nice": {
+        "address": {
+            "street": "145",
+            "zip": "541 01",
+            "city": "Zlat\u00e1 Ole\u0161nice",
+            "district": "Zlat\u00e1 Ole\u0161nice"
+        },
+        "ds_id": "ks9bnai"
+    },
+    "Zl\u00e1tenka": {
+        "address": {
+            "street": "11",
+            "zip": "395 01",
+            "city": "Zl\u00e1tenka",
+            "district": "Zl\u00e1tenka"
+        },
+        "ds_id": "dchbhpr"
+    },
+    "Zlatn\u00edky - Hodkovice": {
+        "address": {
+            "street": "N\u00e1ves sv. Petra a Pavla 113",
+            "zip": "252 41",
+            "city": "Zlatn\u00edky-Hodkovice",
+            "district": "Zlatn\u00edky"
+        },
+        "ds_id": "iqvbycp"
+    },
+    "Zlechov": {
+        "address": {
+            "street": "540",
+            "zip": "687 10",
+            "city": "Zlechov",
+            "district": "Zlechov"
+        },
+        "ds_id": "gj6bjqf"
+    },
+    "Zlobice": {
+        "address": {
+            "street": "77",
+            "zip": "768 31",
+            "city": "Zlobice",
+            "district": "Zlobice"
+        },
+        "ds_id": "r5garjv"
+    },
+    "Zlon\u010dice": {
+        "address": {
+            "street": "40",
+            "zip": "278 01",
+            "city": "Zlon\u010dice",
+            "district": "Zlon\u010dice"
+        },
+        "ds_id": "h84ap4a"
+    },
+    "Zlon\u00edn": {
+        "address": {
+            "street": "Hlavn\u00ed 8",
+            "zip": "250 64",
+            "city": "Zlon\u00edn",
+            "district": "Zlon\u00edn"
+        },
+        "ds_id": "a9mak6v"
+    },
+    "Zlosy\u0148": {
+        "address": {
+            "street": "103",
+            "zip": "277 44",
+            "city": "Zlosy\u0148",
+            "district": "Zlosy\u0148"
+        },
+        "ds_id": "t4casmu"
+    },
+    "Zlukov": {
+        "address": {
+            "street": "66",
+            "zip": "391 81",
+            "city": "Zlukov",
+            "district": "Zlukov"
+        },
+        "ds_id": "me4amce"
+    },
+    "Zn\u011bt\u00ednek": {
+        "address": {
+            "street": "2",
+            "zip": "594 44",
+            "city": "Zn\u011bt\u00ednek",
+            "district": "Zn\u011bt\u00ednek"
+        },
+        "ds_id": "w53atfb"
+    },
+    "Zru\u010d-Senec": {
+        "address": {
+            "street": "Plze\u0148sk\u00e1 100",
+            "zip": "330 08",
+            "city": "Zru\u010d-Senec",
+            "district": "Senec"
+        },
+        "ds_id": "qakbjys"
+    },
+    "Zub\u010dice": {
+        "address": {
+            "street": "2",
+            "zip": "382 32",
+            "city": "Zub\u010dice",
+            "district": "Zub\u010dice"
+        },
+        "ds_id": "ekpaneh"
+    },
+    "Zubrnice": {
+        "address": {
+            "street": "38",
+            "zip": "400 02",
+            "city": "Zubrnice",
+            "district": "Zubrnice"
+        },
+        "ds_id": "u58a7hq"
+    },
+    "Zv\u00e1novice": {
+        "address": {
+            "street": "R\u016f\u017eov\u00e9 n\u00e1m. 158",
+            "zip": "251 65",
+            "city": "Zv\u00e1novice",
+            "district": "Zv\u00e1novice"
+        },
+        "ds_id": "c2jakzm"
+    },
+    "Zv\u011brkovice": {
+        "address": {
+            "street": "46",
+            "zip": "676 02",
+            "city": "Zv\u011brkovice",
+            "district": "Zv\u011brkovice"
+        },
+        "ds_id": "nhuaxfx"
+    },
+    "Zv\u011brotice": {
+        "address": {
+            "street": "83",
+            "zip": "392 01",
+            "city": "Zv\u011brotice",
+            "district": "Zv\u011brotice"
+        },
+        "ds_id": "hdgb7qu"
+    },
+    "Zv\u011b\u0159\u00ednek": {
+        "address": {
+            "street": "Ho\u0159\u00e1tevsk\u00e1 41",
+            "zip": "289 13",
+            "city": "Zv\u011b\u0159\u00ednek",
+            "district": "Zv\u011b\u0159\u00ednek"
+        },
+        "ds_id": "8yiane3"
+    },
+    "Zv\u011bstov": {
+        "address": {
+            "street": "113",
+            "zip": "257 06",
+            "city": "Zv\u011bstov",
+            "district": "Zv\u011bstov"
+        },
+        "ds_id": "qs2ajtp"
+    },
+    "Zv\u011bstovice": {
+        "address": {
+            "street": "1",
+            "zip": "582 82",
+            "city": "Zv\u011bstovice",
+            "district": "Zv\u011bstovice"
+        },
+        "ds_id": "fj5anxz"
+    },
+    "Zv\u00edkov": {
+        "address": {
+            "street": "39",
+            "zip": "382 32",
+            "city": "Zv\u00edkov",
+            "district": "Zv\u00edkov"
+        },
+        "ds_id": "9a6b4z4"
+    },
+    "Zv\u00edkovsk\u00e9 Podhrad\u00ed": {
+        "address": {
+            "street": "25",
+            "zip": "397 01",
+            "city": "Zv\u00edkovsk\u00e9 Podhrad\u00ed",
+            "district": "Zv\u00edkovsk\u00e9 Podhrad\u00ed"
+        },
+        "ds_id": "dzta98b"
+    },
+    "Zvole": {
+        "address": {
+            "street": "107",
+            "zip": "592 56",
+            "city": "Zvole",
+            "district": "Zvole"
+        },
+        "ds_id": "sv4atng"
+    },
+    "Zvolen\u011bves": {
+        "address": {
+            "street": "274",
+            "zip": "273 25",
+            "city": "Zvolen\u011bves",
+            "district": "Zvolen\u011bves"
+        },
+        "ds_id": "2kcbgky"
+    },
+    "Zvolenovice": {
+        "address": {
+            "street": "28",
+            "zip": "588 56",
+            "city": "Zvolenovice",
+            "district": "Zvolenovice"
+        },
+        "ds_id": "6frat2j"
+    },
+    "Zvotoky": {
+        "address": {
+            "street": "6",
+            "zip": "387 16",
+            "city": "Zvotoky",
+            "district": "Zvotoky"
+        },
+        "ds_id": "zszeciz"
+    },
+    "\u017dab\u010dice": {
+        "address": {
+            "street": "Kope\u010dek 4",
+            "zip": "664 63",
+            "city": "\u017dab\u010dice",
+            "district": "\u017dab\u010dice"
+        },
+        "ds_id": "hzwb22m"
+    },
+    "\u017dabe\u0148": {
+        "address": {
+            "street": "62",
+            "zip": "739 25",
+            "city": "\u017dabe\u0148",
+            "district": "\u017dabe\u0148"
+        },
+        "ds_id": "h3nbvg3"
+    },
+    "\u017dabonosy": {
+        "address": {
+            "street": "94",
+            "zip": "280 02",
+            "city": "\u017dabonosy",
+            "district": "\u017dabonosy"
+        },
+        "ds_id": "symavnp"
+    },
+    "\u017dabov\u0159esky": {
+        "address": {
+            "street": "43",
+            "zip": "373 41",
+            "city": "\u017dabov\u0159esky",
+            "district": "\u017dabov\u0159esky"
+        },
+        "ds_id": "m8hawzq"
+    },
+    "\u017dabov\u0159esky nad Oh\u0159\u00ed": {
+        "address": {
+            "street": "U Silnice 1",
+            "zip": "410 02",
+            "city": "\u017dabov\u0159esky nad Oh\u0159\u00ed",
+            "district": "\u017dabov\u0159esky nad Oh\u0159\u00ed"
+        },
+        "ds_id": "ac8bu8p"
+    },
+    "\u017d\u00e1dovice": {
+        "address": {
+            "street": "41",
+            "zip": "696 49",
+            "city": "\u017d\u00e1dovice",
+            "district": "\u017d\u00e1dovice"
+        },
+        "ds_id": "e7vbvvu"
+    },
+    "\u017d\u00e1kava": {
+        "address": {
+            "street": "76",
+            "zip": "332 04",
+            "city": "\u017d\u00e1kava",
+            "district": "\u017d\u00e1kava"
+        },
+        "ds_id": "gj3bv3h"
+    },
+    "\u017d\u00e1kovice": {
+        "address": {
+            "street": "100",
+            "zip": "753 54",
+            "city": "\u017d\u00e1kovice",
+            "district": "\u017d\u00e1kovice"
+        },
+        "ds_id": "u5faxxu"
+    },
+    "\u017d\u00e1ky": {
+        "address": {
+            "street": "112",
+            "zip": "286 01",
+            "city": "\u017d\u00e1ky",
+            "district": "\u0160trampouch"
+        },
+        "ds_id": "udpas32"
+    },
+    "\u017dalany": {
+        "address": {
+            "street": "Pra\u017esk\u00e1 93",
+            "zip": "417 63",
+            "city": "\u017dalany",
+            "district": "\u017dalany"
+        },
+        "ds_id": "9rubaeh"
+    },
+    "\u017dalhostice": {
+        "address": {
+            "street": "120",
+            "zip": "411 01",
+            "city": "\u017dalhostice",
+            "district": "\u017dalhostice"
+        },
+        "ds_id": "dvqaq4f"
+    },
+    "\u017dalkovice": {
+        "address": {
+            "street": "97",
+            "zip": "768 23",
+            "city": "\u017dalkovice",
+            "district": "\u017dalkovice"
+        },
+        "ds_id": "6epbjhy"
+    },
+    "\u017dampach": {
+        "address": {
+            "street": "11",
+            "zip": "564 01",
+            "city": "\u017dampach",
+            "district": "\u017dampach"
+        },
+        "ds_id": "9jwa87c"
+    },
+    "\u017d\u00e1r": {
+        "address": {
+            "street": "30",
+            "zip": "374 01",
+            "city": "\u017d\u00e1r",
+            "district": "\u017d\u00e1r"
+        },
+        "ds_id": "snwb6ku"
+    },
+    "\u017d\u00e1ravice": {
+        "address": {
+            "street": "29",
+            "zip": "533 16",
+            "city": "\u017d\u00e1ravice",
+            "district": "\u017d\u00e1ravice"
+        },
+        "ds_id": "634azpg"
+    },
+    "\u017daro\u0161ice": {
+        "address": {
+            "street": "14",
+            "zip": "696 34",
+            "city": "\u017daro\u0161ice",
+            "district": "\u017daro\u0161ice"
+        },
+        "ds_id": "fnab2bh"
+    },
+    "\u017d\u00e1rovn\u00e1": {
+        "address": {
+            "street": "5",
+            "zip": "383 01",
+            "city": "\u017d\u00e1rovn\u00e1",
+            "district": "\u017d\u00e1rovn\u00e1"
+        },
+        "ds_id": "5zxbjut"
+    },
+    "\u017dat\u010dany": {
+        "address": {
+            "street": "125",
+            "zip": "664 53",
+            "city": "\u017dat\u010dany",
+            "district": "\u017dat\u010dany"
+        },
+        "ds_id": "dxvb4gz"
+    },
+    "\u017dd\u00e1nov": {
+        "address": {
+            "street": "49",
+            "zip": "344 01",
+            "city": "\u017dd\u00e1nov",
+            "district": "\u017dd\u00e1nov"
+        },
+        "ds_id": "5kbbnyx"
+    },
+    "\u017d\u010f\u00e1r": {
+        "address": {
+            "street": "20",
+            "zip": "294 11",
+            "city": "\u017d\u010f\u00e1r",
+            "district": "B\u0159ehy"
+        },
+        "ds_id": "snbbact"
+    },
+    "\u017d\u010f\u00e1rec": {
+        "address": {
+            "street": "42",
+            "zip": "594 56",
+            "city": "\u017d\u010f\u00e1rec",
+            "district": "\u017d\u010f\u00e1rec"
+        },
+        "ds_id": "hnzbjgv"
+    },
+    "\u017d\u010f\u00e1rek": {
+        "address": {
+            "street": "1",
+            "zip": "463 44",
+            "city": "\u017d\u010f\u00e1rek",
+            "district": "\u017d\u010f\u00e1rek"
+        },
+        "ds_id": "5pzan6r"
+    },
+    "\u017d\u010f\u00e1rn\u00e1": {
+        "address": {
+            "street": "10",
+            "zip": "679 52",
+            "city": "\u017d\u010f\u00e1rn\u00e1",
+            "district": "\u017d\u010f\u00e1rn\u00e1"
+        },
+        "ds_id": "hu2bacy"
+    },
+    "\u017dd\u00edrec": {
+        "address": {
+            "street": "7",
+            "zip": "472 01",
+            "city": "\u017dd\u00edrec",
+            "district": "\u017dd\u00edrec"
+        },
+        "ds_id": "4zwan3e"
+    },
+    "\u017dehu\u0148": {
+        "address": {
+            "street": "136",
+            "zip": "289 05",
+            "city": "\u017dehu\u0148",
+            "district": "\u017dehu\u0148"
+        },
+        "ds_id": "26fak8d"
+    },
+    "\u017delatovice": {
+        "address": {
+            "street": "92",
+            "zip": "751 16",
+            "city": "\u017delatovice",
+            "district": "\u017delatovice"
+        },
+        "ds_id": "k5gbjxd"
+    },
+    "\u017dele\u010d": {
+        "address": {
+            "street": "26",
+            "zip": "391 74",
+            "city": "\u017dele\u010d",
+            "district": "\u017dele\u010d"
+        },
+        "ds_id": "xppbjs2"
+    },
+    "\u017delechovice": {
+        "address": {
+            "street": "1",
+            "zip": "783 91",
+            "city": "\u017delechovice",
+            "district": "\u017delechovice"
+        },
+        "ds_id": "37iasie"
+    },
+    "\u017delechovice nad D\u0159evnic\u00ed": {
+        "address": {
+            "street": "4. kv\u011btna 68",
+            "zip": "763 11",
+            "city": "\u017delechovice nad D\u0159evnic\u00ed",
+            "district": "\u017delechovice nad D\u0159evnic\u00ed"
+        },
+        "ds_id": "59fb37m"
+    },
+    "\u017delenice": {
+        "address": {
+            "street": "Doln\u00ed Ulice 75",
+            "zip": "273 41",
+            "city": "\u017delenice",
+            "district": "\u017delenice"
+        },
+        "ds_id": "8a5a78p"
+    },
+    "\u017dele\u0161ice": {
+        "address": {
+            "street": "24. dubna 16",
+            "zip": "664 43",
+            "city": "\u017dele\u0161ice",
+            "district": "\u017dele\u0161ice"
+        },
+        "ds_id": "vyparpk"
+    },
+    "\u017deletice": {
+        "address": {
+            "street": "49",
+            "zip": "671 34",
+            "city": "\u017deletice",
+            "district": "\u017deletice"
+        },
+        "ds_id": "d4fazvf"
+    },
+    "\u017delezn\u00e1": {
+        "address": {
+            "street": "28",
+            "zip": "266 01",
+            "city": "\u017delezn\u00e1",
+            "district": "\u017delezn\u00e1"
+        },
+        "ds_id": "3u8a68m"
+    },
+    "\u017delezn\u00e9": {
+        "address": {
+            "street": "79",
+            "zip": "666 01",
+            "city": "\u017delezn\u00e9",
+            "district": "\u017delezn\u00e9"
+        },
+        "ds_id": "6vybk6c"
+    },
+    "\u017deliv": {
+        "address": {
+            "street": "320",
+            "zip": "394 44",
+            "city": "\u017deliv",
+            "district": "\u017deliv"
+        },
+        "ds_id": "mpjaqju"
+    },
+    "\u017delivsko": {
+        "address": {
+            "street": "29",
+            "zip": "569 04",
+            "city": "\u017delivsko",
+            "district": "\u017delivsko"
+        },
+        "ds_id": "aeaa5r9"
+    },
+    "\u017del\u00edzy": {
+        "address": {
+            "street": "46",
+            "zip": "277 21",
+            "city": "\u017del\u00edzy",
+            "district": "\u017del\u00edzy"
+        },
+        "ds_id": "nm5atvm"
+    },
+    "\u017delkovice": {
+        "address": {
+            "street": "33",
+            "zip": "440 01",
+            "city": "\u017delkovice",
+            "district": "\u017delkovice"
+        },
+        "ds_id": "t7na37w"
+    },
+    "\u017denklava": {
+        "address": {
+            "street": "243",
+            "zip": "742 67",
+            "city": "\u017denklava",
+            "district": "\u017denklava"
+        },
+        "ds_id": "g99bjtq"
+    },
+    "\u017deranovice": {
+        "address": {
+            "street": "1",
+            "zip": "769 01",
+            "city": "\u017deranovice",
+            "district": "\u017deranovice"
+        },
+        "ds_id": "f5nbrmt"
+    },
+    "\u017deravice": {
+        "address": {
+            "street": "40",
+            "zip": "696 47",
+            "city": "\u017deravice",
+            "district": "\u017deravice"
+        },
+        "ds_id": "kb3baa3"
+    },
+    "\u017deraviny": {
+        "address": {
+            "street": "44",
+            "zip": "696 63",
+            "city": "\u017deraviny",
+            "district": "\u017deraviny"
+        },
+        "ds_id": "nnwa3ff"
+    },
+    "\u017der\u010dice": {
+        "address": {
+            "street": "23",
+            "zip": "294 46",
+            "city": "\u017der\u010dice",
+            "district": "\u017der\u010dice"
+        },
+        "ds_id": "wspbxkv"
+    },
+    "\u017deretice": {
+        "address": {
+            "street": "111",
+            "zip": "507 02",
+            "city": "\u017deretice",
+            "district": "\u017deretice"
+        },
+        "ds_id": "knvb37x"
+    },
+    "\u017dermanice": {
+        "address": {
+            "street": "48",
+            "zip": "739 37",
+            "city": "\u017dermanice",
+            "district": "\u017dermanice"
+        },
+        "ds_id": "fekb6nv"
+    },
+    "\u017dernovice": {
+        "address": {
+            "street": "65",
+            "zip": "383 01",
+            "city": "\u017dernovice",
+            "district": "\u017dernovice"
+        },
+        "ds_id": "78bb49k"
+    },
+    "\u017dernovn\u00edk": {
+        "address": {
+            "street": "2",
+            "zip": "679 21",
+            "city": "\u017dernovn\u00edk",
+            "district": "\u017dernovn\u00edk"
+        },
+        "ds_id": "nvqazvb"
+    },
+    "\u017derotice": {
+        "address": {
+            "street": "154",
+            "zip": "671 34",
+            "city": "\u017derotice",
+            "district": "\u017derotice"
+        },
+        "ds_id": "5a6azup"
+    },
+    "\u017derot\u00edn": {
+        "address": {
+            "street": "95",
+            "zip": "440 01",
+            "city": "\u017derot\u00edn",
+            "district": "\u017derot\u00edn"
+        },
+        "ds_id": "rq8byht"
+    },
+    "\u017der\u016ftky": {
+        "address": {
+            "street": "56",
+            "zip": "671 51",
+            "city": "\u017der\u016ftky",
+            "district": "\u017der\u016ftky"
+        },
+        "ds_id": "7hibi9e"
+    },
+    "\u017didn\u011bves": {
+        "address": {
+            "street": "13",
+            "zip": "294 06",
+            "city": "\u017didn\u011bves",
+            "district": "\u017didn\u011bves"
+        },
+        "ds_id": "baeauqp"
+    },
+    "\u017didovice": {
+        "address": {
+            "street": "78",
+            "zip": "411 83",
+            "city": "\u017didovice",
+            "district": "\u017didovice"
+        },
+        "ds_id": "qfxaqx4"
+    },
+    "\u017dihle": {
+        "address": {
+            "street": "53",
+            "zip": "331 65",
+            "city": "\u017dihle",
+            "district": "\u017dihle"
+        },
+        "ds_id": "39pb5wx"
+    },
+    "\u017dihobce": {
+        "address": {
+            "street": "20",
+            "zip": "342 01",
+            "city": "\u017dihobce",
+            "district": "\u017dihobce"
+        },
+        "ds_id": "gnkbx3q"
+    },
+    "\u017dichl\u00ednek": {
+        "address": {
+            "street": "3",
+            "zip": "563 01",
+            "city": "\u017dichl\u00ednek",
+            "district": "\u017dichl\u00ednek"
+        },
+        "ds_id": "i7ja5r5"
+    },
+    "\u017dichovice": {
+        "address": {
+            "street": "190",
+            "zip": "342 01",
+            "city": "\u017dichovice",
+            "district": "\u017dichovice"
+        },
+        "ds_id": "7vbbx2v"
+    },
+    "\u017dilina": {
+        "address": {
+            "street": "\u017dilinsk\u00e1 205",
+            "zip": "273 01",
+            "city": "\u017dilina",
+            "district": "\u017dilina"
+        },
+        "ds_id": "jy6asqc"
+    },
+    "\u017dilov": {
+        "address": {
+            "street": "54",
+            "zip": "330 11",
+            "city": "\u017dilov",
+            "district": "\u017dilov"
+        },
+        "ds_id": "tntajex"
+    },
+    "\u017dim": {
+        "address": {
+            "street": "28",
+            "zip": "415 01",
+            "city": "\u017dim",
+            "district": "\u017dim"
+        },
+        "ds_id": "e82at3d"
+    },
+    "\u017dimutice": {
+        "address": {
+            "street": "44",
+            "zip": "373 66",
+            "city": "\u017dimutice",
+            "district": "\u017dimutice"
+        },
+        "ds_id": "iphauix"
+    },
+    "\u017dirov": {
+        "address": {
+            "street": "30",
+            "zip": "393 01",
+            "city": "\u017dirov",
+            "district": "\u017dirov"
+        },
+        "ds_id": "2f6a9ta"
+    },
+    "\u017d\u00ed\u0161ov": {
+        "address": {
+            "street": "73",
+            "zip": "391 81",
+            "city": "\u017d\u00ed\u0161ov",
+            "district": "\u017d\u00ed\u0161ov"
+        },
+        "ds_id": "hf4bxd2"
+    },
+    "\u017ditenice": {
+        "address": {
+            "street": "Poho\u0159ansk\u00e1 118",
+            "zip": "411 41",
+            "city": "\u017ditenice",
+            "district": "\u017ditenice"
+        },
+        "ds_id": "qc2byb6"
+    },
+    "\u017d\u00edtkov\u00e1": {
+        "address": {
+            "street": "50",
+            "zip": "687 74",
+            "city": "\u017d\u00edtkov\u00e1",
+            "district": "\u017d\u00edtkov\u00e1"
+        },
+        "ds_id": "jrabjrs"
+    },
+    "\u017ditovlice": {
+        "address": {
+            "street": "54",
+            "zip": "289 34",
+            "city": "\u017ditovlice",
+            "district": "\u017ditovlice"
+        },
+        "ds_id": "wbsakj8"
+    },
+    "\u017divanice": {
+        "address": {
+            "street": "152",
+            "zip": "533 42",
+            "city": "\u017divanice",
+            "district": "\u017divanice"
+        },
+        "ds_id": "tyua5rz"
+    },
+    "\u017divotice": {
+        "address": {
+            "street": "17",
+            "zip": "335 44",
+            "city": "\u017divotice",
+            "district": "\u017divotice"
+        },
+        "ds_id": "93ybieg"
+    },
+    "\u017divotice u Nov\u00e9ho Ji\u010d\u00edna": {
+        "address": {
+            "street": "128",
+            "zip": "742 72",
+            "city": "\u017divotice u Nov\u00e9ho Ji\u010d\u00edna",
+            "district": "\u017divotice u Nov\u00e9ho Ji\u010d\u00edna"
+        },
+        "ds_id": "5pqbm7x"
+    },
+    "\u017di\u017eelice": {
+        "address": {
+            "street": "7",
+            "zip": "438 01",
+            "city": "\u017di\u017eelice",
+            "district": "\u017di\u017eelice"
+        },
+        "ds_id": "axzbjrx"
+    },
+    "\u017di\u017eice": {
+        "address": {
+            "street": "31",
+            "zip": "274 01",
+            "city": "\u017di\u017eice",
+            "district": "\u017di\u017eice"
+        },
+        "ds_id": "2zaatjy"
+    },
+    "\u017di\u017ekovo Pole": {
+        "address": {
+            "street": "9",
+            "zip": "582 22",
+            "city": "\u017di\u017ekovo Pole",
+            "district": "\u017di\u017ekovo Pole"
+        },
+        "ds_id": "psmayej"
+    },
+    "\u017dlebsk\u00e9 Chvalovice": {
+        "address": {
+            "street": "47",
+            "zip": "538 43",
+            "city": "\u017dlebsk\u00e9 Chvalovice",
+            "district": "\u017dlebsk\u00e9 Chvalovice"
+        },
+        "ds_id": "zesb3ig"
+    },
+    "\u017dleby": {
+        "address": {
+            "street": "Z\u00e1meck\u00e9 n\u00e1m\u011bst\u00ed 67",
+            "zip": "285 61",
+            "city": "\u017dleby",
+            "district": "\u017dleby"
+        },
+        "ds_id": "g6xa99q"
+    },
+    "\u017dlunice": {
+        "address": {
+            "street": "138",
+            "zip": "507 34",
+            "city": "\u017dlunice",
+            "district": "\u017dlunice"
+        },
+        "ds_id": "jqebni3"
+    },
+    "\u017dlutava": {
+        "address": {
+            "street": "271",
+            "zip": "763 61",
+            "city": "\u017dlutava",
+            "district": "\u017dlutava"
+        },
+        "ds_id": "xkda982"
+    },
+    "\u017dupanovice": {
+        "address": {
+            "street": "14",
+            "zip": "378 81",
+            "city": "\u017dupanovice",
+            "district": "\u017dupanovice"
+        },
+        "ds_id": "fzvjd2v"
+    },
+    "Brno": {
+        "address": {
+            "street": "Dominik\u00e1nsk\u00e9 n\u00e1m\u011bst\u00ed 196",
+            "zip": "602 00",
+            "city": "Brno",
+            "district": "Brno-m\u011bsto"
+        },
+        "ds_id": "a7kbrrn"
+    },
+    "\u010cesk\u00e9 Bud\u011bjovice": {
+        "address": {
+            "street": "n\u00e1m. P\u0159emysla Otakara II. 1",
+            "zip": "370 01",
+            "city": "\u010cesk\u00e9 Bud\u011bjovice",
+            "district": "\u010cesk\u00e9 Bud\u011bjovice 1"
+        },
+        "ds_id": "kjgb4yx"
+    },
+    "D\u011b\u010d\u00edn": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m. 1175",
+            "zip": "405 02",
+            "city": "D\u011b\u010d\u00edn",
+            "district": "D\u011b\u010d\u00edn IV-Podmokly"
+        },
+        "ds_id": "x9hbpfn"
+    },
+    "Fr\u00fddek-M\u00edstek": {
+        "address": {
+            "street": "Radni\u010dn\u00ed 1148",
+            "zip": "738 01",
+            "city": "Fr\u00fddek-M\u00edstek",
+            "district": "Fr\u00fddek"
+        },
+        "ds_id": "w4wbu9s"
+    },
+    "Hav\u00ed\u0159ov": {
+        "address": {
+            "street": "Svornosti 86",
+            "zip": "736 01",
+            "city": "Hav\u00ed\u0159ov",
+            "district": "M\u011bsto"
+        },
+        "ds_id": "7zhb6tn"
+    },
+    "Hradec Kr\u00e1lov\u00e9": {
+        "address": {
+            "street": "\u010ceskoslovensk\u00e9 arm\u00e1dy 408",
+            "zip": "500 03",
+            "city": "Hradec Kr\u00e1lov\u00e9",
+            "district": "Hradec Kr\u00e1lov\u00e9"
+        },
+        "ds_id": "bebb2in"
+    },
+    "Chomutov": {
+        "address": {
+            "street": "Zborovsk\u00e1 4602",
+            "zip": "430 01",
+            "city": "Chomutov",
+            "district": "Chomutov"
+        },
+        "ds_id": "497beyz"
+    },
+    "Jablonec nad Nisou": {
+        "address": {
+            "street": "M\u00edrov\u00e9 n\u00e1m\u011bst\u00ed 3100",
+            "zip": "466 01",
+            "city": "Jablonec nad Nisou",
+            "district": "Jablonec nad Nisou"
+        },
+        "ds_id": "wufbr2a"
+    },
+    "Jihlava": {
+        "address": {
+            "street": "Masarykovo n\u00e1m\u011bst\u00ed 97",
+            "zip": "586 01",
+            "city": "Jihlava",
+            "district": "Jihlava"
+        },
+        "ds_id": "jw5bxb4"
+    },
+    "Karlovy Vary": {
+        "address": {
+            "street": "Moskevsk\u00e1 2035",
+            "zip": "360 01",
+            "city": "Karlovy Vary",
+            "district": "Karlovy Vary"
+        },
+        "ds_id": "a89bwi8"
+    },
+    "Karvin\u00e1": {
+        "address": {
+            "street": "Fry\u0161t\u00e1tsk\u00e1 72",
+            "zip": "733 01",
+            "city": "Karvin\u00e1",
+            "district": "Fry\u0161t\u00e1t"
+        },
+        "ds_id": "es5bv8q"
+    },
+    "Mlad\u00e1 Boleslav": {
+        "address": {
+            "street": "Komensk\u00e9ho n\u00e1m\u011bst\u00ed 61",
+            "zip": "293 01",
+            "city": "Mlad\u00e1 Boleslav",
+            "district": "Mlad\u00e1 Boleslav I"
+        },
+        "ds_id": "82sbpfi"
+    },
+    "Most": {
+        "address": {
+            "street": "Radni\u010dn\u00ed 1",
+            "zip": "434 01",
+            "city": "Most",
+            "district": "Most"
+        },
+        "ds_id": "pffbfvy"
+    },
+    "Olomouc": {
+        "address": {
+            "street": "Horn\u00ed n\u00e1m\u011bst\u00ed 583",
+            "zip": "779 00",
+            "city": "Olomouc",
+            "district": "Olomouc"
+        },
+        "ds_id": "kazbzri"
+    },
+    "Opava": {
+        "address": {
+            "street": "Horn\u00ed n\u00e1m\u011bst\u00ed 382",
+            "zip": "746 01",
+            "city": "Opava",
+            "district": "M\u011bsto"
+        },
+        "ds_id": "5eabx4t"
+    },
+    "Ostrava": {
+        "address": {
+            "street": "Proke\u0161ovo n\u00e1m\u011bst\u00ed 1803",
+            "zip": "702 00",
+            "city": "Ostrava",
+            "district": "Moravsk\u00e1 Ostrava"
+        },
+        "ds_id": "5zubv7w"
+    },
+    "Pardubice": {
+        "address": {
+            "street": "Pern\u0161t\u00fdnsk\u00e9 n\u00e1m\u011bst\u00ed 1",
+            "zip": "530 02",
+            "city": "Pardubice",
+            "district": "Pardubice-Star\u00e9 M\u011bsto"
+        },
+        "ds_id": "ukzbx4z"
+    },
+    "Plze\u0148": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Republiky 1",
+            "zip": "301 00",
+            "city": "Plze\u0148",
+            "district": "Vnit\u0159n\u00ed M\u011bsto"
+        },
+        "ds_id": "6iybfxn"
+    },
+    "Prost\u011bjov": {
+        "address": {
+            "street": "n\u00e1m. T. G. Masaryka 130",
+            "zip": "796 01",
+            "city": "Prost\u011bjov",
+            "district": "Prost\u011bjov"
+        },
+        "ds_id": "mrtbrkb"
+    },
+    "P\u0159erov": {
+        "address": {
+            "street": "Bratrsk\u00e1 709",
+            "zip": "750 02",
+            "city": "P\u0159erov",
+            "district": "P\u0159erov I-M\u011bsto"
+        },
+        "ds_id": "etwb5sh"
+    },
+    "Teplice": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed Svobody 2",
+            "zip": "415 01",
+            "city": "Teplice",
+            "district": "Teplice"
+        },
+        "ds_id": "nmrb49w"
+    },
+    "T\u0159inec": {
+        "address": {
+            "street": "Jablunkovsk\u00e1 160",
+            "zip": "739 61",
+            "city": "T\u0159inec",
+            "district": "Star\u00e9 M\u011bsto"
+        },
+        "ds_id": "4anbqsj"
+    },
+    "\u00dast\u00ed nad Labem": {
+        "address": {
+            "street": "Velk\u00e1 Hradebn\u00ed 2336",
+            "zip": "400 01",
+            "city": "\u00dast\u00ed nad Labem",
+            "district": "\u00dast\u00ed nad Labem-centrum"
+        },
+        "ds_id": "vt8bhx2"
+    },
+    "Zl\u00edn": {
+        "address": {
+            "street": "n\u00e1m\u011bst\u00ed M\u00edru 12",
+            "zip": "760 01",
+            "city": "Zl\u00edn",
+            "district": "Zl\u00edn"
+        },
+        "ds_id": "5ttb7bs"
+    }
+}
-- 
GitLab