mirror of
https://github.com/gchq/CyberChef.git
synced 2026-02-22 09:41:48 +01:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
976c8b2d56 | ||
|
|
98fb680a92 | ||
|
|
d71dad8568 | ||
|
|
8df8028f43 | ||
|
|
c97baa6fdf | ||
|
|
448cfc8012 | ||
|
|
9b2868a178 | ||
|
|
7ba58cd4ce |
12
.github/workflows/releases.yml
vendored
12
.github/workflows/releases.yml
vendored
@@ -105,6 +105,18 @@ jobs:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Set node version
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 18
|
||||
registry-url: "https://registry.npmjs.org"
|
||||
|
||||
- name: Install
|
||||
run: npm ci
|
||||
|
||||
- name: Create machine generated files
|
||||
run: npm run node
|
||||
|
||||
- name: Reset node version ready for publish
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: ^24.5
|
||||
|
||||
@@ -29,4 +29,6 @@ RUN npm run build
|
||||
#########################################
|
||||
FROM nginx:stable-alpine AS cyberchef
|
||||
|
||||
LABEL maintainer="GCHQ <oss@gchq.gov.uk>"
|
||||
|
||||
COPY --from=builder /app/build/prod /usr/share/nginx/html/
|
||||
|
||||
12
Gruntfile.js
12
Gruntfile.js
@@ -432,18 +432,6 @@ module.exports = function (grunt) {
|
||||
},
|
||||
stdout: false
|
||||
},
|
||||
fixJimpModule: {
|
||||
command: function () {
|
||||
switch (process.platform) {
|
||||
case "darwin":
|
||||
// Space added before comma to prevent multiple modifications
|
||||
return `sed -i '' 's/"es\\/index.js",/"es\\/index.js" ,\\n "type": "module",/' ./node_modules/jimp/package.json`;
|
||||
default:
|
||||
return `sed -i 's/"es\\/index.js",/"es\\/index.js" ,\\n "type": "module",/' ./node_modules/jimp/package.json`;
|
||||
}
|
||||
},
|
||||
stdout: false
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
901
package-lock.json
generated
901
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cyberchef",
|
||||
"version": "10.22.0",
|
||||
"version": "10.22.1",
|
||||
"description": "The Cyber Swiss Army Knife for encryption, encoding, compression and data analysis.",
|
||||
"author": "n1474335 <n1474335@gmail.com>",
|
||||
"homepage": "https://gchq.github.io/CyberChef",
|
||||
@@ -136,7 +136,7 @@
|
||||
"hash-wasm": "^4.12.0",
|
||||
"highlight.js": "^11.9.0",
|
||||
"ieee754": "^1.2.1",
|
||||
"jimp": "^0.22.12",
|
||||
"jimp": "^1.6.0",
|
||||
"jq-web": "^0.5.1",
|
||||
"jquery": "3.7.1",
|
||||
"js-sha3": "^0.9.3",
|
||||
@@ -200,7 +200,7 @@
|
||||
"testuidev": "npx nightwatch --env=dev",
|
||||
"lint": "npx grunt lint",
|
||||
"lint:grammar": "cspell ./src",
|
||||
"postinstall": "npx grunt exec:fixCryptoApiImports && npx grunt exec:fixSnackbarMarkup && npx grunt exec:fixJimpModule",
|
||||
"postinstall": "npx grunt exec:fixCryptoApiImports && npx grunt exec:fixSnackbarMarkup",
|
||||
"newop": "node --experimental-modules --experimental-json-modules src/core/config/scripts/newOperation.mjs",
|
||||
"minor": "node --experimental-modules --experimental-json-modules src/core/config/scripts/newMinorVersion.mjs && npm version minor --git-tag-version=false && echo \"Updated to version v$(npm pkg get version | xargs), please create a pull request and once merged use 'npm run tag'\"",
|
||||
"tag": "git tag -s \"v$(npm pkg get version | xargs)\" -m \"$(npm pkg get version | xargs)\" && echo \"Created v$(npm pkg get version | xargs), now check and push the tag\"",
|
||||
|
||||
@@ -229,6 +229,7 @@ class Recipe {
|
||||
}
|
||||
this.lastRunOp = op;
|
||||
} catch (err) {
|
||||
log.error(err);
|
||||
// Return expected errors as output
|
||||
if (err instanceof OperationError || err?.type === "OperationError") {
|
||||
// Cannot rely on `err instanceof OperationError` here as extending
|
||||
|
||||
@@ -1,251 +0,0 @@
|
||||
/**
|
||||
* Image manipulation resources
|
||||
*
|
||||
* @author j433866 [j433866@gmail.com]
|
||||
* @copyright Crown Copyright 2019
|
||||
* @license Apache-2.0
|
||||
*/
|
||||
|
||||
import OperationError from "../errors/OperationError.mjs";
|
||||
|
||||
/**
|
||||
* Gaussian blurs an image.
|
||||
*
|
||||
* @param {jimp} input
|
||||
* @param {number} radius
|
||||
* @param {boolean} fast
|
||||
* @returns {jimp}
|
||||
*/
|
||||
export function gaussianBlur (input, radius) {
|
||||
try {
|
||||
// From http://blog.ivank.net/fastest-gaussian-blur.html
|
||||
const boxes = boxesForGauss(radius, 3);
|
||||
for (let i = 0; i < 3; i++) {
|
||||
input = boxBlur(input, (boxes[i] - 1) / 2);
|
||||
}
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error blurring image. (${err})`);
|
||||
}
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {number} radius
|
||||
* @param {number} numBoxes
|
||||
* @returns {Array}
|
||||
*/
|
||||
function boxesForGauss(radius, numBoxes) {
|
||||
const idealWidth = Math.sqrt((12 * radius * radius / numBoxes) + 1);
|
||||
|
||||
let wl = Math.floor(idealWidth);
|
||||
|
||||
if (wl % 2 === 0) {
|
||||
wl--;
|
||||
}
|
||||
|
||||
const wu = wl + 2;
|
||||
|
||||
const mIdeal = (12 * radius * radius - numBoxes * wl * wl - 4 * numBoxes * wl - 3 * numBoxes) / (-4 * wl - 4);
|
||||
const m = Math.round(mIdeal);
|
||||
|
||||
const sizes = [];
|
||||
for (let i = 0; i < numBoxes; i++) {
|
||||
sizes.push(i < m ? wl : wu);
|
||||
}
|
||||
return sizes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies a box blur effect to the image
|
||||
*
|
||||
* @param {jimp} source
|
||||
* @param {number} radius
|
||||
* @returns {jimp}
|
||||
*/
|
||||
function boxBlur (source, radius) {
|
||||
const width = source.bitmap.width;
|
||||
const height = source.bitmap.height;
|
||||
let output = source.clone();
|
||||
output = boxBlurH(source, output, width, height, radius);
|
||||
source = boxBlurV(output, source, width, height, radius);
|
||||
|
||||
return source;
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies the horizontal blur
|
||||
*
|
||||
* @param {jimp} source
|
||||
* @param {jimp} output
|
||||
* @param {number} width
|
||||
* @param {number} height
|
||||
* @param {number} radius
|
||||
* @returns {jimp}
|
||||
*/
|
||||
function boxBlurH (source, output, width, height, radius) {
|
||||
const iarr = 1 / (radius + radius + 1);
|
||||
for (let i = 0; i < height; i++) {
|
||||
let ti = 0,
|
||||
li = ti,
|
||||
ri = ti + radius;
|
||||
const idx = source.getPixelIndex(ti, i);
|
||||
const firstValRed = source.bitmap.data[idx],
|
||||
firstValGreen = source.bitmap.data[idx + 1],
|
||||
firstValBlue = source.bitmap.data[idx + 2],
|
||||
firstValAlpha = source.bitmap.data[idx + 3];
|
||||
|
||||
const lastIdx = source.getPixelIndex(width - 1, i),
|
||||
lastValRed = source.bitmap.data[lastIdx],
|
||||
lastValGreen = source.bitmap.data[lastIdx + 1],
|
||||
lastValBlue = source.bitmap.data[lastIdx + 2],
|
||||
lastValAlpha = source.bitmap.data[lastIdx + 3];
|
||||
|
||||
let red = (radius + 1) * firstValRed;
|
||||
let green = (radius + 1) * firstValGreen;
|
||||
let blue = (radius + 1) * firstValBlue;
|
||||
let alpha = (radius + 1) * firstValAlpha;
|
||||
|
||||
for (let j = 0; j < radius; j++) {
|
||||
const jIdx = source.getPixelIndex(ti + j, i);
|
||||
red += source.bitmap.data[jIdx];
|
||||
green += source.bitmap.data[jIdx + 1];
|
||||
blue += source.bitmap.data[jIdx + 2];
|
||||
alpha += source.bitmap.data[jIdx + 3];
|
||||
}
|
||||
|
||||
for (let j = 0; j <= radius; j++) {
|
||||
const jIdx = source.getPixelIndex(ri++, i);
|
||||
red += source.bitmap.data[jIdx] - firstValRed;
|
||||
green += source.bitmap.data[jIdx + 1] - firstValGreen;
|
||||
blue += source.bitmap.data[jIdx + 2] - firstValBlue;
|
||||
alpha += source.bitmap.data[jIdx + 3] - firstValAlpha;
|
||||
|
||||
const tiIdx = source.getPixelIndex(ti++, i);
|
||||
output.bitmap.data[tiIdx] = Math.round(red * iarr);
|
||||
output.bitmap.data[tiIdx + 1] = Math.round(green * iarr);
|
||||
output.bitmap.data[tiIdx + 2] = Math.round(blue * iarr);
|
||||
output.bitmap.data[tiIdx + 3] = Math.round(alpha * iarr);
|
||||
}
|
||||
|
||||
for (let j = radius + 1; j < width - radius; j++) {
|
||||
const riIdx = source.getPixelIndex(ri++, i);
|
||||
const liIdx = source.getPixelIndex(li++, i);
|
||||
red += source.bitmap.data[riIdx] - source.bitmap.data[liIdx];
|
||||
green += source.bitmap.data[riIdx + 1] - source.bitmap.data[liIdx + 1];
|
||||
blue += source.bitmap.data[riIdx + 2] - source.bitmap.data[liIdx + 2];
|
||||
alpha += source.bitmap.data[riIdx + 3] - source.bitmap.data[liIdx + 3];
|
||||
|
||||
const tiIdx = source.getPixelIndex(ti++, i);
|
||||
output.bitmap.data[tiIdx] = Math.round(red * iarr);
|
||||
output.bitmap.data[tiIdx + 1] = Math.round(green * iarr);
|
||||
output.bitmap.data[tiIdx + 2] = Math.round(blue * iarr);
|
||||
output.bitmap.data[tiIdx + 3] = Math.round(alpha * iarr);
|
||||
}
|
||||
|
||||
for (let j = width - radius; j < width; j++) {
|
||||
const liIdx = source.getPixelIndex(li++, i);
|
||||
red += lastValRed - source.bitmap.data[liIdx];
|
||||
green += lastValGreen - source.bitmap.data[liIdx + 1];
|
||||
blue += lastValBlue - source.bitmap.data[liIdx + 2];
|
||||
alpha += lastValAlpha - source.bitmap.data[liIdx + 3];
|
||||
|
||||
const tiIdx = source.getPixelIndex(ti++, i);
|
||||
output.bitmap.data[tiIdx] = Math.round(red * iarr);
|
||||
output.bitmap.data[tiIdx + 1] = Math.round(green * iarr);
|
||||
output.bitmap.data[tiIdx + 2] = Math.round(blue * iarr);
|
||||
output.bitmap.data[tiIdx + 3] = Math.round(alpha * iarr);
|
||||
}
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies the vertical blur
|
||||
*
|
||||
* @param {jimp} source
|
||||
* @param {jimp} output
|
||||
* @param {number} width
|
||||
* @param {number} height
|
||||
* @param {number} radius
|
||||
* @returns {jimp}
|
||||
*/
|
||||
function boxBlurV (source, output, width, height, radius) {
|
||||
const iarr = 1 / (radius + radius + 1);
|
||||
for (let i = 0; i < width; i++) {
|
||||
let ti = 0,
|
||||
li = ti,
|
||||
ri = ti + radius;
|
||||
|
||||
const idx = source.getPixelIndex(i, ti);
|
||||
|
||||
const firstValRed = source.bitmap.data[idx],
|
||||
firstValGreen = source.bitmap.data[idx + 1],
|
||||
firstValBlue = source.bitmap.data[idx + 2],
|
||||
firstValAlpha = source.bitmap.data[idx + 3];
|
||||
|
||||
const lastIdx = source.getPixelIndex(i, height - 1),
|
||||
lastValRed = source.bitmap.data[lastIdx],
|
||||
lastValGreen = source.bitmap.data[lastIdx + 1],
|
||||
lastValBlue = source.bitmap.data[lastIdx + 2],
|
||||
lastValAlpha = source.bitmap.data[lastIdx + 3];
|
||||
|
||||
let red = (radius + 1) * firstValRed;
|
||||
let green = (radius + 1) * firstValGreen;
|
||||
let blue = (radius + 1) * firstValBlue;
|
||||
let alpha = (radius + 1) * firstValAlpha;
|
||||
|
||||
for (let j = 0; j < radius; j++) {
|
||||
const jIdx = source.getPixelIndex(i, ti + j);
|
||||
red += source.bitmap.data[jIdx];
|
||||
green += source.bitmap.data[jIdx + 1];
|
||||
blue += source.bitmap.data[jIdx + 2];
|
||||
alpha += source.bitmap.data[jIdx + 3];
|
||||
}
|
||||
|
||||
for (let j = 0; j <= radius; j++) {
|
||||
const riIdx = source.getPixelIndex(i, ri++);
|
||||
red += source.bitmap.data[riIdx] - firstValRed;
|
||||
green += source.bitmap.data[riIdx + 1] - firstValGreen;
|
||||
blue += source.bitmap.data[riIdx + 2] - firstValBlue;
|
||||
alpha += source.bitmap.data[riIdx + 3] - firstValAlpha;
|
||||
|
||||
const tiIdx = source.getPixelIndex(i, ti++);
|
||||
output.bitmap.data[tiIdx] = Math.round(red * iarr);
|
||||
output.bitmap.data[tiIdx + 1] = Math.round(green * iarr);
|
||||
output.bitmap.data[tiIdx + 2] = Math.round(blue * iarr);
|
||||
output.bitmap.data[tiIdx + 3] = Math.round(alpha * iarr);
|
||||
}
|
||||
|
||||
for (let j = radius + 1; j < height - radius; j++) {
|
||||
const riIdx = source.getPixelIndex(i, ri++);
|
||||
const liIdx = source.getPixelIndex(i, li++);
|
||||
red += source.bitmap.data[riIdx] - source.bitmap.data[liIdx];
|
||||
green += source.bitmap.data[riIdx + 1] - source.bitmap.data[liIdx + 1];
|
||||
blue += source.bitmap.data[riIdx + 2] - source.bitmap.data[liIdx + 2];
|
||||
alpha += source.bitmap.data[riIdx + 3] - source.bitmap.data[liIdx + 3];
|
||||
|
||||
const tiIdx = source.getPixelIndex(i, ti++);
|
||||
output.bitmap.data[tiIdx] = Math.round(red * iarr);
|
||||
output.bitmap.data[tiIdx + 1] = Math.round(green * iarr);
|
||||
output.bitmap.data[tiIdx + 2] = Math.round(blue * iarr);
|
||||
output.bitmap.data[tiIdx + 3] = Math.round(alpha * iarr);
|
||||
}
|
||||
|
||||
for (let j = height - radius; j < height; j++) {
|
||||
const liIdx = source.getPixelIndex(i, li++);
|
||||
red += lastValRed - source.bitmap.data[liIdx];
|
||||
green += lastValGreen - source.bitmap.data[liIdx + 1];
|
||||
blue += lastValBlue - source.bitmap.data[liIdx + 2];
|
||||
alpha += lastValAlpha - source.bitmap.data[liIdx + 3];
|
||||
|
||||
const tiIdx = source.getPixelIndex(i, ti++);
|
||||
output.bitmap.data[tiIdx] = Math.round(red * iarr);
|
||||
output.bitmap.data[tiIdx + 1] = Math.round(green * iarr);
|
||||
output.bitmap.data[tiIdx + 2] = Math.round(blue * iarr);
|
||||
output.bitmap.data[tiIdx + 3] = Math.round(alpha * iarr);
|
||||
}
|
||||
}
|
||||
return output;
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import jsQR from "jsqr";
|
||||
import qr from "qr-image";
|
||||
import Utils from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Parses a QR code image from an image
|
||||
@@ -29,18 +29,31 @@ export async function parseQrCode(input, normalise) {
|
||||
|
||||
try {
|
||||
if (normalise) {
|
||||
image.rgba(false);
|
||||
image.background(0xFFFFFFFF);
|
||||
image.normalize();
|
||||
image.greyscale();
|
||||
image = await image.getBufferAsync(Jimp.MIME_JPEG);
|
||||
image = await Jimp.read(image);
|
||||
image.normalize();
|
||||
}
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error normalising image. (${err})`);
|
||||
}
|
||||
|
||||
const qrData = jsQR(image.bitmap.data, image.getWidth(), image.getHeight());
|
||||
// Remove transparency which jsQR cannot handle
|
||||
image.scan((x, y, idx) => {
|
||||
// If pixel is fully transparent, make it opaque white
|
||||
if (image.bitmap.data[idx + 3] === 0x00) {
|
||||
image.bitmap.data[idx + 0] = 0xff;
|
||||
image.bitmap.data[idx + 1] = 0xff;
|
||||
image.bitmap.data[idx + 2] = 0xff;
|
||||
}
|
||||
// Otherwise, make it fully opaque at its existing colour
|
||||
image.bitmap.data[idx + 3] = 0xff;
|
||||
});
|
||||
image = await Jimp.read(await image.getBuffer(JimpMime.jpeg));
|
||||
|
||||
const qrData = jsQR(
|
||||
new Uint8ClampedArray(image.bitmap.data),
|
||||
image.width,
|
||||
image.height,
|
||||
);
|
||||
if (qrData) {
|
||||
return qrData.data;
|
||||
} else {
|
||||
@@ -58,7 +71,13 @@ export async function parseQrCode(input, normalise) {
|
||||
* @param {string} errorCorrection
|
||||
* @returns {ArrayBuffer}
|
||||
*/
|
||||
export function generateQrCode(input, format, moduleSize, margin, errorCorrection) {
|
||||
export function generateQrCode(
|
||||
input,
|
||||
format,
|
||||
moduleSize,
|
||||
margin,
|
||||
errorCorrection,
|
||||
) {
|
||||
const formats = ["SVG", "EPS", "PDF", "PNG"];
|
||||
if (!formats.includes(format.toUpperCase())) {
|
||||
throw new OperationError("Unsupported QR code format.");
|
||||
@@ -70,7 +89,8 @@ export function generateQrCode(input, format, moduleSize, margin, errorCorrectio
|
||||
type: format,
|
||||
size: moduleSize,
|
||||
margin: margin,
|
||||
"ec_level": errorCorrection.charAt(0).toUpperCase()
|
||||
// eslint-disable-next-line camelcase
|
||||
ec_level: errorCorrection.charAt(0).toUpperCase(),
|
||||
});
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error generating QR code. (${err})`);
|
||||
@@ -86,7 +106,7 @@ export function generateQrCode(input, format, moduleSize, margin, errorCorrectio
|
||||
case "PDF":
|
||||
return Utils.strToArrayBuffer(qrImage);
|
||||
case "PNG":
|
||||
return qrImage.buffer;
|
||||
return qrImage.buffer.slice(qrImage.byteOffset, qrImage.byteLength + qrImage.byteOffset);
|
||||
default:
|
||||
throw new OperationError("Unsupported QR code format.");
|
||||
}
|
||||
|
||||
@@ -9,13 +9,19 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import {
|
||||
Jimp,
|
||||
JimpMime,
|
||||
ResizeStrategy,
|
||||
measureText,
|
||||
measureTextHeight,
|
||||
loadFont,
|
||||
} from "jimp";
|
||||
|
||||
/**
|
||||
* Add Text To Image operation
|
||||
*/
|
||||
class AddTextToImage extends Operation {
|
||||
|
||||
/**
|
||||
* AddTextToImage constructor
|
||||
*/
|
||||
@@ -24,7 +30,8 @@ class AddTextToImage extends Operation {
|
||||
|
||||
this.name = "Add Text To Image";
|
||||
this.module = "Image";
|
||||
this.description = "Adds text onto an image.<br><br>Text can be horizontally or vertically aligned, or the position can be manually specified.<br>Variants of the Roboto font face are available in any size or colour.";
|
||||
this.description =
|
||||
"Adds text onto an image.<br><br>Text can be horizontally or vertically aligned, or the position can be manually specified.<br>Variants of the Roboto font face are available in any size or colour.";
|
||||
this.infoURL = "";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
@@ -33,72 +40,67 @@ class AddTextToImage extends Operation {
|
||||
{
|
||||
name: "Text",
|
||||
type: "string",
|
||||
value: ""
|
||||
value: "",
|
||||
},
|
||||
{
|
||||
name: "Horizontal align",
|
||||
type: "option",
|
||||
value: ["None", "Left", "Center", "Right"]
|
||||
value: ["None", "Left", "Center", "Right"],
|
||||
},
|
||||
{
|
||||
name: "Vertical align",
|
||||
type: "option",
|
||||
value: ["None", "Top", "Middle", "Bottom"]
|
||||
value: ["None", "Top", "Middle", "Bottom"],
|
||||
},
|
||||
{
|
||||
name: "X position",
|
||||
type: "number",
|
||||
value: 0
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
name: "Y position",
|
||||
type: "number",
|
||||
value: 0
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
name: "Size",
|
||||
type: "number",
|
||||
value: 32,
|
||||
min: 8
|
||||
min: 8,
|
||||
},
|
||||
{
|
||||
name: "Font face",
|
||||
type: "option",
|
||||
value: [
|
||||
"Roboto",
|
||||
"Roboto Black",
|
||||
"Roboto Mono",
|
||||
"Roboto Slab"
|
||||
]
|
||||
value: ["Roboto", "Roboto Black", "Roboto Mono", "Roboto Slab"],
|
||||
},
|
||||
{
|
||||
name: "Red",
|
||||
type: "number",
|
||||
value: 255,
|
||||
min: 0,
|
||||
max: 255
|
||||
max: 255,
|
||||
},
|
||||
{
|
||||
name: "Green",
|
||||
type: "number",
|
||||
value: 255,
|
||||
min: 0,
|
||||
max: 255
|
||||
max: 255,
|
||||
},
|
||||
{
|
||||
name: "Blue",
|
||||
type: "number",
|
||||
value: 255,
|
||||
min: 0,
|
||||
max: 255
|
||||
max: 255,
|
||||
},
|
||||
{
|
||||
name: "Alpha",
|
||||
type: "number",
|
||||
value: 255,
|
||||
min: 0,
|
||||
max: 255
|
||||
}
|
||||
max: 255,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -131,41 +133,60 @@ class AddTextToImage extends Operation {
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error loading image. (${err})`);
|
||||
}
|
||||
try {
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Adding text to image...");
|
||||
|
||||
const fontsMap = {};
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Adding text to image...");
|
||||
|
||||
const fontsMap = {};
|
||||
try {
|
||||
const fonts = [
|
||||
import(/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/Roboto72White.fnt"),
|
||||
import(/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/RobotoBlack72White.fnt"),
|
||||
import(/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/RobotoMono72White.fnt"),
|
||||
import(/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/RobotoSlab72White.fnt")
|
||||
import(
|
||||
/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/Roboto72White.fnt"
|
||||
),
|
||||
import(
|
||||
/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/RobotoBlack72White.fnt"
|
||||
),
|
||||
import(
|
||||
/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/RobotoMono72White.fnt"
|
||||
),
|
||||
import(
|
||||
/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/RobotoSlab72White.fnt"
|
||||
),
|
||||
];
|
||||
|
||||
await Promise.all(fonts)
|
||||
.then(fonts => {
|
||||
fontsMap.Roboto = fonts[0];
|
||||
fontsMap["Roboto Black"] = fonts[1];
|
||||
fontsMap["Roboto Mono"] = fonts[2];
|
||||
fontsMap["Roboto Slab"] = fonts[3];
|
||||
});
|
||||
|
||||
|
||||
await Promise.all(fonts).then((fonts) => {
|
||||
fontsMap.Roboto = fonts[0];
|
||||
fontsMap["Roboto Black"] = fonts[1];
|
||||
fontsMap["Roboto Mono"] = fonts[2];
|
||||
fontsMap["Roboto Slab"] = fonts[3];
|
||||
});
|
||||
// Make Webpack load the png font images
|
||||
await Promise.all([
|
||||
import(/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/Roboto72White.png"),
|
||||
import(/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/RobotoSlab72White.png"),
|
||||
import(/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/RobotoMono72White.png"),
|
||||
import(/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/RobotoBlack72White.png")
|
||||
import(
|
||||
/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/Roboto72White.png"
|
||||
),
|
||||
import(
|
||||
/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/RobotoSlab72White.png"
|
||||
),
|
||||
import(
|
||||
/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/RobotoMono72White.png"
|
||||
),
|
||||
import(
|
||||
/* webpackMode: "eager" */ "../../web/static/fonts/bmfonts/RobotoBlack72White.png"
|
||||
),
|
||||
]);
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error preparing fonts. (${err})`);
|
||||
}
|
||||
|
||||
let jimpFont;
|
||||
try {
|
||||
const font = fontsMap[fontFace];
|
||||
|
||||
// LoadFont needs an absolute url, so append the font name to self.docURL
|
||||
const jimpFont = await Jimp.loadFont(self.docURL + "/" + font.default);
|
||||
jimpFont = await loadFont(self.docURL + "/" + font.default);
|
||||
|
||||
jimpFont.pages.forEach(function(page) {
|
||||
jimpFont.pages.forEach(function (page) {
|
||||
if (page.bitmap) {
|
||||
// Adjust the RGB values of the image pages to change the font colour.
|
||||
const pageWidth = page.bitmap.width;
|
||||
@@ -175,32 +196,56 @@ class AddTextToImage extends Operation {
|
||||
const idx = (iy * pageWidth + ix) << 2;
|
||||
|
||||
const newRed = page.bitmap.data[idx] - (255 - red);
|
||||
const newGreen = page.bitmap.data[idx + 1] - (255 - green);
|
||||
const newBlue = page.bitmap.data[idx + 2] - (255 - blue);
|
||||
const newAlpha = page.bitmap.data[idx + 3] - (255 - alpha);
|
||||
const newGreen =
|
||||
page.bitmap.data[idx + 1] - (255 - green);
|
||||
const newBlue =
|
||||
page.bitmap.data[idx + 2] - (255 - blue);
|
||||
const newAlpha =
|
||||
page.bitmap.data[idx + 3] - (255 - alpha);
|
||||
|
||||
// Make sure the bitmap values don't go below 0 as that makes jimp very unhappy
|
||||
page.bitmap.data[idx] = (newRed > 0) ? newRed : 0;
|
||||
page.bitmap.data[idx + 1] = (newGreen > 0) ? newGreen : 0;
|
||||
page.bitmap.data[idx + 2] = (newBlue > 0) ? newBlue : 0;
|
||||
page.bitmap.data[idx + 3] = (newAlpha > 0) ? newAlpha : 0;
|
||||
page.bitmap.data[idx] = newRed > 0 ? newRed : 0;
|
||||
page.bitmap.data[idx + 1] =
|
||||
newGreen > 0 ? newGreen : 0;
|
||||
page.bitmap.data[idx + 2] =
|
||||
newBlue > 0 ? newBlue : 0;
|
||||
page.bitmap.data[idx + 3] =
|
||||
newAlpha > 0 ? newAlpha : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error loading font. (${err})`);
|
||||
}
|
||||
|
||||
try {
|
||||
// Create a temporary image to hold the rendered text
|
||||
const textImage = new Jimp(Jimp.measureText(jimpFont, text), Jimp.measureTextHeight(jimpFont, text));
|
||||
textImage.print(jimpFont, 0, 0, text);
|
||||
const textImage = new Jimp({
|
||||
width: measureText(jimpFont, text),
|
||||
height: measureTextHeight(jimpFont, text),
|
||||
});
|
||||
textImage.print({
|
||||
font: jimpFont,
|
||||
x: 0,
|
||||
y: 0,
|
||||
text,
|
||||
});
|
||||
|
||||
// Scale the rendered text image to the correct size
|
||||
const scaleFactor = size / 72;
|
||||
if (size !== 1) {
|
||||
// Use bicubic for decreasing size
|
||||
if (size > 1) {
|
||||
textImage.scale(scaleFactor, Jimp.RESIZE_BICUBIC);
|
||||
textImage.scale({
|
||||
f: scaleFactor,
|
||||
mode: ResizeStrategy.BICUBIC,
|
||||
});
|
||||
} else {
|
||||
textImage.scale(scaleFactor, Jimp.RESIZE_BILINEAR);
|
||||
textImage.scale({
|
||||
f: scaleFactor,
|
||||
mode: ResizeStrategy.BILINEAR,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,10 +255,10 @@ class AddTextToImage extends Operation {
|
||||
xPos = 0;
|
||||
break;
|
||||
case "Center":
|
||||
xPos = (image.getWidth() / 2) - (textImage.getWidth() / 2);
|
||||
xPos = image.width / 2 - textImage.width / 2;
|
||||
break;
|
||||
case "Right":
|
||||
xPos = image.getWidth() - textImage.getWidth();
|
||||
xPos = image.width - textImage.width;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -222,25 +267,33 @@ class AddTextToImage extends Operation {
|
||||
yPos = 0;
|
||||
break;
|
||||
case "Middle":
|
||||
yPos = (image.getHeight() / 2) - (textImage.getHeight() / 2);
|
||||
yPos = image.height / 2 - textImage.height / 2;
|
||||
break;
|
||||
case "Bottom":
|
||||
yPos = image.getHeight() - textImage.getHeight();
|
||||
yPos = image.height - textImage.height;
|
||||
break;
|
||||
}
|
||||
|
||||
// Blit the rendered text image onto the original source image
|
||||
image.blit(textImage, xPos, yPos);
|
||||
image.blit({
|
||||
src: textImage,
|
||||
x: xPos,
|
||||
y: yPos,
|
||||
});
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error adding text to image. (${err})`);
|
||||
}
|
||||
|
||||
try {
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error adding text to image. (${err})`);
|
||||
throw new OperationError(`Error exporting image. (${err})`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -261,7 +314,6 @@ class AddTextToImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default AddTextToImage;
|
||||
|
||||
@@ -9,14 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { gaussianBlur } from "../lib/ImageManipulation.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Blur Image operation
|
||||
*/
|
||||
class BlurImage extends Operation {
|
||||
|
||||
/**
|
||||
* BlurImage constructor
|
||||
*/
|
||||
@@ -25,7 +23,8 @@ class BlurImage extends Operation {
|
||||
|
||||
this.name = "Blur Image";
|
||||
this.module = "Image";
|
||||
this.description = "Applies a blur effect to the image.<br><br>Gaussian blur is much slower than fast blur, but produces better results.";
|
||||
this.description =
|
||||
"Applies a blur effect to the image.<br><br>Gaussian blur is much slower than fast blur, but produces better results.";
|
||||
this.infoURL = "https://wikipedia.org/wiki/Gaussian_blur";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
@@ -35,13 +34,13 @@ class BlurImage extends Operation {
|
||||
name: "Amount",
|
||||
type: "number",
|
||||
value: 5,
|
||||
min: 1
|
||||
min: 1,
|
||||
},
|
||||
{
|
||||
name: "Type",
|
||||
type: "option",
|
||||
value: ["Fast", "Gaussian"]
|
||||
}
|
||||
value: ["Fast", "Gaussian"],
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -73,15 +72,15 @@ class BlurImage extends Operation {
|
||||
case "Gaussian":
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Gaussian blurring image...");
|
||||
image = gaussianBlur(image, blurAmount);
|
||||
image.gaussian(blurAmount);
|
||||
break;
|
||||
}
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
@@ -106,7 +105,6 @@ class BlurImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default BlurImage;
|
||||
|
||||
@@ -9,13 +9,18 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import {
|
||||
Jimp,
|
||||
JimpMime,
|
||||
ResizeStrategy,
|
||||
HorizontalAlign,
|
||||
VerticalAlign,
|
||||
} from "jimp";
|
||||
|
||||
/**
|
||||
* Contain Image operation
|
||||
*/
|
||||
class ContainImage extends Operation {
|
||||
|
||||
/**
|
||||
* ContainImage constructor
|
||||
*/
|
||||
@@ -24,7 +29,8 @@ class ContainImage extends Operation {
|
||||
|
||||
this.name = "Contain Image";
|
||||
this.module = "Image";
|
||||
this.description = "Scales an image to the specified width and height, maintaining the aspect ratio. The image may be letterboxed.";
|
||||
this.description =
|
||||
"Scales an image to the specified width and height, maintaining the aspect ratio. The image may be letterboxed.";
|
||||
this.infoURL = "";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
@@ -34,33 +40,25 @@ class ContainImage extends Operation {
|
||||
name: "Width",
|
||||
type: "number",
|
||||
value: 100,
|
||||
min: 1
|
||||
min: 1,
|
||||
},
|
||||
{
|
||||
name: "Height",
|
||||
type: "number",
|
||||
value: 100,
|
||||
min: 1
|
||||
min: 1,
|
||||
},
|
||||
{
|
||||
name: "Horizontal align",
|
||||
type: "option",
|
||||
value: [
|
||||
"Left",
|
||||
"Center",
|
||||
"Right"
|
||||
],
|
||||
defaultIndex: 1
|
||||
value: ["Left", "Center", "Right"],
|
||||
defaultIndex: 1,
|
||||
},
|
||||
{
|
||||
name: "Vertical align",
|
||||
type: "option",
|
||||
value: [
|
||||
"Top",
|
||||
"Middle",
|
||||
"Bottom"
|
||||
],
|
||||
defaultIndex: 1
|
||||
value: ["Top", "Middle", "Bottom"],
|
||||
defaultIndex: 1,
|
||||
},
|
||||
{
|
||||
name: "Resizing algorithm",
|
||||
@@ -70,15 +68,15 @@ class ContainImage extends Operation {
|
||||
"Bilinear",
|
||||
"Bicubic",
|
||||
"Hermite",
|
||||
"Bezier"
|
||||
"Bezier",
|
||||
],
|
||||
defaultIndex: 1
|
||||
defaultIndex: 1,
|
||||
},
|
||||
{
|
||||
name: "Opaque background",
|
||||
type: "boolean",
|
||||
value: true
|
||||
}
|
||||
value: true,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -91,20 +89,20 @@ class ContainImage extends Operation {
|
||||
const [width, height, hAlign, vAlign, alg, opaqueBg] = args;
|
||||
|
||||
const resizeMap = {
|
||||
"Nearest Neighbour": Jimp.RESIZE_NEAREST_NEIGHBOR,
|
||||
"Bilinear": Jimp.RESIZE_BILINEAR,
|
||||
"Bicubic": Jimp.RESIZE_BICUBIC,
|
||||
"Hermite": Jimp.RESIZE_HERMITE,
|
||||
"Bezier": Jimp.RESIZE_BEZIER
|
||||
"Nearest Neighbour": ResizeStrategy.NEAREST_NEIGHBOR,
|
||||
Bilinear: ResizeStrategy.BILINEAR,
|
||||
Bicubic: ResizeStrategy.BICUBIC,
|
||||
Hermite: ResizeStrategy.HERMITE,
|
||||
Bezier: ResizeStrategy.BEZIER,
|
||||
};
|
||||
|
||||
const alignMap = {
|
||||
"Left": Jimp.HORIZONTAL_ALIGN_LEFT,
|
||||
"Center": Jimp.HORIZONTAL_ALIGN_CENTER,
|
||||
"Right": Jimp.HORIZONTAL_ALIGN_RIGHT,
|
||||
"Top": Jimp.VERTICAL_ALIGN_TOP,
|
||||
"Middle": Jimp.VERTICAL_ALIGN_MIDDLE,
|
||||
"Bottom": Jimp.VERTICAL_ALIGN_BOTTOM
|
||||
Left: HorizontalAlign.LEFT,
|
||||
Center: HorizontalAlign.CENTER,
|
||||
Right: HorizontalAlign.RIGHT,
|
||||
Top: VerticalAlign.TOP,
|
||||
Middle: VerticalAlign.MIDDLE,
|
||||
Bottom: VerticalAlign.BOTTOM,
|
||||
};
|
||||
|
||||
if (!isImage(input)) {
|
||||
@@ -117,22 +115,35 @@ class ContainImage extends Operation {
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error loading image. (${err})`);
|
||||
}
|
||||
const originalMime = image.mime;
|
||||
try {
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Containing image...");
|
||||
image.contain(width, height, alignMap[hAlign] | alignMap[vAlign], resizeMap[alg]);
|
||||
image.contain({
|
||||
w: width,
|
||||
h: height,
|
||||
align: alignMap[hAlign] | alignMap[vAlign],
|
||||
mode: resizeMap[alg],
|
||||
});
|
||||
|
||||
if (opaqueBg) {
|
||||
const newImage = await Jimp.read(width, height, 0x000000FF);
|
||||
newImage.blit(image, 0, 0);
|
||||
image = newImage;
|
||||
const newImage = new Jimp({
|
||||
width,
|
||||
height,
|
||||
color: 0x000000ff,
|
||||
});
|
||||
image = newImage.blit({
|
||||
src: image,
|
||||
x: 0,
|
||||
y: 0,
|
||||
});
|
||||
}
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (originalMime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(originalMime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
@@ -156,7 +167,6 @@ class ContainImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default ContainImage;
|
||||
|
||||
@@ -8,13 +8,12 @@ import Operation from "../Operation.mjs";
|
||||
import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime, PNGFilterType } from "jimp";
|
||||
|
||||
/**
|
||||
* Convert Image Format operation
|
||||
*/
|
||||
class ConvertImageFormat extends Operation {
|
||||
|
||||
/**
|
||||
* ConvertImageFormat constructor
|
||||
*/
|
||||
@@ -23,7 +22,8 @@ class ConvertImageFormat extends Operation {
|
||||
|
||||
this.name = "Convert Image Format";
|
||||
this.module = "Image";
|
||||
this.description = "Converts an image between different formats. Supported formats:<br><ul><li>Joint Photographic Experts Group (JPEG)</li><li>Portable Network Graphics (PNG)</li><li>Bitmap (BMP)</li><li>Tagged Image File Format (TIFF)</li></ul><br>Note: GIF files are supported for input, but cannot be outputted.";
|
||||
this.description =
|
||||
"Converts an image between different formats. Supported formats:<br><ul><li>Joint Photographic Experts Group (JPEG)</li><li>Portable Network Graphics (PNG)</li><li>Bitmap (BMP)</li><li>Tagged Image File Format (TIFF)</li></ul><br>Note: GIF files are supported for input, but cannot be outputted.";
|
||||
this.infoURL = "https://wikipedia.org/wiki/Image_file_formats";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
@@ -32,39 +32,27 @@ class ConvertImageFormat extends Operation {
|
||||
{
|
||||
name: "Output Format",
|
||||
type: "option",
|
||||
value: [
|
||||
"JPEG",
|
||||
"PNG",
|
||||
"BMP",
|
||||
"TIFF"
|
||||
]
|
||||
value: ["JPEG", "PNG", "BMP", "TIFF"],
|
||||
},
|
||||
{
|
||||
name: "JPEG Quality",
|
||||
type: "number",
|
||||
value: 80,
|
||||
min: 1,
|
||||
max: 100
|
||||
max: 100,
|
||||
},
|
||||
{
|
||||
name: "PNG Filter Type",
|
||||
type: "option",
|
||||
value: [
|
||||
"Auto",
|
||||
"None",
|
||||
"Sub",
|
||||
"Up",
|
||||
"Average",
|
||||
"Paeth"
|
||||
]
|
||||
value: ["Auto", "None", "Sub", "Up", "Average", "Paeth"],
|
||||
},
|
||||
{
|
||||
name: "PNG Deflate Level",
|
||||
type: "number",
|
||||
value: 9,
|
||||
min: 0,
|
||||
max: 9
|
||||
}
|
||||
max: 9,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -76,19 +64,19 @@ class ConvertImageFormat extends Operation {
|
||||
async run(input, args) {
|
||||
const [format, jpegQuality, pngFilterType, pngDeflateLevel] = args;
|
||||
const formatMap = {
|
||||
"JPEG": Jimp.MIME_JPEG,
|
||||
"PNG": Jimp.MIME_PNG,
|
||||
"BMP": Jimp.MIME_BMP,
|
||||
"TIFF": Jimp.MIME_TIFF
|
||||
JPEG: JimpMime.jpeg,
|
||||
PNG: JimpMime.png,
|
||||
BMP: JimpMime.bmp,
|
||||
TIFF: JimpMime.tiff,
|
||||
};
|
||||
|
||||
const pngFilterMap = {
|
||||
"Auto": Jimp.PNG_FILTER_AUTO,
|
||||
"None": Jimp.PNG_FILTER_NONE,
|
||||
"Sub": Jimp.PNG_FILTER_SUB,
|
||||
"Up": Jimp.PNG_FILTER_UP,
|
||||
"Average": Jimp.PNG_FILTER_AVERAGE,
|
||||
"Paeth": Jimp.PNG_FILTER_PATH
|
||||
Auto: PNGFilterType.AUTO,
|
||||
None: PNGFilterType.NONE,
|
||||
Sub: PNGFilterType.SUB,
|
||||
Up: PNGFilterType.UP,
|
||||
Average: PNGFilterType.AVERAGE,
|
||||
Paeth: PNGFilterType.PATH,
|
||||
};
|
||||
|
||||
const mime = formatMap[format];
|
||||
@@ -103,18 +91,25 @@ class ConvertImageFormat extends Operation {
|
||||
throw new OperationError(`Error opening image file. (${err})`);
|
||||
}
|
||||
try {
|
||||
switch (format) {
|
||||
case "JPEG":
|
||||
image.quality(jpegQuality);
|
||||
let buffer;
|
||||
switch (mime) {
|
||||
case JimpMime.jpeg:
|
||||
buffer = await image.getBuffer(mime, {
|
||||
quality: jpegQuality,
|
||||
});
|
||||
break;
|
||||
case "PNG":
|
||||
image.filterType(pngFilterMap[pngFilterType]);
|
||||
image.deflateLevel(pngDeflateLevel);
|
||||
case JimpMime.png:
|
||||
buffer = await image.getBuffer(mime, {
|
||||
filterType: pngFilterMap[pngFilterType],
|
||||
deflateLevel: pngDeflateLevel,
|
||||
});
|
||||
break;
|
||||
default:
|
||||
buffer = await image.getBuffer(mime);
|
||||
break;
|
||||
}
|
||||
|
||||
const imageBuffer = await image.getBufferAsync(mime);
|
||||
return imageBuffer.buffer;
|
||||
return buffer.buffer;
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error converting image format. (${err})`);
|
||||
}
|
||||
@@ -137,7 +132,6 @@ class ConvertImageFormat extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default ConvertImageFormat;
|
||||
|
||||
@@ -9,13 +9,18 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import jimp from "jimp/es/index.js";
|
||||
import {
|
||||
Jimp,
|
||||
JimpMime,
|
||||
ResizeStrategy,
|
||||
HorizontalAlign,
|
||||
VerticalAlign,
|
||||
} from "jimp";
|
||||
|
||||
/**
|
||||
* Cover Image operation
|
||||
*/
|
||||
class CoverImage extends Operation {
|
||||
|
||||
/**
|
||||
* CoverImage constructor
|
||||
*/
|
||||
@@ -24,7 +29,8 @@ class CoverImage extends Operation {
|
||||
|
||||
this.name = "Cover Image";
|
||||
this.module = "Image";
|
||||
this.description = "Scales the image to the given width and height, keeping the aspect ratio. The image may be clipped.";
|
||||
this.description =
|
||||
"Scales the image to the given width and height, keeping the aspect ratio. The image may be clipped.";
|
||||
this.infoURL = "";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
@@ -34,33 +40,25 @@ class CoverImage extends Operation {
|
||||
name: "Width",
|
||||
type: "number",
|
||||
value: 100,
|
||||
min: 1
|
||||
min: 1,
|
||||
},
|
||||
{
|
||||
name: "Height",
|
||||
type: "number",
|
||||
value: 100,
|
||||
min: 1
|
||||
min: 1,
|
||||
},
|
||||
{
|
||||
name: "Horizontal align",
|
||||
type: "option",
|
||||
value: [
|
||||
"Left",
|
||||
"Center",
|
||||
"Right"
|
||||
],
|
||||
defaultIndex: 1
|
||||
value: ["Left", "Center", "Right"],
|
||||
defaultIndex: 1,
|
||||
},
|
||||
{
|
||||
name: "Vertical align",
|
||||
type: "option",
|
||||
value: [
|
||||
"Top",
|
||||
"Middle",
|
||||
"Bottom"
|
||||
],
|
||||
defaultIndex: 1
|
||||
value: ["Top", "Middle", "Bottom"],
|
||||
defaultIndex: 1,
|
||||
},
|
||||
{
|
||||
name: "Resizing algorithm",
|
||||
@@ -70,10 +68,10 @@ class CoverImage extends Operation {
|
||||
"Bilinear",
|
||||
"Bicubic",
|
||||
"Hermite",
|
||||
"Bezier"
|
||||
"Bezier",
|
||||
],
|
||||
defaultIndex: 1
|
||||
}
|
||||
defaultIndex: 1,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -86,20 +84,20 @@ class CoverImage extends Operation {
|
||||
const [width, height, hAlign, vAlign, alg] = args;
|
||||
|
||||
const resizeMap = {
|
||||
"Nearest Neighbour": jimp.RESIZE_NEAREST_NEIGHBOR,
|
||||
"Bilinear": jimp.RESIZE_BILINEAR,
|
||||
"Bicubic": jimp.RESIZE_BICUBIC,
|
||||
"Hermite": jimp.RESIZE_HERMITE,
|
||||
"Bezier": jimp.RESIZE_BEZIER
|
||||
"Nearest Neighbour": ResizeStrategy.NEAREST_NEIGHBOR,
|
||||
Bilinear: ResizeStrategy.BILINEAR,
|
||||
Bicubic: ResizeStrategy.BICUBIC,
|
||||
Hermite: ResizeStrategy.HERMITE,
|
||||
Bezier: ResizeStrategy.BEZIER,
|
||||
};
|
||||
|
||||
const alignMap = {
|
||||
"Left": jimp.HORIZONTAL_ALIGN_LEFT,
|
||||
"Center": jimp.HORIZONTAL_ALIGN_CENTER,
|
||||
"Right": jimp.HORIZONTAL_ALIGN_RIGHT,
|
||||
"Top": jimp.VERTICAL_ALIGN_TOP,
|
||||
"Middle": jimp.VERTICAL_ALIGN_MIDDLE,
|
||||
"Bottom": jimp.VERTICAL_ALIGN_BOTTOM
|
||||
Left: HorizontalAlign.LEFT,
|
||||
Center: HorizontalAlign.CENTER,
|
||||
Right: HorizontalAlign.RIGHT,
|
||||
Top: VerticalAlign.TOP,
|
||||
Middle: VerticalAlign.MIDDLE,
|
||||
Bottom: VerticalAlign.BOTTOM,
|
||||
};
|
||||
|
||||
if (!isImage(input)) {
|
||||
@@ -108,19 +106,24 @@ class CoverImage extends Operation {
|
||||
|
||||
let image;
|
||||
try {
|
||||
image = await jimp.read(input);
|
||||
image = await Jimp.read(input);
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error loading image. (${err})`);
|
||||
}
|
||||
try {
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Covering image...");
|
||||
image.cover(width, height, alignMap[hAlign] | alignMap[vAlign], resizeMap[alg]);
|
||||
image.cover({
|
||||
w: width,
|
||||
h: height,
|
||||
align: alignMap[hAlign] | alignMap[vAlign],
|
||||
mode: resizeMap[alg],
|
||||
});
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
@@ -144,7 +147,6 @@ class CoverImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default CoverImage;
|
||||
|
||||
@@ -9,13 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Crop Image operation
|
||||
*/
|
||||
class CropImage extends Operation {
|
||||
|
||||
/**
|
||||
* CropImage constructor
|
||||
*/
|
||||
@@ -24,7 +23,8 @@ class CropImage extends Operation {
|
||||
|
||||
this.name = "Crop Image";
|
||||
this.module = "Image";
|
||||
this.description = "Crops an image to the specified region, or automatically crops edges.<br><br><b><u>Autocrop</u></b><br>Automatically crops same-colour borders from the image.<br><br><u>Autocrop tolerance</u><br>A percentage value for the tolerance of colour difference between pixels.<br><br><u>Only autocrop frames</u><br>Only crop real frames (all sides must have the same border)<br><br><u>Symmetric autocrop</u><br>Force autocrop to be symmetric (top/bottom and left/right are cropped by the same amount)<br><br><u>Autocrop keep border</u><br>The number of pixels of border to leave around the image.";
|
||||
this.description =
|
||||
"Crops an image to the specified region, or automatically crops edges.<br><br><b><u>Autocrop</u></b><br>Automatically crops same-colour borders from the image.<br><br><u>Autocrop tolerance</u><br>A percentage value for the tolerance of colour difference between pixels.<br><br><u>Only autocrop frames</u><br>Only crop real frames (all sides must have the same border)<br><br><u>Symmetric autocrop</u><br>Force autocrop to be symmetric (top/bottom and left/right are cropped by the same amount)<br><br><u>Autocrop keep border</u><br>The number of pixels of border to leave around the image.";
|
||||
this.infoURL = "https://wikipedia.org/wiki/Cropping_(image)";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
@@ -34,30 +34,30 @@ class CropImage extends Operation {
|
||||
name: "X Position",
|
||||
type: "number",
|
||||
value: 0,
|
||||
min: 0
|
||||
min: 0,
|
||||
},
|
||||
{
|
||||
name: "Y Position",
|
||||
type: "number",
|
||||
value: 0,
|
||||
min: 0
|
||||
min: 0,
|
||||
},
|
||||
{
|
||||
name: "Width",
|
||||
type: "number",
|
||||
value: 10,
|
||||
min: 1
|
||||
min: 1,
|
||||
},
|
||||
{
|
||||
name: "Height",
|
||||
type: "number",
|
||||
value: 10,
|
||||
min: 1
|
||||
min: 1,
|
||||
},
|
||||
{
|
||||
name: "Autocrop",
|
||||
type: "boolean",
|
||||
value: false
|
||||
value: false,
|
||||
},
|
||||
{
|
||||
name: "Autocrop tolerance (%)",
|
||||
@@ -65,24 +65,24 @@ class CropImage extends Operation {
|
||||
value: 0.02,
|
||||
min: 0,
|
||||
max: 100,
|
||||
step: 0.01
|
||||
step: 0.01,
|
||||
},
|
||||
{
|
||||
name: "Only autocrop frames",
|
||||
type: "boolean",
|
||||
value: true
|
||||
value: true,
|
||||
},
|
||||
{
|
||||
name: "Symmetric autocrop",
|
||||
type: "boolean",
|
||||
value: false
|
||||
value: false,
|
||||
},
|
||||
{
|
||||
name: "Autocrop keep border (px)",
|
||||
type: "number",
|
||||
value: 0,
|
||||
min: 0
|
||||
}
|
||||
min: 0,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -92,7 +92,17 @@ class CropImage extends Operation {
|
||||
* @returns {byteArray}
|
||||
*/
|
||||
async run(input, args) {
|
||||
const [xPos, yPos, width, height, autocrop, autoTolerance, autoFrames, autoSymmetric, autoBorder] = args;
|
||||
const [
|
||||
xPos,
|
||||
yPos,
|
||||
width,
|
||||
height,
|
||||
autocrop,
|
||||
autoTolerance,
|
||||
autoFrames,
|
||||
autoSymmetric,
|
||||
autoBorder,
|
||||
] = args;
|
||||
if (!isImage(input)) {
|
||||
throw new OperationError("Invalid file type.");
|
||||
}
|
||||
@@ -108,20 +118,25 @@ class CropImage extends Operation {
|
||||
self.sendStatusMessage("Cropping image...");
|
||||
if (autocrop) {
|
||||
image.autocrop({
|
||||
tolerance: (autoTolerance / 100),
|
||||
tolerance: autoTolerance / 100,
|
||||
cropOnlyFrames: autoFrames,
|
||||
cropSymmetric: autoSymmetric,
|
||||
leaveBorder: autoBorder
|
||||
leaveBorder: autoBorder,
|
||||
});
|
||||
} else {
|
||||
image.crop(xPos, yPos, width, height);
|
||||
image.crop({
|
||||
x: xPos,
|
||||
y: yPos,
|
||||
w: width,
|
||||
h: height,
|
||||
});
|
||||
}
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
@@ -145,7 +160,6 @@ class CropImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default CropImage;
|
||||
|
||||
@@ -9,13 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Image Dither operation
|
||||
*/
|
||||
class DitherImage extends Operation {
|
||||
|
||||
/**
|
||||
* DitherImage constructor
|
||||
*/
|
||||
@@ -51,17 +50,19 @@ class DitherImage extends Operation {
|
||||
try {
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Applying dither to image...");
|
||||
image.dither565();
|
||||
image.dither();
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error applying dither to image. (${err})`);
|
||||
throw new OperationError(
|
||||
`Error applying dither to image. (${err})`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,7 +82,6 @@ class DitherImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default DitherImage;
|
||||
|
||||
@@ -44,23 +44,6 @@ class EscapeUnicodeCharacters extends Operation {
|
||||
"value": true
|
||||
}
|
||||
];
|
||||
this.checks = [
|
||||
{
|
||||
pattern: "\\\\u(?:[\\da-f]{4,6})",
|
||||
flags: "i",
|
||||
args: ["\\u"]
|
||||
},
|
||||
{
|
||||
pattern: "%u(?:[\\da-f]{4,6})",
|
||||
flags: "i",
|
||||
args: ["%u"]
|
||||
},
|
||||
{
|
||||
pattern: "U\\+(?:[\\da-f]{4,6})",
|
||||
flags: "i",
|
||||
args: ["U+"]
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,13 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import Utils from "../Utils.mjs";
|
||||
import { fromBinary } from "../lib/Binary.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp } from "jimp";
|
||||
|
||||
/**
|
||||
* Extract LSB operation
|
||||
*/
|
||||
class ExtractLSB extends Operation {
|
||||
|
||||
/**
|
||||
* ExtractLSB constructor
|
||||
*/
|
||||
@@ -24,8 +23,10 @@ class ExtractLSB extends Operation {
|
||||
|
||||
this.name = "Extract LSB";
|
||||
this.module = "Image";
|
||||
this.description = "Extracts the Least Significant Bit data from each pixel in an image. This is a common way to hide data in Steganography.";
|
||||
this.infoURL = "https://wikipedia.org/wiki/Bit_numbering#Least_significant_bit_in_digital_steganography";
|
||||
this.description =
|
||||
"Extracts the Least Significant Bit data from each pixel in an image. This is a common way to hide data in Steganography.";
|
||||
this.infoURL =
|
||||
"https://wikipedia.org/wiki/Bit_numbering#Least_significant_bit_in_digital_steganography";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "byteArray";
|
||||
this.args = [
|
||||
@@ -57,8 +58,8 @@ class ExtractLSB extends Operation {
|
||||
{
|
||||
name: "Bit",
|
||||
type: "number",
|
||||
value: 0
|
||||
}
|
||||
value: 0,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -68,21 +69,27 @@ class ExtractLSB extends Operation {
|
||||
* @returns {byteArray}
|
||||
*/
|
||||
async run(input, args) {
|
||||
if (!isImage(input)) throw new OperationError("Please enter a valid image file.");
|
||||
if (!isImage(input))
|
||||
throw new OperationError("Please enter a valid image file.");
|
||||
|
||||
const bit = 7 - args.pop(),
|
||||
pixelOrder = args.pop(),
|
||||
colours = args.filter(option => option !== "").map(option => COLOUR_OPTIONS.indexOf(option)),
|
||||
colours = args
|
||||
.filter((option) => option !== "")
|
||||
.map((option) => COLOUR_OPTIONS.indexOf(option)),
|
||||
parsedImage = await Jimp.read(input),
|
||||
width = parsedImage.bitmap.width,
|
||||
height = parsedImage.bitmap.height,
|
||||
rgba = parsedImage.bitmap.data;
|
||||
|
||||
if (bit < 0 || bit > 7) {
|
||||
throw new OperationError("Error: Bit argument must be between 0 and 7");
|
||||
throw new OperationError(
|
||||
"Error: Bit argument must be between 0 and 7",
|
||||
);
|
||||
}
|
||||
|
||||
let i, combinedBinary = "";
|
||||
let i,
|
||||
combinedBinary = "";
|
||||
|
||||
if (pixelOrder === "Row") {
|
||||
for (i = 0; i < rgba.length; i += 4) {
|
||||
@@ -106,7 +113,6 @@ class ExtractLSB extends Operation {
|
||||
|
||||
return fromBinary(combinedBinary);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const COLOUR_OPTIONS = ["R", "G", "B", "A"];
|
||||
|
||||
@@ -7,15 +7,14 @@
|
||||
import Operation from "../Operation.mjs";
|
||||
import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp } from "jimp";
|
||||
|
||||
import {RGBA_DELIM_OPTIONS} from "../lib/Delim.mjs";
|
||||
import { RGBA_DELIM_OPTIONS } from "../lib/Delim.mjs";
|
||||
|
||||
/**
|
||||
* Extract RGBA operation
|
||||
*/
|
||||
class ExtractRGBA extends Operation {
|
||||
|
||||
/**
|
||||
* ExtractRGBA constructor
|
||||
*/
|
||||
@@ -24,7 +23,8 @@ class ExtractRGBA extends Operation {
|
||||
|
||||
this.name = "Extract RGBA";
|
||||
this.module = "Image";
|
||||
this.description = "Extracts each pixel's RGBA value in an image. These are sometimes used in Steganography to hide text or data.";
|
||||
this.description =
|
||||
"Extracts each pixel's RGBA value in an image. These are sometimes used in Steganography to hide text or data.";
|
||||
this.infoURL = "https://wikipedia.org/wiki/RGBA_color_space";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "string";
|
||||
@@ -32,13 +32,13 @@ class ExtractRGBA extends Operation {
|
||||
{
|
||||
name: "Delimiter",
|
||||
type: "editableOption",
|
||||
value: RGBA_DELIM_OPTIONS
|
||||
value: RGBA_DELIM_OPTIONS,
|
||||
},
|
||||
{
|
||||
name: "Include Alpha",
|
||||
type: "boolean",
|
||||
value: true
|
||||
}
|
||||
value: true,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -48,18 +48,20 @@ class ExtractRGBA extends Operation {
|
||||
* @returns {string}
|
||||
*/
|
||||
async run(input, args) {
|
||||
if (!isImage(input)) throw new OperationError("Please enter a valid image file.");
|
||||
if (!isImage(input))
|
||||
throw new OperationError("Please enter a valid image file.");
|
||||
|
||||
const delimiter = args[0],
|
||||
includeAlpha = args[1],
|
||||
parsedImage = await Jimp.read(input);
|
||||
|
||||
let bitmap = parsedImage.bitmap.data;
|
||||
bitmap = includeAlpha ? bitmap : bitmap.filter((val, idx) => idx % 4 !== 3);
|
||||
bitmap = includeAlpha ?
|
||||
bitmap :
|
||||
bitmap.filter((val, idx) => idx % 4 !== 3);
|
||||
|
||||
return bitmap.join(delimiter);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default ExtractRGBA;
|
||||
|
||||
@@ -9,13 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Flip Image operation
|
||||
*/
|
||||
class FlipImage extends Operation {
|
||||
|
||||
/**
|
||||
* FlipImage constructor
|
||||
*/
|
||||
@@ -33,8 +32,8 @@ class FlipImage extends Operation {
|
||||
{
|
||||
name: "Axis",
|
||||
type: "option",
|
||||
value: ["Horizontal", "Vertical"]
|
||||
}
|
||||
value: ["Horizontal", "Vertical"],
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -60,18 +59,24 @@ class FlipImage extends Operation {
|
||||
self.sendStatusMessage("Flipping image...");
|
||||
switch (flipAxis) {
|
||||
case "Horizontal":
|
||||
image.flip(true, false);
|
||||
image.flip({
|
||||
horizontal: true,
|
||||
vertical: false,
|
||||
});
|
||||
break;
|
||||
case "Vertical":
|
||||
image.flip(false, true);
|
||||
image.flip({
|
||||
horizontal: false,
|
||||
vertical: true,
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
@@ -95,7 +100,6 @@ class FlipImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default FlipImage;
|
||||
|
||||
@@ -7,16 +7,15 @@
|
||||
import Operation from "../Operation.mjs";
|
||||
import OperationError from "../errors/OperationError.mjs";
|
||||
import Utils from "../Utils.mjs";
|
||||
import {isImage} from "../lib/FileType.mjs";
|
||||
import {toBase64} from "../lib/Base64.mjs";
|
||||
import {isWorkerEnvironment} from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import { Jimp, JimpMime, ResizeStrategy, rgbaToInt } from "jimp";
|
||||
|
||||
/**
|
||||
* Generate Image operation
|
||||
*/
|
||||
class GenerateImage extends Operation {
|
||||
|
||||
/**
|
||||
* GenerateImage constructor
|
||||
*/
|
||||
@@ -25,27 +24,28 @@ class GenerateImage extends Operation {
|
||||
|
||||
this.name = "Generate Image";
|
||||
this.module = "Image";
|
||||
this.description = "Generates an image using the input as pixel values.";
|
||||
this.description =
|
||||
"Generates an image using the input as pixel values.";
|
||||
this.infoURL = "";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
this.presentType = "html";
|
||||
this.args = [
|
||||
{
|
||||
"name": "Mode",
|
||||
"type": "option",
|
||||
"value": ["Greyscale", "RG", "RGB", "RGBA", "Bits"]
|
||||
name: "Mode",
|
||||
type: "option",
|
||||
value: ["Greyscale", "RG", "RGB", "RGBA", "Bits"],
|
||||
},
|
||||
{
|
||||
"name": "Pixel Scale Factor",
|
||||
"type": "number",
|
||||
"value": 8,
|
||||
name: "Pixel Scale Factor",
|
||||
type: "number",
|
||||
value: 8,
|
||||
},
|
||||
{
|
||||
"name": "Pixels per row",
|
||||
"type": "number",
|
||||
"value": 64,
|
||||
}
|
||||
name: "Pixels per row",
|
||||
type: "number",
|
||||
value: 64,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -67,21 +67,23 @@ class GenerateImage extends Operation {
|
||||
}
|
||||
|
||||
const bytePerPixelMap = {
|
||||
"Greyscale": 1,
|
||||
"RG": 2,
|
||||
"RGB": 3,
|
||||
"RGBA": 4,
|
||||
"Bits": 1/8,
|
||||
Greyscale: 1,
|
||||
RG: 2,
|
||||
RGB: 3,
|
||||
RGBA: 4,
|
||||
Bits: 1 / 8,
|
||||
};
|
||||
|
||||
const bytesPerPixel = bytePerPixelMap[mode];
|
||||
|
||||
if (bytesPerPixel > 0 && input.length % bytesPerPixel !== 0) {
|
||||
throw new OperationError(`Number of bytes is not a divisor of ${bytesPerPixel}`);
|
||||
if (bytesPerPixel > 0 && input.length % bytesPerPixel !== 0) {
|
||||
throw new OperationError(
|
||||
`Number of bytes is not a divisor of ${bytesPerPixel}`,
|
||||
);
|
||||
}
|
||||
|
||||
const height = Math.ceil(input.length / bytesPerPixel / width);
|
||||
const image = await new Jimp(width, height, (err, image) => {});
|
||||
const image = new Jimp({ width, height });
|
||||
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Generating image from data...");
|
||||
@@ -94,8 +96,8 @@ class GenerateImage extends Operation {
|
||||
const x = index % width;
|
||||
const y = Math.floor(index / width);
|
||||
|
||||
const value = curByte[k] === "0" ? 0xFF : 0x00;
|
||||
const pixel = Jimp.rgbaToInt(value, value, value, 0xFF);
|
||||
const value = curByte[k] === "0" ? 0xff : 0x00;
|
||||
const pixel = rgbaToInt(value, value, value, 0xff);
|
||||
image.setPixelColor(pixel, x, y);
|
||||
}
|
||||
}
|
||||
@@ -109,7 +111,7 @@ class GenerateImage extends Operation {
|
||||
let red = 0x00;
|
||||
let green = 0x00;
|
||||
let blue = 0x00;
|
||||
let alpha = 0xFF;
|
||||
let alpha = 0xff;
|
||||
|
||||
switch (mode) {
|
||||
case "Greyscale":
|
||||
@@ -139,10 +141,12 @@ class GenerateImage extends Operation {
|
||||
}
|
||||
|
||||
try {
|
||||
const pixel = Jimp.rgbaToInt(red, green, blue, alpha);
|
||||
const pixel = rgbaToInt(red, green, blue, alpha);
|
||||
image.setPixelColor(pixel, x, y);
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error while generating image from pixel values. (${err})`);
|
||||
throw new OperationError(
|
||||
`Error while generating image from pixel values. (${err})`,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -151,11 +155,15 @@ class GenerateImage extends Operation {
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Scaling image...");
|
||||
|
||||
image.scaleToFit(width*scale, height*scale, Jimp.RESIZE_NEAREST_NEIGHBOR);
|
||||
image.scaleToFit({
|
||||
w: width * scale,
|
||||
h: height * scale,
|
||||
mode: ResizeStrategy.NEAREST_NEIGHBOR,
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
const imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
const imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error generating image. (${err})`);
|
||||
@@ -178,7 +186,6 @@ class GenerateImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default GenerateImage;
|
||||
|
||||
@@ -9,13 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Image Brightness / Contrast operation
|
||||
*/
|
||||
class ImageBrightnessContrast extends Operation {
|
||||
|
||||
/**
|
||||
* ImageBrightnessContrast constructor
|
||||
*/
|
||||
@@ -35,15 +34,15 @@ class ImageBrightnessContrast extends Operation {
|
||||
type: "number",
|
||||
value: 0,
|
||||
min: -100,
|
||||
max: 100
|
||||
max: 100,
|
||||
},
|
||||
{
|
||||
name: "Contrast",
|
||||
type: "number",
|
||||
value: 0,
|
||||
min: -100,
|
||||
max: 100
|
||||
}
|
||||
max: 100,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -77,14 +76,16 @@ class ImageBrightnessContrast extends Operation {
|
||||
}
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error adjusting image brightness or contrast. (${err})`);
|
||||
throw new OperationError(
|
||||
`Error adjusting image brightness or contrast. (${err})`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,7 +105,6 @@ class ImageBrightnessContrast extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default ImageBrightnessContrast;
|
||||
|
||||
@@ -9,13 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Image Filter operation
|
||||
*/
|
||||
class ImageFilter extends Operation {
|
||||
|
||||
/**
|
||||
* ImageFilter constructor
|
||||
*/
|
||||
@@ -33,11 +32,8 @@ class ImageFilter extends Operation {
|
||||
{
|
||||
name: "Filter type",
|
||||
type: "option",
|
||||
value: [
|
||||
"Greyscale",
|
||||
"Sepia"
|
||||
]
|
||||
}
|
||||
value: ["Greyscale", "Sepia"],
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -60,7 +56,11 @@ class ImageFilter extends Operation {
|
||||
}
|
||||
try {
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Applying " + filterType.toLowerCase() + " filter to image...");
|
||||
self.sendStatusMessage(
|
||||
"Applying " +
|
||||
filterType.toLowerCase() +
|
||||
" filter to image...",
|
||||
);
|
||||
if (filterType === "Greyscale") {
|
||||
image.greyscale();
|
||||
} else {
|
||||
@@ -68,14 +68,16 @@ class ImageFilter extends Operation {
|
||||
}
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error applying filter to image. (${err})`);
|
||||
throw new OperationError(
|
||||
`Error applying filter to image. (${err})`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,7 +97,6 @@ class ImageFilter extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default ImageFilter;
|
||||
|
||||
@@ -9,13 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Image Hue/Saturation/Lightness operation
|
||||
*/
|
||||
class ImageHueSaturationLightness extends Operation {
|
||||
|
||||
/**
|
||||
* ImageHueSaturationLightness constructor
|
||||
*/
|
||||
@@ -24,7 +23,8 @@ class ImageHueSaturationLightness extends Operation {
|
||||
|
||||
this.name = "Image Hue/Saturation/Lightness";
|
||||
this.module = "Image";
|
||||
this.description = "Adjusts the hue / saturation / lightness (HSL) values of an image.";
|
||||
this.description =
|
||||
"Adjusts the hue / saturation / lightness (HSL) values of an image.";
|
||||
this.infoURL = "";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
@@ -35,22 +35,22 @@ class ImageHueSaturationLightness extends Operation {
|
||||
type: "number",
|
||||
value: 0,
|
||||
min: -360,
|
||||
max: 360
|
||||
max: 360,
|
||||
},
|
||||
{
|
||||
name: "Saturation",
|
||||
type: "number",
|
||||
value: 0,
|
||||
min: -100,
|
||||
max: 100
|
||||
max: 100,
|
||||
},
|
||||
{
|
||||
name: "Lightness",
|
||||
type: "number",
|
||||
value: 0,
|
||||
min: -100,
|
||||
max: 100
|
||||
}
|
||||
max: 100,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -76,43 +76,45 @@ class ImageHueSaturationLightness extends Operation {
|
||||
if (hue !== 0) {
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Changing image hue...");
|
||||
image.colour([
|
||||
image.color([
|
||||
{
|
||||
apply: "hue",
|
||||
params: [hue]
|
||||
}
|
||||
params: [hue],
|
||||
},
|
||||
]);
|
||||
}
|
||||
if (saturation !== 0) {
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Changing image saturation...");
|
||||
image.colour([
|
||||
image.color([
|
||||
{
|
||||
apply: "saturate",
|
||||
params: [saturation]
|
||||
}
|
||||
params: [saturation],
|
||||
},
|
||||
]);
|
||||
}
|
||||
if (lightness !== 0) {
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Changing image lightness...");
|
||||
image.colour([
|
||||
image.color([
|
||||
{
|
||||
apply: "lighten",
|
||||
params: [lightness]
|
||||
}
|
||||
params: [lightness],
|
||||
},
|
||||
]);
|
||||
}
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
throw new OperationError(`Error adjusting image hue / saturation / lightness. (${err})`);
|
||||
throw new OperationError(
|
||||
`Error adjusting image hue / saturation / lightness. (${err})`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,13 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Image Opacity operation
|
||||
*/
|
||||
class ImageOpacity extends Operation {
|
||||
|
||||
/**
|
||||
* ImageOpacity constructor
|
||||
*/
|
||||
@@ -35,8 +34,8 @@ class ImageOpacity extends Operation {
|
||||
type: "number",
|
||||
value: 100,
|
||||
min: 0,
|
||||
max: 100
|
||||
}
|
||||
max: 100,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -63,10 +62,10 @@ class ImageOpacity extends Operation {
|
||||
image.opacity(opacity / 100);
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
@@ -90,7 +89,6 @@ class ImageOpacity extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default ImageOpacity;
|
||||
|
||||
@@ -9,13 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Invert Image operation
|
||||
*/
|
||||
class InvertImage extends Operation {
|
||||
|
||||
/**
|
||||
* InvertImage constructor
|
||||
*/
|
||||
@@ -54,10 +53,10 @@ class InvertImage extends Operation {
|
||||
image.invert();
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
@@ -81,7 +80,6 @@ class InvertImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default InvertImage;
|
||||
|
||||
@@ -8,13 +8,12 @@ import Operation from "../Operation.mjs";
|
||||
import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Normalise Image operation
|
||||
*/
|
||||
class NormaliseImage extends Operation {
|
||||
|
||||
/**
|
||||
* NormaliseImage constructor
|
||||
*/
|
||||
@@ -27,7 +26,7 @@ class NormaliseImage extends Operation {
|
||||
this.infoURL = "";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
this.presentType= "html";
|
||||
this.presentType = "html";
|
||||
this.args = [];
|
||||
}
|
||||
|
||||
@@ -52,10 +51,10 @@ class NormaliseImage extends Operation {
|
||||
image.normalize();
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
@@ -79,7 +78,6 @@ class NormaliseImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default NormaliseImage;
|
||||
|
||||
@@ -13,7 +13,6 @@ import { parseQrCode } from "../lib/QRCode.mjs";
|
||||
* Parse QR Code operation
|
||||
*/
|
||||
class ParseQRCode extends Operation {
|
||||
|
||||
/**
|
||||
* ParseQRCode constructor
|
||||
*/
|
||||
@@ -22,24 +21,26 @@ class ParseQRCode extends Operation {
|
||||
|
||||
this.name = "Parse QR Code";
|
||||
this.module = "Image";
|
||||
this.description = "Reads an image file and attempts to detect and read a Quick Response (QR) code from the image.<br><br><u>Normalise Image</u><br>Attempts to normalise the image before parsing it to improve detection of a QR code.";
|
||||
this.description =
|
||||
"Reads an image file and attempts to detect and read a Quick Response (QR) code from the image.<br><br><u>Normalise Image</u><br>Attempts to normalise the image before parsing it to improve detection of a QR code.";
|
||||
this.infoURL = "https://wikipedia.org/wiki/QR_code";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "string";
|
||||
this.args = [
|
||||
{
|
||||
"name": "Normalise image",
|
||||
"type": "boolean",
|
||||
"value": false
|
||||
}
|
||||
name: "Normalise image",
|
||||
type: "boolean",
|
||||
value: false,
|
||||
},
|
||||
];
|
||||
this.checks = [
|
||||
{
|
||||
"pattern": "^(?:\\xff\\xd8\\xff|\\x89\\x50\\x4e\\x47|\\x47\\x49\\x46|.{8}\\x57\\x45\\x42\\x50|\\x42\\x4d)",
|
||||
"flags": "",
|
||||
"args": [false],
|
||||
"useful": true
|
||||
}
|
||||
pattern:
|
||||
"^(?:\\xff\\xd8\\xff|\\x89\\x50\\x4e\\x47|\\x47\\x49\\x46|.{8}\\x57\\x45\\x42\\x50|\\x42\\x4d)",
|
||||
flags: "",
|
||||
args: [false],
|
||||
useful: true,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -54,9 +55,8 @@ class ParseQRCode extends Operation {
|
||||
if (!isImage(input)) {
|
||||
throw new OperationError("Invalid file type.");
|
||||
}
|
||||
return await parseQrCode(input, normalise);
|
||||
return parseQrCode(input, normalise);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default ParseQRCode;
|
||||
|
||||
@@ -10,13 +10,12 @@ import Utils from "../Utils.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { runHash } from "../lib/Hash.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp } from "jimp";
|
||||
|
||||
/**
|
||||
* Randomize Colour Palette operation
|
||||
*/
|
||||
class RandomizeColourPalette extends Operation {
|
||||
|
||||
/**
|
||||
* RandomizeColourPalette constructor
|
||||
*/
|
||||
@@ -25,7 +24,8 @@ class RandomizeColourPalette extends Operation {
|
||||
|
||||
this.name = "Randomize Colour Palette";
|
||||
this.module = "Image";
|
||||
this.description = "Randomizes each colour in an image's colour palette. This can often reveal text or symbols that were previously a very similar colour to their surroundings, a technique sometimes used in Steganography.";
|
||||
this.description =
|
||||
"Randomizes each colour in an image's colour palette. This can often reveal text or symbols that were previously a very similar colour to their surroundings, a technique sometimes used in Steganography.";
|
||||
this.infoURL = "https://wikipedia.org/wiki/Indexed_color";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
@@ -34,8 +34,8 @@ class RandomizeColourPalette extends Operation {
|
||||
{
|
||||
name: "Seed",
|
||||
type: "string",
|
||||
value: ""
|
||||
}
|
||||
value: "",
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -45,23 +45,24 @@ class RandomizeColourPalette extends Operation {
|
||||
* @returns {ArrayBuffer}
|
||||
*/
|
||||
async run(input, args) {
|
||||
if (!isImage(input)) throw new OperationError("Please enter a valid image file.");
|
||||
if (!isImage(input))
|
||||
throw new OperationError("Please enter a valid image file.");
|
||||
|
||||
const seed = args[0] || (Math.random().toString().substr(2)),
|
||||
const seed = args[0] || Math.random().toString().substr(2),
|
||||
parsedImage = await Jimp.read(input),
|
||||
width = parsedImage.bitmap.width,
|
||||
height = parsedImage.bitmap.height;
|
||||
|
||||
let rgbString, rgbHash, rgbHex;
|
||||
|
||||
parsedImage.scan(0, 0, width, height, function(x, y, idx) {
|
||||
rgbString = this.bitmap.data.slice(idx, idx+3).join(".");
|
||||
parsedImage.scan(0, 0, width, height, function (x, y, idx) {
|
||||
rgbString = this.bitmap.data.slice(idx, idx + 3).join(".");
|
||||
rgbHash = runHash("md5", Utils.strToArrayBuffer(seed + rgbString));
|
||||
rgbHex = rgbHash.substr(0, 6) + "ff";
|
||||
parsedImage.setPixelColor(parseInt(rgbHex, 16), x, y);
|
||||
});
|
||||
|
||||
const imageBuffer = await parsedImage.getBufferAsync(Jimp.AUTO);
|
||||
const imageBuffer = await parsedImage.getBuffer(parsedImage.mime);
|
||||
|
||||
return new Uint8Array(imageBuffer).buffer;
|
||||
}
|
||||
@@ -77,7 +78,6 @@ class RandomizeColourPalette extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(data)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default RandomizeColourPalette;
|
||||
|
||||
@@ -9,13 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime, ResizeStrategy } from "jimp";
|
||||
|
||||
/**
|
||||
* Resize Image operation
|
||||
*/
|
||||
class ResizeImage extends Operation {
|
||||
|
||||
/**
|
||||
* ResizeImage constructor
|
||||
*/
|
||||
@@ -24,7 +23,8 @@ class ResizeImage extends Operation {
|
||||
|
||||
this.name = "Resize Image";
|
||||
this.module = "Image";
|
||||
this.description = "Resizes an image to the specified width and height values.";
|
||||
this.description =
|
||||
"Resizes an image to the specified width and height values.";
|
||||
this.infoURL = "https://wikipedia.org/wiki/Image_scaling";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
@@ -34,23 +34,23 @@ class ResizeImage extends Operation {
|
||||
name: "Width",
|
||||
type: "number",
|
||||
value: 100,
|
||||
min: 1
|
||||
min: 1,
|
||||
},
|
||||
{
|
||||
name: "Height",
|
||||
type: "number",
|
||||
value: 100,
|
||||
min: 1
|
||||
min: 1,
|
||||
},
|
||||
{
|
||||
name: "Unit type",
|
||||
type: "option",
|
||||
value: ["Pixels", "Percent"]
|
||||
value: ["Pixels", "Percent"],
|
||||
},
|
||||
{
|
||||
name: "Maintain aspect ratio",
|
||||
type: "boolean",
|
||||
value: false
|
||||
value: false,
|
||||
},
|
||||
{
|
||||
name: "Resizing algorithm",
|
||||
@@ -60,10 +60,10 @@ class ResizeImage extends Operation {
|
||||
"Bilinear",
|
||||
"Bicubic",
|
||||
"Hermite",
|
||||
"Bezier"
|
||||
"Bezier",
|
||||
],
|
||||
defaultIndex: 1
|
||||
}
|
||||
defaultIndex: 1,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -80,11 +80,11 @@ class ResizeImage extends Operation {
|
||||
resizeAlg = args[4];
|
||||
|
||||
const resizeMap = {
|
||||
"Nearest Neighbour": Jimp.RESIZE_NEAREST_NEIGHBOR,
|
||||
"Bilinear": Jimp.RESIZE_BILINEAR,
|
||||
"Bicubic": Jimp.RESIZE_BICUBIC,
|
||||
"Hermite": Jimp.RESIZE_HERMITE,
|
||||
"Bezier": Jimp.RESIZE_BEZIER
|
||||
"Nearest Neighbour": ResizeStrategy.NEAREST_NEIGHBOR,
|
||||
Bilinear: ResizeStrategy.BILINEAR,
|
||||
Bicubic: ResizeStrategy.BICUBIC,
|
||||
Hermite: ResizeStrategy.HERMITE,
|
||||
Bezier: ResizeStrategy.BEZIER,
|
||||
};
|
||||
|
||||
if (!isImage(input)) {
|
||||
@@ -99,23 +99,31 @@ class ResizeImage extends Operation {
|
||||
}
|
||||
try {
|
||||
if (unit === "Percent") {
|
||||
width = image.getWidth() * (width / 100);
|
||||
height = image.getHeight() * (height / 100);
|
||||
width = image.width * (width / 100);
|
||||
height = image.height * (height / 100);
|
||||
}
|
||||
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Resizing image...");
|
||||
if (aspect) {
|
||||
image.scaleToFit(width, height, resizeMap[resizeAlg]);
|
||||
image.scaleToFit({
|
||||
w: width,
|
||||
h: height,
|
||||
mode: resizeMap[resizeAlg],
|
||||
});
|
||||
} else {
|
||||
image.resize(width, height, resizeMap[resizeAlg]);
|
||||
image.resize({
|
||||
w: width,
|
||||
h: height,
|
||||
mode: resizeMap[resizeAlg],
|
||||
});
|
||||
}
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
@@ -139,7 +147,6 @@ class ResizeImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default ResizeImage;
|
||||
|
||||
@@ -9,13 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Rotate Image operation
|
||||
*/
|
||||
class RotateImage extends Operation {
|
||||
|
||||
/**
|
||||
* RotateImage constructor
|
||||
*/
|
||||
@@ -24,7 +23,8 @@ class RotateImage extends Operation {
|
||||
|
||||
this.name = "Rotate Image";
|
||||
this.module = "Image";
|
||||
this.description = "Rotates an image by the specified number of degrees.";
|
||||
this.description =
|
||||
"Rotates an image by the specified number of degrees.";
|
||||
this.infoURL = "";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
@@ -33,8 +33,8 @@ class RotateImage extends Operation {
|
||||
{
|
||||
name: "Rotation amount (degrees)",
|
||||
type: "number",
|
||||
value: 90
|
||||
}
|
||||
value: 90,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -62,10 +62,10 @@ class RotateImage extends Operation {
|
||||
image.rotate(degrees);
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
@@ -89,7 +89,6 @@ class RotateImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default RotateImage;
|
||||
|
||||
@@ -8,15 +8,13 @@ import Operation from "../Operation.mjs";
|
||||
import OperationError from "../errors/OperationError.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import { gaussianBlur } from "../lib/ImageManipulation.mjs";
|
||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Sharpen Image operation
|
||||
*/
|
||||
class SharpenImage extends Operation {
|
||||
|
||||
/**
|
||||
* SharpenImage constructor
|
||||
*/
|
||||
@@ -35,22 +33,22 @@ class SharpenImage extends Operation {
|
||||
name: "Radius",
|
||||
type: "number",
|
||||
value: 2,
|
||||
min: 1
|
||||
min: 1,
|
||||
},
|
||||
{
|
||||
name: "Amount",
|
||||
type: "number",
|
||||
value: 1,
|
||||
min: 0,
|
||||
step: 0.1
|
||||
step: 0.1,
|
||||
},
|
||||
{
|
||||
name: "Threshold",
|
||||
type: "number",
|
||||
value: 10,
|
||||
min: 0,
|
||||
max: 100
|
||||
}
|
||||
max: 100,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -79,67 +77,102 @@ class SharpenImage extends Operation {
|
||||
const blurMask = image.clone();
|
||||
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Sharpening image... (Blurring cloned image)");
|
||||
const blurImage = gaussianBlur(image.clone(), radius);
|
||||
|
||||
self.sendStatusMessage(
|
||||
"Sharpening image... (Blurring cloned image)",
|
||||
);
|
||||
const blurImage = image.clone().gaussian(radius);
|
||||
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Sharpening image... (Creating unsharp mask)");
|
||||
blurMask.scan(0, 0, blurMask.bitmap.width, blurMask.bitmap.height, function(x, y, idx) {
|
||||
const blurRed = blurImage.bitmap.data[idx];
|
||||
const blurGreen = blurImage.bitmap.data[idx + 1];
|
||||
const blurBlue = blurImage.bitmap.data[idx + 2];
|
||||
self.sendStatusMessage(
|
||||
"Sharpening image... (Creating unsharp mask)",
|
||||
);
|
||||
blurMask.scan(
|
||||
0,
|
||||
0,
|
||||
blurMask.bitmap.width,
|
||||
blurMask.bitmap.height,
|
||||
function (x, y, idx) {
|
||||
const blurRed = blurImage.bitmap.data[idx];
|
||||
const blurGreen = blurImage.bitmap.data[idx + 1];
|
||||
const blurBlue = blurImage.bitmap.data[idx + 2];
|
||||
|
||||
const normalRed = this.bitmap.data[idx];
|
||||
const normalGreen = this.bitmap.data[idx + 1];
|
||||
const normalBlue = this.bitmap.data[idx + 2];
|
||||
const normalRed = this.bitmap.data[idx];
|
||||
const normalGreen = this.bitmap.data[idx + 1];
|
||||
const normalBlue = this.bitmap.data[idx + 2];
|
||||
|
||||
// Subtract blurred pixel value from normal image
|
||||
this.bitmap.data[idx] = (normalRed > blurRed) ? normalRed - blurRed : 0;
|
||||
this.bitmap.data[idx + 1] = (normalGreen > blurGreen) ? normalGreen - blurGreen : 0;
|
||||
this.bitmap.data[idx + 2] = (normalBlue > blurBlue) ? normalBlue - blurBlue : 0;
|
||||
});
|
||||
// Subtract blurred pixel value from normal image
|
||||
this.bitmap.data[idx] =
|
||||
normalRed > blurRed ? normalRed - blurRed : 0;
|
||||
this.bitmap.data[idx + 1] =
|
||||
normalGreen > blurGreen ? normalGreen - blurGreen : 0;
|
||||
this.bitmap.data[idx + 2] =
|
||||
normalBlue > blurBlue ? normalBlue - blurBlue : 0;
|
||||
},
|
||||
);
|
||||
|
||||
if (isWorkerEnvironment())
|
||||
self.sendStatusMessage("Sharpening image... (Merging with unsharp mask)");
|
||||
image.scan(0, 0, image.bitmap.width, image.bitmap.height, function(x, y, idx) {
|
||||
let maskRed = blurMask.bitmap.data[idx];
|
||||
let maskGreen = blurMask.bitmap.data[idx + 1];
|
||||
let maskBlue = blurMask.bitmap.data[idx + 2];
|
||||
self.sendStatusMessage(
|
||||
"Sharpening image... (Merging with unsharp mask)",
|
||||
);
|
||||
image.scan(
|
||||
0,
|
||||
0,
|
||||
image.bitmap.width,
|
||||
image.bitmap.height,
|
||||
function (x, y, idx) {
|
||||
let maskRed = blurMask.bitmap.data[idx];
|
||||
let maskGreen = blurMask.bitmap.data[idx + 1];
|
||||
let maskBlue = blurMask.bitmap.data[idx + 2];
|
||||
|
||||
const normalRed = this.bitmap.data[idx];
|
||||
const normalGreen = this.bitmap.data[idx + 1];
|
||||
const normalBlue = this.bitmap.data[idx + 2];
|
||||
const normalRed = this.bitmap.data[idx];
|
||||
const normalGreen = this.bitmap.data[idx + 1];
|
||||
const normalBlue = this.bitmap.data[idx + 2];
|
||||
|
||||
// Calculate luminance
|
||||
const maskLuminance = (0.2126 * maskRed + 0.7152 * maskGreen + 0.0722 * maskBlue);
|
||||
const normalLuminance = (0.2126 * normalRed + 0.7152 * normalGreen + 0.0722 * normalBlue);
|
||||
// Calculate luminance
|
||||
const maskLuminance =
|
||||
0.2126 * maskRed +
|
||||
0.7152 * maskGreen +
|
||||
0.0722 * maskBlue;
|
||||
const normalLuminance =
|
||||
0.2126 * normalRed +
|
||||
0.7152 * normalGreen +
|
||||
0.0722 * normalBlue;
|
||||
|
||||
let luminanceDiff;
|
||||
if (maskLuminance > normalLuminance) {
|
||||
luminanceDiff = maskLuminance - normalLuminance;
|
||||
} else {
|
||||
luminanceDiff = normalLuminance - maskLuminance;
|
||||
}
|
||||
let luminanceDiff;
|
||||
if (maskLuminance > normalLuminance) {
|
||||
luminanceDiff = maskLuminance - normalLuminance;
|
||||
} else {
|
||||
luminanceDiff = normalLuminance - maskLuminance;
|
||||
}
|
||||
|
||||
// Scale mask colours by amount
|
||||
maskRed = maskRed * amount;
|
||||
maskGreen = maskGreen * amount;
|
||||
maskBlue = maskBlue * amount;
|
||||
// Scale mask colours by amount
|
||||
maskRed = maskRed * amount;
|
||||
maskGreen = maskGreen * amount;
|
||||
maskBlue = maskBlue * amount;
|
||||
|
||||
// Only change pixel value if the difference is higher than threshold
|
||||
if ((luminanceDiff / 255) * 100 >= threshold) {
|
||||
this.bitmap.data[idx] = (normalRed + maskRed) <= 255 ? normalRed + maskRed : 255;
|
||||
this.bitmap.data[idx + 1] = (normalGreen + maskGreen) <= 255 ? normalGreen + maskGreen : 255;
|
||||
this.bitmap.data[idx + 2] = (normalBlue + maskBlue) <= 255 ? normalBlue + maskBlue : 255;
|
||||
}
|
||||
});
|
||||
// Only change pixel value if the difference is higher than threshold
|
||||
if ((luminanceDiff / 255) * 100 >= threshold) {
|
||||
this.bitmap.data[idx] =
|
||||
normalRed + maskRed <= 255 ?
|
||||
normalRed + maskRed :
|
||||
255;
|
||||
this.bitmap.data[idx + 1] =
|
||||
normalGreen + maskGreen <= 255 ?
|
||||
normalGreen + maskGreen :
|
||||
255;
|
||||
this.bitmap.data[idx + 2] =
|
||||
normalBlue + maskBlue <= 255 ?
|
||||
normalBlue + maskBlue :
|
||||
255;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
let imageBuffer;
|
||||
if (image.getMIME() === "image/gif") {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
||||
if (image.mime === "image/gif") {
|
||||
imageBuffer = await image.getBuffer(JimpMime.png);
|
||||
} else {
|
||||
imageBuffer = await image.getBufferAsync(Jimp.AUTO);
|
||||
imageBuffer = await image.getBuffer(image.mime);
|
||||
}
|
||||
return imageBuffer.buffer;
|
||||
} catch (err) {
|
||||
@@ -163,7 +196,6 @@ class SharpenImage extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(dataArray)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default SharpenImage;
|
||||
|
||||
@@ -7,14 +7,13 @@
|
||||
import Operation from "../Operation.mjs";
|
||||
import OperationError from "../errors/OperationError.mjs";
|
||||
import Utils from "../Utils.mjs";
|
||||
import {isImage} from "../lib/FileType.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { Jimp, JimpMime } from "jimp";
|
||||
|
||||
/**
|
||||
* Split Colour Channels operation
|
||||
*/
|
||||
class SplitColourChannels extends Operation {
|
||||
|
||||
/**
|
||||
* SplitColourChannels constructor
|
||||
*/
|
||||
@@ -23,7 +22,8 @@ class SplitColourChannels extends Operation {
|
||||
|
||||
this.name = "Split Colour Channels";
|
||||
this.module = "Image";
|
||||
this.description = "Splits the given image into its red, green and blue colour channels.";
|
||||
this.description =
|
||||
"Splits the given image into its red, green and blue colour channels.";
|
||||
this.infoURL = "https://wikipedia.org/wiki/Channel_(digital_image)";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "List<File>";
|
||||
@@ -48,26 +48,44 @@ class SplitColourChannels extends Operation {
|
||||
const split = parsedImage
|
||||
.clone()
|
||||
.color([
|
||||
{apply: "blue", params: [-255]},
|
||||
{apply: "green", params: [-255]}
|
||||
{ apply: "blue", params: [-255] },
|
||||
{ apply: "green", params: [-255] },
|
||||
])
|
||||
.getBufferAsync(Jimp.MIME_PNG);
|
||||
resolve(new File([new Uint8Array((await split).values())], "red.png", {type: "image/png"}));
|
||||
.getBuffer(JimpMime.png);
|
||||
resolve(
|
||||
new File(
|
||||
[new Uint8Array((await split).values())],
|
||||
"red.png",
|
||||
{ type: "image/png" },
|
||||
),
|
||||
);
|
||||
} catch (err) {
|
||||
reject(new OperationError(`Could not split red channel: ${err}`));
|
||||
reject(
|
||||
new OperationError(`Could not split red channel: ${err}`),
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
const green = new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
const split = parsedImage.clone()
|
||||
const split = parsedImage
|
||||
.clone()
|
||||
.color([
|
||||
{apply: "red", params: [-255]},
|
||||
{apply: "blue", params: [-255]},
|
||||
]).getBufferAsync(Jimp.MIME_PNG);
|
||||
resolve(new File([new Uint8Array((await split).values())], "green.png", {type: "image/png"}));
|
||||
{ apply: "red", params: [-255] },
|
||||
{ apply: "blue", params: [-255] },
|
||||
])
|
||||
.getBuffer(JimpMime.png);
|
||||
resolve(
|
||||
new File(
|
||||
[new Uint8Array((await split).values())],
|
||||
"green.png",
|
||||
{ type: "image/png" },
|
||||
),
|
||||
);
|
||||
} catch (err) {
|
||||
reject(new OperationError(`Could not split green channel: ${err}`));
|
||||
reject(
|
||||
new OperationError(`Could not split green channel: ${err}`),
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -75,12 +93,21 @@ class SplitColourChannels extends Operation {
|
||||
try {
|
||||
const split = parsedImage
|
||||
.color([
|
||||
{apply: "red", params: [-255]},
|
||||
{apply: "green", params: [-255]},
|
||||
]).getBufferAsync(Jimp.MIME_PNG);
|
||||
resolve(new File([new Uint8Array((await split).values())], "blue.png", {type: "image/png"}));
|
||||
{ apply: "red", params: [-255] },
|
||||
{ apply: "green", params: [-255] },
|
||||
])
|
||||
.getBuffer(JimpMime.png);
|
||||
resolve(
|
||||
new File(
|
||||
[new Uint8Array((await split).values())],
|
||||
"blue.png",
|
||||
{ type: "image/png" },
|
||||
),
|
||||
);
|
||||
} catch (err) {
|
||||
reject(new OperationError(`Could not split blue channel: ${err}`));
|
||||
reject(
|
||||
new OperationError(`Could not split blue channel: ${err}`),
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -96,7 +123,6 @@ class SplitColourChannels extends Operation {
|
||||
async present(files) {
|
||||
return await Utils.displayFilesAsHTML(files);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default SplitColourChannels;
|
||||
|
||||
@@ -30,6 +30,23 @@ class UnescapeUnicodeCharacters extends Operation {
|
||||
"value": ["\\u", "%u", "U+"]
|
||||
}
|
||||
];
|
||||
this.checks = [
|
||||
{
|
||||
pattern: "\\\\u(?:[\\da-f]{4,6})",
|
||||
flags: "i",
|
||||
args: ["\\u"]
|
||||
},
|
||||
{
|
||||
pattern: "%u(?:[\\da-f]{4,6})",
|
||||
flags: "i",
|
||||
args: ["%u"]
|
||||
},
|
||||
{
|
||||
pattern: "U\\+(?:[\\da-f]{4,6})",
|
||||
flags: "i",
|
||||
args: ["U+"]
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,13 +9,12 @@ import OperationError from "../errors/OperationError.mjs";
|
||||
import Utils from "../Utils.mjs";
|
||||
import { isImage } from "../lib/FileType.mjs";
|
||||
import { toBase64 } from "../lib/Base64.mjs";
|
||||
import Jimp from "jimp/es/index.js";
|
||||
import { Jimp } from "jimp";
|
||||
|
||||
/**
|
||||
* View Bit Plane operation
|
||||
*/
|
||||
class ViewBitPlane extends Operation {
|
||||
|
||||
/**
|
||||
* ViewBitPlane constructor
|
||||
*/
|
||||
@@ -24,7 +23,8 @@ class ViewBitPlane extends Operation {
|
||||
|
||||
this.name = "View Bit Plane";
|
||||
this.module = "Image";
|
||||
this.description = "Extracts and displays a bit plane of any given image. These show only a single bit from each pixel, and can be used to hide messages in Steganography.";
|
||||
this.description =
|
||||
"Extracts and displays a bit plane of any given image. These show only a single bit from each pixel, and can be used to hide messages in Steganography.";
|
||||
this.infoURL = "https://wikipedia.org/wiki/Bit_plane";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "ArrayBuffer";
|
||||
@@ -33,13 +33,13 @@ class ViewBitPlane extends Operation {
|
||||
{
|
||||
name: "Colour",
|
||||
type: "option",
|
||||
value: COLOUR_OPTIONS
|
||||
value: COLOUR_OPTIONS,
|
||||
},
|
||||
{
|
||||
name: "Bit",
|
||||
type: "number",
|
||||
value: 0
|
||||
}
|
||||
value: 0,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -49,36 +49,38 @@ class ViewBitPlane extends Operation {
|
||||
* @returns {ArrayBuffer}
|
||||
*/
|
||||
async run(input, args) {
|
||||
if (!isImage(input)) throw new OperationError("Please enter a valid image file.");
|
||||
if (!isImage(input))
|
||||
throw new OperationError("Please enter a valid image file.");
|
||||
|
||||
const [colour, bit] = args,
|
||||
parsedImage = await Jimp.read(input),
|
||||
width = parsedImage.bitmap.width,
|
||||
height = parsedImage.bitmap.height,
|
||||
colourIndex = COLOUR_OPTIONS.indexOf(colour),
|
||||
bitIndex = 7-bit;
|
||||
bitIndex = 7 - bit;
|
||||
|
||||
if (bit < 0 || bit > 7) {
|
||||
throw new OperationError("Error: Bit argument must be between 0 and 7");
|
||||
throw new OperationError(
|
||||
"Error: Bit argument must be between 0 and 7",
|
||||
);
|
||||
}
|
||||
|
||||
let pixel, bin, newPixelValue;
|
||||
|
||||
parsedImage.scan(0, 0, width, height, function(x, y, idx) {
|
||||
parsedImage.scan(0, 0, width, height, function (x, y, idx) {
|
||||
pixel = this.bitmap.data[idx + colourIndex];
|
||||
bin = Utils.bin(pixel);
|
||||
newPixelValue = 255;
|
||||
|
||||
if (bin.charAt(bitIndex) === "1") newPixelValue = 0;
|
||||
|
||||
for (let i=0; i < 3; i++) {
|
||||
for (let i = 0; i < 3; i++) {
|
||||
this.bitmap.data[idx + i] = newPixelValue;
|
||||
}
|
||||
this.bitmap.data[idx + 3] = 255;
|
||||
|
||||
});
|
||||
|
||||
const imageBuffer = await parsedImage.getBufferAsync(Jimp.AUTO);
|
||||
const imageBuffer = await parsedImage.getBuffer(parsedImage.mime);
|
||||
|
||||
return new Uint8Array(imageBuffer).buffer;
|
||||
}
|
||||
@@ -94,14 +96,8 @@ class ViewBitPlane extends Operation {
|
||||
|
||||
return `<img src="data:${type};base64,${toBase64(data)}">`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const COLOUR_OPTIONS = [
|
||||
"Red",
|
||||
"Green",
|
||||
"Blue",
|
||||
"Alpha"
|
||||
];
|
||||
const COLOUR_OPTIONS = ["Red", "Green", "Blue", "Alpha"];
|
||||
|
||||
export default ViewBitPlane;
|
||||
|
||||
@@ -1,485 +1,491 @@
|
||||
info face="Roboto" size=72 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2
|
||||
common lineHeight=85 base=67 scaleW=512 scaleH=512 pages=1 packed=0
|
||||
page id=0 file="Roboto72White.png"
|
||||
chars count=98
|
||||
char id=0 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=66 xadvance=0 page=0 chnl=0
|
||||
char id=10 x=0 y=0 width=70 height=99 xoffset=2 yoffset=-11 xadvance=74 page=0 chnl=0
|
||||
char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=66 xadvance=18 page=0 chnl=0
|
||||
char id=33 x=493 y=99 width=10 height=55 xoffset=5 yoffset=14 xadvance=19 page=0 chnl=0
|
||||
char id=34 x=446 y=319 width=16 height=19 xoffset=4 yoffset=12 xadvance=23 page=0 chnl=0
|
||||
char id=35 x=204 y=265 width=41 height=54 xoffset=3 yoffset=14 xadvance=44 page=0 chnl=0
|
||||
char id=36 x=269 y=0 width=35 height=69 xoffset=3 yoffset=6 xadvance=40 page=0 chnl=0
|
||||
char id=37 x=31 y=155 width=48 height=56 xoffset=3 yoffset=13 xadvance=53 page=0 chnl=0
|
||||
char id=38 x=79 y=155 width=43 height=56 xoffset=3 yoffset=13 xadvance=45 page=0 chnl=0
|
||||
char id=39 x=503 y=99 width=7 height=19 xoffset=3 yoffset=12 xadvance=13 page=0 chnl=0
|
||||
char id=40 x=70 y=0 width=21 height=78 xoffset=4 yoffset=7 xadvance=25 page=0 chnl=0
|
||||
char id=41 x=91 y=0 width=22 height=78 xoffset=-1 yoffset=7 xadvance=25 page=0 chnl=0
|
||||
char id=42 x=342 y=319 width=32 height=32 xoffset=-1 yoffset=14 xadvance=31 page=0 chnl=0
|
||||
char id=43 x=242 y=319 width=37 height=40 xoffset=2 yoffset=23 xadvance=41 page=0 chnl=0
|
||||
char id=44 x=433 y=319 width=13 height=21 xoffset=-1 yoffset=58 xadvance=14 page=0 chnl=0
|
||||
char id=45 x=27 y=360 width=19 height=8 xoffset=0 yoffset=41 xadvance=19 page=0 chnl=0
|
||||
char id=46 x=17 y=360 width=10 height=11 xoffset=4 yoffset=58 xadvance=19 page=0 chnl=0
|
||||
char id=47 x=355 y=0 width=30 height=58 xoffset=-1 yoffset=14 xadvance=30 page=0 chnl=0
|
||||
char id=48 x=449 y=99 width=34 height=56 xoffset=3 yoffset=13 xadvance=40 page=0 chnl=0
|
||||
char id=49 x=474 y=211 width=22 height=54 xoffset=5 yoffset=14 xadvance=40 page=0 chnl=0
|
||||
char id=50 x=195 y=155 width=37 height=55 xoffset=2 yoffset=13 xadvance=41 page=0 chnl=0
|
||||
char id=51 x=379 y=99 width=35 height=56 xoffset=2 yoffset=13 xadvance=40 page=0 chnl=0
|
||||
char id=52 x=128 y=265 width=39 height=54 xoffset=1 yoffset=14 xadvance=41 page=0 chnl=0
|
||||
char id=53 x=232 y=155 width=35 height=55 xoffset=4 yoffset=14 xadvance=40 page=0 chnl=0
|
||||
char id=54 x=267 y=155 width=35 height=55 xoffset=4 yoffset=14 xadvance=41 page=0 chnl=0
|
||||
char id=55 x=167 y=265 width=37 height=54 xoffset=2 yoffset=14 xadvance=41 page=0 chnl=0
|
||||
char id=56 x=414 y=99 width=35 height=56 xoffset=3 yoffset=13 xadvance=40 page=0 chnl=0
|
||||
char id=57 x=302 y=155 width=34 height=55 xoffset=3 yoffset=13 xadvance=41 page=0 chnl=0
|
||||
char id=58 x=495 y=265 width=10 height=41 xoffset=4 yoffset=28 xadvance=18 page=0 chnl=0
|
||||
char id=59 x=496 y=211 width=13 height=52 xoffset=0 yoffset=28 xadvance=15 page=0 chnl=0
|
||||
char id=60 x=279 y=319 width=31 height=35 xoffset=2 yoffset=27 xadvance=37 page=0 chnl=0
|
||||
char id=61 x=402 y=319 width=31 height=23 xoffset=4 yoffset=31 xadvance=39 page=0 chnl=0
|
||||
char id=62 x=310 y=319 width=32 height=35 xoffset=4 yoffset=27 xadvance=38 page=0 chnl=0
|
||||
char id=63 x=0 y=155 width=31 height=56 xoffset=2 yoffset=13 xadvance=34 page=0 chnl=0
|
||||
char id=64 x=210 y=0 width=59 height=69 xoffset=3 yoffset=15 xadvance=65 page=0 chnl=0
|
||||
char id=65 x=336 y=155 width=49 height=54 xoffset=-1 yoffset=14 xadvance=47 page=0 chnl=0
|
||||
char id=66 x=385 y=155 width=37 height=54 xoffset=5 yoffset=14 xadvance=45 page=0 chnl=0
|
||||
char id=67 x=0 y=99 width=42 height=56 xoffset=3 yoffset=13 xadvance=46 page=0 chnl=0
|
||||
char id=68 x=422 y=155 width=39 height=54 xoffset=5 yoffset=14 xadvance=47 page=0 chnl=0
|
||||
char id=69 x=461 y=155 width=35 height=54 xoffset=5 yoffset=14 xadvance=41 page=0 chnl=0
|
||||
char id=70 x=0 y=211 width=34 height=54 xoffset=5 yoffset=14 xadvance=40 page=0 chnl=0
|
||||
char id=71 x=42 y=99 width=42 height=56 xoffset=3 yoffset=13 xadvance=49 page=0 chnl=0
|
||||
char id=72 x=34 y=211 width=41 height=54 xoffset=5 yoffset=14 xadvance=51 page=0 chnl=0
|
||||
char id=73 x=496 y=155 width=9 height=54 xoffset=5 yoffset=14 xadvance=19 page=0 chnl=0
|
||||
char id=74 x=122 y=155 width=34 height=55 xoffset=1 yoffset=14 xadvance=40 page=0 chnl=0
|
||||
char id=75 x=75 y=211 width=41 height=54 xoffset=5 yoffset=14 xadvance=45 page=0 chnl=0
|
||||
char id=76 x=116 y=211 width=33 height=54 xoffset=5 yoffset=14 xadvance=39 page=0 chnl=0
|
||||
char id=77 x=149 y=211 width=53 height=54 xoffset=5 yoffset=14 xadvance=63 page=0 chnl=0
|
||||
char id=78 x=202 y=211 width=41 height=54 xoffset=5 yoffset=14 xadvance=51 page=0 chnl=0
|
||||
char id=79 x=84 y=99 width=43 height=56 xoffset=3 yoffset=13 xadvance=49 page=0 chnl=0
|
||||
char id=80 x=243 y=211 width=39 height=54 xoffset=5 yoffset=14 xadvance=45 page=0 chnl=0
|
||||
char id=81 x=304 y=0 width=44 height=64 xoffset=3 yoffset=13 xadvance=49 page=0 chnl=0
|
||||
char id=82 x=282 y=211 width=40 height=54 xoffset=5 yoffset=14 xadvance=45 page=0 chnl=0
|
||||
char id=83 x=127 y=99 width=39 height=56 xoffset=2 yoffset=13 xadvance=43 page=0 chnl=0
|
||||
char id=84 x=322 y=211 width=42 height=54 xoffset=1 yoffset=14 xadvance=44 page=0 chnl=0
|
||||
char id=85 x=156 y=155 width=39 height=55 xoffset=4 yoffset=14 xadvance=47 page=0 chnl=0
|
||||
char id=86 x=364 y=211 width=47 height=54 xoffset=-1 yoffset=14 xadvance=46 page=0 chnl=0
|
||||
char id=87 x=411 y=211 width=63 height=54 xoffset=1 yoffset=14 xadvance=64 page=0 chnl=0
|
||||
char id=88 x=0 y=265 width=44 height=54 xoffset=1 yoffset=14 xadvance=45 page=0 chnl=0
|
||||
char id=89 x=44 y=265 width=45 height=54 xoffset=-1 yoffset=14 xadvance=43 page=0 chnl=0
|
||||
char id=90 x=89 y=265 width=39 height=54 xoffset=2 yoffset=14 xadvance=43 page=0 chnl=0
|
||||
char id=91 x=161 y=0 width=16 height=72 xoffset=4 yoffset=7 xadvance=19 page=0 chnl=0
|
||||
char id=92 x=385 y=0 width=30 height=58 xoffset=0 yoffset=14 xadvance=30 page=0 chnl=0
|
||||
char id=93 x=177 y=0 width=16 height=72 xoffset=0 yoffset=7 xadvance=20 page=0 chnl=0
|
||||
char id=94 x=374 y=319 width=28 height=28 xoffset=1 yoffset=14 xadvance=30 page=0 chnl=0
|
||||
char id=95 x=46 y=360 width=34 height=8 xoffset=0 yoffset=65 xadvance=34 page=0 chnl=0
|
||||
char id=96 x=0 y=360 width=17 height=13 xoffset=1 yoffset=11 xadvance=22 page=0 chnl=0
|
||||
char id=97 x=268 y=265 width=34 height=42 xoffset=3 yoffset=27 xadvance=39 page=0 chnl=0
|
||||
char id=98 x=415 y=0 width=34 height=57 xoffset=4 yoffset=12 xadvance=40 page=0 chnl=0
|
||||
char id=99 x=302 y=265 width=34 height=42 xoffset=2 yoffset=27 xadvance=38 page=0 chnl=0
|
||||
char id=100 x=449 y=0 width=34 height=57 xoffset=2 yoffset=12 xadvance=40 page=0 chnl=0
|
||||
char id=101 x=336 y=265 width=34 height=42 xoffset=2 yoffset=27 xadvance=38 page=0 chnl=0
|
||||
char id=102 x=483 y=0 width=25 height=57 xoffset=1 yoffset=11 xadvance=26 page=0 chnl=0
|
||||
char id=103 x=166 y=99 width=34 height=56 xoffset=2 yoffset=27 xadvance=40 page=0 chnl=0
|
||||
char id=104 x=200 y=99 width=32 height=56 xoffset=4 yoffset=12 xadvance=40 page=0 chnl=0
|
||||
char id=105 x=483 y=99 width=10 height=55 xoffset=4 yoffset=13 xadvance=18 page=0 chnl=0
|
||||
char id=106 x=193 y=0 width=17 height=71 xoffset=-4 yoffset=13 xadvance=17 page=0 chnl=0
|
||||
char id=107 x=232 y=99 width=34 height=56 xoffset=4 yoffset=12 xadvance=37 page=0 chnl=0
|
||||
char id=108 x=266 y=99 width=9 height=56 xoffset=4 yoffset=12 xadvance=17 page=0 chnl=0
|
||||
char id=109 x=439 y=265 width=56 height=41 xoffset=4 yoffset=27 xadvance=64 page=0 chnl=0
|
||||
char id=110 x=0 y=319 width=32 height=41 xoffset=4 yoffset=27 xadvance=40 page=0 chnl=0
|
||||
char id=111 x=370 y=265 width=37 height=42 xoffset=2 yoffset=27 xadvance=41 page=0 chnl=0
|
||||
char id=112 x=275 y=99 width=34 height=56 xoffset=4 yoffset=27 xadvance=40 page=0 chnl=0
|
||||
char id=113 x=309 y=99 width=34 height=56 xoffset=2 yoffset=27 xadvance=41 page=0 chnl=0
|
||||
char id=114 x=32 y=319 width=21 height=41 xoffset=4 yoffset=27 xadvance=25 page=0 chnl=0
|
||||
char id=115 x=407 y=265 width=32 height=42 xoffset=2 yoffset=27 xadvance=37 page=0 chnl=0
|
||||
char id=116 x=245 y=265 width=23 height=51 xoffset=0 yoffset=18 xadvance=25 page=0 chnl=0
|
||||
char id=117 x=53 y=319 width=32 height=41 xoffset=4 yoffset=28 xadvance=40 page=0 chnl=0
|
||||
char id=118 x=85 y=319 width=35 height=40 xoffset=0 yoffset=28 xadvance=35 page=0 chnl=0
|
||||
char id=119 x=120 y=319 width=54 height=40 xoffset=0 yoffset=28 xadvance=54 page=0 chnl=0
|
||||
char id=120 x=174 y=319 width=36 height=40 xoffset=0 yoffset=28 xadvance=36 page=0 chnl=0
|
||||
char id=121 x=343 y=99 width=36 height=56 xoffset=-1 yoffset=28 xadvance=34 page=0 chnl=0
|
||||
char id=122 x=210 y=319 width=32 height=40 xoffset=2 yoffset=28 xadvance=35 page=0 chnl=0
|
||||
char id=123 x=113 y=0 width=24 height=73 xoffset=1 yoffset=9 xadvance=25 page=0 chnl=0
|
||||
char id=124 x=348 y=0 width=7 height=63 xoffset=5 yoffset=14 xadvance=17 page=0 chnl=0
|
||||
char id=125 x=137 y=0 width=24 height=73 xoffset=-1 yoffset=9 xadvance=24 page=0 chnl=0
|
||||
char id=126 x=462 y=319 width=42 height=16 xoffset=4 yoffset=38 xadvance=50 page=0 chnl=0
|
||||
char id=127 x=0 y=0 width=70 height=99 xoffset=2 yoffset=-11 xadvance=74 page=0 chnl=0
|
||||
kernings count=382
|
||||
kerning first=70 second=74 amount=-9
|
||||
kerning first=34 second=97 amount=-2
|
||||
kerning first=34 second=101 amount=-2
|
||||
kerning first=34 second=113 amount=-2
|
||||
kerning first=34 second=99 amount=-2
|
||||
kerning first=70 second=99 amount=-1
|
||||
kerning first=88 second=113 amount=-1
|
||||
kerning first=84 second=46 amount=-8
|
||||
kerning first=84 second=119 amount=-2
|
||||
kerning first=87 second=97 amount=-1
|
||||
kerning first=90 second=117 amount=-1
|
||||
kerning first=39 second=97 amount=-2
|
||||
kerning first=69 second=111 amount=-1
|
||||
kerning first=87 second=41 amount=1
|
||||
kerning first=76 second=86 amount=-6
|
||||
kerning first=121 second=34 amount=1
|
||||
kerning first=40 second=86 amount=1
|
||||
kerning first=85 second=65 amount=-1
|
||||
kerning first=89 second=89 amount=1
|
||||
kerning first=72 second=65 amount=1
|
||||
kerning first=104 second=39 amount=-4
|
||||
kerning first=114 second=102 amount=1
|
||||
kerning first=89 second=42 amount=-2
|
||||
kerning first=114 second=34 amount=1
|
||||
kerning first=84 second=115 amount=-4
|
||||
kerning first=84 second=71 amount=-1
|
||||
kerning first=89 second=101 amount=-2
|
||||
kerning first=89 second=45 amount=-2
|
||||
kerning first=122 second=99 amount=-1
|
||||
kerning first=78 second=88 amount=1
|
||||
kerning first=68 second=89 amount=-2
|
||||
kerning first=122 second=103 amount=-1
|
||||
kerning first=78 second=84 amount=-1
|
||||
kerning first=86 second=103 amount=-2
|
||||
kerning first=89 second=67 amount=-1
|
||||
kerning first=89 second=79 amount=-1
|
||||
kerning first=75 second=111 amount=-1
|
||||
kerning first=111 second=120 amount=-1
|
||||
kerning first=87 second=44 amount=-4
|
||||
kerning first=91 second=74 amount=-1
|
||||
kerning first=120 second=111 amount=-1
|
||||
kerning first=84 second=111 amount=-3
|
||||
kerning first=102 second=113 amount=-1
|
||||
kerning first=80 second=88 amount=-1
|
||||
kerning first=66 second=84 amount=-1
|
||||
kerning first=65 second=87 amount=-2
|
||||
kerning first=86 second=100 amount=-2
|
||||
kerning first=122 second=100 amount=-1
|
||||
kerning first=75 second=118 amount=-1
|
||||
kerning first=70 second=118 amount=-1
|
||||
kerning first=73 second=88 amount=1
|
||||
kerning first=70 second=121 amount=-1
|
||||
kerning first=65 second=34 amount=-4
|
||||
kerning first=39 second=101 amount=-2
|
||||
kerning first=75 second=101 amount=-1
|
||||
kerning first=84 second=99 amount=-3
|
||||
kerning first=84 second=65 amount=-3
|
||||
kerning first=112 second=39 amount=-1
|
||||
kerning first=76 second=39 amount=-12
|
||||
kerning first=78 second=65 amount=1
|
||||
kerning first=88 second=45 amount=-2
|
||||
kerning first=65 second=121 amount=-2
|
||||
kerning first=34 second=111 amount=-2
|
||||
kerning first=89 second=85 amount=-3
|
||||
kerning first=114 second=99 amount=-1
|
||||
kerning first=86 second=125 amount=1
|
||||
kerning first=70 second=111 amount=-1
|
||||
kerning first=89 second=120 amount=-1
|
||||
kerning first=90 second=119 amount=-1
|
||||
kerning first=120 second=99 amount=-1
|
||||
kerning first=89 second=117 amount=-1
|
||||
kerning first=82 second=89 amount=-2
|
||||
kerning first=75 second=117 amount=-1
|
||||
kerning first=34 second=34 amount=-4
|
||||
kerning first=89 second=110 amount=-1
|
||||
kerning first=88 second=101 amount=-1
|
||||
kerning first=107 second=103 amount=-1
|
||||
kerning first=34 second=115 amount=-3
|
||||
kerning first=98 second=39 amount=-1
|
||||
kerning first=70 second=65 amount=-6
|
||||
kerning first=70 second=46 amount=-8
|
||||
kerning first=98 second=34 amount=-1
|
||||
kerning first=70 second=84 amount=1
|
||||
kerning first=114 second=100 amount=-1
|
||||
kerning first=88 second=79 amount=-1
|
||||
kerning first=39 second=113 amount=-2
|
||||
kerning first=114 second=103 amount=-1
|
||||
kerning first=77 second=65 amount=1
|
||||
kerning first=120 second=103 amount=-1
|
||||
kerning first=114 second=121 amount=1
|
||||
kerning first=89 second=100 amount=-2
|
||||
kerning first=80 second=65 amount=-5
|
||||
kerning first=121 second=111 amount=-1
|
||||
kerning first=84 second=74 amount=-8
|
||||
kerning first=122 second=111 amount=-1
|
||||
kerning first=114 second=118 amount=1
|
||||
kerning first=102 second=41 amount=1
|
||||
kerning first=122 second=113 amount=-1
|
||||
kerning first=89 second=122 amount=-1
|
||||
kerning first=89 second=38 amount=-1
|
||||
kerning first=81 second=89 amount=-1
|
||||
kerning first=114 second=111 amount=-1
|
||||
kerning first=46 second=34 amount=-6
|
||||
kerning first=84 second=112 amount=-4
|
||||
kerning first=112 second=34 amount=-1
|
||||
kerning first=76 second=34 amount=-12
|
||||
kerning first=102 second=125 amount=1
|
||||
kerning first=39 second=115 amount=-3
|
||||
kerning first=76 second=118 amount=-5
|
||||
kerning first=86 second=99 amount=-2
|
||||
kerning first=84 second=84 amount=1
|
||||
kerning first=86 second=65 amount=-3
|
||||
kerning first=87 second=101 amount=-1
|
||||
kerning first=67 second=125 amount=-1
|
||||
kerning first=120 second=113 amount=-1
|
||||
kerning first=118 second=46 amount=-4
|
||||
kerning first=88 second=103 amount=-1
|
||||
kerning first=111 second=122 amount=-1
|
||||
kerning first=77 second=84 amount=-1
|
||||
kerning first=114 second=46 amount=-4
|
||||
kerning first=34 second=39 amount=-4
|
||||
kerning first=114 second=44 amount=-4
|
||||
kerning first=69 second=84 amount=1
|
||||
kerning first=89 second=46 amount=-7
|
||||
kerning first=97 second=39 amount=-2
|
||||
kerning first=34 second=100 amount=-2
|
||||
kerning first=70 second=100 amount=-1
|
||||
kerning first=84 second=120 amount=-3
|
||||
kerning first=90 second=118 amount=-1
|
||||
kerning first=70 second=114 amount=-1
|
||||
kerning first=34 second=112 amount=-1
|
||||
kerning first=109 second=34 amount=-4
|
||||
kerning first=86 second=113 amount=-2
|
||||
kerning first=88 second=71 amount=-1
|
||||
kerning first=66 second=89 amount=-2
|
||||
kerning first=102 second=103 amount=-1
|
||||
kerning first=88 second=67 amount=-1
|
||||
kerning first=39 second=110 amount=-1
|
||||
kerning first=75 second=110 amount=-1
|
||||
kerning first=88 second=117 amount=-1
|
||||
kerning first=89 second=118 amount=-1
|
||||
kerning first=97 second=118 amount=-1
|
||||
kerning first=87 second=65 amount=-2
|
||||
kerning first=73 second=89 amount=-1
|
||||
kerning first=89 second=74 amount=-3
|
||||
kerning first=102 second=101 amount=-1
|
||||
kerning first=86 second=111 amount=-2
|
||||
kerning first=65 second=119 amount=-1
|
||||
kerning first=84 second=100 amount=-3
|
||||
kerning first=104 second=34 amount=-4
|
||||
kerning first=86 second=41 amount=1
|
||||
kerning first=111 second=34 amount=-5
|
||||
kerning first=40 second=89 amount=1
|
||||
kerning first=121 second=39 amount=1
|
||||
kerning first=68 second=90 amount=-1
|
||||
kerning first=114 second=113 amount=-1
|
||||
kerning first=68 second=88 amount=-1
|
||||
kerning first=98 second=120 amount=-1
|
||||
kerning first=110 second=34 amount=-4
|
||||
kerning first=119 second=44 amount=-4
|
||||
kerning first=119 second=46 amount=-4
|
||||
kerning first=118 second=44 amount=-4
|
||||
kerning first=84 second=114 amount=-3
|
||||
kerning first=86 second=97 amount=-2
|
||||
kerning first=68 second=86 amount=-1
|
||||
kerning first=86 second=93 amount=1
|
||||
kerning first=97 second=34 amount=-2
|
||||
kerning first=34 second=65 amount=-4
|
||||
kerning first=84 second=118 amount=-3
|
||||
kerning first=76 second=84 amount=-10
|
||||
kerning first=107 second=99 amount=-1
|
||||
kerning first=121 second=46 amount=-4
|
||||
kerning first=123 second=85 amount=-1
|
||||
kerning first=65 second=63 amount=-2
|
||||
kerning first=89 second=44 amount=-7
|
||||
kerning first=80 second=118 amount=1
|
||||
kerning first=112 second=122 amount=-1
|
||||
kerning first=79 second=65 amount=-1
|
||||
kerning first=80 second=121 amount=1
|
||||
kerning first=118 second=34 amount=1
|
||||
kerning first=87 second=45 amount=-2
|
||||
kerning first=69 second=100 amount=-1
|
||||
kerning first=87 second=103 amount=-1
|
||||
kerning first=112 second=120 amount=-1
|
||||
kerning first=68 second=44 amount=-4
|
||||
kerning first=86 second=45 amount=-1
|
||||
kerning first=39 second=34 amount=-4
|
||||
kerning first=68 second=46 amount=-4
|
||||
kerning first=65 second=89 amount=-3
|
||||
kerning first=69 second=118 amount=-1
|
||||
kerning first=88 second=99 amount=-1
|
||||
kerning first=87 second=46 amount=-4
|
||||
kerning first=47 second=47 amount=-8
|
||||
kerning first=73 second=65 amount=1
|
||||
kerning first=123 second=74 amount=-1
|
||||
kerning first=69 second=102 amount=-1
|
||||
kerning first=87 second=111 amount=-1
|
||||
kerning first=39 second=112 amount=-1
|
||||
kerning first=89 second=116 amount=-1
|
||||
kerning first=70 second=113 amount=-1
|
||||
kerning first=77 second=88 amount=1
|
||||
kerning first=84 second=32 amount=-1
|
||||
kerning first=90 second=103 amount=-1
|
||||
kerning first=65 second=86 amount=-3
|
||||
kerning first=75 second=112 amount=-1
|
||||
kerning first=39 second=109 amount=-1
|
||||
kerning first=75 second=81 amount=-1
|
||||
kerning first=89 second=115 amount=-2
|
||||
kerning first=84 second=83 amount=-1
|
||||
kerning first=89 second=87 amount=1
|
||||
kerning first=114 second=101 amount=-1
|
||||
kerning first=116 second=111 amount=-1
|
||||
kerning first=90 second=100 amount=-1
|
||||
kerning first=84 second=122 amount=-2
|
||||
kerning first=68 second=84 amount=-1
|
||||
kerning first=32 second=84 amount=-1
|
||||
kerning first=84 second=117 amount=-3
|
||||
kerning first=74 second=65 amount=-1
|
||||
kerning first=107 second=101 amount=-1
|
||||
kerning first=75 second=109 amount=-1
|
||||
kerning first=80 second=46 amount=-11
|
||||
kerning first=89 second=93 amount=1
|
||||
kerning first=89 second=65 amount=-3
|
||||
kerning first=87 second=117 amount=-1
|
||||
kerning first=89 second=81 amount=-1
|
||||
kerning first=39 second=103 amount=-2
|
||||
kerning first=86 second=101 amount=-2
|
||||
kerning first=86 second=117 amount=-1
|
||||
kerning first=84 second=113 amount=-3
|
||||
kerning first=34 second=110 amount=-1
|
||||
kerning first=89 second=84 amount=1
|
||||
kerning first=84 second=110 amount=-4
|
||||
kerning first=39 second=99 amount=-2
|
||||
kerning first=88 second=121 amount=-1
|
||||
kerning first=65 second=39 amount=-4
|
||||
kerning first=110 second=39 amount=-4
|
||||
kerning first=75 second=67 amount=-1
|
||||
kerning first=88 second=118 amount=-1
|
||||
kerning first=86 second=114 amount=-1
|
||||
kerning first=80 second=74 amount=-7
|
||||
kerning first=84 second=97 amount=-4
|
||||
kerning first=82 second=84 amount=-3
|
||||
kerning first=91 second=85 amount=-1
|
||||
kerning first=102 second=99 amount=-1
|
||||
kerning first=66 second=86 amount=-1
|
||||
kerning first=120 second=101 amount=-1
|
||||
kerning first=102 second=93 amount=1
|
||||
kerning first=75 second=100 amount=-1
|
||||
kerning first=84 second=79 amount=-1
|
||||
kerning first=111 second=121 amount=-1
|
||||
kerning first=75 second=121 amount=-1
|
||||
kerning first=81 second=87 amount=-1
|
||||
kerning first=107 second=113 amount=-1
|
||||
kerning first=120 second=100 amount=-1
|
||||
kerning first=90 second=79 amount=-1
|
||||
kerning first=89 second=114 amount=-1
|
||||
kerning first=122 second=101 amount=-1
|
||||
kerning first=111 second=118 amount=-1
|
||||
kerning first=82 second=86 amount=-1
|
||||
kerning first=67 second=84 amount=-1
|
||||
kerning first=70 second=101 amount=-1
|
||||
kerning first=89 second=83 amount=-1
|
||||
kerning first=114 second=97 amount=-1
|
||||
kerning first=70 second=97 amount=-1
|
||||
kerning first=89 second=102 amount=-1
|
||||
kerning first=78 second=89 amount=-1
|
||||
kerning first=70 second=44 amount=-8
|
||||
kerning first=44 second=39 amount=-6
|
||||
kerning first=84 second=45 amount=-8
|
||||
kerning first=89 second=121 amount=-1
|
||||
kerning first=84 second=86 amount=1
|
||||
kerning first=87 second=99 amount=-1
|
||||
kerning first=98 second=122 amount=-1
|
||||
kerning first=89 second=112 amount=-1
|
||||
kerning first=89 second=103 amount=-2
|
||||
kerning first=88 second=81 amount=-1
|
||||
kerning first=102 second=34 amount=1
|
||||
kerning first=109 second=39 amount=-4
|
||||
kerning first=81 second=84 amount=-2
|
||||
kerning first=121 second=97 amount=-1
|
||||
kerning first=89 second=99 amount=-2
|
||||
kerning first=89 second=125 amount=1
|
||||
kerning first=81 second=86 amount=-1
|
||||
kerning first=114 second=116 amount=2
|
||||
kerning first=114 second=119 amount=1
|
||||
kerning first=84 second=44 amount=-8
|
||||
kerning first=102 second=39 amount=1
|
||||
kerning first=44 second=34 amount=-6
|
||||
kerning first=34 second=109 amount=-1
|
||||
kerning first=75 second=119 amount=-2
|
||||
kerning first=76 second=65 amount=1
|
||||
kerning first=84 second=81 amount=-1
|
||||
kerning first=76 second=121 amount=-5
|
||||
kerning first=69 second=101 amount=-1
|
||||
kerning first=89 second=111 amount=-2
|
||||
kerning first=80 second=90 amount=-1
|
||||
kerning first=89 second=97 amount=-3
|
||||
kerning first=89 second=109 amount=-1
|
||||
kerning first=90 second=99 amount=-1
|
||||
kerning first=89 second=86 amount=1
|
||||
kerning first=79 second=88 amount=-1
|
||||
kerning first=70 second=103 amount=-1
|
||||
kerning first=34 second=103 amount=-2
|
||||
kerning first=84 second=67 amount=-1
|
||||
kerning first=76 second=79 amount=-2
|
||||
kerning first=89 second=41 amount=1
|
||||
kerning first=65 second=118 amount=-2
|
||||
kerning first=75 second=71 amount=-1
|
||||
kerning first=76 second=87 amount=-5
|
||||
kerning first=77 second=89 amount=-1
|
||||
kerning first=90 second=113 amount=-1
|
||||
kerning first=79 second=89 amount=-2
|
||||
kerning first=118 second=111 amount=-1
|
||||
kerning first=118 second=97 amount=-1
|
||||
kerning first=88 second=100 amount=-1
|
||||
kerning first=90 second=121 amount=-1
|
||||
kerning first=89 second=113 amount=-2
|
||||
kerning first=84 second=87 amount=1
|
||||
kerning first=39 second=111 amount=-2
|
||||
kerning first=80 second=44 amount=-11
|
||||
kerning first=39 second=100 amount=-2
|
||||
kerning first=75 second=113 amount=-1
|
||||
kerning first=88 second=111 amount=-1
|
||||
kerning first=84 second=89 amount=1
|
||||
kerning first=84 second=103 amount=-3
|
||||
kerning first=70 second=117 amount=-1
|
||||
kerning first=67 second=41 amount=-1
|
||||
kerning first=89 second=71 amount=-1
|
||||
kerning first=121 second=44 amount=-4
|
||||
kerning first=97 second=121 amount=-1
|
||||
kerning first=87 second=113 amount=-1
|
||||
kerning first=73 second=84 amount=-1
|
||||
kerning first=84 second=101 amount=-3
|
||||
kerning first=75 second=99 amount=-1
|
||||
kerning first=65 second=85 amount=-1
|
||||
kerning first=76 second=67 amount=-2
|
||||
kerning first=76 second=81 amount=-2
|
||||
kerning first=75 second=79 amount=-1
|
||||
kerning first=39 second=65 amount=-4
|
||||
kerning first=76 second=117 amount=-2
|
||||
kerning first=65 second=84 amount=-5
|
||||
kerning first=90 second=101 amount=-1
|
||||
kerning first=84 second=121 amount=-3
|
||||
kerning first=69 second=99 amount=-1
|
||||
kerning first=114 second=39 amount=1
|
||||
kerning first=84 second=109 amount=-4
|
||||
kerning first=76 second=119 amount=-3
|
||||
kerning first=76 second=85 amount=-2
|
||||
kerning first=65 second=116 amount=-1
|
||||
kerning first=76 second=71 amount=-2
|
||||
kerning first=79 second=90 amount=-1
|
||||
kerning first=107 second=100 amount=-1
|
||||
kerning first=90 second=111 amount=-1
|
||||
kerning first=79 second=44 amount=-4
|
||||
kerning first=75 second=45 amount=-2
|
||||
kerning first=40 second=87 amount=1
|
||||
kerning first=79 second=86 amount=-1
|
||||
kerning first=102 second=100 amount=-1
|
||||
kerning first=72 second=89 amount=-1
|
||||
kerning first=72 second=88 amount=1
|
||||
kerning first=79 second=46 amount=-4
|
||||
kerning first=76 second=89 amount=-8
|
||||
kerning first=68 second=65 amount=-1
|
||||
kerning first=79 second=84 amount=-1
|
||||
kerning first=87 second=100 amount=-1
|
||||
kerning first=75 second=103 amount=-1
|
||||
kerning first=90 second=67 amount=-1
|
||||
kerning first=69 second=103 amount=-1
|
||||
kerning first=90 second=71 amount=-1
|
||||
kerning first=86 second=44 amount=-8
|
||||
kerning first=69 second=121 amount=-1
|
||||
kerning first=87 second=114 amount=-1
|
||||
kerning first=118 second=39 amount=1
|
||||
kerning first=46 second=39 amount=-6
|
||||
kerning first=72 second=84 amount=-1
|
||||
kerning first=86 second=46 amount=-8
|
||||
kerning first=69 second=113 amount=-1
|
||||
kerning first=69 second=119 amount=-1
|
||||
kerning first=39 second=39 amount=-4
|
||||
kerning first=69 second=117 amount=-1
|
||||
kerning first=111 second=39 amount=-5
|
||||
kerning first=90 second=81 amount=-1
|
||||
<?xml version="1.0"?>
|
||||
<font>
|
||||
<info face="Roboto" size="72" bold="0" italic="0" charset="" unicode="0" stretchH="100" smooth="1" aa="1" padding="1,1,1,1" spacing="-2,-2" outline="0" />
|
||||
<common lineHeight="85" base="67" scaleW="512" scaleH="512" pages="1" packed="0" alphaChnl="0" redChnl="0" greenChnl="0" blueChnl="0" />
|
||||
<pages>
|
||||
<page id="0" file="Roboto72White.png" /> </pages>
|
||||
<chars count="98">
|
||||
<char id="0" x="0" y="0" width="0" height="0" xoffset="-1" yoffset="66" xadvance="0" page="0" chnl="0" />
|
||||
<char id="10" x="0" y="0" width="70" height="99" xoffset="2" yoffset="-11" xadvance="74" page="0" chnl="0" />
|
||||
<char id="32" x="0" y="0" width="0" height="0" xoffset="-1" yoffset="66" xadvance="18" page="0" chnl="0" />
|
||||
<char id="33" x="493" y="99" width="10" height="55" xoffset="5" yoffset="14" xadvance="19" page="0" chnl="0" />
|
||||
<char id="34" x="446" y="319" width="16" height="19" xoffset="4" yoffset="12" xadvance="23" page="0" chnl="0" />
|
||||
<char id="35" x="204" y="265" width="41" height="54" xoffset="3" yoffset="14" xadvance="44" page="0" chnl="0" />
|
||||
<char id="36" x="269" y="0" width="35" height="69" xoffset="3" yoffset="6" xadvance="40" page="0" chnl="0" />
|
||||
<char id="37" x="31" y="155" width="48" height="56" xoffset="3" yoffset="13" xadvance="53" page="0" chnl="0" />
|
||||
<char id="38" x="79" y="155" width="43" height="56" xoffset="3" yoffset="13" xadvance="45" page="0" chnl="0" />
|
||||
<char id="39" x="503" y="99" width="7" height="19" xoffset="3" yoffset="12" xadvance="13" page="0" chnl="0" />
|
||||
<char id="40" x="70" y="0" width="21" height="78" xoffset="4" yoffset="7" xadvance="25" page="0" chnl="0" />
|
||||
<char id="41" x="91" y="0" width="22" height="78" xoffset="-1" yoffset="7" xadvance="25" page="0" chnl="0" />
|
||||
<char id="42" x="342" y="319" width="32" height="32" xoffset="-1" yoffset="14" xadvance="31" page="0" chnl="0" />
|
||||
<char id="43" x="242" y="319" width="37" height="40" xoffset="2" yoffset="23" xadvance="41" page="0" chnl="0" />
|
||||
<char id="44" x="433" y="319" width="13" height="21" xoffset="-1" yoffset="58" xadvance="14" page="0" chnl="0" />
|
||||
<char id="45" x="27" y="360" width="19" height="8" xoffset="0" yoffset="41" xadvance="19" page="0" chnl="0" />
|
||||
<char id="46" x="17" y="360" width="10" height="11" xoffset="4" yoffset="58" xadvance="19" page="0" chnl="0" />
|
||||
<char id="47" x="355" y="0" width="30" height="58" xoffset="-1" yoffset="14" xadvance="30" page="0" chnl="0" />
|
||||
<char id="48" x="449" y="99" width="34" height="56" xoffset="3" yoffset="13" xadvance="40" page="0" chnl="0" />
|
||||
<char id="49" x="474" y="211" width="22" height="54" xoffset="5" yoffset="14" xadvance="40" page="0" chnl="0" />
|
||||
<char id="50" x="195" y="155" width="37" height="55" xoffset="2" yoffset="13" xadvance="41" page="0" chnl="0" />
|
||||
<char id="51" x="379" y="99" width="35" height="56" xoffset="2" yoffset="13" xadvance="40" page="0" chnl="0" />
|
||||
<char id="52" x="128" y="265" width="39" height="54" xoffset="1" yoffset="14" xadvance="41" page="0" chnl="0" />
|
||||
<char id="53" x="232" y="155" width="35" height="55" xoffset="4" yoffset="14" xadvance="40" page="0" chnl="0" />
|
||||
<char id="54" x="267" y="155" width="35" height="55" xoffset="4" yoffset="14" xadvance="41" page="0" chnl="0" />
|
||||
<char id="55" x="167" y="265" width="37" height="54" xoffset="2" yoffset="14" xadvance="41" page="0" chnl="0" />
|
||||
<char id="56" x="414" y="99" width="35" height="56" xoffset="3" yoffset="13" xadvance="40" page="0" chnl="0" />
|
||||
<char id="57" x="302" y="155" width="34" height="55" xoffset="3" yoffset="13" xadvance="41" page="0" chnl="0" />
|
||||
<char id="58" x="495" y="265" width="10" height="41" xoffset="4" yoffset="28" xadvance="18" page="0" chnl="0" />
|
||||
<char id="59" x="496" y="211" width="13" height="52" xoffset="0" yoffset="28" xadvance="15" page="0" chnl="0" />
|
||||
<char id="60" x="279" y="319" width="31" height="35" xoffset="2" yoffset="27" xadvance="37" page="0" chnl="0" />
|
||||
<char id="61" x="402" y="319" width="31" height="23" xoffset="4" yoffset="31" xadvance="39" page="0" chnl="0" />
|
||||
<char id="62" x="310" y="319" width="32" height="35" xoffset="4" yoffset="27" xadvance="38" page="0" chnl="0" />
|
||||
<char id="63" x="0" y="155" width="31" height="56" xoffset="2" yoffset="13" xadvance="34" page="0" chnl="0" />
|
||||
<char id="64" x="210" y="0" width="59" height="69" xoffset="3" yoffset="15" xadvance="65" page="0" chnl="0" />
|
||||
<char id="65" x="336" y="155" width="49" height="54" xoffset="-1" yoffset="14" xadvance="47" page="0" chnl="0" />
|
||||
<char id="66" x="385" y="155" width="37" height="54" xoffset="5" yoffset="14" xadvance="45" page="0" chnl="0" />
|
||||
<char id="67" x="0" y="99" width="42" height="56" xoffset="3" yoffset="13" xadvance="46" page="0" chnl="0" />
|
||||
<char id="68" x="422" y="155" width="39" height="54" xoffset="5" yoffset="14" xadvance="47" page="0" chnl="0" />
|
||||
<char id="69" x="461" y="155" width="35" height="54" xoffset="5" yoffset="14" xadvance="41" page="0" chnl="0" />
|
||||
<char id="70" x="0" y="211" width="34" height="54" xoffset="5" yoffset="14" xadvance="40" page="0" chnl="0" />
|
||||
<char id="71" x="42" y="99" width="42" height="56" xoffset="3" yoffset="13" xadvance="49" page="0" chnl="0" />
|
||||
<char id="72" x="34" y="211" width="41" height="54" xoffset="5" yoffset="14" xadvance="51" page="0" chnl="0" />
|
||||
<char id="73" x="496" y="155" width="9" height="54" xoffset="5" yoffset="14" xadvance="19" page="0" chnl="0" />
|
||||
<char id="74" x="122" y="155" width="34" height="55" xoffset="1" yoffset="14" xadvance="40" page="0" chnl="0" />
|
||||
<char id="75" x="75" y="211" width="41" height="54" xoffset="5" yoffset="14" xadvance="45" page="0" chnl="0" />
|
||||
<char id="76" x="116" y="211" width="33" height="54" xoffset="5" yoffset="14" xadvance="39" page="0" chnl="0" />
|
||||
<char id="77" x="149" y="211" width="53" height="54" xoffset="5" yoffset="14" xadvance="63" page="0" chnl="0" />
|
||||
<char id="78" x="202" y="211" width="41" height="54" xoffset="5" yoffset="14" xadvance="51" page="0" chnl="0" />
|
||||
<char id="79" x="84" y="99" width="43" height="56" xoffset="3" yoffset="13" xadvance="49" page="0" chnl="0" />
|
||||
<char id="80" x="243" y="211" width="39" height="54" xoffset="5" yoffset="14" xadvance="45" page="0" chnl="0" />
|
||||
<char id="81" x="304" y="0" width="44" height="64" xoffset="3" yoffset="13" xadvance="49" page="0" chnl="0" />
|
||||
<char id="82" x="282" y="211" width="40" height="54" xoffset="5" yoffset="14" xadvance="45" page="0" chnl="0" />
|
||||
<char id="83" x="127" y="99" width="39" height="56" xoffset="2" yoffset="13" xadvance="43" page="0" chnl="0" />
|
||||
<char id="84" x="322" y="211" width="42" height="54" xoffset="1" yoffset="14" xadvance="44" page="0" chnl="0" />
|
||||
<char id="85" x="156" y="155" width="39" height="55" xoffset="4" yoffset="14" xadvance="47" page="0" chnl="0" />
|
||||
<char id="86" x="364" y="211" width="47" height="54" xoffset="-1" yoffset="14" xadvance="46" page="0" chnl="0" />
|
||||
<char id="87" x="411" y="211" width="63" height="54" xoffset="1" yoffset="14" xadvance="64" page="0" chnl="0" />
|
||||
<char id="88" x="0" y="265" width="44" height="54" xoffset="1" yoffset="14" xadvance="45" page="0" chnl="0" />
|
||||
<char id="89" x="44" y="265" width="45" height="54" xoffset="-1" yoffset="14" xadvance="43" page="0" chnl="0" />
|
||||
<char id="90" x="89" y="265" width="39" height="54" xoffset="2" yoffset="14" xadvance="43" page="0" chnl="0" />
|
||||
<char id="91" x="161" y="0" width="16" height="72" xoffset="4" yoffset="7" xadvance="19" page="0" chnl="0" />
|
||||
<char id="92" x="385" y="0" width="30" height="58" xoffset="0" yoffset="14" xadvance="30" page="0" chnl="0" />
|
||||
<char id="93" x="177" y="0" width="16" height="72" xoffset="0" yoffset="7" xadvance="20" page="0" chnl="0" />
|
||||
<char id="94" x="374" y="319" width="28" height="28" xoffset="1" yoffset="14" xadvance="30" page="0" chnl="0" />
|
||||
<char id="95" x="46" y="360" width="34" height="8" xoffset="0" yoffset="65" xadvance="34" page="0" chnl="0" />
|
||||
<char id="96" x="0" y="360" width="17" height="13" xoffset="1" yoffset="11" xadvance="22" page="0" chnl="0" />
|
||||
<char id="97" x="268" y="265" width="34" height="42" xoffset="3" yoffset="27" xadvance="39" page="0" chnl="0" />
|
||||
<char id="98" x="415" y="0" width="34" height="57" xoffset="4" yoffset="12" xadvance="40" page="0" chnl="0" />
|
||||
<char id="99" x="302" y="265" width="34" height="42" xoffset="2" yoffset="27" xadvance="38" page="0" chnl="0" />
|
||||
<char id="100" x="449" y="0" width="34" height="57" xoffset="2" yoffset="12" xadvance="40" page="0" chnl="0" />
|
||||
<char id="101" x="336" y="265" width="34" height="42" xoffset="2" yoffset="27" xadvance="38" page="0" chnl="0" />
|
||||
<char id="102" x="483" y="0" width="25" height="57" xoffset="1" yoffset="11" xadvance="26" page="0" chnl="0" />
|
||||
<char id="103" x="166" y="99" width="34" height="56" xoffset="2" yoffset="27" xadvance="40" page="0" chnl="0" />
|
||||
<char id="104" x="200" y="99" width="32" height="56" xoffset="4" yoffset="12" xadvance="40" page="0" chnl="0" />
|
||||
<char id="105" x="483" y="99" width="10" height="55" xoffset="4" yoffset="13" xadvance="18" page="0" chnl="0" />
|
||||
<char id="106" x="193" y="0" width="17" height="71" xoffset="-4" yoffset="13" xadvance="17" page="0" chnl="0" />
|
||||
<char id="107" x="232" y="99" width="34" height="56" xoffset="4" yoffset="12" xadvance="37" page="0" chnl="0" />
|
||||
<char id="108" x="266" y="99" width="9" height="56" xoffset="4" yoffset="12" xadvance="17" page="0" chnl="0" />
|
||||
<char id="109" x="439" y="265" width="56" height="41" xoffset="4" yoffset="27" xadvance="64" page="0" chnl="0" />
|
||||
<char id="110" x="0" y="319" width="32" height="41" xoffset="4" yoffset="27" xadvance="40" page="0" chnl="0" />
|
||||
<char id="111" x="370" y="265" width="37" height="42" xoffset="2" yoffset="27" xadvance="41" page="0" chnl="0" />
|
||||
<char id="112" x="275" y="99" width="34" height="56" xoffset="4" yoffset="27" xadvance="40" page="0" chnl="0" />
|
||||
<char id="113" x="309" y="99" width="34" height="56" xoffset="2" yoffset="27" xadvance="41" page="0" chnl="0" />
|
||||
<char id="114" x="32" y="319" width="21" height="41" xoffset="4" yoffset="27" xadvance="25" page="0" chnl="0" />
|
||||
<char id="115" x="407" y="265" width="32" height="42" xoffset="2" yoffset="27" xadvance="37" page="0" chnl="0" />
|
||||
<char id="116" x="245" y="265" width="23" height="51" xoffset="0" yoffset="18" xadvance="25" page="0" chnl="0" />
|
||||
<char id="117" x="53" y="319" width="32" height="41" xoffset="4" yoffset="28" xadvance="40" page="0" chnl="0" />
|
||||
<char id="118" x="85" y="319" width="35" height="40" xoffset="0" yoffset="28" xadvance="35" page="0" chnl="0" />
|
||||
<char id="119" x="120" y="319" width="54" height="40" xoffset="0" yoffset="28" xadvance="54" page="0" chnl="0" />
|
||||
<char id="120" x="174" y="319" width="36" height="40" xoffset="0" yoffset="28" xadvance="36" page="0" chnl="0" />
|
||||
<char id="121" x="343" y="99" width="36" height="56" xoffset="-1" yoffset="28" xadvance="34" page="0" chnl="0" />
|
||||
<char id="122" x="210" y="319" width="32" height="40" xoffset="2" yoffset="28" xadvance="35" page="0" chnl="0" />
|
||||
<char id="123" x="113" y="0" width="24" height="73" xoffset="1" yoffset="9" xadvance="25" page="0" chnl="0" />
|
||||
<char id="124" x="348" y="0" width="7" height="63" xoffset="5" yoffset="14" xadvance="17" page="0" chnl="0" />
|
||||
<char id="125" x="137" y="0" width="24" height="73" xoffset="-1" yoffset="9" xadvance="24" page="0" chnl="0" />
|
||||
<char id="126" x="462" y="319" width="42" height="16" xoffset="4" yoffset="38" xadvance="50" page="0" chnl="0" />
|
||||
<char id="127" x="0" y="0" width="70" height="99" xoffset="2" yoffset="-11" xadvance="74" page="0" chnl="0" />
|
||||
</chars>
|
||||
<kernings count="382">
|
||||
<kerning first="70" second="74" amount="-9" />
|
||||
<kerning first="34" second="97" amount="-2" />
|
||||
<kerning first="34" second="101" amount="-2" />
|
||||
<kerning first="34" second="113" amount="-2" />
|
||||
<kerning first="34" second="99" amount="-2" />
|
||||
<kerning first="70" second="99" amount="-1" />
|
||||
<kerning first="88" second="113" amount="-1" />
|
||||
<kerning first="84" second="46" amount="-8" />
|
||||
<kerning first="84" second="119" amount="-2" />
|
||||
<kerning first="87" second="97" amount="-1" />
|
||||
<kerning first="90" second="117" amount="-1" />
|
||||
<kerning first="39" second="97" amount="-2" />
|
||||
<kerning first="69" second="111" amount="-1" />
|
||||
<kerning first="87" second="41" amount="1" />
|
||||
<kerning first="76" second="86" amount="-6" />
|
||||
<kerning first="121" second="34" amount="1" />
|
||||
<kerning first="40" second="86" amount="1" />
|
||||
<kerning first="85" second="65" amount="-1" />
|
||||
<kerning first="89" second="89" amount="1" />
|
||||
<kerning first="72" second="65" amount="1" />
|
||||
<kerning first="104" second="39" amount="-4" />
|
||||
<kerning first="114" second="102" amount="1" />
|
||||
<kerning first="89" second="42" amount="-2" />
|
||||
<kerning first="114" second="34" amount="1" />
|
||||
<kerning first="84" second="115" amount="-4" />
|
||||
<kerning first="84" second="71" amount="-1" />
|
||||
<kerning first="89" second="101" amount="-2" />
|
||||
<kerning first="89" second="45" amount="-2" />
|
||||
<kerning first="122" second="99" amount="-1" />
|
||||
<kerning first="78" second="88" amount="1" />
|
||||
<kerning first="68" second="89" amount="-2" />
|
||||
<kerning first="122" second="103" amount="-1" />
|
||||
<kerning first="78" second="84" amount="-1" />
|
||||
<kerning first="86" second="103" amount="-2" />
|
||||
<kerning first="89" second="67" amount="-1" />
|
||||
<kerning first="89" second="79" amount="-1" />
|
||||
<kerning first="75" second="111" amount="-1" />
|
||||
<kerning first="111" second="120" amount="-1" />
|
||||
<kerning first="87" second="44" amount="-4" />
|
||||
<kerning first="91" second="74" amount="-1" />
|
||||
<kerning first="120" second="111" amount="-1" />
|
||||
<kerning first="84" second="111" amount="-3" />
|
||||
<kerning first="102" second="113" amount="-1" />
|
||||
<kerning first="80" second="88" amount="-1" />
|
||||
<kerning first="66" second="84" amount="-1" />
|
||||
<kerning first="65" second="87" amount="-2" />
|
||||
<kerning first="86" second="100" amount="-2" />
|
||||
<kerning first="122" second="100" amount="-1" />
|
||||
<kerning first="75" second="118" amount="-1" />
|
||||
<kerning first="70" second="118" amount="-1" />
|
||||
<kerning first="73" second="88" amount="1" />
|
||||
<kerning first="70" second="121" amount="-1" />
|
||||
<kerning first="65" second="34" amount="-4" />
|
||||
<kerning first="39" second="101" amount="-2" />
|
||||
<kerning first="75" second="101" amount="-1" />
|
||||
<kerning first="84" second="99" amount="-3" />
|
||||
<kerning first="84" second="65" amount="-3" />
|
||||
<kerning first="112" second="39" amount="-1" />
|
||||
<kerning first="76" second="39" amount="-12" />
|
||||
<kerning first="78" second="65" amount="1" />
|
||||
<kerning first="88" second="45" amount="-2" />
|
||||
<kerning first="65" second="121" amount="-2" />
|
||||
<kerning first="34" second="111" amount="-2" />
|
||||
<kerning first="89" second="85" amount="-3" />
|
||||
<kerning first="114" second="99" amount="-1" />
|
||||
<kerning first="86" second="125" amount="1" />
|
||||
<kerning first="70" second="111" amount="-1" />
|
||||
<kerning first="89" second="120" amount="-1" />
|
||||
<kerning first="90" second="119" amount="-1" />
|
||||
<kerning first="120" second="99" amount="-1" />
|
||||
<kerning first="89" second="117" amount="-1" />
|
||||
<kerning first="82" second="89" amount="-2" />
|
||||
<kerning first="75" second="117" amount="-1" />
|
||||
<kerning first="34" second="34" amount="-4" />
|
||||
<kerning first="89" second="110" amount="-1" />
|
||||
<kerning first="88" second="101" amount="-1" />
|
||||
<kerning first="107" second="103" amount="-1" />
|
||||
<kerning first="34" second="115" amount="-3" />
|
||||
<kerning first="98" second="39" amount="-1" />
|
||||
<kerning first="70" second="65" amount="-6" />
|
||||
<kerning first="70" second="46" amount="-8" />
|
||||
<kerning first="98" second="34" amount="-1" />
|
||||
<kerning first="70" second="84" amount="1" />
|
||||
<kerning first="114" second="100" amount="-1" />
|
||||
<kerning first="88" second="79" amount="-1" />
|
||||
<kerning first="39" second="113" amount="-2" />
|
||||
<kerning first="114" second="103" amount="-1" />
|
||||
<kerning first="77" second="65" amount="1" />
|
||||
<kerning first="120" second="103" amount="-1" />
|
||||
<kerning first="114" second="121" amount="1" />
|
||||
<kerning first="89" second="100" amount="-2" />
|
||||
<kerning first="80" second="65" amount="-5" />
|
||||
<kerning first="121" second="111" amount="-1" />
|
||||
<kerning first="84" second="74" amount="-8" />
|
||||
<kerning first="122" second="111" amount="-1" />
|
||||
<kerning first="114" second="118" amount="1" />
|
||||
<kerning first="102" second="41" amount="1" />
|
||||
<kerning first="122" second="113" amount="-1" />
|
||||
<kerning first="89" second="122" amount="-1" />
|
||||
<kerning first="89" second="38" amount="-1" />
|
||||
<kerning first="81" second="89" amount="-1" />
|
||||
<kerning first="114" second="111" amount="-1" />
|
||||
<kerning first="46" second="34" amount="-6" />
|
||||
<kerning first="84" second="112" amount="-4" />
|
||||
<kerning first="112" second="34" amount="-1" />
|
||||
<kerning first="76" second="34" amount="-12" />
|
||||
<kerning first="102" second="125" amount="1" />
|
||||
<kerning first="39" second="115" amount="-3" />
|
||||
<kerning first="76" second="118" amount="-5" />
|
||||
<kerning first="86" second="99" amount="-2" />
|
||||
<kerning first="84" second="84" amount="1" />
|
||||
<kerning first="86" second="65" amount="-3" />
|
||||
<kerning first="87" second="101" amount="-1" />
|
||||
<kerning first="67" second="125" amount="-1" />
|
||||
<kerning first="120" second="113" amount="-1" />
|
||||
<kerning first="118" second="46" amount="-4" />
|
||||
<kerning first="88" second="103" amount="-1" />
|
||||
<kerning first="111" second="122" amount="-1" />
|
||||
<kerning first="77" second="84" amount="-1" />
|
||||
<kerning first="114" second="46" amount="-4" />
|
||||
<kerning first="34" second="39" amount="-4" />
|
||||
<kerning first="114" second="44" amount="-4" />
|
||||
<kerning first="69" second="84" amount="1" />
|
||||
<kerning first="89" second="46" amount="-7" />
|
||||
<kerning first="97" second="39" amount="-2" />
|
||||
<kerning first="34" second="100" amount="-2" />
|
||||
<kerning first="70" second="100" amount="-1" />
|
||||
<kerning first="84" second="120" amount="-3" />
|
||||
<kerning first="90" second="118" amount="-1" />
|
||||
<kerning first="70" second="114" amount="-1" />
|
||||
<kerning first="34" second="112" amount="-1" />
|
||||
<kerning first="109" second="34" amount="-4" />
|
||||
<kerning first="86" second="113" amount="-2" />
|
||||
<kerning first="88" second="71" amount="-1" />
|
||||
<kerning first="66" second="89" amount="-2" />
|
||||
<kerning first="102" second="103" amount="-1" />
|
||||
<kerning first="88" second="67" amount="-1" />
|
||||
<kerning first="39" second="110" amount="-1" />
|
||||
<kerning first="75" second="110" amount="-1" />
|
||||
<kerning first="88" second="117" amount="-1" />
|
||||
<kerning first="89" second="118" amount="-1" />
|
||||
<kerning first="97" second="118" amount="-1" />
|
||||
<kerning first="87" second="65" amount="-2" />
|
||||
<kerning first="73" second="89" amount="-1" />
|
||||
<kerning first="89" second="74" amount="-3" />
|
||||
<kerning first="102" second="101" amount="-1" />
|
||||
<kerning first="86" second="111" amount="-2" />
|
||||
<kerning first="65" second="119" amount="-1" />
|
||||
<kerning first="84" second="100" amount="-3" />
|
||||
<kerning first="104" second="34" amount="-4" />
|
||||
<kerning first="86" second="41" amount="1" />
|
||||
<kerning first="111" second="34" amount="-5" />
|
||||
<kerning first="40" second="89" amount="1" />
|
||||
<kerning first="121" second="39" amount="1" />
|
||||
<kerning first="68" second="90" amount="-1" />
|
||||
<kerning first="114" second="113" amount="-1" />
|
||||
<kerning first="68" second="88" amount="-1" />
|
||||
<kerning first="98" second="120" amount="-1" />
|
||||
<kerning first="110" second="34" amount="-4" />
|
||||
<kerning first="119" second="44" amount="-4" />
|
||||
<kerning first="119" second="46" amount="-4" />
|
||||
<kerning first="118" second="44" amount="-4" />
|
||||
<kerning first="84" second="114" amount="-3" />
|
||||
<kerning first="86" second="97" amount="-2" />
|
||||
<kerning first="68" second="86" amount="-1" />
|
||||
<kerning first="86" second="93" amount="1" />
|
||||
<kerning first="97" second="34" amount="-2" />
|
||||
<kerning first="34" second="65" amount="-4" />
|
||||
<kerning first="84" second="118" amount="-3" />
|
||||
<kerning first="76" second="84" amount="-10" />
|
||||
<kerning first="107" second="99" amount="-1" />
|
||||
<kerning first="121" second="46" amount="-4" />
|
||||
<kerning first="123" second="85" amount="-1" />
|
||||
<kerning first="65" second="63" amount="-2" />
|
||||
<kerning first="89" second="44" amount="-7" />
|
||||
<kerning first="80" second="118" amount="1" />
|
||||
<kerning first="112" second="122" amount="-1" />
|
||||
<kerning first="79" second="65" amount="-1" />
|
||||
<kerning first="80" second="121" amount="1" />
|
||||
<kerning first="118" second="34" amount="1" />
|
||||
<kerning first="87" second="45" amount="-2" />
|
||||
<kerning first="69" second="100" amount="-1" />
|
||||
<kerning first="87" second="103" amount="-1" />
|
||||
<kerning first="112" second="120" amount="-1" />
|
||||
<kerning first="68" second="44" amount="-4" />
|
||||
<kerning first="86" second="45" amount="-1" />
|
||||
<kerning first="39" second="34" amount="-4" />
|
||||
<kerning first="68" second="46" amount="-4" />
|
||||
<kerning first="65" second="89" amount="-3" />
|
||||
<kerning first="69" second="118" amount="-1" />
|
||||
<kerning first="88" second="99" amount="-1" />
|
||||
<kerning first="87" second="46" amount="-4" />
|
||||
<kerning first="47" second="47" amount="-8" />
|
||||
<kerning first="73" second="65" amount="1" />
|
||||
<kerning first="123" second="74" amount="-1" />
|
||||
<kerning first="69" second="102" amount="-1" />
|
||||
<kerning first="87" second="111" amount="-1" />
|
||||
<kerning first="39" second="112" amount="-1" />
|
||||
<kerning first="89" second="116" amount="-1" />
|
||||
<kerning first="70" second="113" amount="-1" />
|
||||
<kerning first="77" second="88" amount="1" />
|
||||
<kerning first="84" second="32" amount="-1" />
|
||||
<kerning first="90" second="103" amount="-1" />
|
||||
<kerning first="65" second="86" amount="-3" />
|
||||
<kerning first="75" second="112" amount="-1" />
|
||||
<kerning first="39" second="109" amount="-1" />
|
||||
<kerning first="75" second="81" amount="-1" />
|
||||
<kerning first="89" second="115" amount="-2" />
|
||||
<kerning first="84" second="83" amount="-1" />
|
||||
<kerning first="89" second="87" amount="1" />
|
||||
<kerning first="114" second="101" amount="-1" />
|
||||
<kerning first="116" second="111" amount="-1" />
|
||||
<kerning first="90" second="100" amount="-1" />
|
||||
<kerning first="84" second="122" amount="-2" />
|
||||
<kerning first="68" second="84" amount="-1" />
|
||||
<kerning first="32" second="84" amount="-1" />
|
||||
<kerning first="84" second="117" amount="-3" />
|
||||
<kerning first="74" second="65" amount="-1" />
|
||||
<kerning first="107" second="101" amount="-1" />
|
||||
<kerning first="75" second="109" amount="-1" />
|
||||
<kerning first="80" second="46" amount="-11" />
|
||||
<kerning first="89" second="93" amount="1" />
|
||||
<kerning first="89" second="65" amount="-3" />
|
||||
<kerning first="87" second="117" amount="-1" />
|
||||
<kerning first="89" second="81" amount="-1" />
|
||||
<kerning first="39" second="103" amount="-2" />
|
||||
<kerning first="86" second="101" amount="-2" />
|
||||
<kerning first="86" second="117" amount="-1" />
|
||||
<kerning first="84" second="113" amount="-3" />
|
||||
<kerning first="34" second="110" amount="-1" />
|
||||
<kerning first="89" second="84" amount="1" />
|
||||
<kerning first="84" second="110" amount="-4" />
|
||||
<kerning first="39" second="99" amount="-2" />
|
||||
<kerning first="88" second="121" amount="-1" />
|
||||
<kerning first="65" second="39" amount="-4" />
|
||||
<kerning first="110" second="39" amount="-4" />
|
||||
<kerning first="75" second="67" amount="-1" />
|
||||
<kerning first="88" second="118" amount="-1" />
|
||||
<kerning first="86" second="114" amount="-1" />
|
||||
<kerning first="80" second="74" amount="-7" />
|
||||
<kerning first="84" second="97" amount="-4" />
|
||||
<kerning first="82" second="84" amount="-3" />
|
||||
<kerning first="91" second="85" amount="-1" />
|
||||
<kerning first="102" second="99" amount="-1" />
|
||||
<kerning first="66" second="86" amount="-1" />
|
||||
<kerning first="120" second="101" amount="-1" />
|
||||
<kerning first="102" second="93" amount="1" />
|
||||
<kerning first="75" second="100" amount="-1" />
|
||||
<kerning first="84" second="79" amount="-1" />
|
||||
<kerning first="111" second="121" amount="-1" />
|
||||
<kerning first="75" second="121" amount="-1" />
|
||||
<kerning first="81" second="87" amount="-1" />
|
||||
<kerning first="107" second="113" amount="-1" />
|
||||
<kerning first="120" second="100" amount="-1" />
|
||||
<kerning first="90" second="79" amount="-1" />
|
||||
<kerning first="89" second="114" amount="-1" />
|
||||
<kerning first="122" second="101" amount="-1" />
|
||||
<kerning first="111" second="118" amount="-1" />
|
||||
<kerning first="82" second="86" amount="-1" />
|
||||
<kerning first="67" second="84" amount="-1" />
|
||||
<kerning first="70" second="101" amount="-1" />
|
||||
<kerning first="89" second="83" amount="-1" />
|
||||
<kerning first="114" second="97" amount="-1" />
|
||||
<kerning first="70" second="97" amount="-1" />
|
||||
<kerning first="89" second="102" amount="-1" />
|
||||
<kerning first="78" second="89" amount="-1" />
|
||||
<kerning first="70" second="44" amount="-8" />
|
||||
<kerning first="44" second="39" amount="-6" />
|
||||
<kerning first="84" second="45" amount="-8" />
|
||||
<kerning first="89" second="121" amount="-1" />
|
||||
<kerning first="84" second="86" amount="1" />
|
||||
<kerning first="87" second="99" amount="-1" />
|
||||
<kerning first="98" second="122" amount="-1" />
|
||||
<kerning first="89" second="112" amount="-1" />
|
||||
<kerning first="89" second="103" amount="-2" />
|
||||
<kerning first="88" second="81" amount="-1" />
|
||||
<kerning first="102" second="34" amount="1" />
|
||||
<kerning first="109" second="39" amount="-4" />
|
||||
<kerning first="81" second="84" amount="-2" />
|
||||
<kerning first="121" second="97" amount="-1" />
|
||||
<kerning first="89" second="99" amount="-2" />
|
||||
<kerning first="89" second="125" amount="1" />
|
||||
<kerning first="81" second="86" amount="-1" />
|
||||
<kerning first="114" second="116" amount="2" />
|
||||
<kerning first="114" second="119" amount="1" />
|
||||
<kerning first="84" second="44" amount="-8" />
|
||||
<kerning first="102" second="39" amount="1" />
|
||||
<kerning first="44" second="34" amount="-6" />
|
||||
<kerning first="34" second="109" amount="-1" />
|
||||
<kerning first="75" second="119" amount="-2" />
|
||||
<kerning first="76" second="65" amount="1" />
|
||||
<kerning first="84" second="81" amount="-1" />
|
||||
<kerning first="76" second="121" amount="-5" />
|
||||
<kerning first="69" second="101" amount="-1" />
|
||||
<kerning first="89" second="111" amount="-2" />
|
||||
<kerning first="80" second="90" amount="-1" />
|
||||
<kerning first="89" second="97" amount="-3" />
|
||||
<kerning first="89" second="109" amount="-1" />
|
||||
<kerning first="90" second="99" amount="-1" />
|
||||
<kerning first="89" second="86" amount="1" />
|
||||
<kerning first="79" second="88" amount="-1" />
|
||||
<kerning first="70" second="103" amount="-1" />
|
||||
<kerning first="34" second="103" amount="-2" />
|
||||
<kerning first="84" second="67" amount="-1" />
|
||||
<kerning first="76" second="79" amount="-2" />
|
||||
<kerning first="89" second="41" amount="1" />
|
||||
<kerning first="65" second="118" amount="-2" />
|
||||
<kerning first="75" second="71" amount="-1" />
|
||||
<kerning first="76" second="87" amount="-5" />
|
||||
<kerning first="77" second="89" amount="-1" />
|
||||
<kerning first="90" second="113" amount="-1" />
|
||||
<kerning first="79" second="89" amount="-2" />
|
||||
<kerning first="118" second="111" amount="-1" />
|
||||
<kerning first="118" second="97" amount="-1" />
|
||||
<kerning first="88" second="100" amount="-1" />
|
||||
<kerning first="90" second="121" amount="-1" />
|
||||
<kerning first="89" second="113" amount="-2" />
|
||||
<kerning first="84" second="87" amount="1" />
|
||||
<kerning first="39" second="111" amount="-2" />
|
||||
<kerning first="80" second="44" amount="-11" />
|
||||
<kerning first="39" second="100" amount="-2" />
|
||||
<kerning first="75" second="113" amount="-1" />
|
||||
<kerning first="88" second="111" amount="-1" />
|
||||
<kerning first="84" second="89" amount="1" />
|
||||
<kerning first="84" second="103" amount="-3" />
|
||||
<kerning first="70" second="117" amount="-1" />
|
||||
<kerning first="67" second="41" amount="-1" />
|
||||
<kerning first="89" second="71" amount="-1" />
|
||||
<kerning first="121" second="44" amount="-4" />
|
||||
<kerning first="97" second="121" amount="-1" />
|
||||
<kerning first="87" second="113" amount="-1" />
|
||||
<kerning first="73" second="84" amount="-1" />
|
||||
<kerning first="84" second="101" amount="-3" />
|
||||
<kerning first="75" second="99" amount="-1" />
|
||||
<kerning first="65" second="85" amount="-1" />
|
||||
<kerning first="76" second="67" amount="-2" />
|
||||
<kerning first="76" second="81" amount="-2" />
|
||||
<kerning first="75" second="79" amount="-1" />
|
||||
<kerning first="39" second="65" amount="-4" />
|
||||
<kerning first="76" second="117" amount="-2" />
|
||||
<kerning first="65" second="84" amount="-5" />
|
||||
<kerning first="90" second="101" amount="-1" />
|
||||
<kerning first="84" second="121" amount="-3" />
|
||||
<kerning first="69" second="99" amount="-1" />
|
||||
<kerning first="114" second="39" amount="1" />
|
||||
<kerning first="84" second="109" amount="-4" />
|
||||
<kerning first="76" second="119" amount="-3" />
|
||||
<kerning first="76" second="85" amount="-2" />
|
||||
<kerning first="65" second="116" amount="-1" />
|
||||
<kerning first="76" second="71" amount="-2" />
|
||||
<kerning first="79" second="90" amount="-1" />
|
||||
<kerning first="107" second="100" amount="-1" />
|
||||
<kerning first="90" second="111" amount="-1" />
|
||||
<kerning first="79" second="44" amount="-4" />
|
||||
<kerning first="75" second="45" amount="-2" />
|
||||
<kerning first="40" second="87" amount="1" />
|
||||
<kerning first="79" second="86" amount="-1" />
|
||||
<kerning first="102" second="100" amount="-1" />
|
||||
<kerning first="72" second="89" amount="-1" />
|
||||
<kerning first="72" second="88" amount="1" />
|
||||
<kerning first="79" second="46" amount="-4" />
|
||||
<kerning first="76" second="89" amount="-8" />
|
||||
<kerning first="68" second="65" amount="-1" />
|
||||
<kerning first="79" second="84" amount="-1" />
|
||||
<kerning first="87" second="100" amount="-1" />
|
||||
<kerning first="75" second="103" amount="-1" />
|
||||
<kerning first="90" second="67" amount="-1" />
|
||||
<kerning first="69" second="103" amount="-1" />
|
||||
<kerning first="90" second="71" amount="-1" />
|
||||
<kerning first="86" second="44" amount="-8" />
|
||||
<kerning first="69" second="121" amount="-1" />
|
||||
<kerning first="87" second="114" amount="-1" />
|
||||
<kerning first="118" second="39" amount="1" />
|
||||
<kerning first="46" second="39" amount="-6" />
|
||||
<kerning first="72" second="84" amount="-1" />
|
||||
<kerning first="86" second="46" amount="-8" />
|
||||
<kerning first="69" second="113" amount="-1" />
|
||||
<kerning first="69" second="119" amount="-1" />
|
||||
<kerning first="39" second="39" amount="-4" />
|
||||
<kerning first="69" second="117" amount="-1" />
|
||||
<kerning first="111" second="39" amount="-5" />
|
||||
<kerning first="90" second="81" amount="-1" />
|
||||
</kernings>
|
||||
</font>
|
||||
|
||||
@@ -1,488 +1,494 @@
|
||||
info face="Roboto Black" size=72 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2
|
||||
common lineHeight=85 base=67 scaleW=512 scaleH=512 pages=1 packed=0
|
||||
page id=0 file="RobotoBlack72White.png"
|
||||
chars count=98
|
||||
char id=0 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=66 xadvance=0 page=0 chnl=0
|
||||
char id=10 x=0 y=0 width=70 height=99 xoffset=2 yoffset=-11 xadvance=74 page=0 chnl=0
|
||||
char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=66 xadvance=18 page=0 chnl=0
|
||||
char id=33 x=460 y=156 width=15 height=55 xoffset=3 yoffset=14 xadvance=20 page=0 chnl=0
|
||||
char id=34 x=207 y=362 width=22 height=22 xoffset=0 yoffset=12 xadvance=23 page=0 chnl=0
|
||||
char id=35 x=404 y=266 width=41 height=54 xoffset=0 yoffset=14 xadvance=42 page=0 chnl=0
|
||||
char id=36 x=220 y=0 width=38 height=69 xoffset=2 yoffset=7 xadvance=42 page=0 chnl=0
|
||||
char id=37 x=167 y=156 width=49 height=56 xoffset=2 yoffset=13 xadvance=53 page=0 chnl=0
|
||||
char id=38 x=216 y=156 width=48 height=56 xoffset=1 yoffset=13 xadvance=48 page=0 chnl=0
|
||||
char id=39 x=499 y=320 width=10 height=22 xoffset=1 yoffset=12 xadvance=11 page=0 chnl=0
|
||||
char id=40 x=70 y=0 width=22 height=75 xoffset=3 yoffset=9 xadvance=25 page=0 chnl=0
|
||||
char id=41 x=92 y=0 width=23 height=75 xoffset=0 yoffset=9 xadvance=25 page=0 chnl=0
|
||||
char id=42 x=103 y=362 width=36 height=34 xoffset=-1 yoffset=14 xadvance=33 page=0 chnl=0
|
||||
char id=43 x=0 y=362 width=37 height=40 xoffset=1 yoffset=23 xadvance=39 page=0 chnl=0
|
||||
char id=44 x=483 y=320 width=16 height=25 xoffset=0 yoffset=57 xadvance=20 page=0 chnl=0
|
||||
char id=45 x=308 y=362 width=23 height=12 xoffset=4 yoffset=38 xadvance=32 page=0 chnl=0
|
||||
char id=46 x=270 y=362 width=15 height=15 xoffset=3 yoffset=54 xadvance=22 page=0 chnl=0
|
||||
char id=47 x=374 y=0 width=29 height=58 xoffset=-3 yoffset=14 xadvance=25 page=0 chnl=0
|
||||
char id=48 x=77 y=156 width=38 height=56 xoffset=2 yoffset=13 xadvance=42 page=0 chnl=0
|
||||
char id=49 x=299 y=266 width=26 height=54 xoffset=4 yoffset=14 xadvance=41 page=0 chnl=0
|
||||
char id=50 x=383 y=156 width=39 height=55 xoffset=1 yoffset=13 xadvance=42 page=0 chnl=0
|
||||
char id=51 x=434 y=99 width=39 height=56 xoffset=1 yoffset=13 xadvance=42 page=0 chnl=0
|
||||
char id=52 x=325 y=266 width=40 height=54 xoffset=1 yoffset=14 xadvance=42 page=0 chnl=0
|
||||
char id=53 x=422 y=156 width=38 height=55 xoffset=2 yoffset=14 xadvance=42 page=0 chnl=0
|
||||
char id=54 x=0 y=156 width=39 height=56 xoffset=2 yoffset=13 xadvance=42 page=0 chnl=0
|
||||
char id=55 x=365 y=266 width=39 height=54 xoffset=1 yoffset=14 xadvance=42 page=0 chnl=0
|
||||
char id=56 x=473 y=99 width=38 height=56 xoffset=2 yoffset=13 xadvance=42 page=0 chnl=0
|
||||
char id=57 x=39 y=156 width=38 height=56 xoffset=2 yoffset=13 xadvance=42 page=0 chnl=0
|
||||
char id=58 x=471 y=266 width=15 height=43 xoffset=3 yoffset=26 xadvance=21 page=0 chnl=0
|
||||
char id=59 x=150 y=156 width=17 height=56 xoffset=1 yoffset=26 xadvance=21 page=0 chnl=0
|
||||
char id=60 x=37 y=362 width=33 height=38 xoffset=1 yoffset=26 xadvance=37 page=0 chnl=0
|
||||
char id=61 x=172 y=362 width=35 height=27 xoffset=3 yoffset=31 xadvance=42 page=0 chnl=0
|
||||
char id=62 x=70 y=362 width=33 height=38 xoffset=3 yoffset=26 xadvance=37 page=0 chnl=0
|
||||
char id=63 x=115 y=156 width=35 height=56 xoffset=0 yoffset=13 xadvance=36 page=0 chnl=0
|
||||
char id=64 x=258 y=0 width=61 height=68 xoffset=1 yoffset=16 xadvance=64 page=0 chnl=0
|
||||
char id=65 x=0 y=212 width=53 height=54 xoffset=-2 yoffset=14 xadvance=49 page=0 chnl=0
|
||||
char id=66 x=53 y=212 width=42 height=54 xoffset=3 yoffset=14 xadvance=47 page=0 chnl=0
|
||||
char id=67 x=37 y=99 width=46 height=56 xoffset=1 yoffset=13 xadvance=47 page=0 chnl=0
|
||||
char id=68 x=95 y=212 width=42 height=54 xoffset=3 yoffset=14 xadvance=47 page=0 chnl=0
|
||||
char id=69 x=137 y=212 width=38 height=54 xoffset=3 yoffset=14 xadvance=41 page=0 chnl=0
|
||||
char id=70 x=475 y=156 width=36 height=54 xoffset=3 yoffset=14 xadvance=39 page=0 chnl=0
|
||||
char id=71 x=83 y=99 width=45 height=56 xoffset=2 yoffset=13 xadvance=49 page=0 chnl=0
|
||||
char id=72 x=175 y=212 width=45 height=54 xoffset=3 yoffset=14 xadvance=51 page=0 chnl=0
|
||||
char id=73 x=220 y=212 width=14 height=54 xoffset=4 yoffset=14 xadvance=22 page=0 chnl=0
|
||||
char id=74 x=264 y=156 width=37 height=55 xoffset=0 yoffset=14 xadvance=40 page=0 chnl=0
|
||||
char id=75 x=234 y=212 width=45 height=54 xoffset=3 yoffset=14 xadvance=46 page=0 chnl=0
|
||||
char id=76 x=279 y=212 width=36 height=54 xoffset=3 yoffset=14 xadvance=39 page=0 chnl=0
|
||||
char id=77 x=315 y=212 width=58 height=54 xoffset=3 yoffset=14 xadvance=63 page=0 chnl=0
|
||||
char id=78 x=373 y=212 width=45 height=54 xoffset=3 yoffset=14 xadvance=51 page=0 chnl=0
|
||||
char id=79 x=128 y=99 width=47 height=56 xoffset=1 yoffset=13 xadvance=50 page=0 chnl=0
|
||||
char id=80 x=418 y=212 width=43 height=54 xoffset=3 yoffset=14 xadvance=48 page=0 chnl=0
|
||||
char id=81 x=319 y=0 width=47 height=65 xoffset=2 yoffset=13 xadvance=50 page=0 chnl=0
|
||||
char id=82 x=461 y=212 width=43 height=54 xoffset=3 yoffset=14 xadvance=46 page=0 chnl=0
|
||||
char id=83 x=175 y=99 width=42 height=56 xoffset=1 yoffset=13 xadvance=44 page=0 chnl=0
|
||||
char id=84 x=0 y=266 width=45 height=54 xoffset=0 yoffset=14 xadvance=45 page=0 chnl=0
|
||||
char id=85 x=301 y=156 width=42 height=55 xoffset=3 yoffset=14 xadvance=48 page=0 chnl=0
|
||||
char id=86 x=45 y=266 width=51 height=54 xoffset=-2 yoffset=14 xadvance=48 page=0 chnl=0
|
||||
char id=87 x=96 y=266 width=64 height=54 xoffset=-1 yoffset=14 xadvance=63 page=0 chnl=0
|
||||
char id=88 x=160 y=266 width=48 height=54 xoffset=-1 yoffset=14 xadvance=46 page=0 chnl=0
|
||||
char id=89 x=208 y=266 width=49 height=54 xoffset=-2 yoffset=14 xadvance=45 page=0 chnl=0
|
||||
char id=90 x=257 y=266 width=42 height=54 xoffset=1 yoffset=14 xadvance=44 page=0 chnl=0
|
||||
char id=91 x=115 y=0 width=18 height=75 xoffset=3 yoffset=5 xadvance=21 page=0 chnl=0
|
||||
char id=92 x=403 y=0 width=37 height=58 xoffset=-2 yoffset=14 xadvance=31 page=0 chnl=0
|
||||
char id=93 x=133 y=0 width=18 height=75 xoffset=0 yoffset=5 xadvance=21 page=0 chnl=0
|
||||
char id=94 x=139 y=362 width=33 height=28 xoffset=0 yoffset=14 xadvance=32 page=0 chnl=0
|
||||
char id=95 x=331 y=362 width=34 height=12 xoffset=-1 yoffset=65 xadvance=33 page=0 chnl=0
|
||||
char id=96 x=285 y=362 width=23 height=13 xoffset=0 yoffset=12 xadvance=24 page=0 chnl=0
|
||||
char id=97 x=0 y=320 width=37 height=42 xoffset=1 yoffset=27 xadvance=38 page=0 chnl=0
|
||||
char id=98 x=440 y=0 width=37 height=57 xoffset=2 yoffset=12 xadvance=40 page=0 chnl=0
|
||||
char id=99 x=37 y=320 width=36 height=42 xoffset=1 yoffset=27 xadvance=38 page=0 chnl=0
|
||||
char id=100 x=0 y=99 width=37 height=57 xoffset=1 yoffset=12 xadvance=40 page=0 chnl=0
|
||||
char id=101 x=73 y=320 width=38 height=42 xoffset=1 yoffset=27 xadvance=39 page=0 chnl=0
|
||||
char id=102 x=477 y=0 width=28 height=57 xoffset=0 yoffset=11 xadvance=27 page=0 chnl=0
|
||||
char id=103 x=217 y=99 width=38 height=56 xoffset=1 yoffset=27 xadvance=41 page=0 chnl=0
|
||||
char id=104 x=255 y=99 width=36 height=56 xoffset=2 yoffset=12 xadvance=40 page=0 chnl=0
|
||||
char id=105 x=291 y=99 width=15 height=56 xoffset=2 yoffset=12 xadvance=19 page=0 chnl=0
|
||||
char id=106 x=197 y=0 width=23 height=71 xoffset=-5 yoffset=12 xadvance=20 page=0 chnl=0
|
||||
char id=107 x=306 y=99 width=40 height=56 xoffset=2 yoffset=12 xadvance=39 page=0 chnl=0
|
||||
char id=108 x=346 y=99 width=14 height=56 xoffset=3 yoffset=12 xadvance=20 page=0 chnl=0
|
||||
char id=109 x=186 y=320 width=58 height=41 xoffset=2 yoffset=27 xadvance=63 page=0 chnl=0
|
||||
char id=110 x=244 y=320 width=36 height=41 xoffset=2 yoffset=27 xadvance=40 page=0 chnl=0
|
||||
char id=111 x=111 y=320 width=39 height=42 xoffset=1 yoffset=27 xadvance=41 page=0 chnl=0
|
||||
char id=112 x=360 y=99 width=37 height=56 xoffset=2 yoffset=27 xadvance=40 page=0 chnl=0
|
||||
char id=113 x=397 y=99 width=37 height=56 xoffset=1 yoffset=27 xadvance=40 page=0 chnl=0
|
||||
char id=114 x=486 y=266 width=25 height=41 xoffset=2 yoffset=27 xadvance=27 page=0 chnl=0
|
||||
char id=115 x=150 y=320 width=36 height=42 xoffset=0 yoffset=27 xadvance=37 page=0 chnl=0
|
||||
char id=116 x=445 y=266 width=26 height=51 xoffset=0 yoffset=18 xadvance=25 page=0 chnl=0
|
||||
char id=117 x=280 y=320 width=36 height=41 xoffset=2 yoffset=28 xadvance=40 page=0 chnl=0
|
||||
char id=118 x=316 y=320 width=39 height=40 xoffset=-1 yoffset=28 xadvance=37 page=0 chnl=0
|
||||
char id=119 x=355 y=320 width=54 height=40 xoffset=-1 yoffset=28 xadvance=52 page=0 chnl=0
|
||||
char id=120 x=409 y=320 width=40 height=40 xoffset=-1 yoffset=28 xadvance=37 page=0 chnl=0
|
||||
char id=121 x=343 y=156 width=40 height=55 xoffset=-1 yoffset=28 xadvance=37 page=0 chnl=0
|
||||
char id=122 x=449 y=320 width=34 height=40 xoffset=1 yoffset=28 xadvance=36 page=0 chnl=0
|
||||
char id=123 x=151 y=0 width=23 height=72 xoffset=0 yoffset=9 xadvance=23 page=0 chnl=0
|
||||
char id=124 x=366 y=0 width=8 height=63 xoffset=5 yoffset=14 xadvance=18 page=0 chnl=0
|
||||
char id=125 x=174 y=0 width=23 height=72 xoffset=0 yoffset=9 xadvance=23 page=0 chnl=0
|
||||
char id=126 x=229 y=362 width=41 height=19 xoffset=2 yoffset=36 xadvance=45 page=0 chnl=0
|
||||
char id=127 x=0 y=0 width=70 height=99 xoffset=2 yoffset=-11 xadvance=74 page=0 chnl=0
|
||||
kernings count=385
|
||||
kerning first=84 second=74 amount=-8
|
||||
kerning first=86 second=100 amount=-2
|
||||
kerning first=114 second=113 amount=-1
|
||||
kerning first=70 second=121 amount=-1
|
||||
kerning first=34 second=99 amount=-2
|
||||
kerning first=70 second=99 amount=-1
|
||||
kerning first=69 second=99 amount=-1
|
||||
kerning first=88 second=113 amount=-1
|
||||
kerning first=84 second=46 amount=-9
|
||||
kerning first=87 second=97 amount=-1
|
||||
kerning first=90 second=117 amount=-1
|
||||
kerning first=39 second=97 amount=-2
|
||||
kerning first=69 second=111 amount=-1
|
||||
kerning first=87 second=41 amount=1
|
||||
kerning first=121 second=34 amount=1
|
||||
kerning first=40 second=86 amount=1
|
||||
kerning first=85 second=65 amount=-1
|
||||
kerning first=72 second=65 amount=1
|
||||
kerning first=114 second=102 amount=1
|
||||
kerning first=89 second=42 amount=-2
|
||||
kerning first=114 second=34 amount=1
|
||||
kerning first=75 second=67 amount=-1
|
||||
kerning first=89 second=85 amount=-3
|
||||
kerning first=77 second=88 amount=1
|
||||
kerning first=84 second=115 amount=-3
|
||||
kerning first=84 second=71 amount=-1
|
||||
kerning first=89 second=101 amount=-2
|
||||
kerning first=89 second=45 amount=-5
|
||||
kerning first=78 second=88 amount=1
|
||||
kerning first=68 second=89 amount=-2
|
||||
kerning first=122 second=103 amount=-1
|
||||
kerning first=78 second=84 amount=-1
|
||||
kerning first=86 second=103 amount=-2
|
||||
kerning first=89 second=79 amount=-1
|
||||
kerning first=75 second=111 amount=-1
|
||||
kerning first=111 second=120 amount=-1
|
||||
kerning first=87 second=44 amount=-5
|
||||
kerning first=67 second=84 amount=-1
|
||||
kerning first=84 second=111 amount=-7
|
||||
kerning first=84 second=83 amount=-1
|
||||
kerning first=102 second=113 amount=-1
|
||||
kerning first=39 second=101 amount=-2
|
||||
kerning first=80 second=88 amount=-2
|
||||
kerning first=66 second=84 amount=-1
|
||||
kerning first=65 second=87 amount=-1
|
||||
kerning first=122 second=100 amount=-1
|
||||
kerning first=75 second=118 amount=-1
|
||||
kerning first=73 second=65 amount=1
|
||||
kerning first=70 second=118 amount=-1
|
||||
kerning first=73 second=88 amount=1
|
||||
kerning first=82 second=89 amount=-2
|
||||
kerning first=65 second=34 amount=-4
|
||||
kerning first=120 second=99 amount=-1
|
||||
kerning first=84 second=99 amount=-3
|
||||
kerning first=84 second=65 amount=-4
|
||||
kerning first=112 second=39 amount=-1
|
||||
kerning first=76 second=39 amount=-10
|
||||
kerning first=78 second=65 amount=1
|
||||
kerning first=88 second=45 amount=-5
|
||||
kerning first=34 second=111 amount=-3
|
||||
kerning first=114 second=99 amount=-1
|
||||
kerning first=86 second=125 amount=1
|
||||
kerning first=70 second=111 amount=-1
|
||||
kerning first=89 second=120 amount=-1
|
||||
kerning first=90 second=119 amount=-1
|
||||
kerning first=89 second=89 amount=1
|
||||
kerning first=89 second=117 amount=-1
|
||||
kerning first=75 second=117 amount=-1
|
||||
kerning first=76 second=65 amount=1
|
||||
kerning first=34 second=34 amount=-1
|
||||
kerning first=89 second=110 amount=-1
|
||||
kerning first=88 second=101 amount=-1
|
||||
kerning first=107 second=103 amount=-1
|
||||
kerning first=34 second=115 amount=-3
|
||||
kerning first=80 second=44 amount=-14
|
||||
kerning first=98 second=39 amount=-1
|
||||
kerning first=70 second=65 amount=-7
|
||||
kerning first=89 second=116 amount=-1
|
||||
kerning first=70 second=46 amount=-10
|
||||
kerning first=98 second=34 amount=-1
|
||||
kerning first=70 second=84 amount=1
|
||||
kerning first=114 second=100 amount=-1
|
||||
kerning first=88 second=79 amount=-1
|
||||
kerning first=39 second=113 amount=-2
|
||||
kerning first=65 second=118 amount=-2
|
||||
kerning first=114 second=103 amount=-1
|
||||
kerning first=77 second=65 amount=1
|
||||
kerning first=120 second=103 amount=-1
|
||||
kerning first=65 second=110 amount=-2
|
||||
kerning first=114 second=121 amount=1
|
||||
kerning first=89 second=100 amount=-2
|
||||
kerning first=80 second=65 amount=-6
|
||||
kerning first=121 second=111 amount=-1
|
||||
kerning first=34 second=101 amount=-2
|
||||
kerning first=122 second=111 amount=-1
|
||||
kerning first=114 second=118 amount=1
|
||||
kerning first=102 second=41 amount=1
|
||||
kerning first=122 second=113 amount=-1
|
||||
kerning first=89 second=122 amount=-1
|
||||
kerning first=68 second=88 amount=-1
|
||||
kerning first=81 second=89 amount=-1
|
||||
kerning first=114 second=111 amount=-1
|
||||
kerning first=46 second=34 amount=-10
|
||||
kerning first=84 second=112 amount=-3
|
||||
kerning first=76 second=34 amount=-10
|
||||
kerning first=39 second=115 amount=-3
|
||||
kerning first=76 second=118 amount=-4
|
||||
kerning first=86 second=99 amount=-2
|
||||
kerning first=84 second=84 amount=1
|
||||
kerning first=120 second=111 amount=-1
|
||||
kerning first=65 second=79 amount=-1
|
||||
kerning first=87 second=101 amount=-1
|
||||
kerning first=67 second=125 amount=-1
|
||||
kerning first=120 second=113 amount=-1
|
||||
kerning first=118 second=46 amount=-6
|
||||
kerning first=88 second=103 amount=-1
|
||||
kerning first=111 second=122 amount=-1
|
||||
kerning first=77 second=84 amount=-1
|
||||
kerning first=114 second=46 amount=-6
|
||||
kerning first=34 second=39 amount=-1
|
||||
kerning first=65 second=121 amount=-2
|
||||
kerning first=114 second=44 amount=-6
|
||||
kerning first=69 second=84 amount=1
|
||||
kerning first=89 second=46 amount=-8
|
||||
kerning first=97 second=39 amount=-1
|
||||
kerning first=34 second=100 amount=-2
|
||||
kerning first=70 second=100 amount=-1
|
||||
kerning first=84 second=120 amount=-3
|
||||
kerning first=90 second=118 amount=-1
|
||||
kerning first=70 second=114 amount=-1
|
||||
kerning first=34 second=112 amount=-1
|
||||
kerning first=89 second=86 amount=1
|
||||
kerning first=86 second=113 amount=-2
|
||||
kerning first=88 second=71 amount=-1
|
||||
kerning first=122 second=99 amount=-1
|
||||
kerning first=66 second=89 amount=-2
|
||||
kerning first=102 second=103 amount=-1
|
||||
kerning first=88 second=67 amount=-1
|
||||
kerning first=39 second=110 amount=-1
|
||||
kerning first=88 second=117 amount=-1
|
||||
kerning first=89 second=118 amount=-1
|
||||
kerning first=97 second=118 amount=-1
|
||||
kerning first=87 second=65 amount=-2
|
||||
kerning first=89 second=67 amount=-1
|
||||
kerning first=89 second=74 amount=-3
|
||||
kerning first=102 second=101 amount=-1
|
||||
kerning first=86 second=111 amount=-2
|
||||
kerning first=65 second=119 amount=-1
|
||||
kerning first=84 second=100 amount=-3
|
||||
kerning first=120 second=100 amount=-1
|
||||
kerning first=104 second=34 amount=-3
|
||||
kerning first=86 second=41 amount=1
|
||||
kerning first=111 second=34 amount=-3
|
||||
kerning first=40 second=89 amount=1
|
||||
kerning first=121 second=39 amount=1
|
||||
kerning first=70 second=74 amount=-7
|
||||
kerning first=68 second=90 amount=-1
|
||||
kerning first=98 second=120 amount=-1
|
||||
kerning first=110 second=34 amount=-3
|
||||
kerning first=119 second=46 amount=-4
|
||||
kerning first=69 second=102 amount=-1
|
||||
kerning first=118 second=44 amount=-6
|
||||
kerning first=84 second=114 amount=-2
|
||||
kerning first=86 second=97 amount=-2
|
||||
kerning first=40 second=87 amount=1
|
||||
kerning first=65 second=109 amount=-2
|
||||
kerning first=68 second=86 amount=-1
|
||||
kerning first=86 second=93 amount=1
|
||||
kerning first=65 second=67 amount=-1
|
||||
kerning first=97 second=34 amount=-1
|
||||
kerning first=34 second=65 amount=-4
|
||||
kerning first=84 second=118 amount=-3
|
||||
kerning first=112 second=34 amount=-1
|
||||
kerning first=76 second=84 amount=-7
|
||||
kerning first=107 second=99 amount=-1
|
||||
kerning first=123 second=85 amount=-1
|
||||
kerning first=102 second=125 amount=1
|
||||
kerning first=65 second=63 amount=-3
|
||||
kerning first=89 second=44 amount=-8
|
||||
kerning first=80 second=118 amount=1
|
||||
kerning first=112 second=122 amount=-1
|
||||
kerning first=79 second=65 amount=-1
|
||||
kerning first=80 second=121 amount=1
|
||||
kerning first=118 second=34 amount=1
|
||||
kerning first=87 second=45 amount=-2
|
||||
kerning first=69 second=100 amount=-1
|
||||
kerning first=87 second=103 amount=-1
|
||||
kerning first=112 second=120 amount=-1
|
||||
kerning first=86 second=65 amount=-3
|
||||
kerning first=65 second=81 amount=-1
|
||||
kerning first=68 second=44 amount=-4
|
||||
kerning first=86 second=45 amount=-6
|
||||
kerning first=39 second=34 amount=-1
|
||||
kerning first=72 second=88 amount=1
|
||||
kerning first=68 second=46 amount=-4
|
||||
kerning first=65 second=89 amount=-5
|
||||
kerning first=69 second=118 amount=-1
|
||||
kerning first=89 second=38 amount=-1
|
||||
kerning first=88 second=99 amount=-1
|
||||
kerning first=65 second=71 amount=-1
|
||||
kerning first=91 second=74 amount=-1
|
||||
kerning first=75 second=101 amount=-1
|
||||
kerning first=39 second=112 amount=-1
|
||||
kerning first=70 second=113 amount=-1
|
||||
kerning first=119 second=44 amount=-4
|
||||
kerning first=72 second=89 amount=-1
|
||||
kerning first=90 second=103 amount=-1
|
||||
kerning first=65 second=86 amount=-3
|
||||
kerning first=84 second=119 amount=-2
|
||||
kerning first=34 second=110 amount=-1
|
||||
kerning first=39 second=109 amount=-1
|
||||
kerning first=75 second=81 amount=-1
|
||||
kerning first=89 second=115 amount=-2
|
||||
kerning first=89 second=87 amount=1
|
||||
kerning first=114 second=101 amount=-1
|
||||
kerning first=116 second=111 amount=-1
|
||||
kerning first=90 second=100 amount=-1
|
||||
kerning first=79 second=89 amount=-2
|
||||
kerning first=84 second=122 amount=-2
|
||||
kerning first=68 second=84 amount=-3
|
||||
kerning first=76 second=86 amount=-7
|
||||
kerning first=74 second=65 amount=-1
|
||||
kerning first=107 second=101 amount=-1
|
||||
kerning first=80 second=46 amount=-14
|
||||
kerning first=89 second=93 amount=1
|
||||
kerning first=89 second=65 amount=-5
|
||||
kerning first=87 second=117 amount=-1
|
||||
kerning first=89 second=81 amount=-1
|
||||
kerning first=39 second=103 amount=-2
|
||||
kerning first=86 second=101 amount=-2
|
||||
kerning first=86 second=117 amount=-1
|
||||
kerning first=84 second=113 amount=-3
|
||||
kerning first=87 second=46 amount=-5
|
||||
kerning first=47 second=47 amount=-9
|
||||
kerning first=75 second=103 amount=-1
|
||||
kerning first=89 second=84 amount=1
|
||||
kerning first=84 second=110 amount=-3
|
||||
kerning first=39 second=99 amount=-2
|
||||
kerning first=88 second=121 amount=-1
|
||||
kerning first=65 second=39 amount=-4
|
||||
kerning first=110 second=39 amount=-3
|
||||
kerning first=88 second=118 amount=-1
|
||||
kerning first=86 second=114 amount=-1
|
||||
kerning first=80 second=74 amount=-6
|
||||
kerning first=84 second=97 amount=-6
|
||||
kerning first=82 second=84 amount=-2
|
||||
kerning first=91 second=85 amount=-1
|
||||
kerning first=102 second=99 amount=-1
|
||||
kerning first=66 second=86 amount=-1
|
||||
kerning first=120 second=101 amount=-1
|
||||
kerning first=102 second=93 amount=1
|
||||
kerning first=75 second=100 amount=-1
|
||||
kerning first=84 second=79 amount=-1
|
||||
kerning first=44 second=39 amount=-10
|
||||
kerning first=111 second=121 amount=-1
|
||||
kerning first=75 second=121 amount=-1
|
||||
kerning first=81 second=87 amount=-1
|
||||
kerning first=107 second=113 amount=-1
|
||||
kerning first=90 second=79 amount=-1
|
||||
kerning first=89 second=114 amount=-1
|
||||
kerning first=122 second=101 amount=-1
|
||||
kerning first=111 second=118 amount=-1
|
||||
kerning first=82 second=86 amount=-1
|
||||
kerning first=70 second=101 amount=-1
|
||||
kerning first=114 second=97 amount=-1
|
||||
kerning first=70 second=97 amount=-1
|
||||
kerning first=34 second=97 amount=-2
|
||||
kerning first=89 second=102 amount=-1
|
||||
kerning first=78 second=89 amount=-1
|
||||
kerning first=70 second=44 amount=-10
|
||||
kerning first=104 second=39 amount=-3
|
||||
kerning first=84 second=45 amount=-10
|
||||
kerning first=89 second=121 amount=-1
|
||||
kerning first=109 second=34 amount=-3
|
||||
kerning first=84 second=86 amount=1
|
||||
kerning first=87 second=99 amount=-1
|
||||
kerning first=32 second=84 amount=-2
|
||||
kerning first=98 second=122 amount=-1
|
||||
kerning first=89 second=112 amount=-1
|
||||
kerning first=89 second=103 amount=-2
|
||||
kerning first=65 second=116 amount=-1
|
||||
kerning first=88 second=81 amount=-1
|
||||
kerning first=102 second=34 amount=1
|
||||
kerning first=109 second=39 amount=-3
|
||||
kerning first=81 second=84 amount=-1
|
||||
kerning first=121 second=97 amount=-1
|
||||
kerning first=89 second=99 amount=-2
|
||||
kerning first=89 second=125 amount=1
|
||||
kerning first=81 second=86 amount=-1
|
||||
kerning first=114 second=116 amount=2
|
||||
kerning first=114 second=119 amount=1
|
||||
kerning first=84 second=44 amount=-9
|
||||
kerning first=102 second=39 amount=1
|
||||
kerning first=44 second=34 amount=-10
|
||||
kerning first=34 second=109 amount=-1
|
||||
kerning first=84 second=101 amount=-3
|
||||
kerning first=75 second=119 amount=-2
|
||||
kerning first=84 second=81 amount=-1
|
||||
kerning first=76 second=121 amount=-4
|
||||
kerning first=69 second=101 amount=-1
|
||||
kerning first=80 second=90 amount=-1
|
||||
kerning first=89 second=97 amount=-2
|
||||
kerning first=89 second=109 amount=-1
|
||||
kerning first=90 second=99 amount=-1
|
||||
kerning first=79 second=88 amount=-1
|
||||
kerning first=70 second=103 amount=-1
|
||||
kerning first=34 second=103 amount=-2
|
||||
kerning first=84 second=67 amount=-1
|
||||
kerning first=76 second=79 amount=-2
|
||||
kerning first=34 second=113 amount=-2
|
||||
kerning first=89 second=41 amount=1
|
||||
kerning first=75 second=71 amount=-1
|
||||
kerning first=76 second=87 amount=-3
|
||||
kerning first=77 second=89 amount=-1
|
||||
kerning first=90 second=113 amount=-1
|
||||
kerning first=118 second=111 amount=-1
|
||||
kerning first=118 second=97 amount=-1
|
||||
kerning first=88 second=100 amount=-1
|
||||
kerning first=89 second=111 amount=-2
|
||||
kerning first=90 second=121 amount=-1
|
||||
kerning first=89 second=113 amount=-2
|
||||
kerning first=84 second=87 amount=1
|
||||
kerning first=39 second=111 amount=-3
|
||||
kerning first=39 second=100 amount=-2
|
||||
kerning first=75 second=113 amount=-1
|
||||
kerning first=88 second=111 amount=-1
|
||||
kerning first=87 second=111 amount=-1
|
||||
kerning first=89 second=83 amount=-1
|
||||
kerning first=84 second=89 amount=1
|
||||
kerning first=84 second=103 amount=-3
|
||||
kerning first=70 second=117 amount=-1
|
||||
kerning first=67 second=41 amount=-1
|
||||
kerning first=89 second=71 amount=-1
|
||||
kerning first=121 second=44 amount=-6
|
||||
kerning first=97 second=121 amount=-1
|
||||
kerning first=87 second=113 amount=-1
|
||||
kerning first=73 second=84 amount=-1
|
||||
kerning first=121 second=46 amount=-6
|
||||
kerning first=75 second=99 amount=-1
|
||||
kerning first=65 second=112 amount=-2
|
||||
kerning first=65 second=85 amount=-1
|
||||
kerning first=76 second=67 amount=-2
|
||||
kerning first=76 second=81 amount=-2
|
||||
kerning first=102 second=100 amount=-1
|
||||
kerning first=75 second=79 amount=-1
|
||||
kerning first=39 second=65 amount=-4
|
||||
kerning first=65 second=84 amount=-4
|
||||
kerning first=90 second=101 amount=-1
|
||||
kerning first=84 second=121 amount=-3
|
||||
kerning first=114 second=39 amount=1
|
||||
kerning first=84 second=109 amount=-3
|
||||
kerning first=123 second=74 amount=-1
|
||||
kerning first=76 second=119 amount=-2
|
||||
kerning first=84 second=117 amount=-2
|
||||
kerning first=76 second=85 amount=-1
|
||||
kerning first=76 second=71 amount=-2
|
||||
kerning first=79 second=90 amount=-1
|
||||
kerning first=107 second=100 amount=-1
|
||||
kerning first=90 second=111 amount=-1
|
||||
kerning first=79 second=44 amount=-4
|
||||
kerning first=75 second=45 amount=-6
|
||||
kerning first=79 second=86 amount=-1
|
||||
kerning first=79 second=46 amount=-4
|
||||
kerning first=76 second=89 amount=-10
|
||||
kerning first=68 second=65 amount=-1
|
||||
kerning first=79 second=84 amount=-3
|
||||
kerning first=87 second=100 amount=-1
|
||||
kerning first=84 second=32 amount=-2
|
||||
kerning first=90 second=67 amount=-1
|
||||
kerning first=69 second=103 amount=-1
|
||||
kerning first=90 second=71 amount=-1
|
||||
kerning first=86 second=44 amount=-8
|
||||
kerning first=69 second=121 amount=-1
|
||||
kerning first=87 second=114 amount=-1
|
||||
kerning first=118 second=39 amount=1
|
||||
kerning first=46 second=39 amount=-10
|
||||
kerning first=72 second=84 amount=-1
|
||||
kerning first=86 second=46 amount=-8
|
||||
kerning first=69 second=113 amount=-1
|
||||
kerning first=69 second=119 amount=-1
|
||||
kerning first=73 second=89 amount=-1
|
||||
kerning first=39 second=39 amount=-1
|
||||
kerning first=69 second=117 amount=-1
|
||||
kerning first=111 second=39 amount=-3
|
||||
kerning first=90 second=81 amount=-1
|
||||
<?xml version="1.0"?>
|
||||
<font>
|
||||
<info face="Roboto Black" size="72" bold="0" italic="0" charset="" unicode="0" stretchH="100" smooth="1" aa="1" padding="1,1,1,1" spacing="-2,-2" outline="0" />
|
||||
<common lineHeight="85" base="67" scaleW="512" scaleH="512" pages="1" packed="0" alphaChnl="0" redChnl="0" greenChnl="0" blueChnl="0" />
|
||||
<pages>
|
||||
<page id="0" file="RobotoBlack72White.png" /> </pages>
|
||||
<chars count="98">
|
||||
<char id="0" x="0" y="0" width="0" height="0" xoffset="-1" yoffset="66" xadvance="0" page="0" chnl="0" />
|
||||
<char id="10" x="0" y="0" width="70" height="99" xoffset="2" yoffset="-11" xadvance="74" page="0" chnl="0" />
|
||||
<char id="32" x="0" y="0" width="0" height="0" xoffset="-1" yoffset="66" xadvance="18" page="0" chnl="0" />
|
||||
<char id="33" x="460" y="156" width="15" height="55" xoffset="3" yoffset="14" xadvance="20" page="0" chnl="0" />
|
||||
<char id="34" x="207" y="362" width="22" height="22" xoffset="0" yoffset="12" xadvance="23" page="0" chnl="0" />
|
||||
<char id="35" x="404" y="266" width="41" height="54" xoffset="0" yoffset="14" xadvance="42" page="0" chnl="0" />
|
||||
<char id="36" x="220" y="0" width="38" height="69" xoffset="2" yoffset="7" xadvance="42" page="0" chnl="0" />
|
||||
<char id="37" x="167" y="156" width="49" height="56" xoffset="2" yoffset="13" xadvance="53" page="0" chnl="0" />
|
||||
<char id="38" x="216" y="156" width="48" height="56" xoffset="1" yoffset="13" xadvance="48" page="0" chnl="0" />
|
||||
<char id="39" x="499" y="320" width="10" height="22" xoffset="1" yoffset="12" xadvance="11" page="0" chnl="0" />
|
||||
<char id="40" x="70" y="0" width="22" height="75" xoffset="3" yoffset="9" xadvance="25" page="0" chnl="0" />
|
||||
<char id="41" x="92" y="0" width="23" height="75" xoffset="0" yoffset="9" xadvance="25" page="0" chnl="0" />
|
||||
<char id="42" x="103" y="362" width="36" height="34" xoffset="-1" yoffset="14" xadvance="33" page="0" chnl="0" />
|
||||
<char id="43" x="0" y="362" width="37" height="40" xoffset="1" yoffset="23" xadvance="39" page="0" chnl="0" />
|
||||
<char id="44" x="483" y="320" width="16" height="25" xoffset="0" yoffset="57" xadvance="20" page="0" chnl="0" />
|
||||
<char id="45" x="308" y="362" width="23" height="12" xoffset="4" yoffset="38" xadvance="32" page="0" chnl="0" />
|
||||
<char id="46" x="270" y="362" width="15" height="15" xoffset="3" yoffset="54" xadvance="22" page="0" chnl="0" />
|
||||
<char id="47" x="374" y="0" width="29" height="58" xoffset="-3" yoffset="14" xadvance="25" page="0" chnl="0" />
|
||||
<char id="48" x="77" y="156" width="38" height="56" xoffset="2" yoffset="13" xadvance="42" page="0" chnl="0" />
|
||||
<char id="49" x="299" y="266" width="26" height="54" xoffset="4" yoffset="14" xadvance="41" page="0" chnl="0" />
|
||||
<char id="50" x="383" y="156" width="39" height="55" xoffset="1" yoffset="13" xadvance="42" page="0" chnl="0" />
|
||||
<char id="51" x="434" y="99" width="39" height="56" xoffset="1" yoffset="13" xadvance="42" page="0" chnl="0" />
|
||||
<char id="52" x="325" y="266" width="40" height="54" xoffset="1" yoffset="14" xadvance="42" page="0" chnl="0" />
|
||||
<char id="53" x="422" y="156" width="38" height="55" xoffset="2" yoffset="14" xadvance="42" page="0" chnl="0" />
|
||||
<char id="54" x="0" y="156" width="39" height="56" xoffset="2" yoffset="13" xadvance="42" page="0" chnl="0" />
|
||||
<char id="55" x="365" y="266" width="39" height="54" xoffset="1" yoffset="14" xadvance="42" page="0" chnl="0" />
|
||||
<char id="56" x="473" y="99" width="38" height="56" xoffset="2" yoffset="13" xadvance="42" page="0" chnl="0" />
|
||||
<char id="57" x="39" y="156" width="38" height="56" xoffset="2" yoffset="13" xadvance="42" page="0" chnl="0" />
|
||||
<char id="58" x="471" y="266" width="15" height="43" xoffset="3" yoffset="26" xadvance="21" page="0" chnl="0" />
|
||||
<char id="59" x="150" y="156" width="17" height="56" xoffset="1" yoffset="26" xadvance="21" page="0" chnl="0" />
|
||||
<char id="60" x="37" y="362" width="33" height="38" xoffset="1" yoffset="26" xadvance="37" page="0" chnl="0" />
|
||||
<char id="61" x="172" y="362" width="35" height="27" xoffset="3" yoffset="31" xadvance="42" page="0" chnl="0" />
|
||||
<char id="62" x="70" y="362" width="33" height="38" xoffset="3" yoffset="26" xadvance="37" page="0" chnl="0" />
|
||||
<char id="63" x="115" y="156" width="35" height="56" xoffset="0" yoffset="13" xadvance="36" page="0" chnl="0" />
|
||||
<char id="64" x="258" y="0" width="61" height="68" xoffset="1" yoffset="16" xadvance="64" page="0" chnl="0" />
|
||||
<char id="65" x="0" y="212" width="53" height="54" xoffset="-2" yoffset="14" xadvance="49" page="0" chnl="0" />
|
||||
<char id="66" x="53" y="212" width="42" height="54" xoffset="3" yoffset="14" xadvance="47" page="0" chnl="0" />
|
||||
<char id="67" x="37" y="99" width="46" height="56" xoffset="1" yoffset="13" xadvance="47" page="0" chnl="0" />
|
||||
<char id="68" x="95" y="212" width="42" height="54" xoffset="3" yoffset="14" xadvance="47" page="0" chnl="0" />
|
||||
<char id="69" x="137" y="212" width="38" height="54" xoffset="3" yoffset="14" xadvance="41" page="0" chnl="0" />
|
||||
<char id="70" x="475" y="156" width="36" height="54" xoffset="3" yoffset="14" xadvance="39" page="0" chnl="0" />
|
||||
<char id="71" x="83" y="99" width="45" height="56" xoffset="2" yoffset="13" xadvance="49" page="0" chnl="0" />
|
||||
<char id="72" x="175" y="212" width="45" height="54" xoffset="3" yoffset="14" xadvance="51" page="0" chnl="0" />
|
||||
<char id="73" x="220" y="212" width="14" height="54" xoffset="4" yoffset="14" xadvance="22" page="0" chnl="0" />
|
||||
<char id="74" x="264" y="156" width="37" height="55" xoffset="0" yoffset="14" xadvance="40" page="0" chnl="0" />
|
||||
<char id="75" x="234" y="212" width="45" height="54" xoffset="3" yoffset="14" xadvance="46" page="0" chnl="0" />
|
||||
<char id="76" x="279" y="212" width="36" height="54" xoffset="3" yoffset="14" xadvance="39" page="0" chnl="0" />
|
||||
<char id="77" x="315" y="212" width="58" height="54" xoffset="3" yoffset="14" xadvance="63" page="0" chnl="0" />
|
||||
<char id="78" x="373" y="212" width="45" height="54" xoffset="3" yoffset="14" xadvance="51" page="0" chnl="0" />
|
||||
<char id="79" x="128" y="99" width="47" height="56" xoffset="1" yoffset="13" xadvance="50" page="0" chnl="0" />
|
||||
<char id="80" x="418" y="212" width="43" height="54" xoffset="3" yoffset="14" xadvance="48" page="0" chnl="0" />
|
||||
<char id="81" x="319" y="0" width="47" height="65" xoffset="2" yoffset="13" xadvance="50" page="0" chnl="0" />
|
||||
<char id="82" x="461" y="212" width="43" height="54" xoffset="3" yoffset="14" xadvance="46" page="0" chnl="0" />
|
||||
<char id="83" x="175" y="99" width="42" height="56" xoffset="1" yoffset="13" xadvance="44" page="0" chnl="0" />
|
||||
<char id="84" x="0" y="266" width="45" height="54" xoffset="0" yoffset="14" xadvance="45" page="0" chnl="0" />
|
||||
<char id="85" x="301" y="156" width="42" height="55" xoffset="3" yoffset="14" xadvance="48" page="0" chnl="0" />
|
||||
<char id="86" x="45" y="266" width="51" height="54" xoffset="-2" yoffset="14" xadvance="48" page="0" chnl="0" />
|
||||
<char id="87" x="96" y="266" width="64" height="54" xoffset="-1" yoffset="14" xadvance="63" page="0" chnl="0" />
|
||||
<char id="88" x="160" y="266" width="48" height="54" xoffset="-1" yoffset="14" xadvance="46" page="0" chnl="0" />
|
||||
<char id="89" x="208" y="266" width="49" height="54" xoffset="-2" yoffset="14" xadvance="45" page="0" chnl="0" />
|
||||
<char id="90" x="257" y="266" width="42" height="54" xoffset="1" yoffset="14" xadvance="44" page="0" chnl="0" />
|
||||
<char id="91" x="115" y="0" width="18" height="75" xoffset="3" yoffset="5" xadvance="21" page="0" chnl="0" />
|
||||
<char id="92" x="403" y="0" width="37" height="58" xoffset="-2" yoffset="14" xadvance="31" page="0" chnl="0" />
|
||||
<char id="93" x="133" y="0" width="18" height="75" xoffset="0" yoffset="5" xadvance="21" page="0" chnl="0" />
|
||||
<char id="94" x="139" y="362" width="33" height="28" xoffset="0" yoffset="14" xadvance="32" page="0" chnl="0" />
|
||||
<char id="95" x="331" y="362" width="34" height="12" xoffset="-1" yoffset="65" xadvance="33" page="0" chnl="0" />
|
||||
<char id="96" x="285" y="362" width="23" height="13" xoffset="0" yoffset="12" xadvance="24" page="0" chnl="0" />
|
||||
<char id="97" x="0" y="320" width="37" height="42" xoffset="1" yoffset="27" xadvance="38" page="0" chnl="0" />
|
||||
<char id="98" x="440" y="0" width="37" height="57" xoffset="2" yoffset="12" xadvance="40" page="0" chnl="0" />
|
||||
<char id="99" x="37" y="320" width="36" height="42" xoffset="1" yoffset="27" xadvance="38" page="0" chnl="0" />
|
||||
<char id="100" x="0" y="99" width="37" height="57" xoffset="1" yoffset="12" xadvance="40" page="0" chnl="0" />
|
||||
<char id="101" x="73" y="320" width="38" height="42" xoffset="1" yoffset="27" xadvance="39" page="0" chnl="0" />
|
||||
<char id="102" x="477" y="0" width="28" height="57" xoffset="0" yoffset="11" xadvance="27" page="0" chnl="0" />
|
||||
<char id="103" x="217" y="99" width="38" height="56" xoffset="1" yoffset="27" xadvance="41" page="0" chnl="0" />
|
||||
<char id="104" x="255" y="99" width="36" height="56" xoffset="2" yoffset="12" xadvance="40" page="0" chnl="0" />
|
||||
<char id="105" x="291" y="99" width="15" height="56" xoffset="2" yoffset="12" xadvance="19" page="0" chnl="0" />
|
||||
<char id="106" x="197" y="0" width="23" height="71" xoffset="-5" yoffset="12" xadvance="20" page="0" chnl="0" />
|
||||
<char id="107" x="306" y="99" width="40" height="56" xoffset="2" yoffset="12" xadvance="39" page="0" chnl="0" />
|
||||
<char id="108" x="346" y="99" width="14" height="56" xoffset="3" yoffset="12" xadvance="20" page="0" chnl="0" />
|
||||
<char id="109" x="186" y="320" width="58" height="41" xoffset="2" yoffset="27" xadvance="63" page="0" chnl="0" />
|
||||
<char id="110" x="244" y="320" width="36" height="41" xoffset="2" yoffset="27" xadvance="40" page="0" chnl="0" />
|
||||
<char id="111" x="111" y="320" width="39" height="42" xoffset="1" yoffset="27" xadvance="41" page="0" chnl="0" />
|
||||
<char id="112" x="360" y="99" width="37" height="56" xoffset="2" yoffset="27" xadvance="40" page="0" chnl="0" />
|
||||
<char id="113" x="397" y="99" width="37" height="56" xoffset="1" yoffset="27" xadvance="40" page="0" chnl="0" />
|
||||
<char id="114" x="486" y="266" width="25" height="41" xoffset="2" yoffset="27" xadvance="27" page="0" chnl="0" />
|
||||
<char id="115" x="150" y="320" width="36" height="42" xoffset="0" yoffset="27" xadvance="37" page="0" chnl="0" />
|
||||
<char id="116" x="445" y="266" width="26" height="51" xoffset="0" yoffset="18" xadvance="25" page="0" chnl="0" />
|
||||
<char id="117" x="280" y="320" width="36" height="41" xoffset="2" yoffset="28" xadvance="40" page="0" chnl="0" />
|
||||
<char id="118" x="316" y="320" width="39" height="40" xoffset="-1" yoffset="28" xadvance="37" page="0" chnl="0" />
|
||||
<char id="119" x="355" y="320" width="54" height="40" xoffset="-1" yoffset="28" xadvance="52" page="0" chnl="0" />
|
||||
<char id="120" x="409" y="320" width="40" height="40" xoffset="-1" yoffset="28" xadvance="37" page="0" chnl="0" />
|
||||
<char id="121" x="343" y="156" width="40" height="55" xoffset="-1" yoffset="28" xadvance="37" page="0" chnl="0" />
|
||||
<char id="122" x="449" y="320" width="34" height="40" xoffset="1" yoffset="28" xadvance="36" page="0" chnl="0" />
|
||||
<char id="123" x="151" y="0" width="23" height="72" xoffset="0" yoffset="9" xadvance="23" page="0" chnl="0" />
|
||||
<char id="124" x="366" y="0" width="8" height="63" xoffset="5" yoffset="14" xadvance="18" page="0" chnl="0" />
|
||||
<char id="125" x="174" y="0" width="23" height="72" xoffset="0" yoffset="9" xadvance="23" page="0" chnl="0" />
|
||||
<char id="126" x="229" y="362" width="41" height="19" xoffset="2" yoffset="36" xadvance="45" page="0" chnl="0" />
|
||||
<char id="127" x="0" y="0" width="70" height="99" xoffset="2" yoffset="-11" xadvance="74" page="0" chnl="0" />
|
||||
</chars>
|
||||
<kernings count="385">
|
||||
<kerning first="84" second="74" amount="-8" />
|
||||
<kerning first="86" second="100" amount="-2" />
|
||||
<kerning first="114" second="113" amount="-1" />
|
||||
<kerning first="70" second="121" amount="-1" />
|
||||
<kerning first="34" second="99" amount="-2" />
|
||||
<kerning first="70" second="99" amount="-1" />
|
||||
<kerning first="69" second="99" amount="-1" />
|
||||
<kerning first="88" second="113" amount="-1" />
|
||||
<kerning first="84" second="46" amount="-9" />
|
||||
<kerning first="87" second="97" amount="-1" />
|
||||
<kerning first="90" second="117" amount="-1" />
|
||||
<kerning first="39" second="97" amount="-2" />
|
||||
<kerning first="69" second="111" amount="-1" />
|
||||
<kerning first="87" second="41" amount="1" />
|
||||
<kerning first="121" second="34" amount="1" />
|
||||
<kerning first="40" second="86" amount="1" />
|
||||
<kerning first="85" second="65" amount="-1" />
|
||||
<kerning first="72" second="65" amount="1" />
|
||||
<kerning first="114" second="102" amount="1" />
|
||||
<kerning first="89" second="42" amount="-2" />
|
||||
<kerning first="114" second="34" amount="1" />
|
||||
<kerning first="75" second="67" amount="-1" />
|
||||
<kerning first="89" second="85" amount="-3" />
|
||||
<kerning first="77" second="88" amount="1" />
|
||||
<kerning first="84" second="115" amount="-3" />
|
||||
<kerning first="84" second="71" amount="-1" />
|
||||
<kerning first="89" second="101" amount="-2" />
|
||||
<kerning first="89" second="45" amount="-5" />
|
||||
<kerning first="78" second="88" amount="1" />
|
||||
<kerning first="68" second="89" amount="-2" />
|
||||
<kerning first="122" second="103" amount="-1" />
|
||||
<kerning first="78" second="84" amount="-1" />
|
||||
<kerning first="86" second="103" amount="-2" />
|
||||
<kerning first="89" second="79" amount="-1" />
|
||||
<kerning first="75" second="111" amount="-1" />
|
||||
<kerning first="111" second="120" amount="-1" />
|
||||
<kerning first="87" second="44" amount="-5" />
|
||||
<kerning first="67" second="84" amount="-1" />
|
||||
<kerning first="84" second="111" amount="-7" />
|
||||
<kerning first="84" second="83" amount="-1" />
|
||||
<kerning first="102" second="113" amount="-1" />
|
||||
<kerning first="39" second="101" amount="-2" />
|
||||
<kerning first="80" second="88" amount="-2" />
|
||||
<kerning first="66" second="84" amount="-1" />
|
||||
<kerning first="65" second="87" amount="-1" />
|
||||
<kerning first="122" second="100" amount="-1" />
|
||||
<kerning first="75" second="118" amount="-1" />
|
||||
<kerning first="73" second="65" amount="1" />
|
||||
<kerning first="70" second="118" amount="-1" />
|
||||
<kerning first="73" second="88" amount="1" />
|
||||
<kerning first="82" second="89" amount="-2" />
|
||||
<kerning first="65" second="34" amount="-4" />
|
||||
<kerning first="120" second="99" amount="-1" />
|
||||
<kerning first="84" second="99" amount="-3" />
|
||||
<kerning first="84" second="65" amount="-4" />
|
||||
<kerning first="112" second="39" amount="-1" />
|
||||
<kerning first="76" second="39" amount="-10" />
|
||||
<kerning first="78" second="65" amount="1" />
|
||||
<kerning first="88" second="45" amount="-5" />
|
||||
<kerning first="34" second="111" amount="-3" />
|
||||
<kerning first="114" second="99" amount="-1" />
|
||||
<kerning first="86" second="125" amount="1" />
|
||||
<kerning first="70" second="111" amount="-1" />
|
||||
<kerning first="89" second="120" amount="-1" />
|
||||
<kerning first="90" second="119" amount="-1" />
|
||||
<kerning first="89" second="89" amount="1" />
|
||||
<kerning first="89" second="117" amount="-1" />
|
||||
<kerning first="75" second="117" amount="-1" />
|
||||
<kerning first="76" second="65" amount="1" />
|
||||
<kerning first="34" second="34" amount="-1" />
|
||||
<kerning first="89" second="110" amount="-1" />
|
||||
<kerning first="88" second="101" amount="-1" />
|
||||
<kerning first="107" second="103" amount="-1" />
|
||||
<kerning first="34" second="115" amount="-3" />
|
||||
<kerning first="80" second="44" amount="-14" />
|
||||
<kerning first="98" second="39" amount="-1" />
|
||||
<kerning first="70" second="65" amount="-7" />
|
||||
<kerning first="89" second="116" amount="-1" />
|
||||
<kerning first="70" second="46" amount="-10" />
|
||||
<kerning first="98" second="34" amount="-1" />
|
||||
<kerning first="70" second="84" amount="1" />
|
||||
<kerning first="114" second="100" amount="-1" />
|
||||
<kerning first="88" second="79" amount="-1" />
|
||||
<kerning first="39" second="113" amount="-2" />
|
||||
<kerning first="65" second="118" amount="-2" />
|
||||
<kerning first="114" second="103" amount="-1" />
|
||||
<kerning first="77" second="65" amount="1" />
|
||||
<kerning first="120" second="103" amount="-1" />
|
||||
<kerning first="65" second="110" amount="-2" />
|
||||
<kerning first="114" second="121" amount="1" />
|
||||
<kerning first="89" second="100" amount="-2" />
|
||||
<kerning first="80" second="65" amount="-6" />
|
||||
<kerning first="121" second="111" amount="-1" />
|
||||
<kerning first="34" second="101" amount="-2" />
|
||||
<kerning first="122" second="111" amount="-1" />
|
||||
<kerning first="114" second="118" amount="1" />
|
||||
<kerning first="102" second="41" amount="1" />
|
||||
<kerning first="122" second="113" amount="-1" />
|
||||
<kerning first="89" second="122" amount="-1" />
|
||||
<kerning first="68" second="88" amount="-1" />
|
||||
<kerning first="81" second="89" amount="-1" />
|
||||
<kerning first="114" second="111" amount="-1" />
|
||||
<kerning first="46" second="34" amount="-10" />
|
||||
<kerning first="84" second="112" amount="-3" />
|
||||
<kerning first="76" second="34" amount="-10" />
|
||||
<kerning first="39" second="115" amount="-3" />
|
||||
<kerning first="76" second="118" amount="-4" />
|
||||
<kerning first="86" second="99" amount="-2" />
|
||||
<kerning first="84" second="84" amount="1" />
|
||||
<kerning first="120" second="111" amount="-1" />
|
||||
<kerning first="65" second="79" amount="-1" />
|
||||
<kerning first="87" second="101" amount="-1" />
|
||||
<kerning first="67" second="125" amount="-1" />
|
||||
<kerning first="120" second="113" amount="-1" />
|
||||
<kerning first="118" second="46" amount="-6" />
|
||||
<kerning first="88" second="103" amount="-1" />
|
||||
<kerning first="111" second="122" amount="-1" />
|
||||
<kerning first="77" second="84" amount="-1" />
|
||||
<kerning first="114" second="46" amount="-6" />
|
||||
<kerning first="34" second="39" amount="-1" />
|
||||
<kerning first="65" second="121" amount="-2" />
|
||||
<kerning first="114" second="44" amount="-6" />
|
||||
<kerning first="69" second="84" amount="1" />
|
||||
<kerning first="89" second="46" amount="-8" />
|
||||
<kerning first="97" second="39" amount="-1" />
|
||||
<kerning first="34" second="100" amount="-2" />
|
||||
<kerning first="70" second="100" amount="-1" />
|
||||
<kerning first="84" second="120" amount="-3" />
|
||||
<kerning first="90" second="118" amount="-1" />
|
||||
<kerning first="70" second="114" amount="-1" />
|
||||
<kerning first="34" second="112" amount="-1" />
|
||||
<kerning first="89" second="86" amount="1" />
|
||||
<kerning first="86" second="113" amount="-2" />
|
||||
<kerning first="88" second="71" amount="-1" />
|
||||
<kerning first="122" second="99" amount="-1" />
|
||||
<kerning first="66" second="89" amount="-2" />
|
||||
<kerning first="102" second="103" amount="-1" />
|
||||
<kerning first="88" second="67" amount="-1" />
|
||||
<kerning first="39" second="110" amount="-1" />
|
||||
<kerning first="88" second="117" amount="-1" />
|
||||
<kerning first="89" second="118" amount="-1" />
|
||||
<kerning first="97" second="118" amount="-1" />
|
||||
<kerning first="87" second="65" amount="-2" />
|
||||
<kerning first="89" second="67" amount="-1" />
|
||||
<kerning first="89" second="74" amount="-3" />
|
||||
<kerning first="102" second="101" amount="-1" />
|
||||
<kerning first="86" second="111" amount="-2" />
|
||||
<kerning first="65" second="119" amount="-1" />
|
||||
<kerning first="84" second="100" amount="-3" />
|
||||
<kerning first="120" second="100" amount="-1" />
|
||||
<kerning first="104" second="34" amount="-3" />
|
||||
<kerning first="86" second="41" amount="1" />
|
||||
<kerning first="111" second="34" amount="-3" />
|
||||
<kerning first="40" second="89" amount="1" />
|
||||
<kerning first="121" second="39" amount="1" />
|
||||
<kerning first="70" second="74" amount="-7" />
|
||||
<kerning first="68" second="90" amount="-1" />
|
||||
<kerning first="98" second="120" amount="-1" />
|
||||
<kerning first="110" second="34" amount="-3" />
|
||||
<kerning first="119" second="46" amount="-4" />
|
||||
<kerning first="69" second="102" amount="-1" />
|
||||
<kerning first="118" second="44" amount="-6" />
|
||||
<kerning first="84" second="114" amount="-2" />
|
||||
<kerning first="86" second="97" amount="-2" />
|
||||
<kerning first="40" second="87" amount="1" />
|
||||
<kerning first="65" second="109" amount="-2" />
|
||||
<kerning first="68" second="86" amount="-1" />
|
||||
<kerning first="86" second="93" amount="1" />
|
||||
<kerning first="65" second="67" amount="-1" />
|
||||
<kerning first="97" second="34" amount="-1" />
|
||||
<kerning first="34" second="65" amount="-4" />
|
||||
<kerning first="84" second="118" amount="-3" />
|
||||
<kerning first="112" second="34" amount="-1" />
|
||||
<kerning first="76" second="84" amount="-7" />
|
||||
<kerning first="107" second="99" amount="-1" />
|
||||
<kerning first="123" second="85" amount="-1" />
|
||||
<kerning first="102" second="125" amount="1" />
|
||||
<kerning first="65" second="63" amount="-3" />
|
||||
<kerning first="89" second="44" amount="-8" />
|
||||
<kerning first="80" second="118" amount="1" />
|
||||
<kerning first="112" second="122" amount="-1" />
|
||||
<kerning first="79" second="65" amount="-1" />
|
||||
<kerning first="80" second="121" amount="1" />
|
||||
<kerning first="118" second="34" amount="1" />
|
||||
<kerning first="87" second="45" amount="-2" />
|
||||
<kerning first="69" second="100" amount="-1" />
|
||||
<kerning first="87" second="103" amount="-1" />
|
||||
<kerning first="112" second="120" amount="-1" />
|
||||
<kerning first="86" second="65" amount="-3" />
|
||||
<kerning first="65" second="81" amount="-1" />
|
||||
<kerning first="68" second="44" amount="-4" />
|
||||
<kerning first="86" second="45" amount="-6" />
|
||||
<kerning first="39" second="34" amount="-1" />
|
||||
<kerning first="72" second="88" amount="1" />
|
||||
<kerning first="68" second="46" amount="-4" />
|
||||
<kerning first="65" second="89" amount="-5" />
|
||||
<kerning first="69" second="118" amount="-1" />
|
||||
<kerning first="89" second="38" amount="-1" />
|
||||
<kerning first="88" second="99" amount="-1" />
|
||||
<kerning first="65" second="71" amount="-1" />
|
||||
<kerning first="91" second="74" amount="-1" />
|
||||
<kerning first="75" second="101" amount="-1" />
|
||||
<kerning first="39" second="112" amount="-1" />
|
||||
<kerning first="70" second="113" amount="-1" />
|
||||
<kerning first="119" second="44" amount="-4" />
|
||||
<kerning first="72" second="89" amount="-1" />
|
||||
<kerning first="90" second="103" amount="-1" />
|
||||
<kerning first="65" second="86" amount="-3" />
|
||||
<kerning first="84" second="119" amount="-2" />
|
||||
<kerning first="34" second="110" amount="-1" />
|
||||
<kerning first="39" second="109" amount="-1" />
|
||||
<kerning first="75" second="81" amount="-1" />
|
||||
<kerning first="89" second="115" amount="-2" />
|
||||
<kerning first="89" second="87" amount="1" />
|
||||
<kerning first="114" second="101" amount="-1" />
|
||||
<kerning first="116" second="111" amount="-1" />
|
||||
<kerning first="90" second="100" amount="-1" />
|
||||
<kerning first="79" second="89" amount="-2" />
|
||||
<kerning first="84" second="122" amount="-2" />
|
||||
<kerning first="68" second="84" amount="-3" />
|
||||
<kerning first="76" second="86" amount="-7" />
|
||||
<kerning first="74" second="65" amount="-1" />
|
||||
<kerning first="107" second="101" amount="-1" />
|
||||
<kerning first="80" second="46" amount="-14" />
|
||||
<kerning first="89" second="93" amount="1" />
|
||||
<kerning first="89" second="65" amount="-5" />
|
||||
<kerning first="87" second="117" amount="-1" />
|
||||
<kerning first="89" second="81" amount="-1" />
|
||||
<kerning first="39" second="103" amount="-2" />
|
||||
<kerning first="86" second="101" amount="-2" />
|
||||
<kerning first="86" second="117" amount="-1" />
|
||||
<kerning first="84" second="113" amount="-3" />
|
||||
<kerning first="87" second="46" amount="-5" />
|
||||
<kerning first="47" second="47" amount="-9" />
|
||||
<kerning first="75" second="103" amount="-1" />
|
||||
<kerning first="89" second="84" amount="1" />
|
||||
<kerning first="84" second="110" amount="-3" />
|
||||
<kerning first="39" second="99" amount="-2" />
|
||||
<kerning first="88" second="121" amount="-1" />
|
||||
<kerning first="65" second="39" amount="-4" />
|
||||
<kerning first="110" second="39" amount="-3" />
|
||||
<kerning first="88" second="118" amount="-1" />
|
||||
<kerning first="86" second="114" amount="-1" />
|
||||
<kerning first="80" second="74" amount="-6" />
|
||||
<kerning first="84" second="97" amount="-6" />
|
||||
<kerning first="82" second="84" amount="-2" />
|
||||
<kerning first="91" second="85" amount="-1" />
|
||||
<kerning first="102" second="99" amount="-1" />
|
||||
<kerning first="66" second="86" amount="-1" />
|
||||
<kerning first="120" second="101" amount="-1" />
|
||||
<kerning first="102" second="93" amount="1" />
|
||||
<kerning first="75" second="100" amount="-1" />
|
||||
<kerning first="84" second="79" amount="-1" />
|
||||
<kerning first="44" second="39" amount="-10" />
|
||||
<kerning first="111" second="121" amount="-1" />
|
||||
<kerning first="75" second="121" amount="-1" />
|
||||
<kerning first="81" second="87" amount="-1" />
|
||||
<kerning first="107" second="113" amount="-1" />
|
||||
<kerning first="90" second="79" amount="-1" />
|
||||
<kerning first="89" second="114" amount="-1" />
|
||||
<kerning first="122" second="101" amount="-1" />
|
||||
<kerning first="111" second="118" amount="-1" />
|
||||
<kerning first="82" second="86" amount="-1" />
|
||||
<kerning first="70" second="101" amount="-1" />
|
||||
<kerning first="114" second="97" amount="-1" />
|
||||
<kerning first="70" second="97" amount="-1" />
|
||||
<kerning first="34" second="97" amount="-2" />
|
||||
<kerning first="89" second="102" amount="-1" />
|
||||
<kerning first="78" second="89" amount="-1" />
|
||||
<kerning first="70" second="44" amount="-10" />
|
||||
<kerning first="104" second="39" amount="-3" />
|
||||
<kerning first="84" second="45" amount="-10" />
|
||||
<kerning first="89" second="121" amount="-1" />
|
||||
<kerning first="109" second="34" amount="-3" />
|
||||
<kerning first="84" second="86" amount="1" />
|
||||
<kerning first="87" second="99" amount="-1" />
|
||||
<kerning first="32" second="84" amount="-2" />
|
||||
<kerning first="98" second="122" amount="-1" />
|
||||
<kerning first="89" second="112" amount="-1" />
|
||||
<kerning first="89" second="103" amount="-2" />
|
||||
<kerning first="65" second="116" amount="-1" />
|
||||
<kerning first="88" second="81" amount="-1" />
|
||||
<kerning first="102" second="34" amount="1" />
|
||||
<kerning first="109" second="39" amount="-3" />
|
||||
<kerning first="81" second="84" amount="-1" />
|
||||
<kerning first="121" second="97" amount="-1" />
|
||||
<kerning first="89" second="99" amount="-2" />
|
||||
<kerning first="89" second="125" amount="1" />
|
||||
<kerning first="81" second="86" amount="-1" />
|
||||
<kerning first="114" second="116" amount="2" />
|
||||
<kerning first="114" second="119" amount="1" />
|
||||
<kerning first="84" second="44" amount="-9" />
|
||||
<kerning first="102" second="39" amount="1" />
|
||||
<kerning first="44" second="34" amount="-10" />
|
||||
<kerning first="34" second="109" amount="-1" />
|
||||
<kerning first="84" second="101" amount="-3" />
|
||||
<kerning first="75" second="119" amount="-2" />
|
||||
<kerning first="84" second="81" amount="-1" />
|
||||
<kerning first="76" second="121" amount="-4" />
|
||||
<kerning first="69" second="101" amount="-1" />
|
||||
<kerning first="80" second="90" amount="-1" />
|
||||
<kerning first="89" second="97" amount="-2" />
|
||||
<kerning first="89" second="109" amount="-1" />
|
||||
<kerning first="90" second="99" amount="-1" />
|
||||
<kerning first="79" second="88" amount="-1" />
|
||||
<kerning first="70" second="103" amount="-1" />
|
||||
<kerning first="34" second="103" amount="-2" />
|
||||
<kerning first="84" second="67" amount="-1" />
|
||||
<kerning first="76" second="79" amount="-2" />
|
||||
<kerning first="34" second="113" amount="-2" />
|
||||
<kerning first="89" second="41" amount="1" />
|
||||
<kerning first="75" second="71" amount="-1" />
|
||||
<kerning first="76" second="87" amount="-3" />
|
||||
<kerning first="77" second="89" amount="-1" />
|
||||
<kerning first="90" second="113" amount="-1" />
|
||||
<kerning first="118" second="111" amount="-1" />
|
||||
<kerning first="118" second="97" amount="-1" />
|
||||
<kerning first="88" second="100" amount="-1" />
|
||||
<kerning first="89" second="111" amount="-2" />
|
||||
<kerning first="90" second="121" amount="-1" />
|
||||
<kerning first="89" second="113" amount="-2" />
|
||||
<kerning first="84" second="87" amount="1" />
|
||||
<kerning first="39" second="111" amount="-3" />
|
||||
<kerning first="39" second="100" amount="-2" />
|
||||
<kerning first="75" second="113" amount="-1" />
|
||||
<kerning first="88" second="111" amount="-1" />
|
||||
<kerning first="87" second="111" amount="-1" />
|
||||
<kerning first="89" second="83" amount="-1" />
|
||||
<kerning first="84" second="89" amount="1" />
|
||||
<kerning first="84" second="103" amount="-3" />
|
||||
<kerning first="70" second="117" amount="-1" />
|
||||
<kerning first="67" second="41" amount="-1" />
|
||||
<kerning first="89" second="71" amount="-1" />
|
||||
<kerning first="121" second="44" amount="-6" />
|
||||
<kerning first="97" second="121" amount="-1" />
|
||||
<kerning first="87" second="113" amount="-1" />
|
||||
<kerning first="73" second="84" amount="-1" />
|
||||
<kerning first="121" second="46" amount="-6" />
|
||||
<kerning first="75" second="99" amount="-1" />
|
||||
<kerning first="65" second="112" amount="-2" />
|
||||
<kerning first="65" second="85" amount="-1" />
|
||||
<kerning first="76" second="67" amount="-2" />
|
||||
<kerning first="76" second="81" amount="-2" />
|
||||
<kerning first="102" second="100" amount="-1" />
|
||||
<kerning first="75" second="79" amount="-1" />
|
||||
<kerning first="39" second="65" amount="-4" />
|
||||
<kerning first="65" second="84" amount="-4" />
|
||||
<kerning first="90" second="101" amount="-1" />
|
||||
<kerning first="84" second="121" amount="-3" />
|
||||
<kerning first="114" second="39" amount="1" />
|
||||
<kerning first="84" second="109" amount="-3" />
|
||||
<kerning first="123" second="74" amount="-1" />
|
||||
<kerning first="76" second="119" amount="-2" />
|
||||
<kerning first="84" second="117" amount="-2" />
|
||||
<kerning first="76" second="85" amount="-1" />
|
||||
<kerning first="76" second="71" amount="-2" />
|
||||
<kerning first="79" second="90" amount="-1" />
|
||||
<kerning first="107" second="100" amount="-1" />
|
||||
<kerning first="90" second="111" amount="-1" />
|
||||
<kerning first="79" second="44" amount="-4" />
|
||||
<kerning first="75" second="45" amount="-6" />
|
||||
<kerning first="79" second="86" amount="-1" />
|
||||
<kerning first="79" second="46" amount="-4" />
|
||||
<kerning first="76" second="89" amount="-10" />
|
||||
<kerning first="68" second="65" amount="-1" />
|
||||
<kerning first="79" second="84" amount="-3" />
|
||||
<kerning first="87" second="100" amount="-1" />
|
||||
<kerning first="84" second="32" amount="-2" />
|
||||
<kerning first="90" second="67" amount="-1" />
|
||||
<kerning first="69" second="103" amount="-1" />
|
||||
<kerning first="90" second="71" amount="-1" />
|
||||
<kerning first="86" second="44" amount="-8" />
|
||||
<kerning first="69" second="121" amount="-1" />
|
||||
<kerning first="87" second="114" amount="-1" />
|
||||
<kerning first="118" second="39" amount="1" />
|
||||
<kerning first="46" second="39" amount="-10" />
|
||||
<kerning first="72" second="84" amount="-1" />
|
||||
<kerning first="86" second="46" amount="-8" />
|
||||
<kerning first="69" second="113" amount="-1" />
|
||||
<kerning first="69" second="119" amount="-1" />
|
||||
<kerning first="73" second="89" amount="-1" />
|
||||
<kerning first="39" second="39" amount="-1" />
|
||||
<kerning first="69" second="117" amount="-1" />
|
||||
<kerning first="111" second="39" amount="-3" />
|
||||
<kerning first="90" second="81" amount="-1" />
|
||||
</kernings>
|
||||
</font>
|
||||
|
||||
@@ -1,103 +1,110 @@
|
||||
info face="Roboto Mono" size=72 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2
|
||||
common lineHeight=96 base=76 scaleW=512 scaleH=512 pages=1 packed=0
|
||||
page id=0 file="RobotoMono72White.png"
|
||||
chars count=98
|
||||
char id=0 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=75 xadvance=0 page=0 chnl=0
|
||||
char id=10 x=0 y=0 width=45 height=99 xoffset=-1 yoffset=-2 xadvance=43 page=0 chnl=0
|
||||
char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=75 xadvance=43 page=0 chnl=0
|
||||
char id=33 x=498 y=99 width=10 height=55 xoffset=16 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=34 x=434 y=319 width=20 height=19 xoffset=11 yoffset=21 xadvance=43 page=0 chnl=0
|
||||
char id=35 x=175 y=265 width=41 height=54 xoffset=1 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=36 x=200 y=0 width=35 height=69 xoffset=5 yoffset=15 xadvance=43 page=0 chnl=0
|
||||
char id=37 x=0 y=155 width=42 height=56 xoffset=1 yoffset=22 xadvance=44 page=0 chnl=0
|
||||
char id=38 x=42 y=155 width=41 height=56 xoffset=3 yoffset=22 xadvance=44 page=0 chnl=0
|
||||
char id=39 x=502 y=211 width=7 height=19 xoffset=16 yoffset=21 xadvance=43 page=0 chnl=0
|
||||
char id=40 x=45 y=0 width=21 height=78 xoffset=12 yoffset=16 xadvance=44 page=0 chnl=0
|
||||
char id=41 x=66 y=0 width=22 height=78 xoffset=9 yoffset=16 xadvance=43 page=0 chnl=0
|
||||
char id=42 x=256 y=319 width=37 height=37 xoffset=4 yoffset=32 xadvance=43 page=0 chnl=0
|
||||
char id=43 x=219 y=319 width=37 height=40 xoffset=3 yoffset=32 xadvance=43 page=0 chnl=0
|
||||
char id=44 x=421 y=319 width=13 height=22 xoffset=11 yoffset=67 xadvance=43 page=0 chnl=0
|
||||
char id=45 x=17 y=360 width=29 height=8 xoffset=7 yoffset=49 xadvance=44 page=0 chnl=0
|
||||
char id=46 x=496 y=319 width=12 height=13 xoffset=16 yoffset=65 xadvance=43 page=0 chnl=0
|
||||
char id=47 x=319 y=0 width=31 height=58 xoffset=7 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=48 x=431 y=99 width=35 height=56 xoffset=4 yoffset=22 xadvance=43 page=0 chnl=0
|
||||
char id=49 x=36 y=265 width=23 height=54 xoffset=6 yoffset=23 xadvance=44 page=0 chnl=0
|
||||
char id=50 x=189 y=155 width=37 height=55 xoffset=2 yoffset=22 xadvance=44 page=0 chnl=0
|
||||
char id=51 x=361 y=99 width=35 height=56 xoffset=2 yoffset=22 xadvance=43 page=0 chnl=0
|
||||
char id=52 x=59 y=265 width=39 height=54 xoffset=2 yoffset=23 xadvance=44 page=0 chnl=0
|
||||
char id=53 x=226 y=155 width=35 height=55 xoffset=5 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=54 x=261 y=155 width=35 height=55 xoffset=4 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=55 x=98 y=265 width=37 height=54 xoffset=3 yoffset=23 xadvance=44 page=0 chnl=0
|
||||
char id=56 x=396 y=99 width=35 height=56 xoffset=5 yoffset=22 xadvance=43 page=0 chnl=0
|
||||
char id=57 x=296 y=155 width=34 height=55 xoffset=4 yoffset=22 xadvance=43 page=0 chnl=0
|
||||
char id=58 x=490 y=211 width=12 height=43 xoffset=18 yoffset=35 xadvance=43 page=0 chnl=0
|
||||
char id=59 x=486 y=0 width=14 height=55 xoffset=16 yoffset=35 xadvance=43 page=0 chnl=0
|
||||
char id=60 x=293 y=319 width=32 height=35 xoffset=5 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=61 x=388 y=319 width=33 height=23 xoffset=5 yoffset=41 xadvance=43 page=0 chnl=0
|
||||
char id=62 x=325 y=319 width=33 height=35 xoffset=5 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=63 x=466 y=99 width=32 height=56 xoffset=6 yoffset=22 xadvance=43 page=0 chnl=0
|
||||
char id=64 x=135 y=265 width=40 height=54 xoffset=1 yoffset=23 xadvance=42 page=0 chnl=0
|
||||
char id=65 x=330 y=155 width=42 height=54 xoffset=1 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=66 x=372 y=155 width=35 height=54 xoffset=5 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=67 x=448 y=0 width=38 height=56 xoffset=3 yoffset=22 xadvance=43 page=0 chnl=0
|
||||
char id=68 x=407 y=155 width=37 height=54 xoffset=4 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=69 x=444 y=155 width=34 height=54 xoffset=5 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=70 x=0 y=211 width=34 height=54 xoffset=6 yoffset=23 xadvance=44 page=0 chnl=0
|
||||
char id=71 x=0 y=99 width=38 height=56 xoffset=3 yoffset=22 xadvance=44 page=0 chnl=0
|
||||
char id=72 x=34 y=211 width=36 height=54 xoffset=4 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=73 x=478 y=155 width=33 height=54 xoffset=5 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=74 x=83 y=155 width=36 height=55 xoffset=2 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=75 x=70 y=211 width=38 height=54 xoffset=5 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=76 x=108 y=211 width=34 height=54 xoffset=6 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=77 x=142 y=211 width=36 height=54 xoffset=4 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=78 x=178 y=211 width=35 height=54 xoffset=4 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=79 x=38 y=99 width=38 height=56 xoffset=3 yoffset=22 xadvance=43 page=0 chnl=0
|
||||
char id=80 x=213 y=211 width=36 height=54 xoffset=6 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=81 x=242 y=0 width=40 height=64 xoffset=2 yoffset=22 xadvance=43 page=0 chnl=0
|
||||
char id=82 x=249 y=211 width=36 height=54 xoffset=5 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=83 x=76 y=99 width=38 height=56 xoffset=3 yoffset=22 xadvance=44 page=0 chnl=0
|
||||
char id=84 x=285 y=211 width=40 height=54 xoffset=2 yoffset=23 xadvance=44 page=0 chnl=0
|
||||
char id=85 x=119 y=155 width=36 height=55 xoffset=4 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=86 x=325 y=211 width=41 height=54 xoffset=1 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=87 x=366 y=211 width=42 height=54 xoffset=1 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=88 x=408 y=211 width=41 height=54 xoffset=2 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=89 x=449 y=211 width=41 height=54 xoffset=1 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=90 x=0 y=265 width=36 height=54 xoffset=3 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=91 x=88 y=0 width=16 height=72 xoffset=14 yoffset=16 xadvance=43 page=0 chnl=0
|
||||
char id=92 x=350 y=0 width=30 height=58 xoffset=7 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=93 x=104 y=0 width=17 height=72 xoffset=13 yoffset=16 xadvance=44 page=0 chnl=0
|
||||
char id=94 x=358 y=319 width=30 height=30 xoffset=7 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=95 x=46 y=360 width=34 height=8 xoffset=4 yoffset=74 xadvance=43 page=0 chnl=0
|
||||
char id=96 x=0 y=360 width=17 height=12 xoffset=13 yoffset=22 xadvance=43 page=0 chnl=0
|
||||
char id=97 x=251 y=265 width=35 height=42 xoffset=4 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=98 x=380 y=0 width=34 height=57 xoffset=5 yoffset=21 xadvance=43 page=0 chnl=0
|
||||
char id=99 x=286 y=265 width=35 height=42 xoffset=4 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=100 x=414 y=0 width=34 height=57 xoffset=4 yoffset=21 xadvance=43 page=0 chnl=0
|
||||
char id=101 x=321 y=265 width=36 height=42 xoffset=4 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=102 x=282 y=0 width=37 height=58 xoffset=4 yoffset=19 xadvance=43 page=0 chnl=0
|
||||
char id=103 x=114 y=99 width=34 height=56 xoffset=4 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=104 x=148 y=99 width=34 height=56 xoffset=5 yoffset=21 xadvance=43 page=0 chnl=0
|
||||
char id=105 x=155 y=155 width=34 height=55 xoffset=6 yoffset=22 xadvance=43 page=0 chnl=0
|
||||
char id=106 x=121 y=0 width=26 height=71 xoffset=6 yoffset=22 xadvance=44 page=0 chnl=0
|
||||
char id=107 x=182 y=99 width=36 height=56 xoffset=5 yoffset=21 xadvance=43 page=0 chnl=0
|
||||
char id=108 x=218 y=99 width=34 height=56 xoffset=6 yoffset=21 xadvance=43 page=0 chnl=0
|
||||
char id=109 x=428 y=265 width=39 height=41 xoffset=2 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=110 x=467 y=265 width=34 height=41 xoffset=5 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=111 x=357 y=265 width=37 height=42 xoffset=3 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=112 x=252 y=99 width=34 height=56 xoffset=5 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=113 x=286 y=99 width=34 height=56 xoffset=4 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=114 x=0 y=319 width=29 height=41 xoffset=11 yoffset=36 xadvance=44 page=0 chnl=0
|
||||
char id=115 x=394 y=265 width=34 height=42 xoffset=5 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=116 x=216 y=265 width=35 height=51 xoffset=4 yoffset=27 xadvance=43 page=0 chnl=0
|
||||
char id=117 x=29 y=319 width=33 height=41 xoffset=5 yoffset=37 xadvance=43 page=0 chnl=0
|
||||
char id=118 x=62 y=319 width=39 height=40 xoffset=2 yoffset=37 xadvance=43 page=0 chnl=0
|
||||
char id=119 x=101 y=319 width=43 height=40 xoffset=0 yoffset=37 xadvance=43 page=0 chnl=0
|
||||
char id=120 x=144 y=319 width=40 height=40 xoffset=2 yoffset=37 xadvance=43 page=0 chnl=0
|
||||
char id=121 x=320 y=99 width=41 height=56 xoffset=1 yoffset=37 xadvance=43 page=0 chnl=0
|
||||
char id=122 x=184 y=319 width=35 height=40 xoffset=5 yoffset=37 xadvance=44 page=0 chnl=0
|
||||
char id=123 x=147 y=0 width=26 height=71 xoffset=10 yoffset=19 xadvance=43 page=0 chnl=0
|
||||
char id=124 x=235 y=0 width=7 height=68 xoffset=18 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=125 x=173 y=0 width=27 height=71 xoffset=10 yoffset=19 xadvance=44 page=0 chnl=0
|
||||
char id=126 x=454 y=319 width=42 height=16 xoffset=1 yoffset=47 xadvance=44 page=0 chnl=0
|
||||
char id=127 x=0 y=0 width=45 height=99 xoffset=-1 yoffset=-2 xadvance=43 page=0 chnl=0
|
||||
kernings count=0
|
||||
<?xml version="1.0"?>
|
||||
<font>
|
||||
<info face="Roboto Mono" size="72" bold="0" italic="0" charset="" unicode="0" stretchH="100" smooth="1" aa="1" padding="1,1,1,1" spacing="-2,-2" outline="0" />
|
||||
<common lineHeight="96" base="76" scaleW="512" scaleH="512" pages="1" packed="0" alphaChnl="0" redChnl="0" greenChnl="0" blueChnl="0" />
|
||||
<pages>
|
||||
<page id="0" file="RobotoMono72White.png" /> </pages>
|
||||
<chars count="98">
|
||||
<char id="0" x="0" y="0" width="0" height="0" xoffset="-1" yoffset="75" xadvance="0" page="0" chnl="0" />
|
||||
<char id="10" x="0" y="0" width="45" height="99" xoffset="-1" yoffset="-2" xadvance="43" page="0" chnl="0" />
|
||||
<char id="32" x="0" y="0" width="0" height="0" xoffset="-1" yoffset="75" xadvance="43" page="0" chnl="0" />
|
||||
<char id="33" x="498" y="99" width="10" height="55" xoffset="16" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="34" x="434" y="319" width="20" height="19" xoffset="11" yoffset="21" xadvance="43" page="0" chnl="0" />
|
||||
<char id="35" x="175" y="265" width="41" height="54" xoffset="1" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="36" x="200" y="0" width="35" height="69" xoffset="5" yoffset="15" xadvance="43" page="0" chnl="0" />
|
||||
<char id="37" x="0" y="155" width="42" height="56" xoffset="1" yoffset="22" xadvance="44" page="0" chnl="0" />
|
||||
<char id="38" x="42" y="155" width="41" height="56" xoffset="3" yoffset="22" xadvance="44" page="0" chnl="0" />
|
||||
<char id="39" x="502" y="211" width="7" height="19" xoffset="16" yoffset="21" xadvance="43" page="0" chnl="0" />
|
||||
<char id="40" x="45" y="0" width="21" height="78" xoffset="12" yoffset="16" xadvance="44" page="0" chnl="0" />
|
||||
<char id="41" x="66" y="0" width="22" height="78" xoffset="9" yoffset="16" xadvance="43" page="0" chnl="0" />
|
||||
<char id="42" x="256" y="319" width="37" height="37" xoffset="4" yoffset="32" xadvance="43" page="0" chnl="0" />
|
||||
<char id="43" x="219" y="319" width="37" height="40" xoffset="3" yoffset="32" xadvance="43" page="0" chnl="0" />
|
||||
<char id="44" x="421" y="319" width="13" height="22" xoffset="11" yoffset="67" xadvance="43" page="0" chnl="0" />
|
||||
<char id="45" x="17" y="360" width="29" height="8" xoffset="7" yoffset="49" xadvance="44" page="0" chnl="0" />
|
||||
<char id="46" x="496" y="319" width="12" height="13" xoffset="16" yoffset="65" xadvance="43" page="0" chnl="0" />
|
||||
<char id="47" x="319" y="0" width="31" height="58" xoffset="7" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="48" x="431" y="99" width="35" height="56" xoffset="4" yoffset="22" xadvance="43" page="0" chnl="0" />
|
||||
<char id="49" x="36" y="265" width="23" height="54" xoffset="6" yoffset="23" xadvance="44" page="0" chnl="0" />
|
||||
<char id="50" x="189" y="155" width="37" height="55" xoffset="2" yoffset="22" xadvance="44" page="0" chnl="0" />
|
||||
<char id="51" x="361" y="99" width="35" height="56" xoffset="2" yoffset="22" xadvance="43" page="0" chnl="0" />
|
||||
<char id="52" x="59" y="265" width="39" height="54" xoffset="2" yoffset="23" xadvance="44" page="0" chnl="0" />
|
||||
<char id="53" x="226" y="155" width="35" height="55" xoffset="5" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="54" x="261" y="155" width="35" height="55" xoffset="4" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="55" x="98" y="265" width="37" height="54" xoffset="3" yoffset="23" xadvance="44" page="0" chnl="0" />
|
||||
<char id="56" x="396" y="99" width="35" height="56" xoffset="5" yoffset="22" xadvance="43" page="0" chnl="0" />
|
||||
<char id="57" x="296" y="155" width="34" height="55" xoffset="4" yoffset="22" xadvance="43" page="0" chnl="0" />
|
||||
<char id="58" x="490" y="211" width="12" height="43" xoffset="18" yoffset="35" xadvance="43" page="0" chnl="0" />
|
||||
<char id="59" x="486" y="0" width="14" height="55" xoffset="16" yoffset="35" xadvance="43" page="0" chnl="0" />
|
||||
<char id="60" x="293" y="319" width="32" height="35" xoffset="5" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="61" x="388" y="319" width="33" height="23" xoffset="5" yoffset="41" xadvance="43" page="0" chnl="0" />
|
||||
<char id="62" x="325" y="319" width="33" height="35" xoffset="5" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="63" x="466" y="99" width="32" height="56" xoffset="6" yoffset="22" xadvance="43" page="0" chnl="0" />
|
||||
<char id="64" x="135" y="265" width="40" height="54" xoffset="1" yoffset="23" xadvance="42" page="0" chnl="0" />
|
||||
<char id="65" x="330" y="155" width="42" height="54" xoffset="1" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="66" x="372" y="155" width="35" height="54" xoffset="5" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="67" x="448" y="0" width="38" height="56" xoffset="3" yoffset="22" xadvance="43" page="0" chnl="0" />
|
||||
<char id="68" x="407" y="155" width="37" height="54" xoffset="4" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="69" x="444" y="155" width="34" height="54" xoffset="5" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="70" x="0" y="211" width="34" height="54" xoffset="6" yoffset="23" xadvance="44" page="0" chnl="0" />
|
||||
<char id="71" x="0" y="99" width="38" height="56" xoffset="3" yoffset="22" xadvance="44" page="0" chnl="0" />
|
||||
<char id="72" x="34" y="211" width="36" height="54" xoffset="4" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="73" x="478" y="155" width="33" height="54" xoffset="5" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="74" x="83" y="155" width="36" height="55" xoffset="2" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="75" x="70" y="211" width="38" height="54" xoffset="5" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="76" x="108" y="211" width="34" height="54" xoffset="6" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="77" x="142" y="211" width="36" height="54" xoffset="4" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="78" x="178" y="211" width="35" height="54" xoffset="4" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="79" x="38" y="99" width="38" height="56" xoffset="3" yoffset="22" xadvance="43" page="0" chnl="0" />
|
||||
<char id="80" x="213" y="211" width="36" height="54" xoffset="6" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="81" x="242" y="0" width="40" height="64" xoffset="2" yoffset="22" xadvance="43" page="0" chnl="0" />
|
||||
<char id="82" x="249" y="211" width="36" height="54" xoffset="5" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="83" x="76" y="99" width="38" height="56" xoffset="3" yoffset="22" xadvance="44" page="0" chnl="0" />
|
||||
<char id="84" x="285" y="211" width="40" height="54" xoffset="2" yoffset="23" xadvance="44" page="0" chnl="0" />
|
||||
<char id="85" x="119" y="155" width="36" height="55" xoffset="4" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="86" x="325" y="211" width="41" height="54" xoffset="1" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="87" x="366" y="211" width="42" height="54" xoffset="1" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="88" x="408" y="211" width="41" height="54" xoffset="2" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="89" x="449" y="211" width="41" height="54" xoffset="1" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="90" x="0" y="265" width="36" height="54" xoffset="3" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="91" x="88" y="0" width="16" height="72" xoffset="14" yoffset="16" xadvance="43" page="0" chnl="0" />
|
||||
<char id="92" x="350" y="0" width="30" height="58" xoffset="7" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="93" x="104" y="0" width="17" height="72" xoffset="13" yoffset="16" xadvance="44" page="0" chnl="0" />
|
||||
<char id="94" x="358" y="319" width="30" height="30" xoffset="7" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="95" x="46" y="360" width="34" height="8" xoffset="4" yoffset="74" xadvance="43" page="0" chnl="0" />
|
||||
<char id="96" x="0" y="360" width="17" height="12" xoffset="13" yoffset="22" xadvance="43" page="0" chnl="0" />
|
||||
<char id="97" x="251" y="265" width="35" height="42" xoffset="4" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="98" x="380" y="0" width="34" height="57" xoffset="5" yoffset="21" xadvance="43" page="0" chnl="0" />
|
||||
<char id="99" x="286" y="265" width="35" height="42" xoffset="4" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="100" x="414" y="0" width="34" height="57" xoffset="4" yoffset="21" xadvance="43" page="0" chnl="0" />
|
||||
<char id="101" x="321" y="265" width="36" height="42" xoffset="4" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="102" x="282" y="0" width="37" height="58" xoffset="4" yoffset="19" xadvance="43" page="0" chnl="0" />
|
||||
<char id="103" x="114" y="99" width="34" height="56" xoffset="4" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="104" x="148" y="99" width="34" height="56" xoffset="5" yoffset="21" xadvance="43" page="0" chnl="0" />
|
||||
<char id="105" x="155" y="155" width="34" height="55" xoffset="6" yoffset="22" xadvance="43" page="0" chnl="0" />
|
||||
<char id="106" x="121" y="0" width="26" height="71" xoffset="6" yoffset="22" xadvance="44" page="0" chnl="0" />
|
||||
<char id="107" x="182" y="99" width="36" height="56" xoffset="5" yoffset="21" xadvance="43" page="0" chnl="0" />
|
||||
<char id="108" x="218" y="99" width="34" height="56" xoffset="6" yoffset="21" xadvance="43" page="0" chnl="0" />
|
||||
<char id="109" x="428" y="265" width="39" height="41" xoffset="2" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="110" x="467" y="265" width="34" height="41" xoffset="5" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="111" x="357" y="265" width="37" height="42" xoffset="3" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="112" x="252" y="99" width="34" height="56" xoffset="5" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="113" x="286" y="99" width="34" height="56" xoffset="4" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="114" x="0" y="319" width="29" height="41" xoffset="11" yoffset="36" xadvance="44" page="0" chnl="0" />
|
||||
<char id="115" x="394" y="265" width="34" height="42" xoffset="5" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="116" x="216" y="265" width="35" height="51" xoffset="4" yoffset="27" xadvance="43" page="0" chnl="0" />
|
||||
<char id="117" x="29" y="319" width="33" height="41" xoffset="5" yoffset="37" xadvance="43" page="0" chnl="0" />
|
||||
<char id="118" x="62" y="319" width="39" height="40" xoffset="2" yoffset="37" xadvance="43" page="0" chnl="0" />
|
||||
<char id="119" x="101" y="319" width="43" height="40" xoffset="0" yoffset="37" xadvance="43" page="0" chnl="0" />
|
||||
<char id="120" x="144" y="319" width="40" height="40" xoffset="2" yoffset="37" xadvance="43" page="0" chnl="0" />
|
||||
<char id="121" x="320" y="99" width="41" height="56" xoffset="1" yoffset="37" xadvance="43" page="0" chnl="0" />
|
||||
<char id="122" x="184" y="319" width="35" height="40" xoffset="5" yoffset="37" xadvance="44" page="0" chnl="0" />
|
||||
<char id="123" x="147" y="0" width="26" height="71" xoffset="10" yoffset="19" xadvance="43" page="0" chnl="0" />
|
||||
<char id="124" x="235" y="0" width="7" height="68" xoffset="18" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="125" x="173" y="0" width="27" height="71" xoffset="10" yoffset="19" xadvance="44" page="0" chnl="0" />
|
||||
<char id="126" x="454" y="319" width="42" height="16" xoffset="1" yoffset="47" xadvance="44" page="0" chnl="0" />
|
||||
<char id="127" x="0" y="0" width="45" height="99" xoffset="-1" yoffset="-2" xadvance="43" page="0" chnl="0" />
|
||||
</chars>
|
||||
<kernings count="1">
|
||||
<kerning first="0" second="0" amount="0" />
|
||||
</kernings>
|
||||
</font>
|
||||
|
||||
@@ -1,492 +1,498 @@
|
||||
info face="Roboto Slab Regular" size=72 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2
|
||||
common lineHeight=96 base=76 scaleW=512 scaleH=512 pages=1 packed=0
|
||||
page id=0 file="RobotoSlab72White.png"
|
||||
chars count=98
|
||||
char id=0 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=75 xadvance=0 page=0 chnl=0
|
||||
char id=10 x=0 y=0 width=70 height=98 xoffset=0 yoffset=-1 xadvance=70 page=0 chnl=0
|
||||
char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=75 xadvance=18 page=0 chnl=0
|
||||
char id=33 x=497 y=156 width=9 height=54 xoffset=4 yoffset=23 xadvance=17 page=0 chnl=0
|
||||
char id=34 x=191 y=362 width=19 height=20 xoffset=5 yoffset=20 xadvance=28 page=0 chnl=0
|
||||
char id=35 x=406 y=266 width=41 height=54 xoffset=1 yoffset=23 xadvance=43 page=0 chnl=0
|
||||
char id=36 x=212 y=0 width=35 height=69 xoffset=2 yoffset=15 xadvance=39 page=0 chnl=0
|
||||
char id=37 x=174 y=156 width=48 height=56 xoffset=2 yoffset=22 xadvance=52 page=0 chnl=0
|
||||
char id=38 x=222 y=156 width=44 height=56 xoffset=2 yoffset=22 xadvance=46 page=0 chnl=0
|
||||
char id=39 x=210 y=362 width=8 height=20 xoffset=5 yoffset=20 xadvance=17 page=0 chnl=0
|
||||
char id=40 x=70 y=0 width=21 height=77 xoffset=3 yoffset=17 xadvance=23 page=0 chnl=0
|
||||
char id=41 x=91 y=0 width=21 height=77 xoffset=-1 yoffset=17 xadvance=23 page=0 chnl=0
|
||||
char id=42 x=100 y=362 width=31 height=33 xoffset=1 yoffset=23 xadvance=33 page=0 chnl=0
|
||||
char id=43 x=0 y=362 width=37 height=40 xoffset=2 yoffset=32 xadvance=41 page=0 chnl=0
|
||||
char id=44 x=492 y=320 width=13 height=21 xoffset=-1 yoffset=67 xadvance=14 page=0 chnl=0
|
||||
char id=45 x=287 y=362 width=19 height=8 xoffset=4 yoffset=50 xadvance=27 page=0 chnl=0
|
||||
char id=46 x=278 y=362 width=9 height=9 xoffset=4 yoffset=68 xadvance=17 page=0 chnl=0
|
||||
char id=47 x=470 y=0 width=30 height=58 xoffset=-1 yoffset=23 xadvance=29 page=0 chnl=0
|
||||
char id=48 x=139 y=156 width=35 height=56 xoffset=3 yoffset=22 xadvance=41 page=0 chnl=0
|
||||
char id=49 x=305 y=266 width=25 height=54 xoffset=3 yoffset=23 xadvance=30 page=0 chnl=0
|
||||
char id=50 x=357 y=156 width=36 height=55 xoffset=2 yoffset=22 xadvance=40 page=0 chnl=0
|
||||
char id=51 x=0 y=156 width=34 height=56 xoffset=2 yoffset=22 xadvance=39 page=0 chnl=0
|
||||
char id=52 x=330 y=266 width=39 height=54 xoffset=1 yoffset=23 xadvance=42 page=0 chnl=0
|
||||
char id=53 x=393 y=156 width=33 height=55 xoffset=2 yoffset=23 xadvance=37 page=0 chnl=0
|
||||
char id=54 x=34 y=156 width=35 height=56 xoffset=3 yoffset=22 xadvance=40 page=0 chnl=0
|
||||
char id=55 x=369 y=266 width=37 height=54 xoffset=2 yoffset=23 xadvance=40 page=0 chnl=0
|
||||
char id=56 x=69 y=156 width=35 height=56 xoffset=2 yoffset=22 xadvance=39 page=0 chnl=0
|
||||
char id=57 x=104 y=156 width=35 height=56 xoffset=2 yoffset=22 xadvance=41 page=0 chnl=0
|
||||
char id=58 x=500 y=0 width=9 height=40 xoffset=4 yoffset=37 xadvance=15 page=0 chnl=0
|
||||
char id=59 x=447 y=266 width=13 height=52 xoffset=0 yoffset=37 xadvance=15 page=0 chnl=0
|
||||
char id=60 x=37 y=362 width=31 height=35 xoffset=2 yoffset=39 xadvance=36 page=0 chnl=0
|
||||
char id=61 x=160 y=362 width=31 height=23 xoffset=4 yoffset=40 xadvance=39 page=0 chnl=0
|
||||
char id=62 x=68 y=362 width=32 height=35 xoffset=3 yoffset=39 xadvance=37 page=0 chnl=0
|
||||
char id=63 x=480 y=98 width=31 height=55 xoffset=1 yoffset=22 xadvance=33 page=0 chnl=0
|
||||
char id=64 x=247 y=0 width=60 height=68 xoffset=1 yoffset=25 xadvance=64 page=0 chnl=0
|
||||
char id=65 x=426 y=156 width=51 height=54 xoffset=1 yoffset=23 xadvance=53 page=0 chnl=0
|
||||
char id=66 x=0 y=212 width=44 height=54 xoffset=1 yoffset=23 xadvance=47 page=0 chnl=0
|
||||
char id=67 x=191 y=98 width=42 height=56 xoffset=1 yoffset=22 xadvance=46 page=0 chnl=0
|
||||
char id=68 x=44 y=212 width=46 height=54 xoffset=1 yoffset=23 xadvance=50 page=0 chnl=0
|
||||
char id=69 x=90 y=212 width=42 height=54 xoffset=1 yoffset=23 xadvance=46 page=0 chnl=0
|
||||
char id=70 x=132 y=212 width=42 height=54 xoffset=1 yoffset=23 xadvance=44 page=0 chnl=0
|
||||
char id=71 x=233 y=98 width=43 height=56 xoffset=1 yoffset=22 xadvance=49 page=0 chnl=0
|
||||
char id=72 x=174 y=212 width=52 height=54 xoffset=1 yoffset=23 xadvance=55 page=0 chnl=0
|
||||
char id=73 x=477 y=156 width=20 height=54 xoffset=1 yoffset=23 xadvance=22 page=0 chnl=0
|
||||
char id=74 x=266 y=156 width=39 height=55 xoffset=1 yoffset=23 xadvance=41 page=0 chnl=0
|
||||
char id=75 x=226 y=212 width=48 height=54 xoffset=1 yoffset=23 xadvance=50 page=0 chnl=0
|
||||
char id=76 x=274 y=212 width=39 height=54 xoffset=1 yoffset=23 xadvance=42 page=0 chnl=0
|
||||
char id=77 x=313 y=212 width=64 height=54 xoffset=1 yoffset=23 xadvance=66 page=0 chnl=0
|
||||
char id=78 x=377 y=212 width=52 height=54 xoffset=1 yoffset=23 xadvance=54 page=0 chnl=0
|
||||
char id=79 x=276 y=98 width=47 height=56 xoffset=2 yoffset=22 xadvance=51 page=0 chnl=0
|
||||
char id=80 x=429 y=212 width=43 height=54 xoffset=1 yoffset=23 xadvance=45 page=0 chnl=0
|
||||
char id=81 x=307 y=0 width=48 height=64 xoffset=2 yoffset=22 xadvance=51 page=0 chnl=0
|
||||
char id=82 x=0 y=266 width=46 height=54 xoffset=1 yoffset=23 xadvance=48 page=0 chnl=0
|
||||
char id=83 x=323 y=98 width=38 height=56 xoffset=3 yoffset=22 xadvance=43 page=0 chnl=0
|
||||
char id=84 x=46 y=266 width=45 height=54 xoffset=0 yoffset=23 xadvance=45 page=0 chnl=0
|
||||
char id=85 x=305 y=156 width=52 height=55 xoffset=1 yoffset=23 xadvance=54 page=0 chnl=0
|
||||
char id=86 x=91 y=266 width=50 height=54 xoffset=1 yoffset=23 xadvance=52 page=0 chnl=0
|
||||
char id=87 x=141 y=266 width=67 height=54 xoffset=0 yoffset=23 xadvance=67 page=0 chnl=0
|
||||
char id=88 x=208 y=266 width=49 height=54 xoffset=1 yoffset=23 xadvance=51 page=0 chnl=0
|
||||
char id=89 x=257 y=266 width=48 height=54 xoffset=1 yoffset=23 xadvance=50 page=0 chnl=0
|
||||
char id=90 x=472 y=212 width=38 height=54 xoffset=2 yoffset=23 xadvance=42 page=0 chnl=0
|
||||
char id=91 x=180 y=0 width=16 height=72 xoffset=5 yoffset=16 xadvance=21 page=0 chnl=0
|
||||
char id=92 x=0 y=98 width=31 height=58 xoffset=0 yoffset=23 xadvance=30 page=0 chnl=0
|
||||
char id=93 x=196 y=0 width=16 height=72 xoffset=-1 yoffset=16 xadvance=19 page=0 chnl=0
|
||||
char id=94 x=131 y=362 width=29 height=28 xoffset=1 yoffset=23 xadvance=30 page=0 chnl=0
|
||||
char id=95 x=306 y=362 width=34 height=8 xoffset=3 yoffset=74 xadvance=40 page=0 chnl=0
|
||||
char id=96 x=260 y=362 width=18 height=12 xoffset=1 yoffset=22 xadvance=20 page=0 chnl=0
|
||||
char id=97 x=0 y=320 width=36 height=42 xoffset=3 yoffset=36 xadvance=41 page=0 chnl=0
|
||||
char id=98 x=363 y=0 width=41 height=58 xoffset=-2 yoffset=20 xadvance=42 page=0 chnl=0
|
||||
char id=99 x=36 y=320 width=34 height=42 xoffset=2 yoffset=36 xadvance=39 page=0 chnl=0
|
||||
char id=100 x=404 y=0 width=40 height=58 xoffset=2 yoffset=20 xadvance=43 page=0 chnl=0
|
||||
char id=101 x=70 y=320 width=34 height=42 xoffset=2 yoffset=36 xadvance=39 page=0 chnl=0
|
||||
char id=102 x=444 y=0 width=26 height=58 xoffset=1 yoffset=19 xadvance=25 page=0 chnl=0
|
||||
char id=103 x=31 y=98 width=34 height=57 xoffset=2 yoffset=36 xadvance=40 page=0 chnl=0
|
||||
char id=104 x=65 y=98 width=44 height=57 xoffset=1 yoffset=20 xadvance=46 page=0 chnl=0
|
||||
char id=105 x=109 y=98 width=20 height=57 xoffset=2 yoffset=20 xadvance=23 page=0 chnl=0
|
||||
char id=106 x=112 y=0 width=18 height=73 xoffset=-2 yoffset=20 xadvance=20 page=0 chnl=0
|
||||
char id=107 x=129 y=98 width=42 height=57 xoffset=1 yoffset=20 xadvance=44 page=0 chnl=0
|
||||
char id=108 x=171 y=98 width=20 height=57 xoffset=1 yoffset=20 xadvance=22 page=0 chnl=0
|
||||
char id=109 x=171 y=320 width=66 height=41 xoffset=1 yoffset=36 xadvance=68 page=0 chnl=0
|
||||
char id=110 x=237 y=320 width=44 height=41 xoffset=1 yoffset=36 xadvance=46 page=0 chnl=0
|
||||
char id=111 x=104 y=320 width=36 height=42 xoffset=2 yoffset=36 xadvance=40 page=0 chnl=0
|
||||
char id=112 x=361 y=98 width=40 height=56 xoffset=1 yoffset=36 xadvance=43 page=0 chnl=0
|
||||
char id=113 x=401 y=98 width=39 height=56 xoffset=2 yoffset=36 xadvance=40 page=0 chnl=0
|
||||
char id=114 x=484 y=266 width=27 height=41 xoffset=2 yoffset=36 xadvance=30 page=0 chnl=0
|
||||
char id=115 x=140 y=320 width=31 height=42 xoffset=3 yoffset=36 xadvance=36 page=0 chnl=0
|
||||
char id=116 x=460 y=266 width=24 height=51 xoffset=1 yoffset=27 xadvance=26 page=0 chnl=0
|
||||
char id=117 x=281 y=320 width=43 height=41 xoffset=0 yoffset=37 xadvance=44 page=0 chnl=0
|
||||
char id=118 x=324 y=320 width=39 height=40 xoffset=0 yoffset=37 xadvance=40 page=0 chnl=0
|
||||
char id=119 x=363 y=320 width=57 height=40 xoffset=1 yoffset=37 xadvance=59 page=0 chnl=0
|
||||
char id=120 x=420 y=320 width=40 height=40 xoffset=1 yoffset=37 xadvance=42 page=0 chnl=0
|
||||
char id=121 x=440 y=98 width=40 height=56 xoffset=0 yoffset=37 xadvance=41 page=0 chnl=0
|
||||
char id=122 x=460 y=320 width=32 height=40 xoffset=3 yoffset=37 xadvance=38 page=0 chnl=0
|
||||
char id=123 x=130 y=0 width=25 height=73 xoffset=1 yoffset=18 xadvance=25 page=0 chnl=0
|
||||
char id=124 x=355 y=0 width=8 height=63 xoffset=4 yoffset=23 xadvance=16 page=0 chnl=0
|
||||
char id=125 x=155 y=0 width=25 height=73 xoffset=-1 yoffset=18 xadvance=25 page=0 chnl=0
|
||||
char id=126 x=218 y=362 width=42 height=16 xoffset=3 yoffset=47 xadvance=49 page=0 chnl=0
|
||||
char id=127 x=0 y=0 width=70 height=98 xoffset=0 yoffset=-1 xadvance=70 page=0 chnl=0
|
||||
kernings count=389
|
||||
kerning first=86 second=45 amount=-1
|
||||
kerning first=114 second=46 amount=-4
|
||||
kerning first=40 second=87 amount=1
|
||||
kerning first=70 second=99 amount=-1
|
||||
kerning first=84 second=110 amount=-3
|
||||
kerning first=114 second=116 amount=1
|
||||
kerning first=39 second=65 amount=-4
|
||||
kerning first=104 second=34 amount=-1
|
||||
kerning first=89 second=71 amount=-1
|
||||
kerning first=107 second=113 amount=-1
|
||||
kerning first=78 second=88 amount=1
|
||||
kerning first=109 second=39 amount=-1
|
||||
kerning first=120 second=100 amount=-1
|
||||
kerning first=84 second=100 amount=-3
|
||||
kerning first=68 second=90 amount=-1
|
||||
kerning first=68 second=44 amount=-4
|
||||
kerning first=84 second=103 amount=-3
|
||||
kerning first=34 second=97 amount=-2
|
||||
kerning first=70 second=97 amount=-1
|
||||
kerning first=76 second=81 amount=-2
|
||||
kerning first=73 second=89 amount=-1
|
||||
kerning first=84 second=44 amount=-8
|
||||
kerning first=68 second=65 amount=-3
|
||||
kerning first=97 second=34 amount=-2
|
||||
kerning first=111 second=121 amount=-1
|
||||
kerning first=79 second=90 amount=-1
|
||||
kerning first=75 second=121 amount=-1
|
||||
kerning first=75 second=118 amount=-1
|
||||
kerning first=111 second=118 amount=-1
|
||||
kerning first=89 second=65 amount=-9
|
||||
kerning first=75 second=71 amount=-4
|
||||
kerning first=39 second=99 amount=-2
|
||||
kerning first=75 second=99 amount=-1
|
||||
kerning first=90 second=121 amount=-1
|
||||
kerning first=44 second=39 amount=-6
|
||||
kerning first=89 second=46 amount=-7
|
||||
kerning first=89 second=74 amount=-7
|
||||
kerning first=34 second=103 amount=-2
|
||||
kerning first=70 second=103 amount=-1
|
||||
kerning first=112 second=39 amount=-1
|
||||
kerning first=122 second=113 amount=-1
|
||||
kerning first=86 second=113 amount=-2
|
||||
kerning first=68 second=84 amount=-1
|
||||
kerning first=89 second=110 amount=-1
|
||||
kerning first=34 second=100 amount=-2
|
||||
kerning first=68 second=86 amount=-1
|
||||
kerning first=87 second=45 amount=-2
|
||||
kerning first=39 second=34 amount=-4
|
||||
kerning first=114 second=100 amount=-1
|
||||
kerning first=84 second=81 amount=-1
|
||||
kerning first=70 second=101 amount=-1
|
||||
kerning first=68 second=89 amount=-2
|
||||
kerning first=88 second=117 amount=-1
|
||||
kerning first=112 second=34 amount=-1
|
||||
kerning first=76 second=67 amount=-2
|
||||
kerning first=76 second=34 amount=-5
|
||||
kerning first=88 second=111 amount=-1
|
||||
kerning first=66 second=86 amount=-1
|
||||
kerning first=66 second=89 amount=-2
|
||||
kerning first=122 second=101 amount=-1
|
||||
kerning first=86 second=101 amount=-2
|
||||
kerning first=76 second=121 amount=-5
|
||||
kerning first=84 second=119 amount=-2
|
||||
kerning first=84 second=112 amount=-3
|
||||
kerning first=87 second=111 amount=-1
|
||||
kerning first=69 second=118 amount=-1
|
||||
kerning first=65 second=117 amount=-2
|
||||
kerning first=65 second=89 amount=-9
|
||||
kerning first=72 second=89 amount=-1
|
||||
kerning first=119 second=44 amount=-4
|
||||
kerning first=69 second=121 amount=-1
|
||||
kerning first=84 second=109 amount=-3
|
||||
kerning first=84 second=122 amount=-2
|
||||
kerning first=89 second=99 amount=-2
|
||||
kerning first=76 second=118 amount=-5
|
||||
kerning first=90 second=99 amount=-1
|
||||
kerning first=90 second=103 amount=-1
|
||||
kerning first=79 second=89 amount=-2
|
||||
kerning first=90 second=79 amount=-1
|
||||
kerning first=84 second=115 amount=-4
|
||||
kerning first=76 second=65 amount=1
|
||||
kerning first=90 second=100 amount=-1
|
||||
kerning first=118 second=46 amount=-4
|
||||
kerning first=87 second=117 amount=-1
|
||||
kerning first=118 second=34 amount=1
|
||||
kerning first=69 second=103 amount=-1
|
||||
kerning first=97 second=121 amount=-1
|
||||
kerning first=39 second=111 amount=-2
|
||||
kerning first=72 second=88 amount=1
|
||||
kerning first=76 second=87 amount=-5
|
||||
kerning first=69 second=119 amount=-1
|
||||
kerning first=121 second=97 amount=-1
|
||||
kerning first=75 second=45 amount=-8
|
||||
kerning first=65 second=86 amount=-9
|
||||
kerning first=46 second=34 amount=-6
|
||||
kerning first=76 second=84 amount=-10
|
||||
kerning first=116 second=111 amount=-1
|
||||
kerning first=87 second=113 amount=-1
|
||||
kerning first=69 second=100 amount=-1
|
||||
kerning first=97 second=118 amount=-1
|
||||
kerning first=65 second=85 amount=-2
|
||||
kerning first=90 second=71 amount=-1
|
||||
kerning first=68 second=46 amount=-4
|
||||
kerning first=65 second=79 amount=-3
|
||||
kerning first=98 second=122 amount=-1
|
||||
kerning first=86 second=41 amount=1
|
||||
kerning first=84 second=118 amount=-3
|
||||
kerning first=70 second=118 amount=-1
|
||||
kerning first=121 second=111 amount=-1
|
||||
kerning first=81 second=87 amount=-1
|
||||
kerning first=70 second=100 amount=-1
|
||||
kerning first=102 second=93 amount=1
|
||||
kerning first=114 second=101 amount=-1
|
||||
kerning first=88 second=45 amount=-2
|
||||
kerning first=39 second=103 amount=-2
|
||||
kerning first=75 second=103 amount=-1
|
||||
kerning first=88 second=101 amount=-1
|
||||
kerning first=89 second=103 amount=-2
|
||||
kerning first=110 second=39 amount=-1
|
||||
kerning first=89 second=89 amount=1
|
||||
kerning first=87 second=65 amount=-2
|
||||
kerning first=119 second=46 amount=-4
|
||||
kerning first=34 second=34 amount=-4
|
||||
kerning first=88 second=79 amount=-2
|
||||
kerning first=79 second=86 amount=-1
|
||||
kerning first=76 second=119 amount=-3
|
||||
kerning first=75 second=111 amount=-1
|
||||
kerning first=65 second=116 amount=-4
|
||||
kerning first=86 second=65 amount=-9
|
||||
kerning first=70 second=84 amount=1
|
||||
kerning first=75 second=117 amount=-1
|
||||
kerning first=80 second=65 amount=-9
|
||||
kerning first=34 second=112 amount=-1
|
||||
kerning first=102 second=99 amount=-1
|
||||
kerning first=118 second=97 amount=-1
|
||||
kerning first=89 second=81 amount=-1
|
||||
kerning first=118 second=111 amount=-1
|
||||
kerning first=102 second=101 amount=-1
|
||||
kerning first=114 second=44 amount=-4
|
||||
kerning first=90 second=119 amount=-1
|
||||
kerning first=75 second=81 amount=-4
|
||||
kerning first=88 second=121 amount=-1
|
||||
kerning first=34 second=110 amount=-1
|
||||
kerning first=86 second=100 amount=-2
|
||||
kerning first=122 second=100 amount=-1
|
||||
kerning first=89 second=67 amount=-1
|
||||
kerning first=90 second=118 amount=-1
|
||||
kerning first=84 second=84 amount=1
|
||||
kerning first=121 second=34 amount=1
|
||||
kerning first=91 second=74 amount=-1
|
||||
kerning first=88 second=113 amount=-1
|
||||
kerning first=77 second=88 amount=1
|
||||
kerning first=75 second=119 amount=-2
|
||||
kerning first=114 second=104 amount=-1
|
||||
kerning first=68 second=88 amount=-2
|
||||
kerning first=121 second=44 amount=-4
|
||||
kerning first=81 second=89 amount=-1
|
||||
kerning first=102 second=39 amount=1
|
||||
kerning first=74 second=65 amount=-2
|
||||
kerning first=114 second=118 amount=1
|
||||
kerning first=84 second=46 amount=-8
|
||||
kerning first=111 second=34 amount=-1
|
||||
kerning first=88 second=71 amount=-2
|
||||
kerning first=88 second=99 amount=-1
|
||||
kerning first=84 second=74 amount=-8
|
||||
kerning first=39 second=109 amount=-1
|
||||
kerning first=98 second=34 amount=-1
|
||||
kerning first=86 second=114 amount=-1
|
||||
kerning first=88 second=81 amount=-2
|
||||
kerning first=70 second=74 amount=-11
|
||||
kerning first=89 second=83 amount=-1
|
||||
kerning first=87 second=41 amount=1
|
||||
kerning first=89 second=97 amount=-3
|
||||
kerning first=89 second=87 amount=1
|
||||
kerning first=67 second=125 amount=-1
|
||||
kerning first=89 second=93 amount=1
|
||||
kerning first=80 second=118 amount=1
|
||||
kerning first=107 second=100 amount=-1
|
||||
kerning first=114 second=34 amount=1
|
||||
kerning first=89 second=109 amount=-1
|
||||
kerning first=89 second=45 amount=-2
|
||||
kerning first=70 second=44 amount=-8
|
||||
kerning first=34 second=39 amount=-4
|
||||
kerning first=88 second=67 amount=-2
|
||||
kerning first=70 second=46 amount=-8
|
||||
kerning first=102 second=41 amount=1
|
||||
kerning first=89 second=117 amount=-1
|
||||
kerning first=89 second=111 amount=-4
|
||||
kerning first=89 second=115 amount=-4
|
||||
kerning first=114 second=102 amount=1
|
||||
kerning first=89 second=125 amount=1
|
||||
kerning first=89 second=121 amount=-1
|
||||
kerning first=114 second=108 amount=-1
|
||||
kerning first=47 second=47 amount=-8
|
||||
kerning first=65 second=63 amount=-2
|
||||
kerning first=75 second=67 amount=-4
|
||||
kerning first=87 second=100 amount=-1
|
||||
kerning first=111 second=104 amount=-1
|
||||
kerning first=111 second=107 amount=-1
|
||||
kerning first=75 second=109 amount=-1
|
||||
kerning first=87 second=114 amount=-1
|
||||
kerning first=111 second=120 amount=-1
|
||||
kerning first=69 second=99 amount=-1
|
||||
kerning first=65 second=84 amount=-6
|
||||
kerning first=39 second=97 amount=-2
|
||||
kerning first=121 second=46 amount=-4
|
||||
kerning first=89 second=85 amount=-3
|
||||
kerning first=75 second=79 amount=-4
|
||||
kerning first=107 second=99 amount=-1
|
||||
kerning first=102 second=100 amount=-1
|
||||
kerning first=102 second=103 amount=-1
|
||||
kerning first=75 second=110 amount=-1
|
||||
kerning first=39 second=110 amount=-1
|
||||
kerning first=69 second=84 amount=1
|
||||
kerning first=84 second=111 amount=-3
|
||||
kerning first=120 second=111 amount=-1
|
||||
kerning first=84 second=114 amount=-3
|
||||
kerning first=112 second=120 amount=-1
|
||||
kerning first=79 second=84 amount=-1
|
||||
kerning first=84 second=117 amount=-3
|
||||
kerning first=89 second=79 amount=-1
|
||||
kerning first=75 second=113 amount=-1
|
||||
kerning first=39 second=113 amount=-2
|
||||
kerning first=80 second=44 amount=-11
|
||||
kerning first=79 second=88 amount=-2
|
||||
kerning first=98 second=39 amount=-1
|
||||
kerning first=65 second=118 amount=-4
|
||||
kerning first=65 second=34 amount=-4
|
||||
kerning first=88 second=103 amount=-1
|
||||
kerning first=77 second=89 amount=-1
|
||||
kerning first=39 second=101 amount=-2
|
||||
kerning first=75 second=101 amount=-1
|
||||
kerning first=88 second=100 amount=-1
|
||||
kerning first=78 second=65 amount=-3
|
||||
kerning first=87 second=44 amount=-4
|
||||
kerning first=67 second=41 amount=-1
|
||||
kerning first=86 second=93 amount=1
|
||||
kerning first=84 second=83 amount=-1
|
||||
kerning first=102 second=113 amount=-1
|
||||
kerning first=34 second=111 amount=-2
|
||||
kerning first=70 second=111 amount=-1
|
||||
kerning first=86 second=99 amount=-2
|
||||
kerning first=84 second=86 amount=1
|
||||
kerning first=122 second=99 amount=-1
|
||||
kerning first=84 second=89 amount=1
|
||||
kerning first=70 second=114 amount=-1
|
||||
kerning first=86 second=74 amount=-8
|
||||
kerning first=89 second=38 amount=-1
|
||||
kerning first=87 second=97 amount=-1
|
||||
kerning first=76 second=86 amount=-9
|
||||
kerning first=40 second=86 amount=1
|
||||
kerning first=90 second=113 amount=-1
|
||||
kerning first=39 second=39 amount=-4
|
||||
kerning first=111 second=39 amount=-1
|
||||
kerning first=90 second=117 amount=-1
|
||||
kerning first=89 second=41 amount=1
|
||||
kerning first=65 second=121 amount=-4
|
||||
kerning first=89 second=100 amount=-2
|
||||
kerning first=89 second=42 amount=-2
|
||||
kerning first=76 second=117 amount=-2
|
||||
kerning first=69 second=111 amount=-1
|
||||
kerning first=46 second=39 amount=-6
|
||||
kerning first=118 second=39 amount=1
|
||||
kerning first=91 second=85 amount=-1
|
||||
kerning first=80 second=90 amount=-1
|
||||
kerning first=90 second=81 amount=-1
|
||||
kerning first=69 second=117 amount=-1
|
||||
kerning first=76 second=39 amount=-5
|
||||
kerning first=90 second=67 amount=-1
|
||||
kerning first=87 second=103 amount=-1
|
||||
kerning first=84 second=120 amount=-3
|
||||
kerning first=89 second=101 amount=-2
|
||||
kerning first=102 second=125 amount=1
|
||||
kerning first=76 second=85 amount=-2
|
||||
kerning first=79 second=65 amount=-3
|
||||
kerning first=65 second=71 amount=-3
|
||||
kerning first=79 second=44 amount=-4
|
||||
kerning first=97 second=39 amount=-2
|
||||
kerning first=90 second=101 amount=-1
|
||||
kerning first=65 second=87 amount=-5
|
||||
kerning first=79 second=46 amount=-4
|
||||
kerning first=87 second=99 amount=-1
|
||||
kerning first=34 second=101 amount=-2
|
||||
kerning first=40 second=89 amount=1
|
||||
kerning first=76 second=89 amount=-8
|
||||
kerning first=69 second=113 amount=-1
|
||||
kerning first=120 second=103 amount=-1
|
||||
kerning first=69 second=101 amount=-1
|
||||
kerning first=69 second=102 amount=-1
|
||||
kerning first=104 second=39 amount=-1
|
||||
kerning first=80 second=121 amount=1
|
||||
kerning first=86 second=46 amount=-8
|
||||
kerning first=65 second=81 amount=-3
|
||||
kerning first=86 second=44 amount=-8
|
||||
kerning first=120 second=99 amount=-1
|
||||
kerning first=98 second=120 amount=-1
|
||||
kerning first=39 second=115 amount=-3
|
||||
kerning first=121 second=39 amount=1
|
||||
kerning first=88 second=118 amount=-1
|
||||
kerning first=84 second=65 amount=-6
|
||||
kerning first=65 second=39 amount=-4
|
||||
kerning first=84 second=79 amount=-1
|
||||
kerning first=65 second=119 amount=-4
|
||||
kerning first=70 second=117 amount=-1
|
||||
kerning first=75 second=100 amount=-1
|
||||
kerning first=86 second=111 amount=-2
|
||||
kerning first=122 second=111 amount=-1
|
||||
kerning first=81 second=84 amount=-2
|
||||
kerning first=107 second=103 amount=-1
|
||||
kerning first=118 second=44 amount=-4
|
||||
kerning first=87 second=46 amount=-4
|
||||
kerning first=87 second=101 amount=-1
|
||||
kerning first=70 second=79 amount=-2
|
||||
kerning first=87 second=74 amount=-2
|
||||
kerning first=123 second=74 amount=-1
|
||||
kerning first=76 second=71 amount=-2
|
||||
kerning first=39 second=100 amount=-2
|
||||
kerning first=80 second=88 amount=-1
|
||||
kerning first=84 second=121 amount=-3
|
||||
kerning first=112 second=122 amount=-1
|
||||
kerning first=84 second=71 amount=-1
|
||||
kerning first=89 second=86 amount=1
|
||||
kerning first=84 second=113 amount=-3
|
||||
kerning first=120 second=113 amount=-1
|
||||
kerning first=89 second=44 amount=-7
|
||||
kerning first=84 second=99 amount=-3
|
||||
kerning first=34 second=113 amount=-2
|
||||
kerning first=80 second=46 amount=-11
|
||||
kerning first=86 second=117 amount=-1
|
||||
kerning first=110 second=34 amount=-1
|
||||
kerning first=80 second=74 amount=-7
|
||||
kerning first=120 second=101 amount=-1
|
||||
kerning first=73 second=88 amount=1
|
||||
kerning first=108 second=111 amount=-1
|
||||
kerning first=34 second=115 amount=-3
|
||||
kerning first=89 second=113 amount=-2
|
||||
kerning first=82 second=86 amount=-3
|
||||
kerning first=114 second=39 amount=1
|
||||
kerning first=34 second=109 amount=-1
|
||||
kerning first=84 second=101 amount=-3
|
||||
kerning first=70 second=121 amount=-1
|
||||
kerning first=123 second=85 amount=-1
|
||||
kerning first=122 second=103 amount=-1
|
||||
kerning first=86 second=97 amount=-2
|
||||
kerning first=82 second=89 amount=-4
|
||||
kerning first=66 second=84 amount=-1
|
||||
kerning first=84 second=97 amount=-4
|
||||
kerning first=86 second=103 amount=-2
|
||||
kerning first=70 second=113 amount=-1
|
||||
kerning first=84 second=87 amount=1
|
||||
kerning first=75 second=112 amount=-1
|
||||
kerning first=114 second=111 amount=-1
|
||||
kerning first=39 second=112 amount=-1
|
||||
kerning first=107 second=101 amount=-1
|
||||
kerning first=82 second=84 amount=-3
|
||||
kerning first=114 second=121 amount=1
|
||||
kerning first=34 second=99 amount=-2
|
||||
kerning first=70 second=81 amount=-2
|
||||
kerning first=111 second=122 amount=-1
|
||||
kerning first=84 second=67 amount=-1
|
||||
kerning first=111 second=108 amount=-1
|
||||
kerning first=89 second=84 amount=1
|
||||
kerning first=76 second=79 amount=-2
|
||||
kerning first=85 second=65 amount=-2
|
||||
kerning first=44 second=34 amount=-6
|
||||
kerning first=65 second=67 amount=-3
|
||||
kerning first=109 second=34 amount=-1
|
||||
kerning first=114 second=103 amount=-1
|
||||
kerning first=78 second=89 amount=-1
|
||||
kerning first=89 second=114 amount=-1
|
||||
kerning first=89 second=112 amount=-1
|
||||
kerning first=34 second=65 amount=-4
|
||||
kerning first=70 second=65 amount=-11
|
||||
kerning first=81 second=86 amount=-1
|
||||
kerning first=114 second=119 amount=1
|
||||
kerning first=89 second=102 amount=-1
|
||||
kerning first=84 second=45 amount=-8
|
||||
kerning first=86 second=125 amount=1
|
||||
kerning first=70 second=67 amount=-2
|
||||
kerning first=89 second=116 amount=-1
|
||||
kerning first=102 second=34 amount=1
|
||||
kerning first=114 second=99 amount=-1
|
||||
kerning first=67 second=84 amount=-1
|
||||
kerning first=114 second=113 amount=-1
|
||||
kerning first=89 second=122 amount=-1
|
||||
kerning first=89 second=118 amount=-1
|
||||
kerning first=70 second=71 amount=-2
|
||||
kerning first=114 second=107 amount=-1
|
||||
kerning first=89 second=120 amount=-1
|
||||
<?xml version="1.0"?>
|
||||
<font>
|
||||
<info face="Roboto Slab Regular" size="72" bold="0" italic="0" charset="" unicode="0" stretchH="100" smooth="1" aa="1" padding="1,1,1,1" spacing="-2,-2" outline="0" />
|
||||
<common lineHeight="96" base="76" scaleW="512" scaleH="512" pages="1" packed="0" alphaChnl="0" redChnl="0" greenChnl="0" blueChnl="0" />
|
||||
<pages>
|
||||
<page id="0" file="RobotoSlab72White.png" /> </pages>
|
||||
<chars count="98">
|
||||
<char id="0" x="0" y="0" width="0" height="0" xoffset="-1" yoffset="75" xadvance="0" page="0" chnl="0" />
|
||||
<char id="10" x="0" y="0" width="70" height="98" xoffset="0" yoffset="-1" xadvance="70" page="0" chnl="0" />
|
||||
<char id="32" x="0" y="0" width="0" height="0" xoffset="-1" yoffset="75" xadvance="18" page="0" chnl="0" />
|
||||
<char id="33" x="497" y="156" width="9" height="54" xoffset="4" yoffset="23" xadvance="17" page="0" chnl="0" />
|
||||
<char id="34" x="191" y="362" width="19" height="20" xoffset="5" yoffset="20" xadvance="28" page="0" chnl="0" />
|
||||
<char id="35" x="406" y="266" width="41" height="54" xoffset="1" yoffset="23" xadvance="43" page="0" chnl="0" />
|
||||
<char id="36" x="212" y="0" width="35" height="69" xoffset="2" yoffset="15" xadvance="39" page="0" chnl="0" />
|
||||
<char id="37" x="174" y="156" width="48" height="56" xoffset="2" yoffset="22" xadvance="52" page="0" chnl="0" />
|
||||
<char id="38" x="222" y="156" width="44" height="56" xoffset="2" yoffset="22" xadvance="46" page="0" chnl="0" />
|
||||
<char id="39" x="210" y="362" width="8" height="20" xoffset="5" yoffset="20" xadvance="17" page="0" chnl="0" />
|
||||
<char id="40" x="70" y="0" width="21" height="77" xoffset="3" yoffset="17" xadvance="23" page="0" chnl="0" />
|
||||
<char id="41" x="91" y="0" width="21" height="77" xoffset="-1" yoffset="17" xadvance="23" page="0" chnl="0" />
|
||||
<char id="42" x="100" y="362" width="31" height="33" xoffset="1" yoffset="23" xadvance="33" page="0" chnl="0" />
|
||||
<char id="43" x="0" y="362" width="37" height="40" xoffset="2" yoffset="32" xadvance="41" page="0" chnl="0" />
|
||||
<char id="44" x="492" y="320" width="13" height="21" xoffset="-1" yoffset="67" xadvance="14" page="0" chnl="0" />
|
||||
<char id="45" x="287" y="362" width="19" height="8" xoffset="4" yoffset="50" xadvance="27" page="0" chnl="0" />
|
||||
<char id="46" x="278" y="362" width="9" height="9" xoffset="4" yoffset="68" xadvance="17" page="0" chnl="0" />
|
||||
<char id="47" x="470" y="0" width="30" height="58" xoffset="-1" yoffset="23" xadvance="29" page="0" chnl="0" />
|
||||
<char id="48" x="139" y="156" width="35" height="56" xoffset="3" yoffset="22" xadvance="41" page="0" chnl="0" />
|
||||
<char id="49" x="305" y="266" width="25" height="54" xoffset="3" yoffset="23" xadvance="30" page="0" chnl="0" />
|
||||
<char id="50" x="357" y="156" width="36" height="55" xoffset="2" yoffset="22" xadvance="40" page="0" chnl="0" />
|
||||
<char id="51" x="0" y="156" width="34" height="56" xoffset="2" yoffset="22" xadvance="39" page="0" chnl="0" />
|
||||
<char id="52" x="330" y="266" width="39" height="54" xoffset="1" yoffset="23" xadvance="42" page="0" chnl="0" />
|
||||
<char id="53" x="393" y="156" width="33" height="55" xoffset="2" yoffset="23" xadvance="37" page="0" chnl="0" />
|
||||
<char id="54" x="34" y="156" width="35" height="56" xoffset="3" yoffset="22" xadvance="40" page="0" chnl="0" />
|
||||
<char id="55" x="369" y="266" width="37" height="54" xoffset="2" yoffset="23" xadvance="40" page="0" chnl="0" />
|
||||
<char id="56" x="69" y="156" width="35" height="56" xoffset="2" yoffset="22" xadvance="39" page="0" chnl="0" />
|
||||
<char id="57" x="104" y="156" width="35" height="56" xoffset="2" yoffset="22" xadvance="41" page="0" chnl="0" />
|
||||
<char id="58" x="500" y="0" width="9" height="40" xoffset="4" yoffset="37" xadvance="15" page="0" chnl="0" />
|
||||
<char id="59" x="447" y="266" width="13" height="52" xoffset="0" yoffset="37" xadvance="15" page="0" chnl="0" />
|
||||
<char id="60" x="37" y="362" width="31" height="35" xoffset="2" yoffset="39" xadvance="36" page="0" chnl="0" />
|
||||
<char id="61" x="160" y="362" width="31" height="23" xoffset="4" yoffset="40" xadvance="39" page="0" chnl="0" />
|
||||
<char id="62" x="68" y="362" width="32" height="35" xoffset="3" yoffset="39" xadvance="37" page="0" chnl="0" />
|
||||
<char id="63" x="480" y="98" width="31" height="55" xoffset="1" yoffset="22" xadvance="33" page="0" chnl="0" />
|
||||
<char id="64" x="247" y="0" width="60" height="68" xoffset="1" yoffset="25" xadvance="64" page="0" chnl="0" />
|
||||
<char id="65" x="426" y="156" width="51" height="54" xoffset="1" yoffset="23" xadvance="53" page="0" chnl="0" />
|
||||
<char id="66" x="0" y="212" width="44" height="54" xoffset="1" yoffset="23" xadvance="47" page="0" chnl="0" />
|
||||
<char id="67" x="191" y="98" width="42" height="56" xoffset="1" yoffset="22" xadvance="46" page="0" chnl="0" />
|
||||
<char id="68" x="44" y="212" width="46" height="54" xoffset="1" yoffset="23" xadvance="50" page="0" chnl="0" />
|
||||
<char id="69" x="90" y="212" width="42" height="54" xoffset="1" yoffset="23" xadvance="46" page="0" chnl="0" />
|
||||
<char id="70" x="132" y="212" width="42" height="54" xoffset="1" yoffset="23" xadvance="44" page="0" chnl="0" />
|
||||
<char id="71" x="233" y="98" width="43" height="56" xoffset="1" yoffset="22" xadvance="49" page="0" chnl="0" />
|
||||
<char id="72" x="174" y="212" width="52" height="54" xoffset="1" yoffset="23" xadvance="55" page="0" chnl="0" />
|
||||
<char id="73" x="477" y="156" width="20" height="54" xoffset="1" yoffset="23" xadvance="22" page="0" chnl="0" />
|
||||
<char id="74" x="266" y="156" width="39" height="55" xoffset="1" yoffset="23" xadvance="41" page="0" chnl="0" />
|
||||
<char id="75" x="226" y="212" width="48" height="54" xoffset="1" yoffset="23" xadvance="50" page="0" chnl="0" />
|
||||
<char id="76" x="274" y="212" width="39" height="54" xoffset="1" yoffset="23" xadvance="42" page="0" chnl="0" />
|
||||
<char id="77" x="313" y="212" width="64" height="54" xoffset="1" yoffset="23" xadvance="66" page="0" chnl="0" />
|
||||
<char id="78" x="377" y="212" width="52" height="54" xoffset="1" yoffset="23" xadvance="54" page="0" chnl="0" />
|
||||
<char id="79" x="276" y="98" width="47" height="56" xoffset="2" yoffset="22" xadvance="51" page="0" chnl="0" />
|
||||
<char id="80" x="429" y="212" width="43" height="54" xoffset="1" yoffset="23" xadvance="45" page="0" chnl="0" />
|
||||
<char id="81" x="307" y="0" width="48" height="64" xoffset="2" yoffset="22" xadvance="51" page="0" chnl="0" />
|
||||
<char id="82" x="0" y="266" width="46" height="54" xoffset="1" yoffset="23" xadvance="48" page="0" chnl="0" />
|
||||
<char id="83" x="323" y="98" width="38" height="56" xoffset="3" yoffset="22" xadvance="43" page="0" chnl="0" />
|
||||
<char id="84" x="46" y="266" width="45" height="54" xoffset="0" yoffset="23" xadvance="45" page="0" chnl="0" />
|
||||
<char id="85" x="305" y="156" width="52" height="55" xoffset="1" yoffset="23" xadvance="54" page="0" chnl="0" />
|
||||
<char id="86" x="91" y="266" width="50" height="54" xoffset="1" yoffset="23" xadvance="52" page="0" chnl="0" />
|
||||
<char id="87" x="141" y="266" width="67" height="54" xoffset="0" yoffset="23" xadvance="67" page="0" chnl="0" />
|
||||
<char id="88" x="208" y="266" width="49" height="54" xoffset="1" yoffset="23" xadvance="51" page="0" chnl="0" />
|
||||
<char id="89" x="257" y="266" width="48" height="54" xoffset="1" yoffset="23" xadvance="50" page="0" chnl="0" />
|
||||
<char id="90" x="472" y="212" width="38" height="54" xoffset="2" yoffset="23" xadvance="42" page="0" chnl="0" />
|
||||
<char id="91" x="180" y="0" width="16" height="72" xoffset="5" yoffset="16" xadvance="21" page="0" chnl="0" />
|
||||
<char id="92" x="0" y="98" width="31" height="58" xoffset="0" yoffset="23" xadvance="30" page="0" chnl="0" />
|
||||
<char id="93" x="196" y="0" width="16" height="72" xoffset="-1" yoffset="16" xadvance="19" page="0" chnl="0" />
|
||||
<char id="94" x="131" y="362" width="29" height="28" xoffset="1" yoffset="23" xadvance="30" page="0" chnl="0" />
|
||||
<char id="95" x="306" y="362" width="34" height="8" xoffset="3" yoffset="74" xadvance="40" page="0" chnl="0" />
|
||||
<char id="96" x="260" y="362" width="18" height="12" xoffset="1" yoffset="22" xadvance="20" page="0" chnl="0" />
|
||||
<char id="97" x="0" y="320" width="36" height="42" xoffset="3" yoffset="36" xadvance="41" page="0" chnl="0" />
|
||||
<char id="98" x="363" y="0" width="41" height="58" xoffset="-2" yoffset="20" xadvance="42" page="0" chnl="0" />
|
||||
<char id="99" x="36" y="320" width="34" height="42" xoffset="2" yoffset="36" xadvance="39" page="0" chnl="0" />
|
||||
<char id="100" x="404" y="0" width="40" height="58" xoffset="2" yoffset="20" xadvance="43" page="0" chnl="0" />
|
||||
<char id="101" x="70" y="320" width="34" height="42" xoffset="2" yoffset="36" xadvance="39" page="0" chnl="0" />
|
||||
<char id="102" x="444" y="0" width="26" height="58" xoffset="1" yoffset="19" xadvance="25" page="0" chnl="0" />
|
||||
<char id="103" x="31" y="98" width="34" height="57" xoffset="2" yoffset="36" xadvance="40" page="0" chnl="0" />
|
||||
<char id="104" x="65" y="98" width="44" height="57" xoffset="1" yoffset="20" xadvance="46" page="0" chnl="0" />
|
||||
<char id="105" x="109" y="98" width="20" height="57" xoffset="2" yoffset="20" xadvance="23" page="0" chnl="0" />
|
||||
<char id="106" x="112" y="0" width="18" height="73" xoffset="-2" yoffset="20" xadvance="20" page="0" chnl="0" />
|
||||
<char id="107" x="129" y="98" width="42" height="57" xoffset="1" yoffset="20" xadvance="44" page="0" chnl="0" />
|
||||
<char id="108" x="171" y="98" width="20" height="57" xoffset="1" yoffset="20" xadvance="22" page="0" chnl="0" />
|
||||
<char id="109" x="171" y="320" width="66" height="41" xoffset="1" yoffset="36" xadvance="68" page="0" chnl="0" />
|
||||
<char id="110" x="237" y="320" width="44" height="41" xoffset="1" yoffset="36" xadvance="46" page="0" chnl="0" />
|
||||
<char id="111" x="104" y="320" width="36" height="42" xoffset="2" yoffset="36" xadvance="40" page="0" chnl="0" />
|
||||
<char id="112" x="361" y="98" width="40" height="56" xoffset="1" yoffset="36" xadvance="43" page="0" chnl="0" />
|
||||
<char id="113" x="401" y="98" width="39" height="56" xoffset="2" yoffset="36" xadvance="40" page="0" chnl="0" />
|
||||
<char id="114" x="484" y="266" width="27" height="41" xoffset="2" yoffset="36" xadvance="30" page="0" chnl="0" />
|
||||
<char id="115" x="140" y="320" width="31" height="42" xoffset="3" yoffset="36" xadvance="36" page="0" chnl="0" />
|
||||
<char id="116" x="460" y="266" width="24" height="51" xoffset="1" yoffset="27" xadvance="26" page="0" chnl="0" />
|
||||
<char id="117" x="281" y="320" width="43" height="41" xoffset="0" yoffset="37" xadvance="44" page="0" chnl="0" />
|
||||
<char id="118" x="324" y="320" width="39" height="40" xoffset="0" yoffset="37" xadvance="40" page="0" chnl="0" />
|
||||
<char id="119" x="363" y="320" width="57" height="40" xoffset="1" yoffset="37" xadvance="59" page="0" chnl="0" />
|
||||
<char id="120" x="420" y="320" width="40" height="40" xoffset="1" yoffset="37" xadvance="42" page="0" chnl="0" />
|
||||
<char id="121" x="440" y="98" width="40" height="56" xoffset="0" yoffset="37" xadvance="41" page="0" chnl="0" />
|
||||
<char id="122" x="460" y="320" width="32" height="40" xoffset="3" yoffset="37" xadvance="38" page="0" chnl="0" />
|
||||
<char id="123" x="130" y="0" width="25" height="73" xoffset="1" yoffset="18" xadvance="25" page="0" chnl="0" />
|
||||
<char id="124" x="355" y="0" width="8" height="63" xoffset="4" yoffset="23" xadvance="16" page="0" chnl="0" />
|
||||
<char id="125" x="155" y="0" width="25" height="73" xoffset="-1" yoffset="18" xadvance="25" page="0" chnl="0" />
|
||||
<char id="126" x="218" y="362" width="42" height="16" xoffset="3" yoffset="47" xadvance="49" page="0" chnl="0" />
|
||||
<char id="127" x="0" y="0" width="70" height="98" xoffset="0" yoffset="-1" xadvance="70" page="0" chnl="0" />
|
||||
</chars>
|
||||
<kernings count="389">
|
||||
<kerning first="86" second="45" amount="-1" />
|
||||
<kerning first="114" second="46" amount="-4" />
|
||||
<kerning first="40" second="87" amount="1" />
|
||||
<kerning first="70" second="99" amount="-1" />
|
||||
<kerning first="84" second="110" amount="-3" />
|
||||
<kerning first="114" second="116" amount="1" />
|
||||
<kerning first="39" second="65" amount="-4" />
|
||||
<kerning first="104" second="34" amount="-1" />
|
||||
<kerning first="89" second="71" amount="-1" />
|
||||
<kerning first="107" second="113" amount="-1" />
|
||||
<kerning first="78" second="88" amount="1" />
|
||||
<kerning first="109" second="39" amount="-1" />
|
||||
<kerning first="120" second="100" amount="-1" />
|
||||
<kerning first="84" second="100" amount="-3" />
|
||||
<kerning first="68" second="90" amount="-1" />
|
||||
<kerning first="68" second="44" amount="-4" />
|
||||
<kerning first="84" second="103" amount="-3" />
|
||||
<kerning first="34" second="97" amount="-2" />
|
||||
<kerning first="70" second="97" amount="-1" />
|
||||
<kerning first="76" second="81" amount="-2" />
|
||||
<kerning first="73" second="89" amount="-1" />
|
||||
<kerning first="84" second="44" amount="-8" />
|
||||
<kerning first="68" second="65" amount="-3" />
|
||||
<kerning first="97" second="34" amount="-2" />
|
||||
<kerning first="111" second="121" amount="-1" />
|
||||
<kerning first="79" second="90" amount="-1" />
|
||||
<kerning first="75" second="121" amount="-1" />
|
||||
<kerning first="75" second="118" amount="-1" />
|
||||
<kerning first="111" second="118" amount="-1" />
|
||||
<kerning first="89" second="65" amount="-9" />
|
||||
<kerning first="75" second="71" amount="-4" />
|
||||
<kerning first="39" second="99" amount="-2" />
|
||||
<kerning first="75" second="99" amount="-1" />
|
||||
<kerning first="90" second="121" amount="-1" />
|
||||
<kerning first="44" second="39" amount="-6" />
|
||||
<kerning first="89" second="46" amount="-7" />
|
||||
<kerning first="89" second="74" amount="-7" />
|
||||
<kerning first="34" second="103" amount="-2" />
|
||||
<kerning first="70" second="103" amount="-1" />
|
||||
<kerning first="112" second="39" amount="-1" />
|
||||
<kerning first="122" second="113" amount="-1" />
|
||||
<kerning first="86" second="113" amount="-2" />
|
||||
<kerning first="68" second="84" amount="-1" />
|
||||
<kerning first="89" second="110" amount="-1" />
|
||||
<kerning first="34" second="100" amount="-2" />
|
||||
<kerning first="68" second="86" amount="-1" />
|
||||
<kerning first="87" second="45" amount="-2" />
|
||||
<kerning first="39" second="34" amount="-4" />
|
||||
<kerning first="114" second="100" amount="-1" />
|
||||
<kerning first="84" second="81" amount="-1" />
|
||||
<kerning first="70" second="101" amount="-1" />
|
||||
<kerning first="68" second="89" amount="-2" />
|
||||
<kerning first="88" second="117" amount="-1" />
|
||||
<kerning first="112" second="34" amount="-1" />
|
||||
<kerning first="76" second="67" amount="-2" />
|
||||
<kerning first="76" second="34" amount="-5" />
|
||||
<kerning first="88" second="111" amount="-1" />
|
||||
<kerning first="66" second="86" amount="-1" />
|
||||
<kerning first="66" second="89" amount="-2" />
|
||||
<kerning first="122" second="101" amount="-1" />
|
||||
<kerning first="86" second="101" amount="-2" />
|
||||
<kerning first="76" second="121" amount="-5" />
|
||||
<kerning first="84" second="119" amount="-2" />
|
||||
<kerning first="84" second="112" amount="-3" />
|
||||
<kerning first="87" second="111" amount="-1" />
|
||||
<kerning first="69" second="118" amount="-1" />
|
||||
<kerning first="65" second="117" amount="-2" />
|
||||
<kerning first="65" second="89" amount="-9" />
|
||||
<kerning first="72" second="89" amount="-1" />
|
||||
<kerning first="119" second="44" amount="-4" />
|
||||
<kerning first="69" second="121" amount="-1" />
|
||||
<kerning first="84" second="109" amount="-3" />
|
||||
<kerning first="84" second="122" amount="-2" />
|
||||
<kerning first="89" second="99" amount="-2" />
|
||||
<kerning first="76" second="118" amount="-5" />
|
||||
<kerning first="90" second="99" amount="-1" />
|
||||
<kerning first="90" second="103" amount="-1" />
|
||||
<kerning first="79" second="89" amount="-2" />
|
||||
<kerning first="90" second="79" amount="-1" />
|
||||
<kerning first="84" second="115" amount="-4" />
|
||||
<kerning first="76" second="65" amount="1" />
|
||||
<kerning first="90" second="100" amount="-1" />
|
||||
<kerning first="118" second="46" amount="-4" />
|
||||
<kerning first="87" second="117" amount="-1" />
|
||||
<kerning first="118" second="34" amount="1" />
|
||||
<kerning first="69" second="103" amount="-1" />
|
||||
<kerning first="97" second="121" amount="-1" />
|
||||
<kerning first="39" second="111" amount="-2" />
|
||||
<kerning first="72" second="88" amount="1" />
|
||||
<kerning first="76" second="87" amount="-5" />
|
||||
<kerning first="69" second="119" amount="-1" />
|
||||
<kerning first="121" second="97" amount="-1" />
|
||||
<kerning first="75" second="45" amount="-8" />
|
||||
<kerning first="65" second="86" amount="-9" />
|
||||
<kerning first="46" second="34" amount="-6" />
|
||||
<kerning first="76" second="84" amount="-10" />
|
||||
<kerning first="116" second="111" amount="-1" />
|
||||
<kerning first="87" second="113" amount="-1" />
|
||||
<kerning first="69" second="100" amount="-1" />
|
||||
<kerning first="97" second="118" amount="-1" />
|
||||
<kerning first="65" second="85" amount="-2" />
|
||||
<kerning first="90" second="71" amount="-1" />
|
||||
<kerning first="68" second="46" amount="-4" />
|
||||
<kerning first="65" second="79" amount="-3" />
|
||||
<kerning first="98" second="122" amount="-1" />
|
||||
<kerning first="86" second="41" amount="1" />
|
||||
<kerning first="84" second="118" amount="-3" />
|
||||
<kerning first="70" second="118" amount="-1" />
|
||||
<kerning first="121" second="111" amount="-1" />
|
||||
<kerning first="81" second="87" amount="-1" />
|
||||
<kerning first="70" second="100" amount="-1" />
|
||||
<kerning first="102" second="93" amount="1" />
|
||||
<kerning first="114" second="101" amount="-1" />
|
||||
<kerning first="88" second="45" amount="-2" />
|
||||
<kerning first="39" second="103" amount="-2" />
|
||||
<kerning first="75" second="103" amount="-1" />
|
||||
<kerning first="88" second="101" amount="-1" />
|
||||
<kerning first="89" second="103" amount="-2" />
|
||||
<kerning first="110" second="39" amount="-1" />
|
||||
<kerning first="89" second="89" amount="1" />
|
||||
<kerning first="87" second="65" amount="-2" />
|
||||
<kerning first="119" second="46" amount="-4" />
|
||||
<kerning first="34" second="34" amount="-4" />
|
||||
<kerning first="88" second="79" amount="-2" />
|
||||
<kerning first="79" second="86" amount="-1" />
|
||||
<kerning first="76" second="119" amount="-3" />
|
||||
<kerning first="75" second="111" amount="-1" />
|
||||
<kerning first="65" second="116" amount="-4" />
|
||||
<kerning first="86" second="65" amount="-9" />
|
||||
<kerning first="70" second="84" amount="1" />
|
||||
<kerning first="75" second="117" amount="-1" />
|
||||
<kerning first="80" second="65" amount="-9" />
|
||||
<kerning first="34" second="112" amount="-1" />
|
||||
<kerning first="102" second="99" amount="-1" />
|
||||
<kerning first="118" second="97" amount="-1" />
|
||||
<kerning first="89" second="81" amount="-1" />
|
||||
<kerning first="118" second="111" amount="-1" />
|
||||
<kerning first="102" second="101" amount="-1" />
|
||||
<kerning first="114" second="44" amount="-4" />
|
||||
<kerning first="90" second="119" amount="-1" />
|
||||
<kerning first="75" second="81" amount="-4" />
|
||||
<kerning first="88" second="121" amount="-1" />
|
||||
<kerning first="34" second="110" amount="-1" />
|
||||
<kerning first="86" second="100" amount="-2" />
|
||||
<kerning first="122" second="100" amount="-1" />
|
||||
<kerning first="89" second="67" amount="-1" />
|
||||
<kerning first="90" second="118" amount="-1" />
|
||||
<kerning first="84" second="84" amount="1" />
|
||||
<kerning first="121" second="34" amount="1" />
|
||||
<kerning first="91" second="74" amount="-1" />
|
||||
<kerning first="88" second="113" amount="-1" />
|
||||
<kerning first="77" second="88" amount="1" />
|
||||
<kerning first="75" second="119" amount="-2" />
|
||||
<kerning first="114" second="104" amount="-1" />
|
||||
<kerning first="68" second="88" amount="-2" />
|
||||
<kerning first="121" second="44" amount="-4" />
|
||||
<kerning first="81" second="89" amount="-1" />
|
||||
<kerning first="102" second="39" amount="1" />
|
||||
<kerning first="74" second="65" amount="-2" />
|
||||
<kerning first="114" second="118" amount="1" />
|
||||
<kerning first="84" second="46" amount="-8" />
|
||||
<kerning first="111" second="34" amount="-1" />
|
||||
<kerning first="88" second="71" amount="-2" />
|
||||
<kerning first="88" second="99" amount="-1" />
|
||||
<kerning first="84" second="74" amount="-8" />
|
||||
<kerning first="39" second="109" amount="-1" />
|
||||
<kerning first="98" second="34" amount="-1" />
|
||||
<kerning first="86" second="114" amount="-1" />
|
||||
<kerning first="88" second="81" amount="-2" />
|
||||
<kerning first="70" second="74" amount="-11" />
|
||||
<kerning first="89" second="83" amount="-1" />
|
||||
<kerning first="87" second="41" amount="1" />
|
||||
<kerning first="89" second="97" amount="-3" />
|
||||
<kerning first="89" second="87" amount="1" />
|
||||
<kerning first="67" second="125" amount="-1" />
|
||||
<kerning first="89" second="93" amount="1" />
|
||||
<kerning first="80" second="118" amount="1" />
|
||||
<kerning first="107" second="100" amount="-1" />
|
||||
<kerning first="114" second="34" amount="1" />
|
||||
<kerning first="89" second="109" amount="-1" />
|
||||
<kerning first="89" second="45" amount="-2" />
|
||||
<kerning first="70" second="44" amount="-8" />
|
||||
<kerning first="34" second="39" amount="-4" />
|
||||
<kerning first="88" second="67" amount="-2" />
|
||||
<kerning first="70" second="46" amount="-8" />
|
||||
<kerning first="102" second="41" amount="1" />
|
||||
<kerning first="89" second="117" amount="-1" />
|
||||
<kerning first="89" second="111" amount="-4" />
|
||||
<kerning first="89" second="115" amount="-4" />
|
||||
<kerning first="114" second="102" amount="1" />
|
||||
<kerning first="89" second="125" amount="1" />
|
||||
<kerning first="89" second="121" amount="-1" />
|
||||
<kerning first="114" second="108" amount="-1" />
|
||||
<kerning first="47" second="47" amount="-8" />
|
||||
<kerning first="65" second="63" amount="-2" />
|
||||
<kerning first="75" second="67" amount="-4" />
|
||||
<kerning first="87" second="100" amount="-1" />
|
||||
<kerning first="111" second="104" amount="-1" />
|
||||
<kerning first="111" second="107" amount="-1" />
|
||||
<kerning first="75" second="109" amount="-1" />
|
||||
<kerning first="87" second="114" amount="-1" />
|
||||
<kerning first="111" second="120" amount="-1" />
|
||||
<kerning first="69" second="99" amount="-1" />
|
||||
<kerning first="65" second="84" amount="-6" />
|
||||
<kerning first="39" second="97" amount="-2" />
|
||||
<kerning first="121" second="46" amount="-4" />
|
||||
<kerning first="89" second="85" amount="-3" />
|
||||
<kerning first="75" second="79" amount="-4" />
|
||||
<kerning first="107" second="99" amount="-1" />
|
||||
<kerning first="102" second="100" amount="-1" />
|
||||
<kerning first="102" second="103" amount="-1" />
|
||||
<kerning first="75" second="110" amount="-1" />
|
||||
<kerning first="39" second="110" amount="-1" />
|
||||
<kerning first="69" second="84" amount="1" />
|
||||
<kerning first="84" second="111" amount="-3" />
|
||||
<kerning first="120" second="111" amount="-1" />
|
||||
<kerning first="84" second="114" amount="-3" />
|
||||
<kerning first="112" second="120" amount="-1" />
|
||||
<kerning first="79" second="84" amount="-1" />
|
||||
<kerning first="84" second="117" amount="-3" />
|
||||
<kerning first="89" second="79" amount="-1" />
|
||||
<kerning first="75" second="113" amount="-1" />
|
||||
<kerning first="39" second="113" amount="-2" />
|
||||
<kerning first="80" second="44" amount="-11" />
|
||||
<kerning first="79" second="88" amount="-2" />
|
||||
<kerning first="98" second="39" amount="-1" />
|
||||
<kerning first="65" second="118" amount="-4" />
|
||||
<kerning first="65" second="34" amount="-4" />
|
||||
<kerning first="88" second="103" amount="-1" />
|
||||
<kerning first="77" second="89" amount="-1" />
|
||||
<kerning first="39" second="101" amount="-2" />
|
||||
<kerning first="75" second="101" amount="-1" />
|
||||
<kerning first="88" second="100" amount="-1" />
|
||||
<kerning first="78" second="65" amount="-3" />
|
||||
<kerning first="87" second="44" amount="-4" />
|
||||
<kerning first="67" second="41" amount="-1" />
|
||||
<kerning first="86" second="93" amount="1" />
|
||||
<kerning first="84" second="83" amount="-1" />
|
||||
<kerning first="102" second="113" amount="-1" />
|
||||
<kerning first="34" second="111" amount="-2" />
|
||||
<kerning first="70" second="111" amount="-1" />
|
||||
<kerning first="86" second="99" amount="-2" />
|
||||
<kerning first="84" second="86" amount="1" />
|
||||
<kerning first="122" second="99" amount="-1" />
|
||||
<kerning first="84" second="89" amount="1" />
|
||||
<kerning first="70" second="114" amount="-1" />
|
||||
<kerning first="86" second="74" amount="-8" />
|
||||
<kerning first="89" second="38" amount="-1" />
|
||||
<kerning first="87" second="97" amount="-1" />
|
||||
<kerning first="76" second="86" amount="-9" />
|
||||
<kerning first="40" second="86" amount="1" />
|
||||
<kerning first="90" second="113" amount="-1" />
|
||||
<kerning first="39" second="39" amount="-4" />
|
||||
<kerning first="111" second="39" amount="-1" />
|
||||
<kerning first="90" second="117" amount="-1" />
|
||||
<kerning first="89" second="41" amount="1" />
|
||||
<kerning first="65" second="121" amount="-4" />
|
||||
<kerning first="89" second="100" amount="-2" />
|
||||
<kerning first="89" second="42" amount="-2" />
|
||||
<kerning first="76" second="117" amount="-2" />
|
||||
<kerning first="69" second="111" amount="-1" />
|
||||
<kerning first="46" second="39" amount="-6" />
|
||||
<kerning first="118" second="39" amount="1" />
|
||||
<kerning first="91" second="85" amount="-1" />
|
||||
<kerning first="80" second="90" amount="-1" />
|
||||
<kerning first="90" second="81" amount="-1" />
|
||||
<kerning first="69" second="117" amount="-1" />
|
||||
<kerning first="76" second="39" amount="-5" />
|
||||
<kerning first="90" second="67" amount="-1" />
|
||||
<kerning first="87" second="103" amount="-1" />
|
||||
<kerning first="84" second="120" amount="-3" />
|
||||
<kerning first="89" second="101" amount="-2" />
|
||||
<kerning first="102" second="125" amount="1" />
|
||||
<kerning first="76" second="85" amount="-2" />
|
||||
<kerning first="79" second="65" amount="-3" />
|
||||
<kerning first="65" second="71" amount="-3" />
|
||||
<kerning first="79" second="44" amount="-4" />
|
||||
<kerning first="97" second="39" amount="-2" />
|
||||
<kerning first="90" second="101" amount="-1" />
|
||||
<kerning first="65" second="87" amount="-5" />
|
||||
<kerning first="79" second="46" amount="-4" />
|
||||
<kerning first="87" second="99" amount="-1" />
|
||||
<kerning first="34" second="101" amount="-2" />
|
||||
<kerning first="40" second="89" amount="1" />
|
||||
<kerning first="76" second="89" amount="-8" />
|
||||
<kerning first="69" second="113" amount="-1" />
|
||||
<kerning first="120" second="103" amount="-1" />
|
||||
<kerning first="69" second="101" amount="-1" />
|
||||
<kerning first="69" second="102" amount="-1" />
|
||||
<kerning first="104" second="39" amount="-1" />
|
||||
<kerning first="80" second="121" amount="1" />
|
||||
<kerning first="86" second="46" amount="-8" />
|
||||
<kerning first="65" second="81" amount="-3" />
|
||||
<kerning first="86" second="44" amount="-8" />
|
||||
<kerning first="120" second="99" amount="-1" />
|
||||
<kerning first="98" second="120" amount="-1" />
|
||||
<kerning first="39" second="115" amount="-3" />
|
||||
<kerning first="121" second="39" amount="1" />
|
||||
<kerning first="88" second="118" amount="-1" />
|
||||
<kerning first="84" second="65" amount="-6" />
|
||||
<kerning first="65" second="39" amount="-4" />
|
||||
<kerning first="84" second="79" amount="-1" />
|
||||
<kerning first="65" second="119" amount="-4" />
|
||||
<kerning first="70" second="117" amount="-1" />
|
||||
<kerning first="75" second="100" amount="-1" />
|
||||
<kerning first="86" second="111" amount="-2" />
|
||||
<kerning first="122" second="111" amount="-1" />
|
||||
<kerning first="81" second="84" amount="-2" />
|
||||
<kerning first="107" second="103" amount="-1" />
|
||||
<kerning first="118" second="44" amount="-4" />
|
||||
<kerning first="87" second="46" amount="-4" />
|
||||
<kerning first="87" second="101" amount="-1" />
|
||||
<kerning first="70" second="79" amount="-2" />
|
||||
<kerning first="87" second="74" amount="-2" />
|
||||
<kerning first="123" second="74" amount="-1" />
|
||||
<kerning first="76" second="71" amount="-2" />
|
||||
<kerning first="39" second="100" amount="-2" />
|
||||
<kerning first="80" second="88" amount="-1" />
|
||||
<kerning first="84" second="121" amount="-3" />
|
||||
<kerning first="112" second="122" amount="-1" />
|
||||
<kerning first="84" second="71" amount="-1" />
|
||||
<kerning first="89" second="86" amount="1" />
|
||||
<kerning first="84" second="113" amount="-3" />
|
||||
<kerning first="120" second="113" amount="-1" />
|
||||
<kerning first="89" second="44" amount="-7" />
|
||||
<kerning first="84" second="99" amount="-3" />
|
||||
<kerning first="34" second="113" amount="-2" />
|
||||
<kerning first="80" second="46" amount="-11" />
|
||||
<kerning first="86" second="117" amount="-1" />
|
||||
<kerning first="110" second="34" amount="-1" />
|
||||
<kerning first="80" second="74" amount="-7" />
|
||||
<kerning first="120" second="101" amount="-1" />
|
||||
<kerning first="73" second="88" amount="1" />
|
||||
<kerning first="108" second="111" amount="-1" />
|
||||
<kerning first="34" second="115" amount="-3" />
|
||||
<kerning first="89" second="113" amount="-2" />
|
||||
<kerning first="82" second="86" amount="-3" />
|
||||
<kerning first="114" second="39" amount="1" />
|
||||
<kerning first="34" second="109" amount="-1" />
|
||||
<kerning first="84" second="101" amount="-3" />
|
||||
<kerning first="70" second="121" amount="-1" />
|
||||
<kerning first="123" second="85" amount="-1" />
|
||||
<kerning first="122" second="103" amount="-1" />
|
||||
<kerning first="86" second="97" amount="-2" />
|
||||
<kerning first="82" second="89" amount="-4" />
|
||||
<kerning first="66" second="84" amount="-1" />
|
||||
<kerning first="84" second="97" amount="-4" />
|
||||
<kerning first="86" second="103" amount="-2" />
|
||||
<kerning first="70" second="113" amount="-1" />
|
||||
<kerning first="84" second="87" amount="1" />
|
||||
<kerning first="75" second="112" amount="-1" />
|
||||
<kerning first="114" second="111" amount="-1" />
|
||||
<kerning first="39" second="112" amount="-1" />
|
||||
<kerning first="107" second="101" amount="-1" />
|
||||
<kerning first="82" second="84" amount="-3" />
|
||||
<kerning first="114" second="121" amount="1" />
|
||||
<kerning first="34" second="99" amount="-2" />
|
||||
<kerning first="70" second="81" amount="-2" />
|
||||
<kerning first="111" second="122" amount="-1" />
|
||||
<kerning first="84" second="67" amount="-1" />
|
||||
<kerning first="111" second="108" amount="-1" />
|
||||
<kerning first="89" second="84" amount="1" />
|
||||
<kerning first="76" second="79" amount="-2" />
|
||||
<kerning first="85" second="65" amount="-2" />
|
||||
<kerning first="44" second="34" amount="-6" />
|
||||
<kerning first="65" second="67" amount="-3" />
|
||||
<kerning first="109" second="34" amount="-1" />
|
||||
<kerning first="114" second="103" amount="-1" />
|
||||
<kerning first="78" second="89" amount="-1" />
|
||||
<kerning first="89" second="114" amount="-1" />
|
||||
<kerning first="89" second="112" amount="-1" />
|
||||
<kerning first="34" second="65" amount="-4" />
|
||||
<kerning first="70" second="65" amount="-11" />
|
||||
<kerning first="81" second="86" amount="-1" />
|
||||
<kerning first="114" second="119" amount="1" />
|
||||
<kerning first="89" second="102" amount="-1" />
|
||||
<kerning first="84" second="45" amount="-8" />
|
||||
<kerning first="86" second="125" amount="1" />
|
||||
<kerning first="70" second="67" amount="-2" />
|
||||
<kerning first="89" second="116" amount="-1" />
|
||||
<kerning first="102" second="34" amount="1" />
|
||||
<kerning first="114" second="99" amount="-1" />
|
||||
<kerning first="67" second="84" amount="-1" />
|
||||
<kerning first="114" second="113" amount="-1" />
|
||||
<kerning first="89" second="122" amount="-1" />
|
||||
<kerning first="89" second="118" amount="-1" />
|
||||
<kerning first="70" second="71" amount="-2" />
|
||||
<kerning first="114" second="107" amount="-1" />
|
||||
<kerning first="89" second="120" amount="-1" />
|
||||
</kernings>
|
||||
</font>
|
||||
|
||||
@@ -153,16 +153,22 @@ class InputWaiter {
|
||||
paste(event, view) {
|
||||
const clipboardData = event.clipboardData;
|
||||
const items = clipboardData.items;
|
||||
const files = [];
|
||||
let files = [];
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
const item = items[i];
|
||||
if (item.kind === "file") {
|
||||
const file = item.getAsFile();
|
||||
files.push(file);
|
||||
|
||||
event.preventDefault(); // Prevent the default paste behavior
|
||||
if (item.kind === "string") {
|
||||
// If there are any string items they should be preferred over
|
||||
// files.
|
||||
files = [];
|
||||
break;
|
||||
} else if (item.kind === "file") {
|
||||
files.push(item.getAsFile());
|
||||
}
|
||||
}
|
||||
if (files.length > 0) {
|
||||
// Prevent the default paste behavior, afterPaste will load the files instead
|
||||
event.preventDefault();
|
||||
}
|
||||
setTimeout(() => {
|
||||
self.afterPaste(files);
|
||||
});
|
||||
|
||||
@@ -34,7 +34,14 @@ module.exports = {
|
||||
testOp(browser, "AES Encrypt", "test input", "e42eb8fbfb7a98fff061cd2c1a794d92", [{"option": "Hex", "string": "00112233445566778899aabbccddeeff"}, {"option": "Hex", "string": "00000000000000000000000000000000"}, "CBC", "Raw", "Hex"]);
|
||||
testOp(browser, "AND", "test input", "4$04 $044", [{ "option": "Hex", "string": "34" }]);
|
||||
testOp(browser, "Add line numbers", "test input", "1 test input");
|
||||
testOp(browser, ["From Hex", "Add Text To Image", "To Base64"], Images.PNG_HEX, Images.PNG_CHEF_B64, [[], ["Chef", "Center", "Middle", 0, 0, 16], []]);
|
||||
testOp(browser, ["From Hex", "Add Text To Image", "SHA2"], Images.PNG_HEX, "50cdf8ea483c55564a091650c2bccb4586f919b721e5fe9d6a61660505b4346d6ebdb2ef0cf075a7728cd84cb26ea3e477b5bd86a94a49a27d79423994afb60a", [[], ["Chef", "Center", "Middle", 0, 0, 16, "Roboto"], []]);
|
||||
testOp(browser, ["From Hex", "Add Text To Image", "SHA2"], Images.PNG_HEX, "78b3055463d9167dd039e47f451acaf06c593d209f8e405b4e18011cdcf190dc0af5952be887d93c0ebd38738e978120c1294c71104e6b00d3f9de8d6320ec1c", [[], ["Chef", "Center", "Middle", 0, 0, 16, "Roboto Black"], []]);
|
||||
testOp(browser, ["From Hex", "Add Text To Image", "SHA2"], Images.PNG_HEX, "4ab4d4b6cb22ad700f6cd144c2c8ecad2a094f21a1d1d5d48eb6c8f97417192f89b4512f6a78276d49668ebef5e89c3a4d14860cb79399a0dafce98c92209e07", [[], ["Chef", "Center", "Middle", 0, 0, 16, "Roboto Mono"], []]);
|
||||
testOp(browser, ["From Hex", "Add Text To Image", "SHA2"], Images.PNG_HEX, "11490db4907516b4d9e256da1ac0b02b561fa7547971e6316a8a0b90c9c66585a11f3145672c6d972b1a221d3bfad9c8a97de7ff77fd9442ebc40f39c1ef9ef7", [[], ["Chef", "Center", "Middle", 0, 0, 16, "Roboto Slab"], []]);
|
||||
testOp(browser, ["From Hex", "Dither Image", "SHA2"], Images.PNG_HEX, "cbf587a78915cfb14546ba83080b13e5054800802488dd0cb786b8951e7dc0b48f055260917bd0ccfc075e422b9d6aff112948562653995d74e70f0b66367ac3", [[], [], []]);
|
||||
testOp(browser, ["From Hex", "Generate Image", "SHA2"], Images.PNG_HEX, "2c451762a6c9192fd31dc80765eab3f447be70ea51f6fdb6911ade4d89d4a98bd0a1ff00b08d76aac472faeceb54b66092e3f3be7bbf899bf3e55ca9c96a56aa", [[], [], []]);
|
||||
testOp(browser, ["From Hex", "Image Hue/Saturation/Lightness", "SHA2"], Images.PNG_HEX, "522dfc0bbef00e05c5d6861a002039fa2952e4bbb7fe8d21d0d538ef6f9d65da82065929b4150dc5b8b49460ee6c9bef7f660b86f8d4e7442a07c61c0a152a4b", [[], [50, 50, 50], []]);
|
||||
testOp(browser, ["From Hex", "Resize Image", "SHA2"], Images.PNG_HEX, "654bfbf0a0537c901459c4bc22c5fb0bacbf01af775a0733e3a1c46cda5b699bcc4ed85322d813c7bb9b245d62d64425c0766fe03d3d20bc63634e2a4df17626", [[], [64, 64], []]);
|
||||
testOp(browser, "Adler-32 Checksum", "test input", "16160411");
|
||||
testOp(browser, "Affine Cipher Decode", "test input", "rcqr glnsr", [1, 2]);
|
||||
testOp(browser, "Affine Cipher Encode", "test input", "gndg zoujg", [3, 1]);
|
||||
@@ -58,7 +65,10 @@ module.exports = {
|
||||
testOp(browser, "Bit shift right", "test input", ":29:\u0010478::");
|
||||
testOp(browser, "Blowfish Decrypt", "10884e15427dd84ec35204e9c8e921ae", "test_output", [{"option": "Hex", "string": "1234567801234567"}, {"option": "Hex", "string": "0011223344556677"}, "CBC", "Hex", "Raw"]);
|
||||
testOp(browser, "Blowfish Encrypt", "test input", "f0fadbd1d90d774f714248cf26b96410", [{"option": "Hex", "string": "1234567801234567"}, {"option": "Hex", "string": "0011223344556677"}, "CBC", "Raw", "Hex"]);
|
||||
testOp(browser, ["From Hex", "Blur Image", "To Base64"], Images.PNG_HEX, Images.PNG_BLUR_B64);
|
||||
testOp(browser, ["From Hex", "Blur Image", "SHA2"], Images.PNG_HEX, "24f2e89f3e00cc35f551bbc48ea82e76474946ce0282183494d1ca3d3b0012c27b6102c4368ae056dc7fecb6df7886d86ff3d29b7e5965493f30c371eee9a24e");
|
||||
testOp(browser, ["From Hex", "Blur Image", "SHA2"], Images.PNG_HEX, "2c49d89fc10c94352c9a19f82de353c37928831d6f976a6b36eb918825a0ba027980801838228a4a0da63f1886e4fa59b6666f992ad2d2b7d4622253dc034052", [[], [5, "Gaussian"], []]);
|
||||
testOp(browser, ["From Hex", "Sharpen Image", "SHA2"], Images.PNG_HEX, "acc7027642c2eeb67d7356a80ed8a1bdce9adabf656ea1294e47723f506626a7aa41f1660fa844a1e1e83b17180017ab0d5bccd7f6a341692832020dc887eaa5");
|
||||
testOp(browser, ["From Hex", "Contain Image", "SHA2"], Images.PNG_HEX, "cb871ad0722d487d56a2b18247b1aa30ecc244eb717e08e23a55cae78759553312dc1717196d7cb9daa04743e57c56fc3901ba92be5a68fb03c377f718e8efe7");
|
||||
testOpHtml(browser, "Bombe", "XTSYN WAEUG EZALY NRQIM AMLZX MFUOD AWXLY LZCUZ QOQBQ JLCPK NDDRW F", "table tr:last-child td:first-child", "ECG", ["3-rotor", "LEYJVCNIXWPBQMDRTAKZGFUHOS", "BDFHJLCPRTXVZNYEIWGAKMUSQO<W", "AJDKSIRUXBLHWTMCQGZNPYFVOE<F", "ESOVPZJAYQUIRHXLNFTGKDCMWB<K", "AY BR CU DH EQ FS GL IP JX KN MO TZ VW", "HELLO CYBER CHEFU SER", 0, true]);
|
||||
testOp(browser, ["Bzip2 Compress", "To Hex"], "test input", "42 5a 68 39 31 41 59 26 53 59 cf 96 82 1d 00 00 03 91 80 40 00 02 21 4e 00 20 00 21 90 c2 10 c0 88 33 92 8e df 17 72 45 38 50 90 cf 96 82 1d");
|
||||
testOp(browser, ["From Hex", "Bzip2 Decompress"], "425a68393141592653597b0884b7000003038000008200ce00200021a647a4218013709517c5dc914e14241ec2212dc0", "test_output", [[], [true]]);
|
||||
|
||||
@@ -76,6 +76,7 @@ import "./tests/FromDecimal.mjs";
|
||||
import "./tests/GenerateAllChecksums.mjs";
|
||||
import "./tests/GenerateAllHashes.mjs";
|
||||
import "./tests/GenerateDeBruijnSequence.mjs";
|
||||
import "./tests/GenerateQRCode.mjs";
|
||||
import "./tests/GetAllCasings.mjs";
|
||||
import "./tests/GOST.mjs";
|
||||
import "./tests/Gunzip.mjs";
|
||||
|
||||
67
tests/operations/tests/GenerateQRCode.mjs
Normal file
67
tests/operations/tests/GenerateQRCode.mjs
Normal file
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
* Generate QR Code tests
|
||||
*
|
||||
* @author GCHQDeveloper581
|
||||
* @copyright Crown Copyright 2025
|
||||
* @license Apache-2.0
|
||||
*/
|
||||
import TestRegister from "../../lib/TestRegister.mjs";
|
||||
|
||||
TestRegister.addTests([
|
||||
{
|
||||
name: "Generate QR Code : PNG",
|
||||
input: "Hello world!",
|
||||
expectedOutput: "89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 91 00 00 00 91 08 00 00 00 00 e6 b3 05 ff 00 00 01 1a 49 44 41 54 78 da ed da 41 12 83 20 0c 05 50 ef 7f e9 76 dd 05 f4 47 6c c4 ce 63 e5 8c 0c be 4d 24 24 1c af dd c6 41 44 44 44 44 44 44 44 44 44 f4 9f a2 e3 fb 98 cf 2b ad 42 44 d4 2a 1a 07 c3 e7 37 83 a7 d2 37 88 88 1a 44 c3 18 1a 46 e7 ca 2a 44 44 7b 88 4a f3 88 88 1e 23 9a ef 09 44 44 fb 8a 82 b7 c3 3c fe 8e 8c 8d 88 e8 b2 33 6d ba b3 f4 9d b2 89 88 16 eb 90 f3 a5 ef a8 8c 12 11 55 f3 a3 61 a2 93 e6 4c c3 45 89 88 ba 44 a5 e4 e7 64 5d 9d 88 a8 5f 14 74 82 d2 8a 64 5a b4 24 22 6a 10 a5 2d cf 79 3f e9 6c 53 89 88 e8 a7 a2 79 4f a8 b4 b3 ac 57 6b 88 88 ae 15 a5 de b9 bc 14 70 44 44 3f 13 ad d4 21 03 ea d9 6a 0d 11 d1 15 a2 e0 ff 5f 47 07 36 22 a2 06 d1 4a d2 1f 1c 94 89 88 b6 14 95 ee d5 12 11 3d 50 14 74 8c 82 70 24 22 ea 12 05 6f d3 4b 2c 4b d5 1a 22 a2 cb 44 2b 69 7d e9 5e 00 11 51 97 e8 d6 41 44 44 44 44 44 44 44 44 44 f4 7c d1 1b 1c 52 72 cb 26 c8 c7 0b 00 00 00 00 49 45 4e 44 ae 42 60 82",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "Generate QR Code",
|
||||
"args": ["PNG", 5, 4, "Medium"]
|
||||
},
|
||||
{
|
||||
"op": "To Hex",
|
||||
"args": ["Space", 0]
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Generate QR Code : SVG",
|
||||
input: "Hello world!",
|
||||
expectedOutput: '<svg xmlns="http://www.w3.org/2000/svg" width="145" height="145" viewBox="0 0 29 29"><path d="M4 4h7v7h-7zM12 4h5v2h-1v-1h-1v1h1v1h1v1h-2v3h-1v-1h-1v-1h1v-4h-1v1h-1zM18 4h7v7h-7zM5 5v5h5v-5zM19 5v5h5v-5zM6 6h3v3h-3zM20 6h3v3h-3zM12 7h1v1h-1zM12 10h1v1h1v1h-2zM16 10h1v1h-1zM4 12h1v1h-1zM6 12h2v2h-1v1h1v-1h3v1h-1v1h-2v1h-2v-1h-1v-1h-1v-1h2zM9 12h3v2h-1v-1h-2zM14 12h1v2h-2v-1h1zM18 12h1v1h2v-1h1v1h1v1h-3v2h-1v-2h-1v1h-1v1h-1v-3h2zM23 12h2v3h-1v1h-1v-2h1v-1h-1zM12 14h1v1h-1zM11 15h1v2h-2v-1h1zM14 15h1v1h-1zM21 15h1v1h-1zM15 16h1v2h-1v1h2v-1h1v-1h-1v-1h2v1h2v2h-1v1h-1v-1h-1v1h-2v1h-1v-1h-1v1h-1v-1h-1v-3h3zM24 16h1v2h-1zM22 17h1v1h-1zM4 18h7v7h-7zM13 18v1h1v-1zM5 19v5h5v-5zM21 19h2v1h1v2h-1v1h-1v-1h-1zM6 20h3v3h-3zM12 21h1v2h-1zM14 21h1v1h-1zM16 21h1v2h-1zM18 21h1v1h-1zM19 22h1v1h1v1h-1v1h-3v-2h2zM13 23h1v1h-1zM15 23h1v2h-2v-1h1zM24 23h1v1h-1zM12 24h1v1h-1zM22 24h1v1h-1z"/></svg>',
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "Generate QR Code",
|
||||
"args": ["SVG", 5, 4, "Medium"]
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Generate QR Code : EPS",
|
||||
input: "Hello world!",
|
||||
expectedOutput: "%!PS-Adobe-3.0 EPSF-3.0%%BoundingBox: 0 0 315 315/h { 0 rlineto } bind def/v { 0 exch neg rlineto } bind def/M { neg 30 add moveto } bind def/z { closepath } bind def9 9 scale5 0 M 7 h 7 v -7 h z13 0 M 1 h 1 v -1 h z16 0 M 2 h 1 v -1 h 1 v 1 h 1 v -2 h -1 v -1 h 2 v -1 h -3 v 2 h z20 0 M 2 h 1 v -2 h z23 0 M 7 h 7 v -7 h z6 1 M 5 v 5 h -5 v z24 1 M 5 v 5 h -5 v z7 2 M 3 h 3 v -3 h z19 2 M 1 h 1 v -1 h z21 2 M 1 h 2 v -1 h z25 2 M 3 h 3 v -3 h z13 4 M 1 h 3 v -1 h z17 4 M 4 h 1 v 1 h 2 v -1 h -1 v -1 h 1 v -1 h -1 v -1 h -1 v -1 h z15 6 M 1 h 1 v -1 h z17 6 M 1 h 1 v -1 h z16 7 M 1 h 1 v -1 h z18 7 M 1 h 1 v -1 h z20 7 M 1 h 2 v 1 h 1 v -2 h -1 v -1 h -1 v 1 h z6 8 M 7 h 1 v 2 h 1 v -2 h 1 v -2 h -1 v 1 h -1 v -4 h 1 v -1 h -1 v -1 h z17 8 M 1 h 1 v -1 h z24 8 M 2 h 1 v -1 h 1 v -1 h z29 8 M 1 h 1 v -1 h z27 9 M 1 h 1 v -1 h z6 10 M 1 h 1 v 1 h 1 v -1 h 1 v -1 h z8 10 M 2 h 5 v 1 h 1 v -3 h 1 v -1 h -4 v 1 h 1 v 1 h -1 v -1 h -1 v 1 h -1 v -1 h z16 10 M 2 h 4 v 1 h -1 v 2 h 1 v 3 h -1 v -3 h -2 v 1 h 1 v 1 h -1 v 1 h 1 v 4 h -2 v 2 h 3 v -2 h 1 v -1 h -1 v -2 h 1 v 2 h 1 v -1 h 1 v 2 h 2 v 1 h -1 v 1 h 3 v -1 h -1 v -2 h -2 v -1 h 2 v 1 h 1 v 2 h 1 v -2 h 2 v -1 h -1 v -1 h -1 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -1 v -1 h -1 v 1 h -2 v -1 h -1 v -1 h 1 v 1 h 2 v -1 h -1 v -1 h 1 v -1 h -3 v 1 h -1 v -1 h 1 v -1 h -1 v -1 h -1 v 4 h 1 v 1 h -2 v -3 h -1 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h 1 v -2 h -1 v 1 h -1 v -1 h -1 v 1 h -1 v 1 h -1 v 1 h 1 v 1 h -1 v 1 h 1 v 1 h -1 v -1 h z22 10 M 1 h 1 v -1 h z25 10 M 2 h 1 v -2 h z19 11 M 1 h 1 v -1 h z11 12 M 1 h 1 v -1 h z5 13 M 1 h 4 v -1 h z28 14 M 2 h 2 v -1 h -1 v -1 h z21 15 M 1 v 2 h -1 v z13 17 M 1 h 1 v 2 h 1 v -2 h 1 v 1 h 1 v 1 h 1 v -2 h 1 v 2 h 2 v -1 h -1 v -2 h z22 17 M 3 v 3 h -3 v z5 18 M 7 h 7 v -7 h z23 18 M 1 h 1 v -1 h z6 19 M 5 v 5 h -5 v z7 20 M 3 h 3 v -3 h z29 21 M 1 h 4 v -3 h -1 v 2 h z17 22 M 2 h 3 v -2 h -1 v 1 h -1 v -1 h z24 22 M 1 h 1 v 1 h 1 v -1 h 1 v -3 h -1 v 1 h -1 v 1 h z20 23 M 1 h 2 v -1 h zfill%%EOF",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "Generate QR Code",
|
||||
"args": ["EPS", 6, 5, "Quartile"]
|
||||
},
|
||||
{
|
||||
"op": "Remove whitespace",
|
||||
"args": [false, true, true, false, false, false]
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Generate QR Code : PDF",
|
||||
input: "Hello world!",
|
||||
expectedOutput: "%PDF-1.01 0 obj << /Type /Catalog /Pages 2 0 R >> endobj2 0 obj << /Type /Pages /Count 1 /Kids [ 3 0 R ] >> endobj3 0 obj << /Type /Page /Parent 2 0 R /Resources <<>> /Contents 4 0 R /MediaBox [ 0 0 261 261 ] >> endobj4 0 obj << /Length 1837 >> stream9 0 0 9 0 0 cm4 25 m 11 25 l 11 18 l 4 18 l h12 25 m 14 25 l 14 23 l 13 23 l 13 24 l 12 24 l h16 25 m 17 25 l 17 22 l 16 22 l h18 25 m 25 25 l 25 18 l 18 18 l h5 24 m 5 19 l 10 19 l 10 24 l h19 24 m 19 19 l 24 19 l 24 24 l h6 23 m 9 23 l 9 20 l 6 20 l h12 23 m 13 23 l 13 21 l 15 21 l 15 20 l 12 20 l h14 23 m 15 23 l 15 22 l 14 22 l h20 23 m 23 23 l 23 20 l 20 20 l h15 22 m 16 22 l 16 21 l 15 21 l h12 19 m 13 19 l 13 18 l 12 18 l h14 19 m 15 19 l 15 13 l 13 13 l 13 11 l 12 11 l 12 14 l 14 14 l 14 15 l 11 15 l 11 16 l 12 16 l 12 17 l 13 17 l 13 16 l 14 16 l 14 17 l 13 17 l 13 18 l 14 18 l h16 19 m 17 19 l 17 18 l 16 18 l h4 17 m 8 17 l 8 16 l 10 16 l 10 15 l 11 15 l 11 14 l 10 14 l 10 13 l 11 13 l 11 12 l 9 12 l 9 15 l 8 15 l 8 13 l 6 13 l 6 15 l 7 15 l 7 16 l 4 16 l h10 17 m 11 17 l 11 16 l 10 16 l h17 17 m 18 17 l 18 16 l 20 16 l 20 17 l 23 17 l 23 15 l 20 15 l 20 13 l 19 13 l 19 15 l 18 15 l 18 14 l 17 14 l 17 13 l 16 13 l 16 16 l 17 16 l h24 17 m 25 17 l 25 14 l 24 14 l 24 13 l 23 13 l 23 15 l 24 15 l h21 14 m 22 14 l 22 13 l 21 13 l h15 13 m 16 13 l 16 11 l 15 11 l h17 13 m 19 13 l 19 12 l 21 12 l 21 10 l 20 10 l 20 9 l 19 9 l 19 10 l 18 10 l 18 9 l 16 9 l 16 8 l 15 8 l 15 10 l 17 10 l 17 11 l 18 11 l 18 12 l 17 12 l h24 13 m 25 13 l 25 11 l 24 11 l h22 12 m 23 12 l 23 11 l 22 11 l h4 11 m 11 11 l 11 4 l 4 4 l h14 11 m 15 11 l 15 10 l 14 10 l h5 10 m 5 5 l 10 5 l 10 10 l h13 10 m 14 10 l 14 9 l 13 9 l h21 10 m 23 10 l 23 9 l 24 9 l 24 7 l 23 7 l 23 6 l 22 6 l 22 7 l 21 7 l h6 9 m 9 9 l 9 6 l 6 6 l h12 8 m 15 8 l 15 7 l 13 7 l 13 6 l 16 6 l 16 4 l 15 4 l 15 5 l 14 5 l 14 4 l 12 4 l h16 8 m 17 8 l 17 6 l 16 6 l h18 8 m 19 8 l 19 7 l 18 7 l h19 7 m 20 7 l 20 6 l 21 6 l 21 5 l 20 5 l 20 4 l 17 4 l 17 6 l 19 6 l h24 6 m 25 6 l 25 5 l 24 5 l h22 5 m 23 5 l 23 4 l 22 4 l hfendstreamendobjxref0 50000000000 65535 f 0000000010 00000 n 0000000059 00000 n 0000000118 00000 n 0000000223 00000 n trailer << /Root 1 0 R /Size 5 >>startxref2111%%EOF",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "Generate QR Code",
|
||||
"args": ["PDF", 5, 4, "Low"]
|
||||
},
|
||||
{
|
||||
"op": "Remove whitespace",
|
||||
"args": [false, true, true, false, false, false]
|
||||
},
|
||||
],
|
||||
},
|
||||
]);
|
||||
@@ -18,18 +18,6 @@ export const GIF_ANIMATED_HEX = "4749463839610f000f00b30b00424242ffe700ffef00ffc
|
||||
*/
|
||||
export const PNG_HEX = "89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af400000006624b474400ff00ff00ffa0bda793000000097048597300000dd700000dd70142289b78000005184944415458c3c5575d6c145514feeeccecccacdbddb6e096a5dbcdb6d06d80d06090466d6953454ab52ad0a65589840ac1d02a313c989af062820fa66210130d9a68b0363c34610135690b188b7183c13f44506c8115ba535ab6ddd2617f667f66ae0fb41596ddee2eadf13c4de69e7bcf77cff9cecf25b83f613b3b3b975b2c96f25028c47a3c9e1f5a5a5a7e05a0016000d0c9ef9442d23448a60edeb973a769c78e1d077272721a65594620106000505996bf1a1f1f3f67369bebc2e1f0ef6bd7aedd0a409d2d00e2743a1f2929296915046199a66901007aa3d1580600131313da24000000a594124288aaaab72a2b2bed1d1d1d8f8ba2386fc3860d9f25f3c84c0088cbe56a2d2c2cdc4708d12552880770a7288a3228088215003c1ecfd68d1b377e9e488f4b66dde974aeb2dbed498da71251146d538ed1b4e4746092dddee170b4300ca3c32c251c0edfd8bc79f3d164de4e0680110461794a02119292c482202c387efcf86f3d3d3d7b13814816024a2955e62a8b4451b4abaafad8e485d5743ca005028153699c4dd30c83140a857e4c9409c900a0bbbbfbc368343a34a3754a693a1c58b76eddf2dadada5d89002705b07bf7eee13367ce3cab284aff6c482808425e6767e70bc9ea0033d3e6c6c6c65fd6ac5953a1695a3453c3a150c84d295529a59aa669914cd3705adc6eb7926eaca74455d5605555d5c3030303f59224bd525f5f7f30992e87ff40344d5328a5caa64d9bbe4ca5cbe07f1666ae522dae40a5dd8ed30941c8e5727d63341a9f8a5f181a1ac2f0f07022029e02109d2b00bae2e26207cbb2f72cf03c8f9c9c9c441c580c804dc70b330258b6c020beb87ac9abecb59f8b087377b4f4f30a68b6de482549a29224ddb5168bc51cd5d5d54ff6f5f575cfa69633edeb971c78e2d195db055e77cfb6a2eaadb816e5b59ffafb19a7d3095555e3ab64341a8d96f6f6f6fe755f247c69d542abd9c0bd3c70f90a628c30fd5f56542c5c550fc3837600406e6e2eca9e2e433837fcefc0c8b2e079fe7b9fcfe7aba9a9296613c52f55084acc864a027013b28c828a2d30e805bcbe670fac4b5740f5a9285b18c6a0db4da8c180fdc6fdb035d850c555a174a4148410b85cae7293c97442a7d395363434347775757d91b6075a2a6c45d66ce18369258685de644659d96af45ff80345f9f908c932821313c4eff7639b6d1b06838358242c82d96c86288abe582ce6e6797e052184701c9797910796e61976b10c991fff7f7b5313b6373541d5340426d36f747414e5c67294679503a1e90634e6f57adbac56ebb14020f0e9a14387decf84038c8e232b53b45888dc6dec63636389d290c9caca5a3d09a6a2a6a6a628130054d33092a2c52272bbe4515996113f16288ab2c86432bd01001cc72db5582caf651202eaf5473e7e80d7af270409d9cb320c0c66331ca5a5602c1624180d492412392bcbf2db46a3f1394992f665c481b77a2f9f78e719476b5e16ff2e00d31dae8524cb30e8f560390ee72e5e243d7d7d34168bc16030a87575752ccbb20400a2d1e8b7478e1c390ce0f0fd5442fae6d7039f343d643956345f5fcbf1fafd00b219868145afc78d4b97101a1b833a32426d361bcdcfcf87cd6663a7a6649ee70725497a6faede86e4c2c993cf171716eee5753aeb9d0b7f5ebfae5df67a99b86164e8e6cd9badcdcdcdc7d27ae5a6a3f45147c7794dd30e2e59bcf896c0f3851ccbe602c0a8df4fc783413269d8130c06f79d3e7d7a4b5b5bdbd9b45b77c60304c3f0df75752db31714acf8dbe7cbbee2f5fafd7efff9f6f6f6b357af5e8d647ade3fa1780bad734c65970000000049454e44ae426082";
|
||||
|
||||
/**
|
||||
* The CyberChef logo with 'chef'
|
||||
* 32x32
|
||||
*/
|
||||
export const PNG_CHEF_B64 = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAHqElEQVR4AcXBfUyU9wEH8O/v9zz3PHfPvXLewXHnxYKgYCFW6ktHmXUySIdKcVlFs2ZkrRB1m6kx00XTbGJjFrvVTSexZusGviQqwsxImM5laOZclG3EisEXWK2cvBwcuYN7456XPawQb+fx4l/7fAji5Obmvrlx48ZKjUZjlyTpaXNz89nOzs42TDp37lzLwMCAcefOnWtPnz6d53A4CsPhMNPb2/v37du3/wuADIACUADImIZer3e3tLS0rVy50k2gIqo9e/b8et++fd8+ceLEqXA47Jk3b97SmpqaDTU1NT+ur68/BICeOXPmEsuyzry8vAcWi+XtQCCAYDBIASiBQOAPIyMjd+x2+7poNPpZSUnJuwAkJLFr165j1dXVlQUFBa+yUBUXF79TW1tbtWTJkrXd3d3XMam9vb325MmTH27durXc4XAwBoPh1Z6eHqSkpCzDl2R8iZhMpnKj0biBqHiez+I47v2GhoavabVaa0VFxacAZEwqLy/Pa2xsbI9EIk8YqA4ePPhJa2tre2Nj40d4hnz88cerMzMz1/T29rrS0tKcLMvC7/eDUooJg4ODBCpCCAghICqoxsfH+aqqqr2CIFTabLbykpIS74ULF24zDKPbvXv3nuLi4rUmk0mfmppqoQzDGMvKyl55+PDhdcRpampavnjx4v3d3d1wOByY4nQ6IQgCIpEIrFYrVq1aBVEUMcXv9yMjIwNOpxPp6emw2WzIz8//lUajMQNg9Xp9oSiKxvT0dLsgCF+hPM/rLRaL9tGjRwN4hmRnZ2+nlGoMBgMEQcAUk8mEkZERmM1mqORbt24hJSUFExRFgcVigc/ng9frxejoKHp6eiRRFCPl5eU7JEkaPXDgwPq+vr67p06d+lttbe0GCoBAJUmSjGcoz/N5SKKrqws2mw0TiMrv98PlcmFCIBBAQUEBBgYGEI1GEQqFwLIsA0C7Y8eOQwAIJlFKCVSsLMsSVHa73YRnFFUEsyOKooAQggmiKGJCcXExEoVCIagoAAlx2Gg0OtzR0dHndruz8YwcDAavGQyGr46NjSEQCMDlciEJBQBBgpaWFpjNZkyJRqOxYDB4DoCMBFRRFOnixYstmzdvrmQYRodJra2tx30+HxYtWgRZlpGMokIcnuchiiIcDgcEQYAgCGAYZrCysvKlioqKKgAKElCo6urqDmZnZxuOHDlyRhCEBZRSXV1dXaYgCLh//z7S09MxFwaDAbdv30ZWVhZ8Ph+i0SiCwWBqZ2enp6ys7H0kwULl8/me5OXlrTl+/PinwWDwc6gikYh49OjR39fX139w5cqVfwLQMAwDQgjiEUJAKcUUhmHQ1dWF1atXg+d5yLKMtrY2XL169beIwzAMhYogDiGE8jyfrtVqrcFgsDcWi40AMPT29g5TSrlwOAxFUSAIAib4/X55ZGSEiqIIQRAwRZKkUFFRUf6xY8c2m81mecuWLYcByJjEsqxJUUmSNMoijqIociQS8UQiEQ+S0Ol0SMRxHDiOQzxZliOxWKxv27Zth5CEKIoBTKL4P6OYnYIXRAhRAMiYAxazC9+4cePPRqPxG0jw9OlT9Pf3I1E4HL4GIIY5YDE7TVZWVjbDMEjEcRwsFgsSybK8EAADQMYsWMxgSZpeu6Uo53vMF//IIJQins46XzHrjIrH41E8Hg/iiaKYvWbNmq+3tbW1YhYE06OH38o5sfa1gmqe0+B/EWSseRdfxDi5/cED2tTUBEmSEE9RlJgq//Lly/cxA4ppvLM83WXXs9992N0DkfKYEohISF/+TehtCzAhJSUFK8pWIJoSxRSGYcBx3F99qtLS0ixGhWkwmMa3ljrWW3Ts28FwBK9t/gBpOYU4cPYKvNZcGMxpSLNa8dm9exA1GrKf7IdmqQbLVi7DG+43kJOTg6GhIafNZiuzWq0HMzMzuzs7O+8gCYoktr/uznCZ+aOYRCkDncmOFSuK8KDzHjKcToQDAYT8fjI2Nob33O/hSegJMvlM2O12aLVanyiK/+Y4bilRsSybimmwSCI3Vb+LoWQeElRv2oTqTZsgyTKC/f2YMDQ0hEJjIQoNhUAY/8Xz/LDX693rcrkuBYPB35w9e/YXmAbF86iGJQWYQTQahZZlMWF4eBiJZFmmBoOhCCqe518vLS3NwDQonqfIMgYwA57nMQ4VIUogEICiKIgXiUQyTSbTD6FiWTbX4XB8H9Ng8TzFOzb+icDp3iIEDJJgKIXebkd2fj6owwFCCBKQ8fHxjkAg8KHRaCz3eDxHMA0WSfzkcveffro+e0eqgfsIgAmTZFmGJxCAXqcDw7K409VF/tjWpoiiCL1eL61bt45REahisdhfmpubLwK4iBmwSE75UcvDk5tecVzKmKd7k+V0vwRgppTCodNh8NEjhIeHIQ0MKG63W3E6nXC73QxRQcVx3BOPx/NzzAGLGZzv6B8A0PCdQW80S9D/jNNoXBqeh+vllzEh1tenWLxeijiSJD0NhUI/uHbtmgdzwGAO6hoa7sqy/LuchQtHeY57iWWYFKiGxsaUkVCIQCVJUm8oFDpy8+bNqr1793ZgjgheEKWUu37+/JIF8+cv/dznM/d4vWOqu4cPH+54/PjxOF7QfwCiFwbr9BCaBwAAAABJRU5ErkJggg==";
|
||||
|
||||
/**
|
||||
* The CyberChef logo with blur
|
||||
* 32x32
|
||||
*/
|
||||
export const PNG_BLUR_B64 = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAANT0lEQVR4AS3BC5CV1X0A8P8553s/7mMvyz5gWUFApEKpEtloSQdLDDDoREXMDK1Zx8dg4xjHqdWpQwgI29QoFrE6gyFJ6YhmoDNMapIBYhzHqgg1ZAvRdIVld5Vl9+597N17v+8779NNJ78fklL6GzdutJ955hnnrbfect98803vxIkTwccffxwdOnQoGhoaihuNRiilDKvValCr1XzGmNtqtdz29naru7sburq6dG9vr1i6dClbtWoV7evryzZv3pw8/PDDSX9/f+vIkSPN/fv3t86cOZMYY7KBgQFarVY5AAjr4MGD6KOPPsK1Wg0bY4ht25Y9q1gs2h0dHW6apm5PT4/HGPMrlYpv23aQJIk3y8nn85bneYgQopVSglJq1et1Mjk5iS5fvqzPnz+vzp49K44fP85uueUW++jRozalVDz77LOkUCjg/v5+hI8dO4YajQZSSuE0TYnW2rJneZ7nlEolt7293SuVSn5nZ6ff1tYWtrW1hcViMczn81EYhpHjOBFCKNJah5TSsNVqBZVKJRgdHQ0uXLjgnzt3znv77bfdo0ePOkeOHLEPHTpkHThwgKxbt46sWLECk4sXL3ozMzPWmTNnnEaj4QwPD3vbt2/3a7VaeOXKlVBKGRFCIsdxIilluGPHjnDXrl0BQsh3Xdf3PM8dGBiwXNe1fN/Hvu8jz/MgjmP98ssvq3379qkoiuTrr78ub731VvHhhx+qbdu2qf7+frV69WqNq9UqmpycxK7rYtu2ied5VhAEdj6ftwuFglssFr1SqeTncrkgn88HuVwuCMMwCsMw8jwvtCwrJISExpiQcx6maRq0Wi2/Uqn4X375pTcyMuIODg46586ds9977z373LlzZHx8HJ8+fRoXCgVEDh486D755JN2uVx2xsfH3eHhYf+JJ57wa7VaVC6XIyFERAiJACBijEWMscgYE+zcuTPYs2ePZ9u2Y9u25TgOdl0XeZ4HnufpKIpUHMfqtddeEwMDA2LZsmX85MmTYnx8XGit5djYmHznnXcUNsagKIqQbdvYsixSKBRIGIZWGIZ2oVBwCoWCm8vlvCiK/GBWGIbBrDAIgtBxnJAQEgJAqJQKpZQB59xPksRvNptuvV53JiYmnMuXL9vDw8PW+Pg4GRoaIrVaDc+dOxeVSiWE169fD3PnzkVdXV2oVCqhfD6P4zgm+Xye5PN5K45jO5fLObNcjLFHCPEAwEMIeUopXwjhc869LMu8VqvlzszMOI1Gw6nX6061WrUbjYY1PT1Nrl69SkZGRvDZs2fxBx98gF599VX0/vvvg3XvvffCyMgILFiwADzPQ/l8HsVBgKMowgBAQGsiGLNZltmcMZtS6lBKXZplLmXMUlIiTDC2bQdmScdx7DiOSZqmmDGG0zTFjDEkhEBSSlQqlaC3txd6e3vhtttuA7xo/U3w1W+uN/kFeQgLIfixBcR3QAFHQDQSWmHGKU7ThCRJy8rS1Mqy1KKUWlma2hmlVpZRizFGKKWEMYYZpVgIgYQQIIQwWmswsxhjptFomMnJSTMxMWFGR0cN/un3vmX65gLc3NtrlnTnTGQBBJYCDzT4WANIhjRniGUJZlmGGU0Jp5QwmhEhOBaMYc4Z5oxhKTkSgiMuBCiljBDCKKU0xlgbY7SUUgshtBBC53I5PTg4aPC2mwEe2txjruuYhqXzjJmf12ZOwE3B48ZDythGGC0YSEpB8AxxRpHgDEkhkOQcCcmRFAIJKUBKZaSURv8JIUTZtq3iOFBxHKv29nbl+77u7OzU9XrdvPTSSxofe+4ec20nwI2LPFOEFnQEyrR5yoRYGFdnAJKB4RQES0EyCkowkIKDksJIJY1S0mgltdZSKyW11koBAomQkRiDJDaRYZyTxWJRBkGg2tvblW3buqurS1+6dMngB5ZWIPnlHLN9QwPuukmba4t1mAMzUCDceIoZWzEDghkpqJGcghLCKMGNUsJoKYxWSisttVZaaa2UBiOVlkoDSESIAAAZBZG0bVs5gaOKxaJatmyZWrBggR4YGND4ujv/F368+HO4zxuBlfAFdMsyBGwSSFIFyJogswaIrAkqS0FxaiSnoJUwWnKjlDBKCaOU0lJJrZTUUkqt1Syp/h8QkEEcSMdxlOu6KteeU8YY3dHRoc+cOWPw/i9+jrak/42+VZiG7mQUdcsy5NIKqOkJBHQadNYEmTaBpy0ksxRpRkEwiiQXoIQwUgijpDBKcCOl1FJyLaVUUnOllFCUUi200MY1iraoHjo/ZJIk0fPnz9eHDx/W+HH/12gd/gA5w+/iztZFBONDmE2N4GxyDNPaBGb1Ck4bVcyTJhI0QYJlSHEKklOkBAfJOXDOQChhhOBGcGY4Zyaj1LSyluFZpgFAN5tNM1GdMIwxff78efPuu++aU6dOgfVt979QbvBXeKU8iMbGz2OYvIhVdQyLX43jrDpJ0ukqyWamMU9nMM+qmNMUS8aQ5BQJqZAEZLAhIAgBJhhwLkxKU6BZZrI0MzNJYrjgZmZmxkxVpsyJ/zwBr7zyCnz66adw3333GXz29ZfwzewjhC++jxuffkySkQskHf2cVL8Ytmh9ktDpCskadUJbM0RkCRY0xZJnWAqOpOBIco6E5CAEA8E4MMaAMgpZlkCz2YR6ow6N6QZUK1UYGx2Der1uyq2y4ZybO+64A/BN079GldO/wJfOvEPY+CCuj1wg5dE/WDMTo2RmatLKGjXCZupEZgmWNMWKUywZw5JzrKRASnKkhEBCCCQlBy4yxBmFJElQo9lA1WoVVWtlNDE5AZ999hkc/tlh9MjfPIKGhobQ7t27AV/+xXEMnw3i4MolTEcvEqt2FaNqGbNKhdBalfCZBmFZiwhKsRQcGyGRURIZJUEribRWoLQGrRVorUAqDZxzxIWAjGbQSmZQlmZQmaqgNE2h2WxCpVKBsbExGB8fB3wDrqP6l5/hrDqC82wa6Zk6pq0Gps0ZTFtNLFmGNOfIaIlAKQBjAAEYBAaQAYMAGYSMQQjMHwFoAwBGSA5SStAKIOMcwaxas4bK5TKCP7nzzjuR1YMFKhhAJZCo2qKYMIkMk0hQgUBrwNoAwdhYCBvHsnSVSG0RrW3LKI0MQoCUsSxlWZayLEtb2NKEEI3nYYPAzJJGKWVaSQsajQZUKhX4zUe/QfPa5qGTJ08CXpJJdG9vAW4qRtDrW9DmAoQA4CNsbGwZxyLGd2zl25byHVsFriN9x5G+6wrf9YTneSJwPRF4vgh8XwS+LwPPU0HgKdfxtesF2nd843u+ieLItOfazZL5S8ymTZsMzMLJvwHA+wA9dd8sJLF2pWdsJ9DY97Tju8oLA+n5vgziiHthyP0wYn4UMtcPeRCGLA5DFoUxi4KQ5+KYx1Ek4lxO5OKcbCsU5JxiUXV1zVVd87r00oVLdU9PjwmCAP7o2LFjhry3d2N4+O57rHXXbrceXFN12r7ZdNY8IJwNZeVeyoxzRex2ptCAXdu5x2ruskn6nIWetmwQjqvBcRXxfGEHAQtzuSzOFdK2A6WkY25H0tXdnSy8ZnFy3fLl6e8G/yfp+0pftmHDBlq+WmYHDhzg99xzj5yamlLk0Z9sCcJ3P7YW5bZbz94urTm/Z/aND0rnzjo4f5va9rhy7Wnjkgb+J9zAe3HzuQFI93haOp4CJxA4iJgd5TK/WMj2zfnXpK2jM5nX29vqXXRta8Wfr2itX7eudfHzS+mWLVvSx7/7OH3hn19gfX19or+/X65evVpZA3/do89vvVHNt1dKtuoTma4SYskKwntO+WxOo0Bj08hcXHeQk1nIaWLldxk6l0tFhUW0QTYQ5bou87u6szn5Qlrq6Uk7FvRmi66/Plu+chW7Zc0tfNfePeL2zbfLPd/fo3bs2KFaqKURQnrFihXGemP9Tfr03YPq9xNfqN1fvUGOfh+LNZditvgvYtZZLdO8PZ15uGwTr0mM30Ki0TKMSoEYt4hQiBBL2a7L/TkhzRXb0tKSpen8xQuzJStW0r6vraUbH3iQbd26lX9y7hOx43s7JG1QFcexPn78uFm7dq0h8Vs/cb+9Zht56FSAH97yPH7hoX3kuvJu646nI3L3EzEZsfJ4nNl4yg3RlBPCd93I1N1QGz9SVhALLy6yuNROCws6s+6enuSalSuT6//shuTmvjXJ3Z/8Lnnq0UfS3c/tyfYO7KXLFy9nzWaT7927V7744oty06ZNmtzK1zul+/4R/3uvwVu3tuOd93vkmseeJxv4D8iG7+wn255rw2MU4yt2iCZIgL7j5syUH2vsx8rLFbmfL/GX2jtp+7Xzsnm916SLb1ydrl79leT2D7+e3L/l3nTgqX/Ifvyjn2Zv/OwN+tsLv+Wff/q5LJfLIgxDjTHWZN8f9ts3tp5HT/3gGXz6/g789GNz8DWPReSvdkTk1OUfki279uPhp3bii8jDV6wAHvYiMxHntRXmlBvlZVTsYP/S3sU6li3IehYuypavXZv+5dfeSU5//RvZ3//do+nCMMiOHv0PeuKXJ9iVkSvirv67xOGfH5aPP/i4unr1qv4/bGwpHb1ZNmYAAAAASUVORK5CYII=";
|
||||
|
||||
/**
|
||||
* Sunglasses smiley
|
||||
* 32x32
|
||||
|
||||
Reference in New Issue
Block a user