
/*
	These blocks are hand-written HTML from Directus. The product grids are authored
	inconsistently — some as `grid grid-cols-4`, some as a `flex` row, with images
	carrying `w-auto h-auto` — so cells came out different sizes on every page. The
	content is left exactly as authored; the rules below impose one card, one image
	height, one wordmark height, whatever the markup underneath says.

	A product cell is recognised by shape — `<div><a><img></a></div>` — via :has(),
	so these rules can't leak into the non-product blocks that share this component.
*/
.cms-html {
	--tw-text-opacity: 1;
	color: rgb(var(--color-gray-600) / var(--tw-text-opacity, 1));
}
.cms-html:is(.dark *) {
	--tw-text-opacity: 1;
	color: rgb(var(--color-gray-300) / var(--tw-text-opacity, 1));
}
/* BlockContainer owns the vertical rhythm; authored blocks often add their own. */
.cms-html > *:first-child {
	margin-top: 0;
}
.cms-html > *:last-child {
	margin-bottom: 0;
}
/* ---- Product grid ------------------------------------------------------- */
.cms-html [class*='grid']:has(> div > a > img),
.cms-html [class*='flex']:has(> div > a > img) {
	/*
		A hairline lattice, not gapped cards: negative margins collapse adjacent
		borders into one shared rule and the wrapper clips the outer edges, so it
		holds at any column count and any wrap point.
	*/
	display: flex;
	flex-wrap: wrap;
	overflow: hidden;
	gap: 0;
	width: 100%;
	max-width: 84rem;
	margin-inline: auto;
	padding: 0;
	border: 1px solid var(--border);
	border-radius: 12px;
}
.cms-html div:has(> a > img) {
	display: flex;
	width: 100%;
	margin-left: -1px;
	margin-top: -1px;
	border-left: 1px solid var(--border);
	border-top: 1px solid var(--border);
}
@media (min-width: 640px) {
.cms-html div:has(> a > img) {
		width: 50%;
}
}
@media (min-width: 768px) {
.cms-html div:has(> a > img) {
		width: 33.3333%;
}
}
@media (min-width: 1024px) {
.cms-html div:has(> a > img) {
		width: 25%;
}
}
.cms-html a:has(> img) {
	display: flex;
	width: 100%;
	flex-direction: column;
	align-items: center;
	justify-content: space-between;
	gap: 1.25rem;
	padding-left: 1.25rem;
	padding-right: 1.25rem;
	padding-top: 2rem;
	padding-bottom: 2rem;
	text-decoration-line: none;
	transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
	transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
	transition-duration: 150ms;
}
@media (min-width: 640px) {
.cms-html a:has(> img) {
		gap: 1.5rem;
		padding-left: 1.5rem;
		padding-right: 1.5rem;
		padding-top: 2.5rem;
		padding-bottom: 2.5rem;
}
}
.cms-html a:has(> img):hover {
	--tw-bg-opacity: 1;
	background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity, 1));
}
.cms-html a:has(> img):hover:is(.dark *) {
	--tw-bg-opacity: 1;
	background-color: rgb(var(--color-gray-900) / var(--tw-bg-opacity, 1));
}
/* First image is the instrument, second is its wordmark — the product's name. */
.cms-html a > img {
	width: 100%;
	-o-object-fit: contain;
	   object-fit: contain;
	mix-blend-mode: darken;
	/*
		These JPEGs are cut on a near-white background — 248,248,248, not 255 — and
		a blend mode can only erase a background that is lighter than the surface
		behind it. On the tinted section band that mostly works out, but where two
		blended images sit in the same anchor they composite against each other
		rather than the band, and the wordmark lands 6 levels dark: the grey box
		that was visible behind Abacus-Jr on /hematology-instruments.

		Lifting the highlights the last 3% clips that background to true white, so
		`darken` erases it against any surface. Measured cost to the artwork is a
		single level on the brand red (239,39,74 -> 245,40,75), well inside the
		shift blending already introduces.
	*/
	filter: brightness(1.03);
}
.cms-html a > img:first-of-type {
	height: 11rem;
}
.cms-html a > img:last-of-type {
	height: 2.25rem;
	margin-top: auto;
	opacity: 0.9;
	transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
	transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
	transition-duration: 150ms;
}
.cms-html a:has(> img):hover > img:last-of-type {
	opacity: 1;
}
/* A single image in a cell is the instrument, so give it the full height. */
.cms-html a > img:only-of-type {
	height: 15rem;
}
@media (min-width: 768px) {
.cms-html a > img:first-of-type {
		height: 16rem;
}
.cms-html a > img:last-of-type {
		height: 2.75rem;
}
.cms-html a > img:only-of-type {
		height: 18rem;
}
}
/* ---- Authored hero (distributors) --------------------------------------- */
.cms-html .cms-hero {
	margin-left: auto;
	margin-right: auto;
	max-width: 48rem;
	text-align: center;
}
.cms-html .cms-hero h2 {
	margin-bottom: 0px;
	font-family: var(--font-display), ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
	font-size: 2rem;
	line-height: 1.20;
	letter-spacing: -0.016em;
	font-weight: 700;
	--tw-text-opacity: 1;
	color: rgb(var(--color-gray-800) / var(--tw-text-opacity, 1));
}
.cms-html .cms-hero h2:is(.dark *) {
	--tw-text-opacity: 1;
	color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}
@media (min-width: 768px) {
.cms-html .cms-hero h2 {
		font-size: 2.75rem;
		line-height: 1.10;
		letter-spacing: -0.02em;
		font-weight: 700;
}
}
.cms-html .cms-hero h2 {
	letter-spacing: -0.02em;
	line-height: 1.12;
}
.cms-html .cms-hero em {
	font-style: normal;
	--tw-text-opacity: 1;
	color: rgb(var(--color-primary-DEFAULT) / var(--tw-text-opacity, 1));
}
.cms-html .cms-hero-logo {
	margin-left: auto;
	margin-right: auto;
	margin-top: 2rem;
	height: 2.5rem;
	-o-object-fit: contain;
	   object-fit: contain;
}
@media (min-width: 768px) {
.cms-html .cms-hero-logo {
		height: 3rem;
}
}
.cms-html .cms-hero-logo {
	mix-blend-mode: darken;
}
.cms-html .cms-hero p {
	margin-left: auto;
	margin-right: auto;
	margin-top: 1.25rem;
	max-width: 36rem;
	font-family: var(--font-display), ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
	font-size: 0.9375rem;
	line-height: 1.5;
	letter-spacing: 0em;
	font-weight: 500;
	--tw-text-opacity: 1;
	color: rgb(var(--color-gray-600) / var(--tw-text-opacity, 1));
}
.cms-html .cms-hero p:is(.dark *) {
	--tw-text-opacity: 1;
	color: rgb(var(--color-gray-300) / var(--tw-text-opacity, 1));
}
@media (min-width: 768px) {
.cms-html .cms-hero p {
		font-size: 1.125rem;
		line-height: 1.56;
		letter-spacing: -0.005em;
		font-weight: 500;
}
}
.cms-html .cms-hero-cta {
	margin-top: 2rem;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: var(--border-radius-button);
	--tw-bg-opacity: 1;
	background-color: rgb(var(--color-primary-DEFAULT) / var(--tw-bg-opacity, 1));
	padding-left: 1.5rem;
	padding-right: 1.5rem;
	padding-top: 0.75rem;
	padding-bottom: 0.75rem;
	font-family: var(--font-sans), ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
	font-size: 0.875rem;
	line-height: 1.4;
	letter-spacing: 0em;
	font-weight: 600;
	--tw-text-opacity: 1;
	color: rgb(255 255 255 / var(--tw-text-opacity, 1));
	text-decoration-line: none;
	transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
	transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
	transition-duration: 150ms;
}
.cms-html .cms-hero-cta:hover {
	opacity: 0.9;
}
/* ---- Loose content ------------------------------------------------------ */
.cms-html > img,
.cms-html p > img {
	margin-left: auto;
	margin-right: auto;
	height: auto;
	max-width: 100%;
	-o-object-fit: contain;
	   object-fit: contain;
	mix-blend-mode: darken;
}
.cms-html h1,
.cms-html h2,
.cms-html h3 {
	font-family: var(--font-display), ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
	font-weight: 700;
	letter-spacing: -0.025em;
	--tw-text-opacity: 1;
	color: rgb(var(--color-gray-800) / var(--tw-text-opacity, 1));
}
.cms-html h1:is(.dark *),
.cms-html h2:is(.dark *),
.cms-html h3:is(.dark *) {
	--tw-text-opacity: 1;
	color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}
.cms-html h2 {
	margin-bottom: 1.25rem;
	font-size: 1.25rem;
	line-height: 1.35;
	letter-spacing: -0.01em;
	font-weight: 700;
}
@media (min-width: 768px) {
.cms-html h2 {
		font-size: 1.5rem;
		line-height: 1.33;
		letter-spacing: -0.015em;
		font-weight: 700;
}
}
.cms-html h3 {
	margin-bottom: 1.25rem;
	font-size: 1rem;
	line-height: 1.4;
	letter-spacing: -0.01em;
	font-weight: 600;
}
@media (min-width: 768px) {
.cms-html h3 {
		font-size: 1.0625rem;
		line-height: 1.4;
		letter-spacing: -0.01em;
		font-weight: 600;
}
}
.cms-html p {
	line-height: 1.625;
}
.cms-html p + p {
	margin-top: 1rem;
}

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiL3Nydi9zbWktd2ViL3JlcG8vY29tcG9uZW50cy9ibG9ja3MvUmF3SHRtbC52dWUiLCJtYXBwaW5ncyI6IjtBQXFCQTs7Ozs7Ozs7O0NBU0M7QUFFQTtDQUFBLG9CQUF1QztDQUF2QztBQUF1QztBQUF2QztDQUFBLG9CQUF1QztDQUF2QztBQUF1QztBQUd4QyxrRkFBa0Y7QUFDbEY7Q0FDQyxhQUFhO0FBQ2Q7QUFFQTtDQUNDLGdCQUFnQjtBQUNqQjtBQUVBLDhFQUE4RTtBQUU5RTs7Q0FFQzs7OztFQUlDO0NBQ0QsYUFBYTtDQUNiLGVBQWU7Q0FDZixnQkFBZ0I7Q0FDaEIsTUFBTTtDQUNOLFdBQVc7Q0FDWCxnQkFBZ0I7Q0FDaEIsbUJBQW1CO0NBQ25CLFVBQVU7Q0FDViwrQkFBK0I7Q0FDL0IsbUJBQW1CO0FBQ3BCO0FBRUE7Q0FDQyxhQUFhO0NBQ2IsV0FBVztDQUNYLGlCQUFpQjtDQUNqQixnQkFBZ0I7Q0FDaEIsb0NBQW9DO0NBQ3BDLG1DQUFtQztBQUNwQztBQUVBO0FBQ0M7RUFDQyxVQUFVO0FBQ1g7QUFDRDtBQUVBO0FBQ0M7RUFDQyxlQUFlO0FBQ2hCO0FBQ0Q7QUFFQTtBQUNDO0VBQ0MsVUFBVTtBQUNYO0FBQ0Q7QUFHQztDQUFBLGFBQTBIO0NBQTFILFdBQTBIO0NBQTFILHNCQUEwSDtDQUExSCxtQkFBMEg7Q0FBMUgsOEJBQTBIO0NBQTFILFlBQTBIO0NBQTFILHFCQUEwSDtDQUExSCxzQkFBMEg7Q0FBMUgsaUJBQTBIO0NBQTFILG9CQUEwSDtDQUExSCwwQkFBMEg7Q0FBMUgsd0pBQTBIO0NBQTFILHdEQUEwSDtDQUExSDtBQUEwSDtBQUExSDtBQUFBO0VBQUEsV0FBMEg7RUFBMUgsb0JBQTBIO0VBQTFILHFCQUEwSDtFQUExSCxtQkFBMEg7RUFBMUg7QUFBMEg7QUFBQTtBQUkxSDtDQUFBLGtCQUFrQztDQUFsQztBQUFrQztBQUFsQztDQUFBLGtCQUFrQztDQUFsQztBQUFrQztBQUduQyxnRkFBZ0Y7QUFFL0U7Q0FBQSxXQUE2QztDQUE3Qyxz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QTtBQUkzQztDQUFBO0FBQXNCO0FBSXRCO0NBQUE7QUFBVyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiUmF3SHRtbC52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cbmV4cG9ydCBpbnRlcmZhY2UgUmF3SHRtbEJsb2NrUHJvcHMge1xuXHRpZDogc3RyaW5nO1xuXHRyYXdfaHRtbDogc3RyaW5nO1xuXHRmdWxsX3dpZHRoOiBib29sZWFuO1xufVxuXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPHtcblx0ZGF0YTogUmF3SHRtbEJsb2NrUHJvcHM7XG59PigpO1xuXG4vLyBUaGUgcGFnZSBoZWFkZXIgb3ducyB0aGUgPGgxPjsgYXV0aG9yZWQgYmxvY2tzIG11c3Qgbm90IGFkZCBhIHNlY29uZCBvbmUuXG5jb25zdCBodG1sID0gY29tcHV0ZWQoKCkgPT4gKHByb3BzLmRhdGE/LnJhd19odG1sID8/ICcnKS5yZXBsYWNlKC88KFxcLz8paDEoXFxzfD4pL2dpLCAnPCQxaDIkMicpKTtcbjwvc2NyaXB0PlxuPHRlbXBsYXRlPlxuXHQ8QmxvY2tDb250YWluZXIgOmZ1bGwtd2lkdGg9XCJkYXRhLmZ1bGxfd2lkdGhcIj5cblx0XHQ8ZGl2IGNsYXNzPVwiY21zLWh0bWxcIiB2LWh0bWw9XCJodG1sXCIgLz5cblx0PC9CbG9ja0NvbnRhaW5lcj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwicG9zdGNzc1wiPlxuLypcblx0VGhlc2UgYmxvY2tzIGFyZSBoYW5kLXdyaXR0ZW4gSFRNTCBmcm9tIERpcmVjdHVzLiBUaGUgcHJvZHVjdCBncmlkcyBhcmUgYXV0aG9yZWRcblx0aW5jb25zaXN0ZW50bHkg4oCUIHNvbWUgYXMgYGdyaWQgZ3JpZC1jb2xzLTRgLCBzb21lIGFzIGEgYGZsZXhgIHJvdywgd2l0aCBpbWFnZXNcblx0Y2FycnlpbmcgYHctYXV0byBoLWF1dG9gIOKAlCBzbyBjZWxscyBjYW1lIG91dCBkaWZmZXJlbnQgc2l6ZXMgb24gZXZlcnkgcGFnZS4gVGhlXG5cdGNvbnRlbnQgaXMgbGVmdCBleGFjdGx5IGFzIGF1dGhvcmVkOyB0aGUgcnVsZXMgYmVsb3cgaW1wb3NlIG9uZSBjYXJkLCBvbmUgaW1hZ2Vcblx0aGVpZ2h0LCBvbmUgd29yZG1hcmsgaGVpZ2h0LCB3aGF0ZXZlciB0aGUgbWFya3VwIHVuZGVybmVhdGggc2F5cy5cblxuXHRBIHByb2R1Y3QgY2VsbCBpcyByZWNvZ25pc2VkIGJ5IHNoYXBlIOKAlCBgPGRpdj48YT48aW1nPjwvYT48L2Rpdj5gIOKAlCB2aWEgOmhhcygpLFxuXHRzbyB0aGVzZSBydWxlcyBjYW4ndCBsZWFrIGludG8gdGhlIG5vbi1wcm9kdWN0IGJsb2NrcyB0aGF0IHNoYXJlIHRoaXMgY29tcG9uZW50LlxuKi9cbi5jbXMtaHRtbCB7XG5cdEBhcHBseSB0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTMwMDtcbn1cblxuLyogQmxvY2tDb250YWluZXIgb3ducyB0aGUgdmVydGljYWwgcmh5dGhtOyBhdXRob3JlZCBibG9ja3Mgb2Z0ZW4gYWRkIHRoZWlyIG93bi4gKi9cbi5jbXMtaHRtbCA+ICo6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwO1xufVxuXG4uY21zLWh0bWwgPiAqOmxhc3QtY2hpbGQge1xuXHRtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4vKiAtLS0tIFByb2R1Y3QgZ3JpZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi5jbXMtaHRtbCBbY2xhc3MqPSdncmlkJ106aGFzKD4gZGl2ID4gYSA+IGltZyksXG4uY21zLWh0bWwgW2NsYXNzKj0nZmxleCddOmhhcyg+IGRpdiA+IGEgPiBpbWcpIHtcblx0Lypcblx0XHRBIGhhaXJsaW5lIGxhdHRpY2UsIG5vdCBnYXBwZWQgY2FyZHM6IG5lZ2F0aXZlIG1hcmdpbnMgY29sbGFwc2UgYWRqYWNlbnRcblx0XHRib3JkZXJzIGludG8gb25lIHNoYXJlZCBydWxlIGFuZCB0aGUgd3JhcHBlciBjbGlwcyB0aGUgb3V0ZXIgZWRnZXMsIHNvIGl0XG5cdFx0aG9sZHMgYXQgYW55IGNvbHVtbiBjb3VudCBhbmQgYW55IHdyYXAgcG9pbnQuXG5cdCovXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtd3JhcDogd3JhcDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0Z2FwOiAwO1xuXHR3aWR0aDogMTAwJTtcblx0bWF4LXdpZHRoOiA4NHJlbTtcblx0bWFyZ2luLWlubGluZTogYXV0bztcblx0cGFkZGluZzogMDtcblx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcbn1cblxuLmNtcy1odG1sIGRpdjpoYXMoPiBhID4gaW1nKSB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdHdpZHRoOiAxMDAlO1xuXHRtYXJnaW4tbGVmdDogLTFweDtcblx0bWFyZ2luLXRvcDogLTFweDtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG5cdC5jbXMtaHRtbCBkaXY6aGFzKD4gYSA+IGltZykge1xuXHRcdHdpZHRoOiA1MCU7XG5cdH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG5cdC5jbXMtaHRtbCBkaXY6aGFzKD4gYSA+IGltZykge1xuXHRcdHdpZHRoOiAzMy4zMzMzJTtcblx0fVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XG5cdC5jbXMtaHRtbCBkaXY6aGFzKD4gYSA+IGltZykge1xuXHRcdHdpZHRoOiAyNSU7XG5cdH1cbn1cblxuLmNtcy1odG1sIGE6aGFzKD4gaW1nKSB7XG5cdEBhcHBseSBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gdy1mdWxsIGdhcC01IHB4LTUgcHktOCBuby11bmRlcmxpbmUgdHJhbnNpdGlvbiBzbTpnYXAtNiBzbTpweC02IHNtOnB5LTEwO1xufVxuXG4uY21zLWh0bWwgYTpoYXMoPiBpbWcpOmhvdmVyIHtcblx0QGFwcGx5IGJnLWdyYXktNTAgZGFyazpiZy1ncmF5LTkwMDtcbn1cblxuLyogRmlyc3QgaW1hZ2UgaXMgdGhlIGluc3RydW1lbnQsIHNlY29uZCBpcyBpdHMgd29yZG1hcmsg4oCUIHRoZSBwcm9kdWN0J3MgbmFtZS4gKi9cbi5jbXMtaHRtbCBhID4gaW1nIHtcblx0QGFwcGx5IG9iamVjdC1jb250YWluIHctZnVsbCBtaXgtYmxlbmQtZGFya2VuO1xuXHQvKlxuXHRcdFRoZXNlIEpQRUdzIGFyZSBjdXQgb24gYSBuZWFyLXdoaXRlIGJhY2tncm91bmQg4oCUIDI0OCwyNDgsMjQ4LCBub3QgMjU1IOKAlCBhbmRcblx0XHRhIGJsZW5kIG1vZGUgY2FuIG9ubHkgZXJhc2UgYSBiYWNrZ3JvdW5kIHRoYXQgaXMgbGlnaHRlciB0aGFuIHRoZSBzdXJmYWNlXG5cdFx0YmVoaW5kIGl0LiBPbiB0aGUgdGludGVkIHNlY3Rpb24gYmFuZCB0aGF0IG1vc3RseSB3b3JrcyBvdXQsIGJ1dCB3aGVyZSB0d29cblx0XHRibGVuZGVkIGltYWdlcyBzaXQgaW4gdGhlIHNhbWUgYW5jaG9yIHRoZXkgY29tcG9zaXRlIGFnYWluc3QgZWFjaCBvdGhlclxuXHRcdHJhdGhlciB0aGFuIHRoZSBiYW5kLCBhbmQgdGhlIHdvcmRtYXJrIGxhbmRzIDYgbGV2ZWxzIGRhcms6IHRoZSBncmV5IGJveFxuXHRcdHRoYXQgd2FzIHZpc2libGUgYmVoaW5kIEFiYWN1cy1KciBvbiAvaGVtYXRvbG9neS1pbnN0cnVtZW50cy5cblxuXHRcdExpZnRpbmcgdGhlIGhpZ2hsaWdodHMgdGhlIGxhc3QgMyUgY2xpcHMgdGhhdCBiYWNrZ3JvdW5kIHRvIHRydWUgd2hpdGUsIHNvXG5cdFx0YGRhcmtlbmAgZXJhc2VzIGl0IGFnYWluc3QgYW55IHN1cmZhY2UuIE1lYXN1cmVkIGNvc3QgdG8gdGhlIGFydHdvcmsgaXMgYVxuXHRcdHNpbmdsZSBsZXZlbCBvbiB0aGUgYnJhbmQgcmVkICgyMzksMzksNzQgLT4gMjQ1LDQwLDc1KSwgd2VsbCBpbnNpZGUgdGhlXG5cdFx0c2hpZnQgYmxlbmRpbmcgYWxyZWFkeSBpbnRyb2R1Y2VzLlxuXHQqL1xuXHRmaWx0ZXI6IGJyaWdodG5lc3MoMS4wMyk7XG59XG5cbi5jbXMtaHRtbCBhID4gaW1nOmZpcnN0LW9mLXR5cGUge1xuXHRoZWlnaHQ6IDExcmVtO1xufVxuXG4uY21zLWh0bWwgYSA+IGltZzpsYXN0LW9mLXR5cGUge1xuXHRoZWlnaHQ6IDIuMjVyZW07XG5cdG1hcmdpbi10b3A6IGF1dG87XG5cdEBhcHBseSB0cmFuc2l0aW9uIG9wYWNpdHktOTA7XG59XG5cbi5jbXMtaHRtbCBhOmhhcyg+IGltZyk6aG92ZXIgPiBpbWc6bGFzdC1vZi10eXBlIHtcblx0QGFwcGx5IG9wYWNpdHktMTAwO1xufVxuXG4vKiBBIHNpbmdsZSBpbWFnZSBpbiBhIGNlbGwgaXMgdGhlIGluc3RydW1lbnQsIHNvIGdpdmUgaXQgdGhlIGZ1bGwgaGVpZ2h0LiAqL1xuLmNtcy1odG1sIGEgPiBpbWc6b25seS1vZi10eXBlIHtcblx0aGVpZ2h0OiAxNXJlbTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG5cdC5jbXMtaHRtbCBhID4gaW1nOmZpcnN0LW9mLXR5cGUge1xuXHRcdGhlaWdodDogMTZyZW07XG5cdH1cblxuXHQuY21zLWh0bWwgYSA+IGltZzpsYXN0LW9mLXR5cGUge1xuXHRcdGhlaWdodDogMi43NXJlbTtcblx0fVxuXG5cdC5jbXMtaHRtbCBhID4gaW1nOm9ubHktb2YtdHlwZSB7XG5cdFx0aGVpZ2h0OiAxOHJlbTtcblx0fVxufVxuXG4vKiAtLS0tIEF1dGhvcmVkIGhlcm8gKGRpc3RyaWJ1dG9ycykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi5jbXMtaHRtbCAuY21zLWhlcm8ge1xuXHRAYXBwbHkgbWF4LXctM3hsIG14LWF1dG8gdGV4dC1jZW50ZXI7XG59XG5cbi5jbXMtaHRtbCAuY21zLWhlcm8gaDIge1xuXHRAYXBwbHkgbWItMCBmb250LWRpc3BsYXkgdGV4dC1zZWN0aW9uLWgyLXNtIG1kOnRleHQtc2VjdGlvbi1oMiB0ZXh0LWdyYXktODAwIGRhcms6dGV4dC13aGl0ZTtcblx0bGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG5cdGxpbmUtaGVpZ2h0OiAxLjEyO1xufVxuXG4uY21zLWh0bWwgLmNtcy1oZXJvIGVtIHtcblx0QGFwcGx5IG5vdC1pdGFsaWMgdGV4dC1wcmltYXJ5O1xufVxuXG4uY21zLWh0bWwgLmNtcy1oZXJvLWxvZ28ge1xuXHRAYXBwbHkgb2JqZWN0LWNvbnRhaW4gaC0xMCBteC1hdXRvIG10LTggbWQ6aC0xMjtcblx0bWl4LWJsZW5kLW1vZGU6IGRhcmtlbjtcbn1cblxuLmNtcy1odG1sIC5jbXMtaGVybyBwIHtcblx0QGFwcGx5IG1heC13LWNvcHkgbXgtYXV0byBtdC01IGZvbnQtZGlzcGxheSB0ZXh0LWhlcm8tc3ViLXNtIG1kOnRleHQtaGVyby1zdWIgdGV4dC1ncmF5LTYwMCBkYXJrOnRleHQtZ3JheS0zMDA7XG59XG5cbi5jbXMtaHRtbCAuY21zLWhlcm8tY3RhIHtcblx0QGFwcGx5IGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC02IHB5LTMgbXQtOCBmb250LXNhbnMgdGV4dC1idG4gdGV4dC13aGl0ZSBuby11bmRlcmxpbmUgdHJhbnNpdGlvbiBiZy1wcmltYXJ5IHJvdW5kZWQtYnV0dG9uO1xufVxuXG4uY21zLWh0bWwgLmNtcy1oZXJvLWN0YTpob3ZlciB7XG5cdEBhcHBseSBvcGFjaXR5LTkwO1xufVxuXG4vKiAtLS0tIExvb3NlIGNvbnRlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi5jbXMtaHRtbCA+IGltZyxcbi5jbXMtaHRtbCBwID4gaW1nIHtcblx0QGFwcGx5IG9iamVjdC1jb250YWluIG1heC13LWZ1bGwgaC1hdXRvIG14LWF1dG8gbWl4LWJsZW5kLWRhcmtlbjtcbn1cblxuLmNtcy1odG1sIGgxLFxuLmNtcy1odG1sIGgyLFxuLmNtcy1odG1sIGgzIHtcblx0QGFwcGx5IGZvbnQtZGlzcGxheSBmb250LWJvbGQgdHJhY2tpbmctdGlnaHQgdGV4dC1ncmF5LTgwMCBkYXJrOnRleHQtd2hpdGU7XG59XG5cbi5jbXMtaHRtbCBoMiB7XG5cdEBhcHBseSBtYi01IHRleHQtYXJ0aWNsZS1oMi1zbSBtZDp0ZXh0LWFydGljbGUtaDI7XG59XG5cbi5jbXMtaHRtbCBoMyB7XG5cdEBhcHBseSBtYi01IHRleHQtY2FyZC1oMy1zbSBtZDp0ZXh0LWNhcmQtaDM7XG59XG5cbi5jbXMtaHRtbCBwIHtcblx0QGFwcGx5IGxlYWRpbmctcmVsYXhlZDtcbn1cblxuLmNtcy1odG1sIHAgKyBwIHtcblx0QGFwcGx5IG10LTQ7XG59XG48L3N0eWxlPlxuIl19 */