diff --git a/backend.js b/backend.js index 42fa231..712b4be 100644 --- a/backend.js +++ b/backend.js @@ -3,6 +3,7 @@ var crypto = require('crypto'); var mapnik = require('mapnik'); var util = require('util'); var sm = new (require('sphericalmercator'))(); +var queue = require('d3-queue'); module.exports = Backend; @@ -35,6 +36,9 @@ function Backend(opts, callback) { backend._fillzoom = 'fillzoom' in info && !isNaN(parseInt(info.fillzoom, 10)) ? parseInt(info.fillzoom, 10) : undefined; + backend._lookback = 'lookback' in info && !isNaN(parseInt(info.lookback, 10)) ? + parseInt(info.lookback, 10) : + undefined; backend._source = source; if (callback) callback(null, backend); } @@ -72,6 +76,7 @@ Backend.prototype.getTile = function(z, x, y, callback) { var size = 0; var headers = {}; + var lookbacks = true; // Overzooming support. if (bz > backend._maxzoom) { @@ -81,6 +86,20 @@ Backend.prototype.getTile = function(z, x, y, callback) { headers['x-vector-backend-object'] = 'overzoom'; } + function loadAsync(lz, lx, ly, callback) { + source.getTile(lz, lx, ly, function (err, body, head) { + if (err && err.message !== 'Tile does not exist') return callback(err); + return callback(null, { + err: err, + body: body, + head: head, + z: lz, + x: lx, + y: ly + }); + }); + } + source.getTile(bz, bx, by, function sourceGet(err, body, head) { if (typeof backend._fillzoom === 'number' && err && err.message === 'Tile does not exist' && @@ -90,6 +109,25 @@ Backend.prototype.getTile = function(z, x, y, callback) { by = Math.floor(y / Math.pow(2, z - bz)); headers['x-vector-backend-object'] = 'fillzoom'; return source.getTile(bz, bx, by, sourceGet); + } else if (typeof backend._lookback === 'number' && + err && err.message === 'Tile does not exist' && + lookbacks === true) { + lookbacks = false; + var q = new queue.queue(); + for (var lb = 1; lb <= Math.min(backend._lookback, z); lb++) { + q.defer(loadAsync, bz - lb, Math.floor(x / Math.pow(2, lb)), Math.floor(y / Math.pow(2, lb))); + } + return q.awaitAll(function(err, lookbackTiles) { + if (err) return callback(err); + lookbackTiles = lookbackTiles.filter(function(t, i) { + return t === null || i === lookbackTiles.length - 1; + }); + headers['x-vector-backend-object'] = 'fillzoom'; + bz = lookbackTiles[0].z; + bx = lookbackTiles[0].x; + by = lookbackTiles[0].y; + sourceGet(lookbackTiles[0].err, lookbackTiles[0].body, lookbackTiles[0].head); + }); } if (err && err.message !== 'Tile does not exist') return callback(err); diff --git a/package.json b/package.json index 1d49cf1..9d74ac0 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ ], "dependencies": { "aws-sdk": "^2.2.30", + "d3-queue": "^2.0.3", "s3urls": "^1.3.0", "mapnik": "~3.5.13", "tilelive": "~5.12.0", diff --git a/test/backend.js b/test/backend.js index 53eaeeb..25a3b15 100644 --- a/test/backend.js +++ b/test/backend.js @@ -70,6 +70,7 @@ tilelive.protocols['test:'] = Testsource; c: new Backend({ source: new Testsource('b'), minzoom:0, maxzoom: 2, fillzoom: 1, scale: 2, legacy: true }), h: new Backend({ source: new Testsource('b'), minzoom:0, maxzoom: 2, fillzoom: 1, scale: 2 }), i: new Backend({ source: new Testsource('i'), minzoom:0, maxzoom: 1 }), + l: new Backend({ source: new Testsource('i'), minzoom:0, maxzoom: 4, lookback: 3}), invalid: new Backend({ source: new Testsource('invalid'), minzoom:0, maxzoom: 1 }), iv: new Backend({ source: new Testsource('i'), minzoom:0, maxzoom: 1, vector_layers: [{id:'custom_layer_name'}] }), gz: new Backend({ source: new Testsource('gz'), minzoom:0, maxzoom: 0 }), @@ -90,6 +91,8 @@ tilelive.protocols['test:'] = Testsource; h: ['0.0.0', '1.0.0', '1.0.1', '1.1.0', '1.1.1', '2.1.1', '2.1.2', '3.2.2', '3.2.3', '3.2.4'], // wraps image source with vector tiles. i: ['0.0.0', '1.0.0', '1.0.1', '1.1.0', '1.1.1', '2.0.0', '2.0.1'], + // test for multiple lookback + l: ['0.0.0', '1.0.0', '1.0.1', '1.1.0', '1.1.1', '2.0.0'], // wraps image source with vector tiles, with named vector layer. iv: ['0.0.0'], // loads gzip compressed protobuf. diff --git a/test/expected/backend-l.0.0.0.json b/test/expected/backend-l.0.0.0.json new file mode 100644 index 0000000..b87b0f6 --- /dev/null +++ b/test/expected/backend-l.0.0.0.json @@ -0,0 +1,13 @@ +[ + { + "version": 2, + "name": "_image", + "extent": 4096, + "features": [ + { + "raster": "ffd8ffe000104a46494600010100000100010000ffdb00430006040506050406060506070706080a100a0a09090a140e0f0c1017141818171416161a1d251f1a1b231c1616202c20232627292a29191f2d302d283025282928ffdb0043010707070a080a130a0a13281a161a2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828ffc00011080100010003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f99e8a6938a6eeae8b98d87d14d073413400b9a506994038a2e3b12d25341a70a7b9228a5157f46d26f358bc16ba7c0669b69723200551c9624f000f535db49f0baf8e9af7165a9595ddc428249ede2593312e0725b6edc738ce7143928eec373ce4e69369abfa8e9f73a74e22bc88c6e5770e41047a822aef85f41b9f10ea6b696cf1c4bd5e590fca83d78e4fd053d37031029cd2918afa07c1df0b34682d6f2e359b0d4f5248b9134400461bb076a86cf071c9e3f4cd0f1efc2f863d2d24d174a9a0bb91b7c4ad3a92e8464294049df8e7e983df159bab08bb363b36784487269a0558bcb596d67921b8468e58d8ab230c1523b557ce05363418a434bd69082290c052d20a5c1a601453821346c228b0ae368a795a6e2801292971450312929692900f41cd4869b1f4a5aa5b12c652af5a08a00e690c1bad369ec29a450020341a28a0005380cd20a7a2d0903154568e91691dcdd2fda9a48ed10833491aee2ab9ea077a86d6cae6e9666b682495615df21452762fa9f6af50f849a6f873539755d3353d552ce2bb80c51cb3b6c064206d047a673cfd29ca5caae24aecf57f86de13d322b4dda3dd69d6df641ba57bb51e73c4e32cb27518ca8c1edc92315d578bbc4d6034b95b46d3a2759c932cd3afcbd410a8a3ef64aa9e78e9c1cd78ff0084bc317f1f884787af754d423b337263ba82050aeca7e5562dfc43822ba7f8e1f10747f0ff0085c7847c24f0b4f8d92ca06e64078621bb371827f2ae252955568b34b726ace6b46d3a0f89be26bb7974c736ba79df3246b8695e4272e76f000207ca3dfe95de683f0f6e74db57874bb258cc92923ca88e555c6012c707803f339f4aee7e05c0b2f81f45bfb3b25b0b07b529140e77480073f316c0cee396cf7c8af4caa8a6b45a20b27b9ce5ee832ae9f77f619992eae00698055fdeb05c64f18dc4753debc5fc51a46afa65ec62e66364b33131a00184400183bcff0011279206d03a66be8cae77c6da043af695b5e3df3db9f322193f31eea7eb59d6a4a5ef257669076d0f94f55f83f73a978675af12c97cf04d02bdc0fb410639d413d2438c1206471dc7ad78532e1ebdcbf681f16ea0f709e19f39e28226f32e6147fddb375518031c7a0e9c0ed5e2328ce2bb69ddc13673bd188aa00cd2302dd29f083232a0c649c0c9c57a5693f0c27b79e5ff0084b6e86936826fb20986d709315dc858921421c1f9b3dbdc55e823cc84673cd3c28aeafe20e83a4f86bc512699a56ae357b78914c93c4a1407239504120e38e6b97a690360a32c154649e00ab5796325bcb2c6fcc917de0067ebc8e383c55bfed485459b41671c52c077964032cfc61b38e800fbbebcf3935735bf14dd5fc734102ac104c5bcd3b419650cc1b0ee00cf2a3a0038e9408e7319a368a728c9edf8d069804b6b2c71ef78dd53714c95c0dc3a8fad5622bdd459dbf88be01c76da6c505b9d15deea7ba9464dc49b773a06c7076b0e3bede38071e1f2a152720823b1acd3e62b6213d69314e3498a0a2451f2d14a80914ed9c55589b91f5a5a08c502900a6958718a5d9cd0dc1f6aa110b800f149413924d15050e41935d1e89a2492431ea3788574c59023bf1963e807523d6b02152c4000924e0015db695ac35b5fc71789ac65fb288c44b0aa0854f1804f6e0739a526e2b404aef505d5e1d2fc477f7da525bb5a61556328caaebea14119c11dff009d1a6f88ce93a959eb7a658c31dc5bdc3ae278b745229e406e319193f8629dad6b9a324569fd951ccf7312f9721907c8c9fdc073d07ae3b569e85afe94fac473dd5ecd6ba63cf6e2eac5edfcc475f2995a6c723729c00719e73ed59b7a5ecc69799e99f062e2e46b50f88bc41a7318a659ae1aed6191b3956f948f63ce30401835c4e83adf87fc5ff172f2f754f0e5ecb6b3e3ecd6ba6805a3d9d58a606ec8073d08ce6acbdce8b63a0ddde45f14b579f5282067d3ed234900071f71b24819c91c631d7dabc7ecafa7b1bf86f6da4db730c825472036181c8241e0fe3452a7a37dc252d51fa4ba0cd05c68d6335a5b496b6ef023470491f96d1ae0614af620718ad0af8abe1b7c73f145978c6c4f88f5792f748b89522b94990111a9e37ae00208ebefe86bed45390082083e944a3ca54657169ae70a7240f7a7554d4cdb7d91c5e322c5d7e76da320e47eb8a928f81be30dc4b75e38be96e1e5790b104c8437424704751c63f0ae1253c5745e3df213c59aa7d995122f3df0a8c19473d8f707afe35ccbb126ba13f7518db51c87041af67b9f1edf5cf80215d5aeeda5b7d5ee21b3b8852352d1c16e9b5b0392a4ee43ce0e7918af165a9d1895032703b5095c1935d2451dccc96f2f9d0ab90926ddbbd41e0e3b67d2a2a28ab2428c12401c93da9f0c6f34a9144a5a4760aaa3a927802bd235cbdd13e1fdcc1a77876d60d47c4b678375ac5c12e904f8e5608feefc87a3b0272323b50d81e698209041047041a51c9c53a695e69a496676795d8b3331c9627924d59d32c24d42e3ca8d9540196663d07f5a52928abb1a4dbb2174ad4aeb4e9f7db4b2aa37cb2468e40917bab7a83d2b4fc6d7779aa6b0da95fd959d9c972a1bcbb48f620fc3d7d6b7ac3c3967691c52dc866e4b067fe21ea0569dfdcda98417850228fbcc32c7d87e75c32c6479d72a37f60d2d59e56c9e948b1fad4f310d33945da0b1c2fa73d29a012703ad7759185c403141e2ba0822d11fc38ed29b95d455c60a212b8e7393d3fbb8fa1ac8be8228255105c2ce84677018c7b1a98cf99dac0d58aa4034c2306a4a42335761124a86291918a92a7076b023f314d085c8500927a015a9ae68975a4dc324a8ed0e372c9b48054f427d2b53c26b60b0bc8edbae4e0307c0da3fd9f5ac6a5651873ad4b8c2f2b3394b9b39adce258d933d3231510535e984d8ef6577de98f98050723f1acab8b2d2ee670c96ad1e0fdd53f29c7638f5ae78e2d3f891a3a76d99c9d818e3bb81a7cf942452f8193b73cd7abe9b3e97e28bab8d3279249ec9361531fcb9723ae5b0060fca3fa8ae312dad40c3c0a632c0900608fa56ac5158584f25d691023b98423433a248a4e4138dfca9c0ea3d6b3ab52156cd5d3e83a7745df11f872d341d02686188dc3fda22959b39729b4e50119c60e791d7f411ea9e26786d755bdf0def4b6bfb486ceecca80146da7705c6067a723b9351cbaaeb176d26d58e162b81117c83ee0fafb6314b65605348166e8918910b4aa0ef0ef9f958fe19e9ede99a51a9eeaf68eeee0d6bee9da5f69da2a4f7674d974616f1585a3583dcdb8604aa8dea432f52d9241e5b7579d7c42f0a49a74edaa69cab36973ed667862d890c8c32c817270b9ce0f4c545768da66937204d31613010fef7909d30477c8aeabc21e2196e34cfec79eea092c0c6cae5d3210c89820b63240c0247232bc7ad69072a7795ee85269d95b53c950d7df5f03fc6f078cfc1b0317dda858a24173c6371dbc301ee07e60d7c37e25d02ff00c39ab4b63a946a244381246dba39060105587046083f8d7d27fb1eceee35c59e762c6183cb88001422b38cf0739cfb574d4b349911d19f4ae2bc8bf682bc44d1a0b517525accf8d8fbb0aec5b010e390490003d0679af57bcba86ced65b8b9916286252eeee70000324fe55f1e7c62f8db65e2eb596c748d06dd4e0c4350bb55924099e7cb523e5cfa9e476c1acd45cb445b958f0dba69249e46998b48589624e493df35015c548735139e6ba199214119a957915104cd755a169915be9c750bc8b76e60b0a48386ff00687b0a894d415d85ae73ed148a81d91c29e848e2995d65d4e2e632b315f200fb9dab1751d3d2178de09018a421704f2a7fad453c4467a3d01c6c4fe139160d5c5c6e513c31bc902b7f14a07cbf91e7f0aca6324f392db9e691b9cf25989fe79ad4b3d18cd1ee99fca1c81c72dcf5c76ad6b6d12d8a2a6f26453b967e9b31ebd88a996261193d46a0da1fff0008dc0c614deb1b0b70642dddb3dbf51f9568d8c1059c02258621220c175032ddc1f5e94c123b1c860eeb1fcd81c71fcbbd24b2223a3e0658e1813c138e09af3a75273d1b3a528c75259af0eff9dd9cf4eb9c54fe46e8927999411cac78c9fc7b67ebdaa45bb4554952351327cd9ea38f6e9ef5496e2697cccf0ac493c64f3ffebacb96c6bce88e5b0d3ee9922f2a30cad9564c29273dce39ac9f12693235ec2b6b1abbc9b892806323b1c715af8d80ece4e339ab10391012092dc609fcff00cfe1574eb4e0f9afb133845ab3464e8161f67b4905ccaebe61e5170411ef59da8e8127db02698ad2c6c33862063f13d4575177bbecb1b2282589c90b8e9d79f5e9545aea64545182aa3038e47e35ac3135149cbb984a115a1c5dcc12db4ad14e851c7506988a5d82af527032715da259dadf4f9bb88193030c18ff002ad38fc31a63db882e7cbf3046489233824ff0fb67d78ed5d6b1d0ea895464f54718faf5f4ba59b09662d164618fde0b8fbbf4ad6d29ae24d3a291e3b658f6796a5171237bf4e95c82386ebd6b7f41d5a783fd196059d083b474d9ea73fe35a56a5cd0b4110a4d3d4e86cb4b9ae2212c922c51312506c2ef2019dccaa3960bdf91d462993c2fa7ba99a02f14c82589cab20913b3ae79c76acad63c5171088a1d36e8ac488c10a8dad1b31f98a91d3381cf5c7a66b4f43f89178d6dfd99e25b68354d25db795f2d22955fb30902e7b739ce466b9d619dae5731604705e5948d0c22396300ba97383f9fafa5644312c459a30304e4e4f2726b5356d36080c1716f74cd613a992da4fbc76ff7580e8ca4e0f3efdc5664619620e5485e0838e0fd0d73cbddd07cc5f866dcacf962a3b6727e94d9355fb3c2eee404c7dde6a84ac8bf32b127392bd0d41a9dbb5ddaaf96c37a7214ff0017ff005eaa118b92bec5b9b48ada85edadfd82feea44bd12312c0820a9c6d5ebce307e95afa3ea31db5afd8efac85a4127cd1ca410246dbd093eb9ce7fa5725246e9218dd4ab83820d75a08bdd1bc8cfcac8a5410095c77fd0d76d6e58a49ec6517777ea61788ef7ed1769045753dc595aaf956de77544ea471ee4f35f437ec75af892e754d1ae2e9774717996f0328c91bb2db4f5ea7247d0f6af9e35fd3e2b35b66b77deaf18ddece3afe159b617d75a75d2dc58dc4d6d3ae40922728c01183c8f6ad34947412d1dcf70fda97c757ba8f8eae741b1bdb98f4cb08d619a0076a4929e589c751ca8e7d0d787c12b4722c8bf7948238ef4fd5350bad5b52b8bebf99a6bbb890cb2c8dd5989c9355c9ed56b4427a9d06a9acd8dd69896d6da72c3364169770e7b9e319ce4f5cf4e31deb0194939a00c0cd5c86d1a4b296e432ed8c80c3bf349251560bb64ba3e9575a93badac4ceb18dd230e8a3eb5afabdcec31c2bc32a886319e171c66a868fa84f6d6d776b6e9b8dc05279c602e49a2f9fcc92dd631ba6620827a8f418ac2aa729a4f6045b8c08d511cf9847527bd36ced638dbcc56de5b903d3ffaf52fd959406b9dfbc8076b71820f6c5583090a70bc8e82b8a53b5d27b8730df39c9cb703a5588a60cbb38e8738eac79c5442d1d955ce79cf6cd16d13e4e14100e38acb40e62ec73a2a900053ebebf5aaf70e1b27b8e453dd672470ff004a468c8cfca727b7a5256357252422cc48e0f18c6054c93b21c8c9f6aa6b1b22f5e3a6714e8cc8ff00220cb673f4aa6ae67ccfa170cb962081cf5c54f0384411b61d339eb826ab35b3aa024e1870727bd3763edf94838a8e57d0ae76b7372d2392e21592281a58d0e5948cedea064f5c7154eea1592e8b45f2ab0c9c8c0e9ce6b0753d6a4b42b05b101d7efe7b7b7d6b3e5d6afaf62fb2657f7a40ca8c1fa67d2ba61859c95c1cd33b32f046823b77594904a903391d38fc6a9ea974d630b335c2c57182c818f5f4c62b99d4de5d1adededede5c4d226e95c751c9c28f403f99ac3b8b896794bcb233b7a935a430a9bbb7a0d54696843bd14f1b8fe94f6ba94a9456d887aaaf43f5aaf45765c561d9f5a78351d2ad09833a7f0edd41730cb617b2a44ac3cc8a57c90ae303071d88efdbad6f5a5bc2cc9048fb655970417cab839191e8471eb5c0db92258f1c1dc39af5fd3b4092fb46d3e4b78d47cfbb70525ce49c8181db8e2b871ad42cfb8e9d373ba450bcf0fc6b197e412bc0c9233fceb06fe17b37456182c0e3078eb5ea2d6973268f6f34f80d36586e3f311bb00fd08c1ae1f58b4f30946ce5723835e751aaef690ea53e4d51813c71dddaed6da24eaa71df3df8a985c088363214671838c5034e742c5582287c12c49e31c63eb515d3c7676e59c16638efd7f0aeebded15a98f395e7bb82e116266de1b80a17a67fc2b9b9d0ab1e0823b1ab7757a9e779b0868e43c921bf95569ae4cd9918e5cf526bbe94395587abd480362827bd3072727ad498f96ad142a3e5b06ba5d36f2cddd22923648443b1940ff58c7d71cd72a7afbd75be13d135992582fac6032db970ad8239f6e7af4359d594547de62716f62fe97a12db1134db8bbe4c6390421f5f7ab7169b631c8f298c6fdd956273cfaf26997badda4376609cbc8c8f82aa080a3b9fc39ab161783cf78644dcee4b447390ca070ca4f07dc579d375a4b9d8ac2490b16395ca9cfcdd7e952c3665fcb4452ce381c739aababdfcba7436d1dac2d2b48fb89d840c0eaa3f1cfd2ac786b5b693512b7303c6e1cb0046001d874e6a3d8d474fda25a02e54d731b96fe1ebb745c8249ec47e3f4fc2af69fe139e3b305c7cdd5beb5d7fc39d5edf57f14dee8b7d22401504967134601981eb863d082738fad7a63e93651e9d728df3057c36405c803ef03e8723afa1ae1a8eac15e5a1dd4e14a5b23c2a3d1521db0cea9e713c30e95ce6ada6cff6d1696d1486524601c1c739e3d7f0af5fd46e34e8ee1d618de620150aabb8e4e00c1f4cfe7468ba638ba992ff0049bab98e4f95484da809e548ef9fc41a985597c4554a507eea3c7eefc2fa85adc06bab775126e61b57ee91f53dfdff000ac910345323b7c80b10aa324b1fa7602be929f413a85a4769a8db4ad0a9254efcb0c8c673d73f5cd5397c11a41b71e78680a70b24e141f7ff003c557d6dc7e2427854fe13c12f6c2e6dedd67911846c01dc7dfa551990c681892371c119af46f11d8da25d9b49efe3923b621888db25b39c003d47bd79dea1a95a5acf2cac366e0c23c7273dbffd75d14272a9b238eb4395d9181ac5adbc41f62b09b1b8f3ee2b2eca6f22ea2949e11831fc2a6925fb5acf34b2aa0e8bbb926b2e47cf0bf77f9d7b904e30b4884ae4d7d78f7774f2b13cf0a3d07a544aebc673515142d0bb01a29460d1b7d28b0c4a5a4a5a0055621811dabe88f83dad43ace93259417063d4edd4cf1c18fe2c61997b1190a707a64d7cec3ad69e83a89d33518e7fdef97f764589f6332fb1ec7201fc2b1c45055e36ea5d3a9ece573e978f458e4bf37705bb8821b736ef14d114da7192571c1c9ebfe71c078a123875011a0da18f5c71ef5d07c38f1cbea97b7565757a03cc4be507c81fb155278073d3b72315e69f1175a953c4924368d88e31d0a82771ea33dc578f430951d5707d0e8c4ce12a6b97a972e254f2c9326c8872c7a7f9ff00ebd70daedf7daaf9da372d18f9578c71572c2e2e2ed6e209ccb223af18c9dad9e0d65eab66f637b2c2e55b6b10194e41fc6bd8a386f64aef73cf8db9ac543ef452669cbc9ad8d472a8ea69cedc74a8d9a933557b0ac2819af69f86fa6f89f56f0cfd9b4ad32ce35642ab7172e50321fe2c63939e878e95ca7c1bf0149e3ef13fd89de4874eb74f3aee74032abd154678dcc7819f73dabecdf0e78774fd061b4d3ec630a218963c9624e1470327ad79798d7508a8257674e1e176e4d9f3ab7ecefaac5a6cd7835649a5489d9a18a03b890a4851cf24f4af1e44d534ed5ad6d56caee2bb8d862d591b7b13fec919e7e95f7e992e50f96b11724939240c01d481ff00d7a88e93a7dc6a967a8deda594b776d9f22e1e30658db1d15fae305b3f5ae7c3e653578d6572aa61d6f13e23f0f78c468772566d322b8c4bbc8989ca64fcc39c9fea0d7d11e07f0945e24f0a596b970b6f6571731998429186006e3b771ebd31f81af50d6fc3fa2ea91497375a569cf748095967b58dce7b6491cf6e3bd733f0cfc593eb505c58ea10c76fac69d235bde42830885781b571c291c8ed8e2a7135215a3cf4e3eba8528b8bb3392d3fc113db78decb59b4befb37d8e3689ace48cb2e181ced20f439079e3815daea4f70d6c21ba06547dcac50e4e00ee318cfe154bc5b61e29d3bc5716a5a1daff6b6937a82396cda610fd91c0fbeac78dadc120827238ae224f8d7a469170fa66b5a7eaf657c9b5268a684651b1c93f3648c1cf4aca585a955249dec5c6a4217d2c6958c96d61ae456f736f2a9772229a4dad9c1ceccfbe3f4aee24d74ada8fb346884019f976807d00fd2b95d73fb0f56d2a0943ace67412096363b707a60671eff00fd7ae6a69afacece622f16f2dd72ca67255faff7875fc7df9ac54afee6cd0dbe5f79ad0dcf1778d235b4220927b4bc419578f0c1883c820f1cfbd727abfc401ab58436c36acec9b2425303703d55403c938f6ae4afa69eefcc89ede18e267da642a49461c9da7af20f43db151dc5b889618f7aca910560768e071f9d747d5e2edcceece59e29ef02a78dadcae8bf6b88cef751312cf1be38e859b239f6ef5e7fa808efc5bcab2a232441666627683d8fd7d6ba9f14ebad145750c53279b221491436783c1c8e99e83d6bcea59770da0f1dfdebd8c2c3961a9cf773772dea4f6e96d1416ae64e4b3be3009f6ef59b4e3ca7d2995bb2d2b0e3c1c5000f5a4a0503173ed46483c5253860f068108496393d68a28c5030a7034da70a684cbda56a571a65d0b8b460af8c723a8ad9935bb0d46fa29f50b42930182e8dc1fa8ef5cd0a50b938149d35277ea4bd558dad66d901fb743721e395b08173daa8996e2e2298f91e70382cec092bf8d36d6695710c6a24dc78465ddcfb0af43b2921b1b0822955436ce6241dcf5cfe3eb5156afb18aea46c798bc7f26e0bb4fa5317ad77fa8c516a36ede74504410e1446bb49cd72fa9e8ef6f0b5c4219a0560ac4ff0939c7f23f952a75a33f26529a7a18edc1a54c67e6e94bec7a505456b62cf70fd997c436de1fb9d7a5bcb8d914c90a08b04ee2198eefc0647fc0abe8fd3fc77a6de8062440c780e4e2be08d3efa6b0ba59eddb0ca7a763ec6bb2b4f88535b42a8b0312393f3e066bc9c6e06a55a8ea537b9ac2b3868d5d1f6bc1af5a48f084ba8ca8cb36c6049ff00668bbd73426612ace8278c98d78c11ebf8735f1d787fe20dd4b73e5bc656466fdded3900fa9cf7ad9b8f11decf932ccc08cfcc1793f8d70cf055e9ae5959dcb78a8a7b58fabae75db48ac04a24017195ddd5f8ec0f735e437daa47a578edbc55a4ccf1e9d322c7ab42e7850b909281d38c63db3f5af34d37c433cecb15c4b230196e5b245779a398746b337b7d788fa6842649382093d9b3c719e8783584154c3cbded6fd0de8ce388764ad6ea58f1dfed1565696be5784ac9af65278b9b94290af1d875620fd057cbdac6a977ac6a973a86a3334f7770e649246ee4ff0021ed5d7fc5ff001b0f176b56f1d9b1fecbd3e3f2adc6c09bc9fbcf80063381dba015c1f0df5afa4c35350826959b38eabbc9eb73d4be0c6b0a2eee34bbc98ac5328688b1fba572481e99ac4f1f78c2f757d467b48dda1b18646408af9df83d49efed5c8d8dd4d632a5c5b48d1cc87e565ea2997571f69b8694a8567e4e3b9ee7f1a161e0aababd589d46e2a1d0eefc21e211f614d32f9df6a3995646236a8db83bbbf4a5f1d011c51dd595cbbdbb47b70dd0eeea57f2c5729a0aacd73b032ee236956e8c0f079ec6ad5f5a5ec9702c373c890ffab52780a79cd57b18fb4e78bb1cef7d4cbb1845cc92abe73b0eced96ed5464429232302194e0835bb776cfa7adbbc5be49b25b2bc0c8c7e3c5665fee96e5e7318457390074adb492ba2e2caaa71d7a536a4078e4520018f4c52b16340a3760629c41069ad40060d291c66a49b03a77a8bb50d5816a14a0719a542a3a8cd38e0fdd18a2c1723c1a70a5a514ec2b874a031072090690d1401a1a05dc569ac5b4d725c46adc95c120e383cf5c1ed5d7dc23453946196f5f5f71ec7a8af3ec126bd23e1f6a307886e2dbc3d7f6abf6978cc76d76a4e46dcb61867d33cfb0c835cb898b6b9bb07b3e7765b9588930b88f3bb38f7ad0d3ad1ee77acbc64edd98fbdf855cbcb4363a94b6cfb6531b9438185071c11efed57d22486318014e7820e064f5cd7933aafa0a14d735a4737e26f0be9f6da235e92b0c8177029c027b2907fa579c66bb3f1fde1905adb072026e6283a7a027df835c657af86e7f669cddd9a4b96feeec39052375a54a4635d04f526b3b992dae12588e194e457a82cd05e6996ce136ee8c1041efc93f875f7af29419615eed16836779a669f3e96ecd6d2401e25098c0000393dce4303ee0d716366a314df70f64ea3d3a187691c11cc14012c720dae1f80c3d3db278accf89faa492da5ada5a964b22c59947019801f981daba9fec6360f992374603cc19f4c1c633c579e7887518f54be834f86375449b6ee192dcf04015cd845ed2aa96f61da54e3cbdce4c0c1058714edb8c11d2b6bc5f6b6da7ea49616809f2102bb37566ea7358dd80f4af5a2d495d09a6b718fda9a3ad2b0e685eff4a0058a468a40e84860739adf1aca5c9864924fb3dca0dacdb370615ce9a500922814a29ee74125ef9af23192294edd80af1f88aa90cb240db728ca38381906b43c2de14d4359bc87cab7956d5d807b82b84519e4e4f5af5cd3fc1fa6e945c4118f31a30aef23121bf0ae6af8ea387f765bf637a381ab595e0b43caa3b7d3ae34d33c823478d46fd99cae4e071deb12e62489f03054938901073f957a9de7819211aa4af234cb72859142fdc39c8391db38af2abeb29ac6e1a1b8468e453820d6987af4eadfd9bb984a8ce93b4caf2a6d6ec78ce4542724f4a9d14eece3701d47b5226dddf39207b56ed5c572194e5cd36948c1a2a0a4029c31da9b45301e0d385301ed4e0698828a0d0298086bbaf82bfbbf1dc1700e0c104ae0633bb2bb71ff008f75ae16bbef83b6eb278899c921bcb6008edc66b9f152e5a527e46b47e34753ac069757ba91a404c9293b73d724f5fa715c978ab52b9b48d625b82b21ec9c605741e2cbb8744ba904b26e9d836c8f1939ec4fa738af2cd46f66bdb969677dee7a9af3f0541c9aa92d88a89a9b4472bbcce59d8b31ea58e6a2231499a7039af5b716c2a8e29a4734fed48781c53b08693818af7cf81dae5a5d68474db9da2eb4f2f246adc078dce783ea1b3f98af02abda4eab79a4ced358ccf0c8ca50b2f5c1ae5c5e1feb149d337a157d94d4cf67f885af1b481e7326d95b844c86f9bb578b25e4e9a92dda36275904a1b1fc59ce714ba8ea379a84c25beb99277ec5db38aa8b92d9a30986587872eec55aafb59b913ea3752dedf4d7370dba6958b31c639355c714f6e39ef51f535d36b6c65b8fea280b926851cd29a621bb38a4538233c8a520d34714867d07e16be8aefc33a5dcc6bb5562113301c02bc107d3a56a960d3476ef246c491f2161b88cfa6726be7db5f10ea96960b676b76f0c018b6d4e324fafad67add4eb3097cc6f301ddbb3ce7d735e2cf28e79ca4e56b9ee52ce654e0a1c97b1f5a789a3b5b6d26386ca557555cbb9e08271c0fcebc0be25c51c6d6cfbb74e4e0b7723aff5ab9a07c416362f6fab87965049571ce7d88ae37c4faabeada934ce0280301474a30182ab87abef6cbf138f1988a75d26b7287606a323e614e89b2307ad5a5815ad249490ac8475fe206bddf33ccd8a4ef9e000299451517b96b40a29c16976e45160b8c039a916900c53a9a1311a9b9a5634c3431a1e0d7a87c1eb07324f7c40310cc5b4f193807afa1e9d6bcb075aedfc27af5c45a0dd6931dcf92afbdd72c1304ae09049f6031d4e6b0c445ce9b8a2e9c9424a4cc5f13df4ba8eb57f773471c72cb2b1291905579e808e0fd7bd60f43cd5e2caa594e09e9d7a540c467b56fca924974324db776419a51d6a529bf90471f8546719c52b58ab8f1d2908c1a453520c1155b888f19c9ef4da95b1ebc53720d2b05c60e4d4aa540c544dd78a72631cd086c73608e29a8a58d21c75cd08483c5004ac850f34dcd4a5cc832e496f535031c1a6f4250eeb484500d2e690c611460d293429a062a128eac0f2296e1da4959dce598e49f5a319a691eb45844968a8d3a79a488f3f31039c55dd4278e59b16f1ecb74e2353d71ea7dcd518880df4a25933c29a6acb513d591ed34a01a7800504d2b0ee1da909a42691ba50004d37268a290c3345145030a721c5340cd491a6e6000a10986327d69429af41d6bc0b37863c01a56bfab5a4c6e755919208d9b6a451edcabb01c966192070063273d2bcfe53f371d6aac48631d78a6be3691de985893cd252b8ec2f028dc6928a4302734539971d29a462800a28032714b8e714ac312807078aded0bc23adebb617d7ba569f2cf6964864b89b215235032492c40e00cd65de58dcd85d496d7b6f2dbdc4670f1ca85594fb834ec2b91237f7a9245e7229769adef0ef83fc43e25dff00d87a45ddeaa0cb3c69f28e71f78f155d09ea73b923ad1c9af4df087c18f1678912f98597f67fd959548be578f7924e76f0738c73f8564df7c31f155af889347fec9b97b892431c720899637209190ec00c7ca793c11ce7041a561dce1f068aea23f0378925f100d11347bbfed4259440531b8a824e09e0f03ae79ad3b9f851e3287519ac9742bb9e689d636685772ee2bbb83dfaf27a0345877386069fd6b4759d0753d16ea4b6d52c6e2da58dcc6448840dc3b03d0f51d3d6b3f691da9937237539a6e2a6c9a438a4d0ee34f5a29f28e6a3a6c10734638a29c149ce074a431a05295ae93c11e0dd5bc65ac0d37448564b831b4a4bb6d50abd793f515abe22f865e2cf0fced1de68b772aaf064b7432a838ce32b9edcfd39a7625b3852b4043e95d2783ec2d2f7c5fa4586ac937d926bb8e29d23c2b952c01032460f6afac75dfd9ebc1ba8c20582dc6992e492d0b961db8c3138e9fad2765b8d36cf8b8464d7a97c2cf84dabf8cec1b55b1be86ce0866088e49f33702092076c0c907b918ec71b1ae7c01f1269de28d3f4d827b49ec6fa731457664098c2b39054f25b62336173c03e95ef1f07be1dea7f0fae757b192eed6ef47b9db2c1288b64c1c12087fef0da78e78f419343925b0926f7386fdae035a783fc2d6485da149d86ee80ed8828cfb9c9fa735f2abf535f5e7ed7a211e06d237b66717ea139ede5beeffd97f3af924a834e3aa07a32b114da999314eb7b69ae66586da292595b384452c4e064f0293434c86289e691638919e46380aa324fe15d6e87f0dbc5dad4b6e963e1fd476ce40596581a38c03cee2cc00c7bd7d2df01be10697a6f852c758d7ed1a5d62f156e76b964302ee0c8bc608e00241ebb88391c57b7dadbc56d6d15b5ac51c3044a1238e340aa8a0600007000e381f4a9e648ab1f0f587c09f1f5cea1f666d212000f334b71184c7ae4124fe02ba193f66af17fd8e0963bad31a67277c7e6901076e71cfe55f619538da59ff038a746a2340899000fad2e70b1f1d781ff00676f10ead75707c4320d22d607d8bf289249baf2a32303dcf5cf4af5bd0ff672f07e9b7c25bd6bdd49000424f2855cfd14027d7ad7b4a29524ee6249e84f03e9488a1176839c127f339a4e4c122be99a75969702c3a75a436d081811c4815471e82b0fc51e03f0bf89a5336bba3db5ccc13679a548703d88e6ba614c9dd96362a99c293d7149319f3df8a7f66fb1bfd7e0b9f0fea4b63a5c8ea66b6742c63400676364e49c67e6f5fc2bdcfc31a069de19d0edb4ad1adc41676e36a28e4f2492493c9249249ad088158d4118240c83daa5a6e4d82490a02807fa50bc7e3476a4a91885177eedabbba6714e239ed494b4015ee6cedae828b9822940391bd41c578c78aff675f0dead2de5ce957375a75d4ee5d5410d1213db6e338fc6bdbbbd14d36b613499f0e7c43f82be27f079927487fb4f4d45de6e6d97ee8c64ee4ea31ebc8af2d22bf49f516b754985cb449198cf98d2b00aa9c924e7a01cf3d2bf3dfc673d85ef8b357b9d1a15874e96ea468117a04dc718f407ae3b66b58b6c86ac6332e6a33131385e49ed5f4278ebf674d4b4eb989bc292ddeab6d20398cac2af09007de679101079c60718e7b13adf0b3e00ded97882def7c651a35b245e7451412826395594812107af5fbbb87ca724719bd1ab93669d8e27e0e7c0fbef174b35df88c5de97a6c2c9843115927c827e5247006067bf22beaed1bc1fe1bd2ac16df4cd174f821d8108102ee603a6e6c65bf1279cd6f93d430ebfa5290074ac1cae6a915ecac6cec2354b4b682dd40da0451aa0c7a600a96ee086eeda5b6b98a39a0990a49148a19645230411d0839ef52633452b81cadcfc3cf08dc6e32787f4f0ccb1a868e2f2ca08f1b3615c14c6d1f771d2ba8550a001d29d9cd078c628bb616178c8cd31d4ee20103f95314c9e7c818031f0579fcf8f623f5a97f5a0670df16be1ce9ff1174786daea692d6f2d8b3dadc2f3b19800432f707033df8e0d7c5fe37f05eb5e0dd5a7b2d66d24458df6a5caa1f2a51d8ab639c8edd477afd091cd60f8dbc29a678cb446d275a8cc96eee2405490518670411d0f26aa33b6e44a373f3bcd7d09fb317c37d49bc470f8af57b492dac2da36369bdb6b4b230db9db8e57696eb8e71d6bbdf0d7ecebe1bd1b5482f6f6eeef51681c3ac329558c90723700391d38cd7b600000aa30076f4aa94eeb414616dc318ce09e78a503d2814a062b2340a4a3e941a003f9d1c51ce68fad002f6e290d039a0d00140340e7ad18fca800038a281d28a0031474a33477a0028a28240193c0a00f16fda58de5d78512d749178d7723bc4f1c1bc2c89852c8c3a3123900f3d71debe3f9e192de79219d1a39a3628e8c3054838208afd0f6d21bfb65ef6de4458e67479d181632151b46d3fc3800608f7ac2f1cfc32f0d78b74d9adeeb4fb7b6ba650a977044ab2478e9838e7fc335aa9a4ac66e373b61ce7239e942e33c76a4de3269370193eb591a126320d339ce3a502400f7a378273400eed8a31eb4ddc280e01e050039b819a17e6c126982419c6324d2a8e73e94c7614c6acea4e7238fa8f4a7bf0d8279a4eb43b80d9348420ce79a38dc09ebe94d6900e7f1a6452895dc0040519ce38a007c8e55b27383da98158bb1e76f6e7ad47136e7766e57240fa0a9c3a8229ec20030783934ea6f9800cf6e99a4de290c9292901cd2e450160ce68ef499140a760b0a7fd9a09cd20619a0b01d68b0ec2819ebd28cf38148ad9a70c520b01c7e3498a3f9d2d1615829b9a71eb498a0000cd57d42332d94a8aee848e193af1cf1f9559a6b8c2e48e942022b4431dac6ac72428fc3daa6eb8aa567361e443b880e4658e707a800fd31c55bf300fc69b120c71cd35978acc8354796f27850094a36c08bd43038604f4e39eb57ac2f21beb613db3878892323daaac03f6d38631d29c718e6a3738048e942421739ce281c1e6913934d72db8055079e72718a2c31c3ad4e838a6a2738f4a94e225cb1c01de958ab91e48e94de4d3c8e69ad9c516132aea0fe540ec49c2a963819e00c9e3f0a2d95bc8576c06750703a0ef4bb1d998b03b4fa9efdc7d2a65e80516122351c8f7a738c73438c74a553b873d68b0c0282bf5a8f904015274048a68ce68b012af5ea29d4d0b93c53c0a2c3b8dc5380e28c734f51cd21dc6eda0a715305a4931b69dc0836e38a314a69b482e28a29075a5f7ed4c04279c53b14c1c9a97da86891b4cb9845c5b490b1215d4a920e0e0d4ddba5369580c39e08ed98ce4bb4a8e4c5167ef923038eb9ea73e95a4ae19d9320b2f5c0aa5aac71c37514c06c6c1662bc64f0013ebc0c73db3505948eb1c97304525c87505020c000edc753cf001cfd6aad7449ffd9", + "properties": {} + } + ] + } +] \ No newline at end of file diff --git a/test/expected/backend-l.1.0.0.json b/test/expected/backend-l.1.0.0.json new file mode 100644 index 0000000..848a73e --- /dev/null +++ b/test/expected/backend-l.1.0.0.json @@ -0,0 +1,13 @@ +[ + { + "version": 2, + "name": "_image", + "extent": 4096, + "features": [ + { + "raster": "ffd8ffe000104a46494600010100000100010000ffdb00430006040506050406060506070706080a100a0a09090a140e0f0c1017141818171416161a1d251f1a1b231c1616202c20232627292a29191f2d302d283025282928ffdb0043010707070a080a130a0a13281a161a2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828ffc00011080100010003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f99c519a4cd2e78ae93103452529c628108681451da90c28cd1450004d1484d19a005069d4c069c0d30168a3345020c52529a4a0029451450028a5cd369714c033485a971498cd201a4e68a7eda4db4582e36956976d382d160b89494f229a7814c043c0a849e69ee738a654b290940a5a5000eb4863e90f1452127bd31067279a526994b9a403b3e9467f3a6834ab400bf5a3348d4940051451400b9e69734da2801c0e6941a677a7d310a39a5a4029c0531094e02940c5761e0bf01ea1e28b59ef849159e950388e4bb9bee87232140ea49a7b6e238f0296bdff00c3fa5782b41d3f4fb7baf0f8d6eee65cdc4f33ba329f65e80633dfb545e2ef863a4dde9bfdb1a4e997fa5d9cee24472e244546036f071d79efdbdeb3f6f04ec572b3c171462ba2d6bc2979a6d9cb781e39ad11b696070c0670091ffebae76b44d3d5121451d4e2bd37e1af83f4eba68eef5b437a5d4490d9c2ff00794673b8f183c7033f5a1bb01e7fa4e957dabdec769a6dacb737121c2a46b926bd5b4af80dae5c5aa4b7975124a705e080091d013819e4753fcabbc8b43bbd5f50bb87c32b059c714664f2d1443248067036939ce00e01c7be4d765e21b6f12c1a1c12d95d41776ad6b23bcc54465e318720e0020f27e5f5ac6556cae8695d9e1175f05f538e56b689ee85ea9198e4b7c2ae471960c7f4af3df17786751f0bead269fabc3e5cebe9d0d7d670e817975a7ff6a6a7ac94d626950db35b380aa0907cc3952e71ce78e3f3af32f187807fb79268b4d925b9d4448656b99a4f3495009ea3b67dbdeb158a4a494dee5723dd1f3d3fa5308eb5b3af68975a1ea32596a1185990f553953f4359320c1aeadd5d093e83568ce4fb521e283c1e290c79a6d38f4a6d0c10868a0d14000a507149466801c69b4668a0029474a4a05002d14a3ad2e2801169ea33480669ea2a9213628152c10c93cc91411b492b9daa8a3258fa0151815d5f86e5bbf0c3db6bb0476b705ff77192039b773d0943df00e33c1a6dd893acf869e07b24d74a78f2136d6d2c256159091873c65b1f771d79fa57a9782acb4dd0525f086a2a66b65977c7228df0dc0671924601edb41f634dd37c450b41629e2496dbec258cc969f31cb39cf9785e7183939e06075c0af5ab78fc1d63a65c4f19b692d12244b978c89942a0e0bb283d3824fae2b963579f565b858b8de16b76d520bb8e1b64816cfecc4633ea01f7e0f5273c0ae4fe20b6836d6969a6cb7525c2d82a85d36027f7ac48cb391d30b938279cf3555bc63a9ea369347a6cc52de71e5dab18c2c8f1118de5792ae7a83d08e71d2b84d66d0594b22d9db4f35ecec72eea6595db192072303039c600ee6b9ab6212f760aecd230befb167c551687a83de6a7736df60d300cbdbf054201dc74c9fe600af16f0dfc3ed43c56f797fa722dbe96923152dcb05cf4c67ae08ea6a2f195feab7f3ad9b5e3ddf920c935bc0acc90053c6e3df1dfb0cd7d3ba5f84efe3b2b2d46d6c63486ead61134568554630086e99efe878fa5387b5a30e6ddbfb909f2cddb64785f873c05a6697e31806a738bcb086511ce8d16ec074f95b1dce4f4c7515df59470e956971696908b569258dec8db8119b7b918e0e78d87af3e9835e82be18c4536a074c9a4d4279d25dd32ef5e300e41e8b81d3009ddd6afbf81efee755593cd48ed1661956c302832ca403dc13e99e4f6ad15593b2fbc970d19a375a43eb2f61ab1b55835ab2f2c90c998cba939dac3ef29dcc3fef9ce08a6f8cb539a6b6bab77d3678e15b71e6b49b46d5638c839c76edf88e2bbab78fca8238f8f9540e0607159fe21d1e2d62c24824da24da446ec81b612319c1ee32714ab45ce364cd29da2eecf0bf14ea3ff0008fdec09335c9bd98030d9c318925c1fbb855391c7d2b9e97c506277b8b6d335537cbca4725bf9441f76e87f1af5b97c071e8f34ba8dacb235fe1a66bc924f9cbe001920676a8dc42807a81ef5e5d1e20bab9b6beb9990de49b5a7955da4752c37601e0123279391d4f18ae1787a707692375cf2574cf1ff008849afeb9aa497fa8dbedd8a156304165183d7df835c3dcdb4b0b6d9e2922623203a953fad7d4be15f06c9a8ebda86aba3c1e6c4d2ff00a224ec76e23c04918f4209c9c0ec3e95d8fc7ef0f68179f0ee797c473db5aea96d0192dee91026f9547dc1ea189fbbfe15eb529c79545238da6db67c3ac3b50bcafd2a5957bd44bc1ad5ab30b8f229952114c6143121290d3b14d3486145145001451450014b8a414e1400014f029053d4552426c502968ad8b8f0ceb16fa143accd6132e9929012e31f292699252b1b479ef2de120a094820b7031ebcd7b8788fc2da96a1f0e44b2fd84c31dc044920fbcd8518738e307383dc1ea3a57917fc24534cfa57da228dbec4a62071f790f63f857d3bf0ebe217842d7495f0e5cc96f2c13026448e3778c066202331fbc471f300073d38ae7ae9b69f634a67806837d3e97ac5b0bcd31aeded033ee822129701b6ee656ea01cf07a9c66bb8b0d67c69f106d7ec50c72ad94ade537cc91a85527e558c003773d48c66b47c65a33785fc4d7179b2d9ad2d9097f2d88f320918104371b8af5c1eb9aecfe12c377a4f8b3ced39631657d0ef9c4ceca91904e6418e18b01d3dab89574e56b1b3a76573d1fe1df83d740b14b9d4a59a7be553b84cdb842dd0ed200c8c018e3e9d6bcbbf683f1ae99a369b73a768e211abdcca184d01e029ceecfbe704fa923d315d47c4cf8b5a7e8905d5ac5757505f5b9cacb0daf98aed8f947ce3182783c8f6af91bc61e207f12eb2f7ef6e96e5970510e72dd598f03924935d94e9a7b2d0c6523e9ef83de0f3e0df0dc97578b149ad5e949a633a83f2156063dddc7cdc8f5e7b57b3f853eca9a2dbdbd846b0dbdba089615e91e00e07b7a73debc1bf64fd3750d5749d62ff5cfb45d69c5a3b7b43712b30ca64b0507b0ca8cfe15f46db411db42b14281507402b2e5a919be67745ae56ae913514515a0c28a28a004232083d2bc43c67e1592cbc405e4959ede6cb44f924c7d8827d4e7d6bdc2b27c49a67f6ae952dba6df37864ddd322b0c452f691d3734a73e5670b6da83d90926d1adec91847f64b41757422fba067e5208c64f20741d3bd7cb3f1a3c7faaf8cfc42f0df18e1b6b26312c16f3b490b3a920b8ec7be0e3a57aa7c6e923f0868c2182dedb52bbd46292de4674252d4e325e31d37727271c71d2be66aeac346d04dee734dfbcec079155c8f9aac1e950b75ada44a1d4d232714e34d1d6818f0b814d7e9c53f34da1888cae0669b5239f96a3a96520a28a280014e519a4a923142063956afe8f62b7f7d1452ce96d0160249dc12a83d78ea7d055bf0be8736bfa9ada4322c2806e926704ac63a64e39249c0007526badd5ad1fc0da9c36fa6cd73730b44b35e128006c670548ce072719a1ce29f22dc5caed7e86478eb44d23488ec7fb1a5be943261e6b98bcb133739641d80e3afad755f0f75cd3d7428ad75ed737c3b8c71594a1b6c273f7c9e98c76e39c5729f103c4a3c537b15c5a593db59db208c0ebc9ee48ee4826b2afa5b484da5d69be5ef6882cb132e42be3938350e0ea43965a31df96574759ff0008ae9b7badeafa6c65e1bac24b65b4160e0f5c01d477fa5741f05b5fd0bc3fa86a565e29b6b06fb345379724d9f99b18c018e4f18cf079af39d1b50d6ae75eb56b192f2e2fc8102470bb091d3a6c18e718e38a66b02dff00b5a38aef4c9b4bd80acf192c5cb64fcd86e47618f6f7a9706fdd93b8d492d51ea3aceb5a778d7c657b2dcea19d336c69145bf697c28c741c90001f5af6ff00823a341126b41ae26bc489840ad7037285e4900f7fc315f3dfc30f07dfeb1a59b8b0d2a4fed4b7996ead6e0a12b2460e082076cf1f8d7baf806e753f05e89a92cfa2cb78cb1bdd5d0865552ac3270031c9f941f7fcf8e3692ac9266eafc976701fb4fe9fa168765696f616d243a9dd30323a4e5048a0924bc78c1e71839e31c7be7fc3cf823ab4f6b61a9dc5ba3b5e44b2c4f36d30c48cb9cb0e4938231c75fcebc6fc61aaddeafe21bfb9bb59e2dd3c852da676636e0b13b067a6338af60f811aafc40fb0edf0c5c477ba742fe4adbdddcae223c31c459dc5707b63f435db521ee593b18425adda3eaff0e68b67e1fd16db4dd3a158ade1180ab9e4939279f524d6a572df0daf35ebef0a5bcbe2b8e38f54deeae51360600f076f6fc3d2ba9a8340a28a2800a28a2800a8e67291b3280481c0271cfd6a4a82e668e20825380ec1467d7b5007c9ff00b46788352babed4ada7b6b68ad2d2e4c50c912e2472e98258f7e011f8d7cf75edbf1a52e6db50d63eccd61359c370ed2090e66dce4a8c8e84f3907b578956f4649c74319269ea1daa1638353678a81fad5c84879a402a4c0a5c5160b8d23029a3ad3d8530f0334302390f38a6d04e4d15050514528a00551935328c5449d6ad410bcf32450aee91c85551dcfa552133b9b3d7b4787c3f6f65a5412c1a918f63bbe023bb70cc4f5e07afe15d17873c35378dac27b99ee8095f0a9b0e36a64800004e1782718cd79dddf85b58b582295ecde449300795f3e09e80e2b4b4af12eaba7cf0e9da85f5c595bdb3e4aac237ab0040047e3d79c571d48369ca84b5fbcd62ecd2a8b43a4d03c2b7b77a46aba084113aca5bcd2a76c9b7a1cf723d3b73eb58d6b636b697d3681a898bcfb6b80f1cdc2071c6e058f438e4678f5a9a6f88f7f6eab6fa7a45240ae5cc9711e5e43effad721aa6ab75aa48ef78eaecd234a4ed00e5b19e7d381574e35657e7d13264e0b6d4f43f155aff64e93a4eafa532ff69c174025c5b2f0fb4365b2383f7573f535d17853544f889e20d5adbc45a2db7f6e4768b25a489ba229b48254eedc17ef020907bf5cd7977fc257a93c1a44372b0cd67a64ab245094c2b118c862392085e6bd022f8a66cbc747c4e7409edad2fac96da48c1c0765607cc56239c74c7eb594a95451b6ef5d7f4294e37b946cfe24f8ef43ba974ab342a4efb758560cb1f70500c91c1c8e3bd6ca78bfe28f82ac67d4b58d3ae2dad6f616b749a7b608b1b123f78428ceee70377073df15d568df1dfc330c51cda8e9f7af711cae6344854ed5e80e777523ae3e9cd65fc4ff008f563e2df87d79a25a585dc17d74e11e460a13cb0d9f5272401c76f5ad69734be2858995ba33c0afaea7bebc9eeeee5696e677692491bab313924fe35b9f0fbc4517863c5167a95ddbcb756b1b7ef618a66899d7d320fe87835cdd2138aea7a991f45ddfed3dab04816c745b24daf972ecd864cf000cf071debdafe11fc58d23e225b3c50afd8b5785774b66edb8ede3e753fc439fa8af828364576bf083c6337823c7167aa4682481b305c4678dd1b63383d88c023e950e09ad0a52699fa114536360e8aca72a4020fad3ab0360a28a2800accd56c3ed52c52b3b048be6d8bdc8e7ea7e95a759fa96a36b6d1949e5d9bc1507a0cfa67a6693b5b503e19f8cfa3c5a4788bccb6927962bd4f30b4a002086e9c139c0c726bceabd1fe2e5ddb7fc2433cfa75ec5730dc29cc580701bf8b038078f624f3815e6b236056f49fb9766325ad8477a8b393cd079a4aa6ee348b5455ed5edad2d6eb658dd8ba8b1cb85239fc6a8d5a77572029ae9ba9d52430cb312228d9c8eb81d2876ea0526183495b93e8776aaaca824c8c9d87907d2b25e120f2307deb34d4be165dfb90e29c06697611d69c169d82e228ad6f0f5b1bad62d62c3637ee6dbd7039359a16aee95a84da5deadcdbedde0608619041ea28927cad477126afa9ec715d8b2885cccc63862f9cb004e0f03fa8ac8f10f842fbc4e45edbc4a97cecb1ac601c91939691ba02003d3a62b9ef12f8c6df51fecf86ceccf936f20964599fe5988ec40e71d7bd7a8f8725bcb8b7197b1b433ae22ff004856209eea7232dec33c578ae1530a9544b5676f346ade3d0f27d07c157775afdad96a84da4125d1b3926003f9726d257be08246383eb5a5e36d1adef3c776da3e956b6563325bac6c158a45348149c8cf20b70003ce4d7a76b11c496f671349249e44f1dc46c176c8aea49e847d7391debcb7e294467d521d46d619823a65a4c7039e3e95d586c54abcf5d3430ab4941686ff00c44d2dd7c19a6ddc5a64364cebfe928a9f748c631d7f135b9e34f889676ff0e1344b6c7f6a3dbc70a8f28ed48ce4330cf1f740e9ebed5c443e2fd4b5bf0ed8f84258a36b99e616ed7370c7214b2ece73c1ea093db1deb0fc73622d3508a412b3ee5f2cab1cedd985033e98c53850f7946aee9b681cfdd6e27a7eb5e12b0f0cfc31f0fda0d2a29359d75d3ed3773c219e2057795466fb876ed031fed1eb552f74bf05e8a9a6de5fe86f36981becd72be792e770cf98194e7782a78c01ce2baef1cf886cfc67e01d2cc7a6de5adcc32c5340b3ec092009824306c118271d08207bd50d7f5bf0e5fe836914b6935bdddb304408814950b8249e84e33ee4f23ad60ebcd495df577358c138bd0f25f893a2e9b61a9417de1bb5d4e0d06fa312db7db61284724101b2430c827aff002ae31abe95d4a587c53e0cb7f0d810fd8c3e219e50239227e769233b49e719c038cf1c9af13f1e7842efc2babc96d20926b6c068ee0a615c7e048eb919cf38c8af46955551799cd3838339653835346c564561d8e6a0c73522f4ad910cfd03f835e2787c4de05d3e55706eed635b7b84ee195400c393c11820fd6bbaaf8b3e07fc459fc3dafe9d6d22adbe93314b699cc7904923e624606476ce71935f698ae669adcd53ec140a5c514144538631304fbd8e2be67f8a1aceb7fda10432cef6d7003ba6176a49824847e9bb1db60fcf9afa33c405c68f78d148d13ac65848a70531ce7f0ebf857cd9e3df105aead3e9fa36aa905c4faa5badca6a42dd9081c91f2b72a41e72bc75ace7b6a0b73e76d73519b53d4a6bab9118918e0ec181596dc9abdac5ab586a97966ec59a099e22c7bed2467f4aa4466bb5249591875b91e293152ede339a692052b0ee587468dca3a9560704118229b5e97e27f0dbea16526a060f2a50a5fcc5000600771d87a7f8579fdee9f756210dd40d1ac9ca31e8df435146bc6aaf31ce0e232d2cee2edc0b785dc670580e07d4f6aefed34a8ad61091a228c0dc477fad71da16af369d218c1cdb48c0c8b8ce3b66bac5d4918a342ed27cbdb0067dbd7f1ae2c6ba8ddba1b50e55abdc7c96e41e090073f4a3ec29763c992dc4a4f52c39c0e49cf6a7cfaac413e466ddd36b20247e22a3975276850aa2c6c7aede3757245496b735728156ff00c2769e4036efb59b2c0eec91ec41ede958b1786a5fb798a59556dd5779940e4fb007bfb56a1ba95b219db0dc900f53eb52c371232b4721ddf2b72dc91c5742af522b4662d41991fd956d0ce4297718ff009683ee9fa77fad4b269115cb47e532e56264009ea71f29cfd4fe953a9380bdbaf4f6f5a0c8f1caae9c3678f6a3db54bdee4a8a1d7fe079e3d352e6ce75965507ce89fe5edd54f7fc715d078793424d2acacf54f0f5c5bdf4e0c5f6896dcbac8e39dcac5860918e0715506b8ed10b672bbd9bccc28c9ce3ff00ae7ad54d4c3ea168b6ff006a911236dc1548233ffd6feb42ab39ae5a9f79ab8c56b13aad675a82cad95c5c08bca652898f9b38e3683dc6073d6b2a6f12c52d8c8e5a267c1df0cff2b1e7278f5209ae71349fb1b24f04d29914e1c93d41e0e0f635726d26cefd419032480eddca403fad44614a9b4db7ea29394909e14d14dcdc36a6d791437b04e935bc7c4b923e6c328391db19ab9e24986b7a78b8789a046dd214382c08cfa7f5c1e69fa669b6fa7d95c794dbc4840264009e9ea06719abb0aa430a46ab198d060a11904f73eff8d693afcd3e68eb61420edcace3b4e7d52c352b7d367965891c0da9c380adce541e39ad8f1049a868f716f14b243345749c2ed0bcfa30edd473e9dead4f0abeb02ede4428b1ec8d4e418f04f03d4735cff8c255fb7dbbc536e91472bd718e87fcfa56f16aacd5d74d49778459dafc37f16ff62dddbcf711437d6e11e392097e65951b2ac08e7071839c7a7bd75babdf691e22f096b70132db5ada27da2de39d83950303cb2c304a8ec3fad78e41ab59c3a35a5ad9da31d44b93349d3712df28047e15e8de15d4adf4eb8537f0472c3b54b2a36e5009ced3f502b3ac9d27ccb61539737bb23c5240031c1c8f5a16bd7be287c37b4866b5d4bc172fdbecafd5a65862520a7cd82a1792307b1e9c735e4382ac558608e08aee84d4d5d19c935a33abd0b5f8ac3488ed6d22956fda6c316daf0c88d9cee4618c8f9707b63e95fa07a1c92cba3d8bdc0c4cd0465f391f36d19fd6bf3dbc24a17cd9a395167475d8a5371ce090476ea2bf40bc2976fa878734cbc9a48e5967b68a4778feeb3141923f1cd6326b99c5171bee6bd14551d5754b3d2ec2eaeefae238a0b589a69598fdd503249a4591eb56d6ba8e9d35a5e31104ca558a9e40e86be58f8e87c07e16b73a5695a741aaeb92aee6bb92e6432db91c7cc5480381c2631ed5e75e37f8a5e22f11ea7a8187509ecb4c9e76923b5b7628141e39239c9ea79c649ae01b2cc49249f535b469db73272b88ec5d8924927924d369d8a42315a12349f96a3eb52374a8aa58d1dff873c66d6db2d3514cdb33317b8c969067a67b115078db59134874fb49219ad0057122a8cf4e83d2b91a9237540c1a3470c3a9ce47d2b3587829f3a43f68dab33a8d06ef495d2cc734314571cac8cee49907b0c7f5ab45e016ac2c510468768651df3d8d62786f4e82ede492ec6615c20192393d4e47a0adb960822711da47e5c18dc493924f4fc38ed5c3888c54da4ddcd232762ab3aefcb65db3fe79a566dcdb883b7d3d3d8568e8da44daa4efe5911c1191e63852e541ce3e51c9e86b6924b14927baf0fe9e27b2b7db1f95a8059249c91f36517f3e3a7ae6b3485a1cab0050374078c679ad348219763a4c11c80037503b73572e349bcd4b476d6f4fd32286c23f9266866dea1c60648249427838fc4573cebf2eec9009ed4dab0cde874559e22c9709f2e49c10781f4acdbeb2303a47214657018143d47f4351594ef6b2a9604c6f8f607dc7e35b5ab2457168650eab32287f2c7539ea71e98c7eb49c6db0ee9a38f6b36170e4fca3040119c6476ff26b46003185238edda9176bf38ce3b52ed448e328fb9c9231b79e3fc9a6e6e5a312d352e2c8de6156e431fcaa5898e7a0e0e3dbf0acfb77577d8ebb5339cf73f855c94ba5b6d85943907048048352d74358cba9335c796c00919d40dccbd87d7b559fb5a1fbb8c360f07358993952460f3d6ab6a3a82db425506257521769c6df7aa8439a5640e492b9b9a7da45aa6aa2c2e6e1b11dbcd70258d32c182fc9c03ea7fc8ae335ab1b8b1bc2b74065c6e561d187b54ba06bb7ba16a0b7b62ebe70cfdf1b8138207e59cfd40a7de5e5c5dc02d12f9aea371f6a97cd50bb640a4b00c793c7d327b74af46109539791cf2929235742b0d3ed5ad6e6e6f3f7ae3242904283c1e3a9c035d66b36867b999e15536c316f0dca20457550070b9c8c67b8f5ae022f0f6a372b0c96d14722caa0aec71c6467073deb5749d7d60b73a7eabe742ea4af9ca32c8474e3ebdbd2b9eb53737cd177b154da8e8d178788b59f0b6857ba2dca3837b166091f91e531392be9923afb57046ba4f186b52ea9f64b794c320b4de893459db20273919e40e7eef6ae618f35d54d5a376b53396aec771f0b7c4b3683aa5d4515bc170b7b0988a4d089541eb92a78238c62beeef06dcdadef85749b9b08a386d65b68de38e35c2a02bd00f41cd7e7069d79258dfc1750edf32170ea08c8241cf35fa0df093c4361e23f0269975a7cd1bf97108a544409e5b8eabb4741e9ed51523af31707d0b5f12bc569e0bf075feb6f099cc0bf247b80cb1e17a919192338e719af877c6ff123c41e30f3d7539d22b79a7f3de0801542d8c0ce4938006319c7e35eebfb60f8a6faced34ef0e40152cef90cf3302097dac30b8c71c806be5366f5ab82495c993bb1fbb35734d9d2def229648e39029ced933b73ef8e6a82d3c1c55ee893d4348f0d58df092761632cf7ac7c98fcd54dac586001c2a8e7a9206338e95ccf8fb4a5d1f541673c4b05fc636cf0abab05e0633b4900f5e335849ab5e476ed0acedb1883cf247d0f5154cb9762cc4924e493deb0a74a519734a572e524d59218fd2a302a7dbbb3d29bb706b76894c7a9c8cd2d565622ac2b03de9a771346d685a8c360c37b4a43e778c70be8473c9eb5d8c0d6d269c675666966019001ce0920e7f0cfe55e6b5aba3d8dc5c133c92b5bd8c58f3276242a8f41ea4e3a0ae6af878cdf35f5294da563bfd235b3e148af2fe38a690980c51100ec594fdd24f1f77248eb838acb8fc6afe1bd3045e18d42ea0d4a62924d730aaa045c366204f2dd5493c7208e700d616abe214bab79ed98c9f63562d0a00aa5db18dee79ce07419e3f5ae4e4937f03a52a549457bdb8b767b47843e2f693a76a56d79aa786c35da121ee6c6e0c45815c1ca636b64e4e38ea6baed6f4af0dfc4244d7bc1e069d6a030bf81b68f224c9da4a83c06033c7a67b1c7cd02b4f46d4ee2c25748e6912098049903101c0391903ae0e08f71553a5192b243bb475da8d86a1a7df5d69d788f05cc04a3c2c71b483d31d3a60823d4566b493870f212768c1c8e80e4577d673d9f8cf46816e26964f115a1937ba8526ee2c82a49272cca030c7b0ae552f160c6f1e65bcca51f7a8cb2938c8f7070723f1ae29269d8a4ee66c7d73939fcea64d9e687008908dbd7b1a8ede096542631bf048c0eb4eb82e92f96c3050e3a608ef58df5b215c1d5da666546f720640f62698acc5b2a7047afeb52fda0a9f9c97edc9c60d5699cb15dbf4ff1ad56a5dd58bd115933bc00c0e063a74ae56fd99af26ddd4311f857451b67046720f349aa5b26a291b6fd92a64640c823deb4a1555396a4cbde472d4559bcb396d1f128c83d1874350c486470abd4fbe2bd2524d5d191dbe9733c1a6da875c61002a3b552f19456f2431dd4308f30b00ee382463bfe95168b705ed14cc4b18db683dc8ad2b93be325412bc1231d41f5af3399d3a97376ef1b1caff654e7423a98e6159bca23b8e3afd33c564c9c1af4886e217d1a7b4750636c82b9c0ede9f87e55e797516c91d7fba71d2bb2955f697b99b56b15eba8f0b78e35ff000d5a5c59e93a94f6d6772ca67890f0f83c73d47e15cb9a01c568076df157c713f8f3c430ea77286331dac76e14fa8c96381eac4d715d4d275a728a0070f5a09a4269a79e05310e1cf4a7018a451814ac703de988703e94e518e48a9b4e08d3aac8321fe5cfa67bd6c78a2d6081a3787386e1428014281fcea5d44a4a3dc76d2e72f8e7152471b13d29a2ea50b85dabee1467f3a8de491ce5dc934ae8ab1a3e6dbda9524adc3f39539da3fc6a3bdd56e2f08f39cb28fbabd02f18e00e074159f4b45ee1ca8733963c9a3b74c53680690ec3c5381a68345508ddd12fcda5cdacc656088ff305254e3ea39e6b6f57b61e65bce9fea274de9b47dde791f51eb5c5a360d76fe12d72c60b1fb0ea96a2e6c9dc33153b6588f42c87a74ae7ad0d39913b31ba65b4b234df6775578c0396202907381f5cf00ff2e2a4b583ed370cb725c4807423a71c53ae8410dfbcb652b14525a225792993d7df18cd6a5aea0351d523927c34ac9b598e327032327f888ec7d315e7d4d22da1b57467dc6952ae761dc3ebc83f4aa72e9f2dba6f930a091d0e7f4af401660c07f76d93c9c8c0fceb36fadc385c80dcf4c038ed915c91c43bd872a7289c7ec52981927d48e3f0a8d5d957920f38eb5b73d818e095b70000c9ebd7fc6b9d20e78eb5d9092992997d1d268f6ba86f50466b2f56b211cf0cc2202d8b7964af1cf5c7e46addb3e18920fb923f955891a29800f18600e707a67b5690a8e9bd362ee9a1c84427ca58d5625185e6a65965504a1240e0f5e87b55291c93f29008e01c714c9e660bf7f685c1c9e292d42e8b514fb25611e0a720641e3f0ef546eed63bc46c20f380f95b38fd2a117ea72bb5bd72475fa7345bddbcf3ac76ea4aae4b12074ada309c5dd6826d330654c64771c541d2afdd452472132a152c4919aa4ebcf15dfbaba250dcd3d48c5459c52e695cab0e269334a3a534f1408915b0b4e55ddce6a06a9627c803d284c1a3acd1ec2d97497ba7512b146382b8da467a1ab5a75b4baae8ad15cf1c8f298738007f8d732f7d7325ba40d3379483014703ff00af5bba66b52c56e20b4b769dd5739e9f901dab9ab539daeb7bfdc66715466928ad4dc7514829698051451400034ea68a75310f5ab366fb2e6339fe219aaa2a7b3c1ba8c31c02c3354f6259e9fe17b18a48aedaed4b5b44a1083918ddc920f638c55268521d5d8e9e18a315785867729c838c7a9e98adef0658a6a705c5bca1a5791b7a8420fa641039e463b7e55d247a119753f36ceddde523e68947cbb402724f6e3a91d2be76552d3773ba3439a9a6ba15ad2edeede569da35119c32ab648fa8e9c1cd41a92a85cc0d80d8c1c7bd6af82b47dd0ea975706016b729244e3cd00aa8c1ce0fbf43c6319a8efade09a749e3c98ca91b84b9523b37f87e39ae69594b429c5ca3738b986d2c18927b023815ce5ddbb8078f9bb13c8c5761a9461252a1831ec579e7deb1e78b23072b839cd75d29f2ea79f5236673060749d0f9c096e304727d4015324bb646092608c8c7209ad87b366bc86455dd1989864119ceec734496d05acd2930b3b3804b1195538f5ee79ce0576ba919ad77b19ec66c56f2cec0aaeec90062a57891582c84310793e953941b46d72549cfdd03a562eb375244ea90c8b823e62a7907d2a69c25525ca89bb62ea368f7241858304eaa0e79aa315c3d848e91f96d9c6e38cfe15564bc7f2847b8851d40efee6aa34c4f4e95e8c21cb1e593b9a24cd5bebd176abb936ba9e0fb567b95079a8639483cf4a495b2722b4568ab21f2ea36460cdc522d25381a92c72d2b52a8a43544919eb48091d29cdd6907279a9287accc3af35d8783f51f3eea3b3982e186d46c0041f73547c31a02eb2a5515d9c3ed38ec3d6bb4b0f87335aea205b5c2c9346bb82f40c7b007d7eb8ae4c4e22924e9cdea354a52578a3c931453b8c74a6d75000a334945201734514530168cd14500193524321491581e41c8a8e814c47b97c39bf486e74ebf8006b674f2274038539c0cfe2707d78cd7a7b1b8d1aecddaf9932323c6c2152a76b2f1fcc8e9e95f33783bc4afa1c92249109ed64237c6c718f71ef5f52e8d796de31f0bc77b611341e682c40f98260f19e7d71d7d6bc1c5d095297325a74677e1e7192e56713aee932597857ceb7b7b859ae017b968e356d85b240c8f9b6e3191c51e1ad3a19fc3b22b5ca99958b84c762aadc9fc7d3f956f2b6af05cdbd83daf9f1c3fb96b88581dd11fe16523a6de323a62ae1d223b2b1952084a7efd89461c707861ec46315c12a8d46cceb549396879d6b360910dc236560392463b57337016362ac09538f435db788c96475461b800c4938f7c7ff5ab838e4617677e0e07def4ae8a0dc91e5e2e2a33b2250029c8c607526a94f3492ca028e338e9c62a5f3bcc0c48e0919c5437372b671b492b118e013d4ff8575422dbb2dce377667f882f4dbd888e3055a4e3777f7fe95c73ca7279ad1d73536be901da1517ee815906bd7a30f6504ba9a4501249c9a28c719ed456858519a28a4000669eabcd0a29d9c55244b648303ad3240319078a4ce7eb51b139a6d89210f5a5c1c671428c91d29cd9ce2a4a3d2be174ba70b578e79152eda4d8a8d2005f7631b471e9fad77be20d4b4ed374295ef6e6dd268d1c46d148a656623e5521739eff004e335e59f0fbc1d7dae4c97fb0a69b6f28f364f5239da3f4fcebdcf41f839e1c96282f6ee397cedc5cc4643221cf4057fa66bc4c6fd5e35b9aa49fa23be87b570b457ccf957145253837b0af68e01b8a0d3ce0f238f6a4da7190323d453b00d1452d25218b45252d0006941a4a502988729c1af47f86da8eaf7568fa768f2dc25dd83b6a70f96ff2b045cbc6c33d187d79e08e78f37a9ada792da749a091e3950e55d0e083ec694e3ceac09d9dcfa317c6314ba9c1a8e8d2936b29cb0742a636ee8464e08e3bfe75df4bac4b3d9497389651e503246b80324f38f7e4d7cc4de23b68b50fb6d9a32c578a05ddab7255c019756e0609c91e9c83ea7d9bc01afb5c698967bd248a45caef19cfa30ef9ebf9578389c27b1d7a1e8d0aeea5e2f7317c6b37f65c534d7a4793bbe5207507a01ef5e5a3c41007941b6728df7497f9bfc2badf8abaa48d633d983e6c5f6af96565c1c727181d3d2bca57713c735df81c341d3bc95ee70577cd366e8d7a55b826348f664e011cfe756f58125f68d6d7c33f7b6b8ce707a5735e5b0c63935d2d85aea1159089ed1da091c3919c9201190a07d2bbfd8c62d492b3461276396b8cac8548208ea0d455d6f8d74db55bf964d3ee3cd50e428763bcae32320f4c0e0e79c8ae49815382306aea45c58e9545522a482933452541a8b4e5eb4d14f4a1098e2714c2d431a6d36c121c0e0d25252d218a837301d2b7fc31e18d53c4ba97d8343b56bcbbda5ca4647ca83ab12780391d6b0e2192057dabf007c0d1f84bc151c97d146356d5409e67d9878a3651b22e79e3a9e9c9f6acabd65421cdd4708f3cac56f871f0fae74af0ad8e9f7b74b3793976f2c8f2f731c9db9ebd8648eddabd26c2c951d546d7445c727240ab73ac56b032c312608c9c8c007d6934731796de548aff00ecaf6af95a8954abef3d5eacf539da869b23f37703d68e3b5368afafb9e48b4aac548c1231494945c64d712249b0aa6d7030e7b13eb8ed515252d0ddc4145145030a075a28a603a9c29a3a52d32476715d9f84fc51169f6c96d3130b29caca327ffd55c553aa2a538d58f2c8136b63d4b584b4d6b4f942b8f31fe62e9ca939fbd8fe78ae66c7c332dbdc6eba9206442708adb8be2b9786e67b7cf912bc79ebb5b15a7a5ebf71680acfba78c9c80cc720fa835846954a5171a6c8926cb1e2c251eda24c01b4b10a31b79c63f4ac68e69d190a3c80a1cae5ba5767637963ab993088b2e3a48a33f9f7ae6b5c963fb748b12aaaa7ca02fb56d46575caf46898bfb24b7ba835d794b75f662c304ccaa77fd09ef51eac34c9114db5ddc3c81001e6ae40007ddcfb565aabc8d85058fa0abb73a35fc1179935bb2a60124f419e99f4e9d2b47d916924526b700e2395243fec83fd6a0208382306ac471bae7e53c5174b9766ee4f3438e855f520a7ad329cadeb490d88dd69b4e61cd34d2602d395091900914ca92294c79c0049efe94d01240e62951d7ef290457e82f85f583ab785747bfba2cb2dc5a43349191862cc80b038f7e7b57e7d5a3017319750ea186549e08f4afab97c7eb1470ada442389515445d542ed18c7b6071ed5e466fcee315046d87946327cccf7a02de50b92bb48c019c8fa52bac50aed80221f615e25a7f8ce6b994195cc680f181d79e7f4c574765e234965db24c58927696c01c9e07e02bc3759c16b1d4ec8a52d9e87c318e334034b495f6479c28a52b8a4a729ec7f3a684368a08c1c518a56185145290298098a294f0292801c38a29053a988514b4da514c404514b4e44dc7e519340896cee25b59d6681b6baf7ad392eb4c9c3dc4f0c9f69ee8a708c7b9f6ac73c0c54b656d25e5c2410a9676a1a5b89aea777e1ab4b286d5a6b70e5ae3a17c1d8be9fd6b7a3559610b20dcacb8d87900771cf6e3a564e9e8ba6d82c44ab18c739ea79ed4db9d4a599888db646063038e2bc6af79d46d33356bdd96271a22ac8b14203b0193b78cff9f6ae4356d21a692496d109eec80e7ea47f856b94323671c0fc80ab7a949148d19810a1db86f7c77ad69d49537bdc39ba9c15d594d6e079b13a13fde522aaed35dd18fcd9042ffbc563b080339cf19fad73fe23d1a5d1efdada52181512238180ea4641fe9f506bba9d58d476ea691936b53141c75a319e94a47b7340e2b42c42a6900a938348453b05c4076104574be16f107d8e430de4aff6761f2f7d87fa5732493d693915328a92e57b09c6fb9ecfa56a9978ca49c67230c0822b6935a7139dcff74e47b9af088351bb82231c33ba21ec0d21bfba28c9f68976b751b8f35c12cbe127b9294e3a267fffd9", + "properties": {} + } + ] + } +] \ No newline at end of file diff --git a/test/expected/backend-l.1.0.1.json b/test/expected/backend-l.1.0.1.json new file mode 100644 index 0000000..82784f7 --- /dev/null +++ b/test/expected/backend-l.1.0.1.json @@ -0,0 +1,13 @@ +[ + { + "version": 2, + "name": "_image", + "extent": 4096, + "features": [ + { + "raster": "ffd8ffe000104a46494600010100000100010000ffdb00430006040506050406060506070706080a100a0a09090a140e0f0c1017141818171416161a1d251f1a1b231c1616202c20232627292a29191f2d302d283025282928ffdb0043010707070a080a130a0a13281a161a2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828ffc00011080100010003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9773452ed39a5238ad08100cd14e0074a471834c2e2519a05140c75148a69c45021b9f4a5eb498e696800a28a5028100a5e94b4d34c05cd3e299e17dd1b156c6322a3141a2e161e5c9249aeb3e1fc529b9bebb484490dbc3893d5771c03f9f15c7d6af8735ab9d16f8c96f2308655f2e788310b2a67255bd4700fd4035152f28b484e3747572967763d89e99a61da17ae7fad686b3682071344fe65acea2485c7704035988a5db0bc1fd05797ea6528b8bb32405780323d734994072493ed8c7eb4f82d9a6731a95dc7eef3f7be951c7034a5b6e063aeee3153742b1234c9902255471d08cb1cfd6ad883ce8912e638e48d70a1a4e71d78e79eb51dbd94a2eca36d550a19f904018ae8ade24953722aec54c9c9c0c03e9594eab8dac6b4e939bb1c9bf84ad2ede46b792685413d70c07f2ae5f58d0ef74b726e226f27b4a07ca6bd9b4eb681ad1c79611998a865cf63dfdeb98f8877b05ae9325a3481e597855db82067a91dba574e1b1b52a54e492b9d3530feca29dcf2a270783464d21a415e9988e04d3c73d698b520e95484c630a681cd3cd3738e948689dd7a83c1f7a85b6e31821875f7ab2cc1e405b8f5aa85b7313552d098803834ac771a4a054142804f4a923883b6d2c14fbd463ad38b13804d52b7501ef0947c1a611834bb89ea49a3afbd1a3d843694504502900b4a29296a8421a4a534869318506928a57003d29a3ad3a971819a067a57c3ed56c2fb469746d56f04374ae1ad4ca708cbdd437639e7078393ce700ef788bc2aba7c0ad16f13e70632a7e618cf1e87193cf519c578a93935eedf00efaeb56d2f51b0bf9bcdb5d3da268b7e498d5cb0600e0f19da71f5f535c18aa5c89d58bf546f4946a5a125f33953b0468f6ca4383f78751576d23478da676c3c8416553dfd4d6f78de08b4dd687d9768cef4f9546dc0fe639ae6a08489f38393fc2075af3f994a37472d483a337165e8acd3cd79636cc8e3047600d5b48fcb723ee285da3d7f2fa53a345da84eeddd30a7200a6bb0128dc49e319e9583936cde3a59b0b7bb36e708c7cd2a59548e09e7193edc9af23d66f27bed4669ae58b39623e82bd2354bc5b2b5bdbb2adbb05539ce32303f5af2d95b7393c735eb6029da2e44ce6e4edd884f5a295a92bbc42ad3fb5314f34f06a912c4a61eb4e634da4c689a53f21c1e4f150629f3b6580fc6999a25b82d8052d145218669c067ad36973c5310b8c1a5a40dd8d1400a0d2d3694534c43a8a4a514c4211462968a004c518a28140c314869692930100c57bbfece4eb6ba0f88a568b719a68630dc741b89047e20d78457bcfc21ca782a08226f2ccf3c921656e4b703f0385e2b8b1f2e5a2fcceac22bd55e437c773993c4738118510a88d31d4924926b010bbb2193aafddcff002adcd796292f5ddc11348fba4511ed084003007bf5acb7449a7298033c80be9fe4578e9a51b186253751dcad26a8522754eabf2e467bd606b1e209ed898a354dcc376e20f15bb789122f0638a33f31661c01ea4d79d6a977f6ab967e00e8a07a5776068466f99ad119b6de825e6a17374bb6799dd47404f1544d29a5550475af5edd102d08a8a9081cf151e2958ab8a053c74a68a776a684c6914da79a4c5218c3cb1268029ec29314ac02514a79e4525030a28a2800a33451400f1466980e29c3a53b8ac2e69c2994e14d085a4a534d34c42d14829d40c6d141a29000193815ee1f0ce096cf40050b075c10a1b04b30cff223f5af15b304dd458193b871eb5ef9f0e190e9b746525419885ce0e3b107f4af33329354d23ab07ad431759dc2e5f259987de39e72793fd2a923451c12dcce5d04685d70a4e7033fd2baff0010c11dbb4b2becdaaa5a4dac39503ad790eafe2592f22962b7844313f0496cb62b8b0d4275f65a19e261c92b90f88f5f1a846b141198e01c907ab1ff000ae65df269d3be5b02a2af76308d35c90d8c22809a506928aa287e78a4a40696810e02834abd6835421b412053aa36cd2d865928b82722a172a3a535ce188cd3686c120ef451454941452f5a4c5300a28a290052ad039a5a6214528a414e14d0829a69d4d2686014521a334863851494669dc45ad3f2b72ae064af23eb5eeff0f6157d252d81282490fceb9eb819e3eb5e3fe06b14d47c49616d3413cf0cb3a23c76e332b0279083fbc6bdd7c3f67e4db087704662fbb61da6327ae0fe3d6bcbccdfba91d5835efb679cfc66b9b2fede86d2ce325e1802b4bbf3c6e276e0715e6d336d5e2b57c43676f61acdd5b59de0bd8636c09c0c6e3dfebf5ac9994b74af4a85354e928c4e6a92e79b6caa4f3450c083c8a4a063a8a4cd1400a29d4dc528e94c43c529a68a7678aa421b40e29cc314def4980d2d918c52514549414628a70e94c4262969714628b05c4c50453a97008cd3b0ae460629c2948a050900a28a3b521a620a6d29a4a4c6213494ea6d218a0fad2d36956803aff863a8ae95e2fd36f1f3b21b88dce0e0f0c3bfb75fc2bbff0011789ee17c353cfa7940ccbb7e619c03c31fad78cd9dc35b5c248bd54835dcdbdf58dfdadedd35ec71bc99dd632ab12771e4abf4e324f415cd88a3cee32ec5c2a385d2ea717534b6c52d9663244437014382df954773e5c52b2a49bd41e0e2a02ea7b9aedbdf630b08f83d69bb57d050580ed9a6e4d4b6521c7681c01516de6a50411822a62901b5dcb2b79e1b1e594e36e3a86cfaf6c516b85ec552b8a5ed9a462d9e948a739a9285a51499a514210f03346d1480d3b22a8441453b19a315255c6e39a752e2940a2c2b80a5a0504d5080d19a4269295c62d25252134ae02e7146ea6d140ec2e6806928a000f268c7345140c28a28a005079a9118af4351814e1421314f27269314b4004f414c4252814f09c50aa09ea69d8571bde8c538a95393cd19005003453651c86f5a7e4531cee3ec2863437049a5c528229a4d48c7022949a8f345170b1262940a51467d2a890e290d04d21a00526909a4cd252b8ec29a434a6929301a4e68a28a0a0a28a2800a28a2800a28a55a004a5029714502002940a054d1216230324f007ad34ae26c75b5bc93c816346763d80aeaa4f05ead6ba0a6aba9462cace5844f0a1e649e3e3f78173f746e5e4e3a8c03ce3d87f66df86df6c12788b588964b0923f2a1b6901c4ae1c365973864e17ae41e78e01af25f8bb16a56ff0011f5c875b9fed17b14e54ca06ddc981b381d3e42b57e489f338fb809bd844cc63c9da586091ee327f9d41bb69e0d4925427ad290d0acf9eb4c2c734119a422a2e5242e693268a281851451400514503ad004878e9466839a6d36c917341a4a295c028a28a061451450014528a5c51610da3029fc7a52114ec171b8a4c53c8a4c52b05c6e2940e78a5009ed4eda45160b8dc518a91538e69ea8055728b98646b9fa56b787f526d23548af52de29e48d5c46b283b43152037b95ce47b815d3fc20f07d978e3c55fd8d7b3dedbb3c2d246f6d12ba8dbc9de49f946381807923a57d5517c2df0dc2ba142d6ccd168f2196dc3303bcf70f9fbc0fa7b0fa1a4d458acdea75fe058c43e0ed1d040901fb246e6344081495ce02f60338c57c57f1dee67baf8b5e246bafbc970234c2edf9155427fe3a073dfad7ddd0aa2dbed456080602e3a7e15f007c5849d3e2678a05deef34ea1313b8e4e0b92bfa1159c2dccda2a5b1c73f5a6114f7eb4c354c486d14a692a46211c5253a93140c4a2948a9acad2e2f6e120b48249e67e1638d4b337d00e4d0043834638ae9f41f04788f5d91174ad26e67672bb4602e77062a7e62383b1f07a7c8dfdd38f49f057ecf5e27d4f5c3178921fecad3223fbc98488ef271c08c0ce79ee7a7d78a6d5b70d4f1775c8cd426a77e9c5426aa44a1b452e28a8b0c4a28a2818514b8a704c8a2c2b8d029e16a48e224e0024fa015ee5f06fe0b5af8e7c1f26b573a84905c0b9786281a3fddbec0bf788c360938e3d3d6aad6dc5bec785aad3b60afa0fc55fb3f6a10a25be8fb2e351f2ccc658f31dbbe1be64da725186e5c65b2c3240e1b1e3faef83b5cd12e6e61beb1901b63895939556dbbb6e7bb6d05b1d76fcdf779aa4afb09a673bb456df837c357be2cf11da68da62af9f70dcb3748d47de73ec07358cc3070460fbd777f04b57bfd23c7d6674a36e2e2e8c76b99caa82ad34658066042e54104f5da582fcc453b76123d2af3f665d404b6cb63af5b3c673e734b1152be9b4679fc48fad797788fe1b6bba25e35bb24174e198048a41e6719272870dd0678c8f7afbe531c8c000924107b52fca5437f10e067a8fa562aa5b72f92e7e69cd13c32bc532347221dacac3054fa114431b4b2a471a967760aa07727802bee2f893f07fc3fe328aeae12de2b3d6a6d845ea827a1e72a180248c8c9e8704e40c1f33f871fb3d4b65e29b96f1a470dde9b02235bb4328d9339e4865fbdc7b8c1e7820d5a9a684e0d1e3df0f2e6c740f167d9fc6779ad6936301f3648ad1595da5520aac8a3071d7f4f5cd7dd2cc258bcd8d558300ea4fbe0e7f235ce78f3e1d683e368238f57b45578c1db342aab20ca9017760900120e063951d4641dfd07498345d12c34cb6691a0b2812de33236e62aa00193f8544a49ea54558bb0333c7f36010bce2be1ff00da2ac25b1f8b7ad34b1796973e5dc47e8ca51413ff007d061f857dc6eabe5b02405238ec7f0af88bf692d44dff00c5bd5137ef5b48e1b61ec446091edf331a74f714f63cb5969a56a5a08ad6c45cae4537153b2d4656a5a293194538ad5cd3b4abfd484ed61677372b02ef94c3197d8bea71d054d877343c11e16d43c61e21b7d274b4ccb27ccee47cb1a0eac7dabea6f01fc2597451a2be9925b2e95711b3eacd710b2dd5c2942044b901914f1c0da47be71537ecade113a1f82a5d5aeed6586fb547de0c8307ca5242000f2327737b82a457b68236f20823f2352e5cba0e2afa8c8238e28618e18d2348d42aa2a80aa0740074007b53e5e036deb8cfe348477a07cc724601fcfa54147e68b0c8a8cad4d484574b462995c8a43560a8c537ca24e075352d0d321adef0bf8475df14dca43a16997377b9c219110f9687fda6e82ba0f0a7c34d7f51bdd3e5b8d2ae0db4d32810b02b24eb905801d546dcfcc70071cf35f6df863c2fa5787ad6d92c74fb086e2187c969ada0f2f3d376dc9620315538dc73819248cd4bd16a5ad4f26f097ecebe1db6d2248bc51035ddf92a04f6d76ea00d8bb8e36800efde075e003dc81e96de00f0acda75b59cbe1ed366b781046be6c2acfb40c7dec649e0739aea2d65f301dfb73ca91f8f7f7a791f295071fd2b3e663b238bf0c7c32f0b787ed2682d74cb798b80ad2cf0a1723680412a01c120b11eac40c2e1475d63656d616d1db595bc76f6f18c2c71285551ec054d8c12401920034a33c2e383fa52726dea348518c1c645230c9391c9ee7d29588009a68c6d2cbd5b9fd38a43380f889f0c344f1ac96735e58c62eade4dad32b18cb478e41dbf7bb60123ea2b8bb8f812346d6741d4fc097e9657562c4dc1be667f3724e186d18cf24153f29007b9af745276807ae39a4e2ae3371d89714c8ad93693d7f1efc62a5c9231437b52ad4b771a5614120520ebed4646720d2a904819e0f6a431af919009cfad34b1638ea075eddaa4917048cf4a6a8561c8e7d0f4fa8a68424b1ef099c7cbfad7c43f1bbc01e24f0d789f51d535512dfe9f7b70d2aea489f2b1639dae07dc61d31d3d2bee1273d739f7aa5aa69561abdb7d9f54b2b7bc87921278c3804a952467a1dacc323b134e12b3138dcfcdea2bde3e377c13bad1750fed3f07595cdd697372f6d183235b11e9dcafb9af0ebab49ed4a0b88ca6f1b94f50c3241c1f6208fa8ae84efb1935620a4c0a5a4a041806be9cfd92749d5ecadb58bc96ce11a65dc90c6cf34c55d711b3e563c1ce43c5d76e55f209c60f93fc2ff84fae78f273242a6c74b4203ddcc8707d907f11e3d40afb3bc13e18b5f08f86acb46b29ae2e20b55204970fb9d892493ec324e0761c544e4ad62e09ee6cb1c0daa08ed91da9e5cec200f9bd695b9e7bd34676f3581a898c281c8ff1ef4fedcd266940cd007e73ebde1ad6bc3c621ade997563e6e4219a32a18800900fa8041c7b8ac9afd1ed6344d2f5cb616face9d697f00e425cc2b200718c8c8e0fb8ae1e7f82be009ae6691f4084248a14451c8e8b19c9cb2ed6ce4e40c1240da300739dd545d4cb919f0cd7b17c14f867aa6abade83afee8bec515ca5cb47b77108ad90581e003b4fbf22bd9b50fd9dbc132dc452db2df5bc4a732442e59838cfa9e4771f8d7ac689a3d8e85a55b69da55ba5bd940812345e7007a9ea4fb9a25356d0518bbb4d16d19426dc05cfa53dd48da4138a61cf21867d0d018f4ed589b0d11053f2800673c714febd69dfc34dce0d17017240a690378207cdd33e94bd7a5382823de810841ce68147340ebed4860683d28ef4500001cd2f7a5ed4ceb4011cf2f952c08594798d8e7bf07814f032158755e08aafa843e6451b2cad1bc6e1f8246700e41e3a104d58e7ccdea723d7d69f410f0dbc80dc6290f5e2958e79f5a41d4fa0eb4860681c1a45f5ed4b8a0009e78af08f8eff0007affc61abc3abf87a7816e121292db4bf229e720a903a924e73ed5ef38e94d842b31ce7269a972ea84d5f43f3ced7c11e28bb9a68adbc3faa48f0922402d9be523f0f6af4ef853f0375dbdd6edaff00c576674ed32170fe4cc4096738c8000e83a726bebf91406390377d2a39149db8e839c55fb46c9e4b090c4902058915100000031c53ce71433858cb370314abeac3159961f8e45149c678a5340099c9a70a31c714500275e94840038a69c87229e083f5a6037b734e8f206d2723a8a6923753c52010e41f6a42a01c8e29c323d2948340588ff9519ce40a465c1e6946060a8e6980a99ef4e27f2a43c75a073f8d200340e69718a0f14001a41d69714c90e07502801c48edd69075c814918e9520231c50031d37ab29246e18c8ea2ab5b2cf83149e5e23e8549c9f41cf238fafe956ce31cf029540ddc01b8f14ef615818e40c0c714de991f8d4920da003d6a3ce4d21877a01f4ef4d20e081ff00eaa70edf4a042b1c2fbd362186e7ad19dadb8f4f4a703f3161dff4a062cc70dcf27a53436e3fd29186793c01510765c8c0ebc1f6f5a690ae2cefb464f41ce4f4148926ee01e7af4ed4d961f3d503b9e1b3effe1536d3b460a86da01e33d3f5a7a0841d69e29385f5f4a5c60d2b8c326941e79a00a4ea78a43038ce7bd02a3dd406a0073ae69dbb23d2981a90bf6a043f276d3d09c74c8a84be451e61e9da81dc9580ebd69a17be6981f1eb4bbf8c01400fe79a0f1c53377146ea007f34bdaa32c71406cfd28024ce0d0402083c835097c66951cb37a0c649a005276a9c75e9f4a588ed0693a9ed4f031cd31d87672011484e18519cd046690587cdebf8d3231c5296e307b545e65022438cd15196e334d67c2d0048f8228e838aa33dc3e311a33b1e83381f89ed5750e2df9e4d30219e4c6013d7b53c2ee45f61c9aaadfbcbacff007063f3ab48f8078e69b625b9260818cf34e504e4e73516fe334ab2100e3a548c71018114fedef5087cf4e2937f340225ce68e3151efe33406a07605e40a31d69c1481cd14d12329add6a5c534af2734ec030507ad3c8ed48171458040b9e4d38019a41d694f0334580434734dddcd3b1d295800f5a5c7149d28ce29d806b019a70f6a4e491f9d28fe748648a29e69b1d3f14143338e2941f4a46a6914098a4d34e074a00a5ef4084380b552e5f3b54f009c13e839abb20c28f7ac9d527105a5c5c30cac71962338e993d7e80d090992e54aef5009c71ea7d2ae1ca2aa1c640e7ebdeab6956e915b871b98c9f382dd4038200f6008c55a61eb431d888000d3d4e47b9a6f6cd3e3eb8a2c2060693000f7a918640c7ad31c7cd8a2c3b004c1c8348eb8e7b5394f3cd3ce0f14586881720d38373cd2629a9f7a900e37f122832b6c05777cc31ed8fafb54db95f25483b4e0e3b1f7ae575bbc46bff00b1c5710cb73044d72e8e3b64a82547054302300fa55b8dae6e2e2dd2cc98a3b755698ca4ff0012060ac7ae79157622e7403ef529193597a6ea915e5d35b61848aa0abe30b28c7257e872307f515a5d29d8008a422979a46614ac0348c73de90b640a7120d46e718f4aab00a793ef4f1cf5a8c1f7a900cf434ac0231a677a561cfeb502dbc867121b9942860de5a850318c119ebcf5a0659032052a8e4601229c140501470062a48d70314868231cd3c52edc0ce2a19ee2280c7e6b84dec1173dc9e00fc69586291ce7bd27b538e306928b098702984f39a711da98fd0014ec2b95ee2621c236155ba1e727d79e9f4a6c881b2a4020e4b67bf602966865951e3531f998dc8cca70b82011c739a944610607b0a62162f94e07dd1c0a7e334d5e9c5396958a4c611ce3b53470d5211ce474fe74c61cd1601e0e45230e698ac474a93391400d3d38a5278e7ad28eb48e3a500349c9e9d6853cd1da940a00ffd9", + "properties": {} + } + ] + } +] \ No newline at end of file diff --git a/test/expected/backend-l.1.1.0.json b/test/expected/backend-l.1.1.0.json new file mode 100644 index 0000000..d654f6c --- /dev/null +++ b/test/expected/backend-l.1.1.0.json @@ -0,0 +1,13 @@ +[ + { + "version": 2, + "name": "_image", + "extent": 4096, + "features": [ + { + "raster": "ffd8ffe000104a46494600010100000100010000ffdb00430006040506050406060506070706080a100a0a09090a140e0f0c1017141818171416161a1d251f1a1b231c1616202c20232627292a29191f2d302d283025282928ffdb0043010707070a080a130a0a13281a161a2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828ffc00011080100010003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f984e7b518a53456e660690d04d25201452d36945002d14514c4145145001451462800a28c518a0028a28a0007bd21f6a5a2818941a5c6693a5200a4a5eb494005145140c514f5eb4c15228e69a258f078a69a53c0a4354c430f5a28a2a4614e1d29b4e5a0061e4d21e694d200681894549b09a611834ac171294514b400514629714c42514e0b4f119a760b910a5a90c748168b05c6515262908a2c1719452e2822900da2968a004a283450020eb41a534948625145140c55eb538e950a0e6a5278aa892c4345145021a7ad253e9b8e690c4a70e9498a5a60205cf352050050b4a69a44b62138a898e4d3fbd2f9743d46b422a502a5f2c539500a5ca1718169c129e0628aab0ae200052d078a92089a7992242a19c85059828e7d49e07d4d3111d34ad74be24b05d3e3b5b086ea2ba580177d91019760092ae3efafa1cf183c0ef99a8a3dc4297d0e9e2d2cce210d1ee28cea067962793d48f7ed4019946334a29c280181682b4fa28b01095a6915b0745d486a8ba6bd8dc2dfb155103210d9600af07d411f9d51bbb696d6e258278da39a2628e8c30548e08352d0d32a52629ec314da92843d293b53a9a339340c4a5a3145201cbd6a43d29a829cd54b6258945145001484734034b40051451400e43c52e335183f3715734f896e2f2de191c469248a8ce7f8413826a9099005ad6b7d0b519f49975286d2692d227547911490a5b3827db835ec937c23d2b48f1969865b937de1e9aead5564f30309a295d9198b0c6ddac147fc0abadd2fc430fc3cd76f7c13afc9a769be1b21a557b88a59e696172db63241c020719c639f5a9e6ec16ee7cd5aae8da86947fd3ad64890b322c98ca31538386e879f4aaf6767737b23a59dbcd3ba2348cb12162a8a3258e3a003bd7d3dfb48fc47d13fe10f8bc35e1cb8b4bc7bbdad2988ee10c630ca4638c9e3dfad7cbd0dc4d0acab0cb246b2aec9023101d739c1f51902aa2db5a8322a28a2988ef742d0bc3ef649abdebdd9d22d760b8690012dc4a43663891720741cb30ee7dab374163a76a4758b5b226c2495e2b68ae0eef3064653701b5980232186d3e9dab9982e25b770d0c8c841cf078f4feb48f2bbccd2e42b962ff200a01ce780381f851603dc6eae348d3fc4ef77e3eb69347074c6fb1d8d849fbc6dc4831cd8e5491919c0ce7a8c579a788fc5e756f0de97a1dae9969a7d959132379392d3c84637b13ed8e2b9d9af2e274916790ca647f319dfe672dcff0011e7b9ef55e8b009fc54b45488b198a42f21590636aedc86f5e7b50013c9e6c85f6247d06d418151d145007d1ffb26f86adefa5d5f5ad4fcb758f64716e7cb0c6739f41d3df8f4af3afda122d361f89da92e931aac6c16479125deb2b32825863a7a1f7156fe0fea2da86b9a3f87ed63b4864b89b64aedb87da5402de5c801195cf27bf031e95e97f1bf46d19fe17dd5edfd8dbd9f88f4c9a1b111c5f205f9b2303f8c32966cff0081ae752b54d51a5af1d0f96e4151118ab93c3242db26428d8ce0f5aaeeb5b35d494c8e90d2e28a9189452d1400e434f34c406a50bc55213198a4c54a06282b4ec2b90818a5a732e29b53618528a4a51d28403454d6eca245f3012808dc075c5403ad3d0e0d0819f4ad8fc4c8353f09f83744d2ed25bcb98894bbb5562ec9e56d287240c293c800f0063d2b57e3f6bfa6f8bef60f0bdbd9c1f6f4b137e9792abf988fb4b792aaa339201ceee39f6cd796fc013a75d7898e9fab6af3d8c7232cb0c48180b870705772fcca70723b1c7d2b0b59f187fc5d0bbf12d9daa2797705ade2491954055d88491c9e809f5e6a391a93681bbab1c63298dd924521d4e083c60d358ee6270067b01815b3e31d663f10788aef5286ce1b38e62b88a140a3850376071938c9f7358b5b22428a28a0028a28a0028a29d1a3cb22c712b3bb10aaaa3249f402801b4549710cb6d3bc37113c534676ba3a95653e841e951d001452d3a34dee1772ae7bb741400432c904a92c323c7221caba1c107d41aee741f18eb5ab451f87b55ba175a55dde457176f380d232a11d643c8000ae131ce0734ec3ab94190c7e5201ebed532498d33d8fe36ea7e05d5a0f33c38f24daccb3091a48c8f2b91b59791923e5041273cf35e35221562ae0ab03820f515d52f86231a53bbb4a6f02ee0aa3209eeb8ae59d4ab1073907bd4519464ad1771c935b90b2e298454e4669a52b4684991629ca99a704f5a7d0905c455c52d145310514504e064d0014d2b4ea280222b8a053d85369586463ad3a994ea928b5657335a5cc5716b2bc33c4c1d2446dacac3a1045349c9c9eb5121e6a4ab440514514005145140051455bd26ca5d4752b6b3b750649a40833d064f53e83d4d00775f0abe14eb5f102633db85b4d1e29364d7921000ee428fe238fc3d6bbe8edfc01f066f9ef23d4dfc4fe2fb725608a350b0dbb7232d8246707d491d80ab7f19bc7d17847c3b6de05f072ad87970aade4b6e71c951b803d724e727a9cd7ce5d7ad42bcb5e83d8d2f136b371e21d7eff0056bdc0b8bc95a570bd067b0acca28abd842d253f2db591492a4827f0ff00f5d757e1cd36de3892edf124847cb9e83f0acab5654a3cccb8439dd9191a56877578db995a141d19d7afd2b774af0da899a4bac49861b115feefb922ba5b3b2926569ce1611925db9c63aff314d6b958637f2541c020161924fa8ec2bcba98ba93db43b234611dcbd1daa88ddee25f2e3c15dddce7fba3bd655e58e9eafe5dbdb298c704b00c587d6833c9332b6d650c30436091e99aab797eb68a8000d7327dc52c300fa93d85634dbbd9153b3d4e1356812df51b88a2c6c56e31d87a554a9ef9a47bc9da665690b9dc54f04e7b54201270064d7bd1d95cf3989452d3a38da40db47dd1934c0d5d134593500eecc1110e3041cb1eb8fcaacf8a3c2f79a16a1342e04b12608743d880791d475c1f7a6786f5b934b9420b7f3dbcc574427196c8e0f7c1c0ad7f18f8c353d66e9e6d42c20b6ba63879220c0301d06093f9d72b9565574b58b7c9cbe6718c197e560460f43487a915d35feb1a75f696fe75be2f08c0e3a1f506b98ae8849c96aac4b0a28a2a8414d614ea2802002969a4d28350592275a7d46a6a4ab4430a2ad43617330531c2c431c0ed9350cd0c904852646471d9860d09a6047451450015defc301169ad7baf4f31416b1b08d047bb73019e4e46d1d3eb9ae0abb4d02ee0bdf0ddd696be5c136c2725b1bcfafb9ac6bb6a25c126ce6358d426d5b54babfba399a790bb7b67b7e154a9f2c6d148c9202aea7041a92c6d9ef2ee2b78b1be46da33dab5ba4afd08356d743967d09af11373925970dfc20e0f1f9d55161bac564456666e770cf03b822bbb11359682b05b302d1c663e475cf53fce96ce2d3e0b18c40307682a5c64107939f7c8af2de324aefccea741248c2f0ee8f613d93bcf089a4490a960c7071e9835b8b6d042a046aaaaa080abc002aacc91c574971187492421180c0073dcfe552b382a467183deb9ead494ddee6b08a5a22692ee5687cb0dfbb5ea3a67fcfbd445fae476e6ab4b36c638c06f5355bcd25c0fe9cd66a372ef6341e6d8a427df3c283515bc2049299479ad28f9b2300e3b7e55734db48625335f0679490522e99f727fc29f7b32b0558e28e3dadb8951ce3eb4af6d114927ab33d349d359a433d9ae5893b949e3f0cf15933786a48efd6681a26b70c1b60cf4cf4ad992e9448d8c80477a9ed1d6e248e3676443f7d801c7d2b48d7a90ea47b284ba189a9d84570ee4c0237e9903a5722e0a3b2e7a1c7d6bd46e6381e278965de40215c8c13e99ae2ec34196e7ed2b701a290380848e0f527fa735d985c4a516e6f430ad49dec9193a77986fa1f253cc937642fad7712fdb2ea2305c5820dcb82fe602071d4566e97a741673f98be619010327b7afe75b8f76fbf2403d8fa9a8c4625392e444c68dd3e6385d5749b9d39ff7a84c7d9c0e2b3abd16f66fb55a3dbba830b8da4f3c7b8ac0b0f0a49705ccd751c4ab9c103766baa8e2e328de6eccce54da765a9ccd15a7ab68f3e9d2904acb1f50ebdc566575464a4ae8cc28a2a7b1816e6ea38a49a38118f3249f7547ad3033e8a9140c539579cd458ab8b04124c708a49032715da695a0d9c76d1cf7c5b729ce0af0fc6401fe4552f0768f737b3fdacc520d3e27db2ca010b9c67693ef8fd6b575dbb47bcf2ad9d0c71a84cc68514f1ce01ae5af55c5f2c47157d58e92e92da27cc29865c2b11960036460f6acbd4613aa7ef27b8632226d8d58f41d719a40d9039c539a68e3219f6907af6207b572c6728bbc772a566ac60df69f7165b4cc9856e8c391552bb38e58678b6ccbe646e4f56c8c76cff8d73e628ad75b5446cc61c7bfe15db4b11ce9a6b544b8db629db5b99d6660e88234de771c67d852456d34a85e389d901c16038cd6d5a69ab35e4b35f4623407841c06fcbb56dee8f09d06cced000007bd454c5a8bb2d47185f739ad32ccdc620ba8596376c897182a71ebdc1c55a97489b4cbb86e6ddda78e260ec506180079adff003148e581e38a9ed308924d310a982109eededf4feb5ccf1736fcbb17ecd223176b71621e2e438dd9c7229b6f347b2258ce3e50a0e38071c8cfe751c9711451fcbb54039dabdcd38c720d3d33c1560c4b0fbb93ff00d7ae776368bea49736e2640e4fcc983eb934db6264695e450cb172c010327b75a7ac862255d181e381ce7e87d2a934b19bb6f319bcb272c8bd58ff009cfe74450a73b3d0e82da14ba8e305e34cb6d39e7f1a759adbd94cb3488b2ed60385edf4f5acd82e000554152795e738faff008d32e1d8c790dd4723fcf7a524996aa6971f35e2b6a0f2c8c581ce07a03492dc24d1b6d043118e9935455189e793568298d06100f5c75a1ab094990f94c4f231528755070707341230719069ac9fbb271db3cd66cd63a2ba24b7959d1b81e648703d87f9ef57256f23633287d831b73c127d6aa5abeef2c73e838c8ff38a96e5833ed3d00efc554968429134091cac19919a4e871d09aa5772c793b015f66e6b47490f23bc5182b2f1b18f4ce7233ef5972c4f31763c3f4618ef44626739761f6d7b1c36c5245676249fafbfa521bb4046c1b01ed9e2ab360a85e770eb9edf4aaef1966efcf3cd528a33e768b3a822df42b6ef36c07f8c7f5aa09e180932486613c00e4a8f949f6cf6ab5b55429e437f31eb5a964e3690a4903f84e07d6b48d69c15a2c718c66f53174ad06d6f2de413c53c33ac8ca06eeddbb7eb4ba8f8366485a6b190c817aa3f0c4fb7f8576286deda269a22c242b83e611c67d315722b980da144043b3296600b1c83c1c7a75a6b17579af7d0d7d846c787a54c8a5d9557924e052451348ea88096620003b9aee2cfc1f7365a7c17b7a444f3a97891810c547048cf1d78af56a5454e376716ec6c12ad968d1430b6d9594861b720e7a907dfa63159170fe442efd7038abf7e0249b06485e393e9e9f8d60b4c2eef56290910eec601eb5c308b9be67ea56c5bb09649a0679f685cf07a55808ac7d87539cfe14310b8440020e00a646f9538383db8e959c9ddb6868cc921992ee54b72548395507191ed5ad630ac689b970cdcb6ee4e7145b4913a1ca832ab100f5a9725f71570ac39ce719a752aca4b94168c91e65270a33d3f0a125dc47240f4eb55802a70c307da9c5829e00391f9562d07317adbca937bcce55410005192dd7f2e94f95cca59ce06d0005eca2a809019580f5ce7a76ab0921647443cb11c1ee076a96ac172e2448e9927e65e9df1f4353bb946c7540705ba8e39ace590a8e84f7e0e2a53396196241c75cd1ca6d1d892e25cf3bb27fc6a9300af19271cf51d454acc7230703b0c541390475e7e942563392ee5af39514104927834e1316070481d7154a27182a73d3b548001c822aac2b96bcc236b2e437422a78a76e01239fd6a9063db8fa50ccdfc246e271f854b40aa345b94a3e49ea4d2b10d100c1885f4191558b61739e7e9de9636201c1233c1c7a566d6a5c6abb925912acbf36d2a79e7a8f6ad070b34a1d18027d4f35457611f70023b8a7a805065806a6d8f9bb1a168f240c1930483d00c818a742219ae8b492491a1232c39ebd78e9f99aada533f98cb9251bae7f87deb56e746bab71336e8a5808277a367206082075e723ad56c5277464eaf6c225520625cfcd8391f507b8e95481fe0db9cfa8ce2b4e695e783cb650d86c15ce318a8ad60dcd99404c119e7b73939fa508c9efa096f015609228daddcf6c763561f646bf2052e09184fcbfc6925bd8257630c91ccb1f521b8ff003c03ef555275bc8d258530243bbe61838a2cd6e5a6968873cecc5c632146e3ea7e94926a9f61679e49648c0f9b2a3049e3007e95626885b2897cc5dc4618e40007f215cf6adaa6972dacf6c0ced2143875c15dc0f03e9c0aba549d496da17ed7951cbc0db278dbd181aefbc4faa472c36314729dab123b124805881d8938c00076e3d2bcf6b4adade5beb79a79a525205e84f24e2bd4af4d4acdbd0e44ec5f0c653b4b0e3dfa0acb711d9df704c81483c569194a5aa492feecb29c6463ff00d75956107da6f21893827924fb7358518d949bd86d9a52cb34b19786cf0a79dcc71c7d29eb68cd2432bc8158021957907d2afdbd94b6f094b86f30127e6ea36ff8d44e06d1b07193df9ae77516d115c8c4401c8032dd4fd28da1090c3bfe3563ca1b7e74c9383f4e689e2dc488c723938e6b2b8af72b31240001e2902e01ce78ce715a3656e5cecdb2073c805700fe3e9435b49c968d43138e077a5ceae1a99a80094804904d5c8f68c0007d4546201e7003eeb7033ea2ad8b6652723903f034db4545d8433303c63239276f526a2f3599be7008cfa0c8a9fecaf8cf009f4a6ada49dc13cf5c54dd16a69e844ca700839c9f5a24418dc4647a67156040c080c085ff00eb67f3a8bca63c8f9cf43fec9a771b76dca510eaac391d0d4c1b0bc03cfa8a93cacbed2002adb73df9a49176e02e0e38cd36ee6611c992077a1a4c1273c8a8cfcac4e467a71535bda9941918818c9c9381c51615ae2c692b47e61c6d39f6cd346770e6b496d442e8b2480a15ce4a920e47afad453451ab281804739047eb4345729591883c9341701aa40a9c6f5e9ebce4ff00852341b9b28067a71de972a16db166d5c22120658838cf6a82e75c8e3768dae0a9da148e78e9fe154f53bf6d3600abb4cf2a9da0ff000afad728c4b312c4927924d75d0c37b45796c1cd63b58fc4568aebbf2ec71f32f18aa3e27d6da78cdbdaf96b04a7736cc67e9ec39ae5ead69b6c6f2ed62edc96fa0ae8586a74df3f60e67b17fc3f633ea1e6c5b8a59a0f3666ce0003dff1ab37be24108f2ace1d8a8a157756b4e915a6897168a8224971b8938c01c8527d49e7e80579f39cb13510e5aedc9a1459afaa6b5717b12c67091f0580fe23eb5921ce73431c814dae849455a256fb9a3f659bed42d8c644c4ed0a78e6ba6d374a96d2ce78e695034846367cc0119ebdbbff009e2b4b4ed3c167d4af2226f64cfc8a41d800edf85595decec40098fe0cf20e3d7debcfaf8be75cb1f9936302f34569e45925ba66079718ee7fbb56ed3438ece71322b16c60063c29feb9abe2556983aa85607ee83cd587ba5dc4338caf3b48c7e7dab9e55ea35cb7d06d22938dd290ce0104e003e9fd7daa131abc430b97e80f1f9d5c92159959e3723772070460d462231e4313d80ed59a64efb115ac7c067ce08c1c9ceea5485565053819c83f53ff00d6ab4aa7a11562d6ca4b962003c0c93ed49cadb951a729688a3196724846018e7f2153ac6769ea7071d0f15d3db68bb2053e51773ea7deafae86ac5f0a54e391dbad60ebc51d51c24ada9c0e936ad313236e0aac422e3a7ad6b1b3ce4aaf4e0f1d38aec34cd044436aa719dd823b93ff00ebab9268e89192887a64e071fe71532c4abe8691c1b4b5385b2b24b9931925b81f4e7bd5e934808eca141383dff9574173a62400ba052471bbae33e829b6c05c49e5ce08cff1fa7d697b5bec5c30b18ab491c55fda490e43a61546493d571ce7e958d76c629e27603cc183f29e1876ff000c5767e23b5b8b58f10c8a4b300724938e9819f4e2b0b4cd0a7d4ee4390aea300ab93f974c7e75d14a69abb392a536a7cb131f5131a5deeb69439e8db3a0f606886df037c24ccb8dcc3ba9af431e08d91cad21820fdd9db9859d58e7a7f7ba107774e78158169a25ed9a5d4798c4c395e41ce3af1d3f1aa55a0d5932bd84afa9cdbc4a712060633f313e949a64859e66c9c1c05e33c0c93f99357c69be7de62759102fcec15b8c819e6ab895a49d96da3f933d33c7ff00aab45356d0c92e562caef27524e3fc9350963927bd74d6da34b3d96f5c07638e31923e9e9589abd8b594caad91bb8c6318c5671a89bb21ce2d6a5228cdb4e411df8e680ec18a8dc33d79cd5b8225465129c0c6793c66a9c84acedc1c83818eb8ad232bbb185f5b19773a5b4f33b093a8c82dd49ff0ac9bdb496d16332800b82460e6baa9c9b71938f3026700703d2b9dbf669ec6da491b2e320e7ae33c57a187a93968f604cce06b5bc37204d4d73d1948febfd2b1eac5acff0066613e7053ee8f535d735cd168ab1abe25d49879b6aa55c39cb9239047415ce2b9542a402a79e9c8a49e569a5691ce4b1ce69aa79aca11505ca8b4ac89511a4cec1bb0326917ae08a8b38391c1a912791338c1cfa8abb858f5833852638e4247dddb80323fc8ef55d6de464f3373f98ca5f6852db7ebdb93d3fa550f116aff00d937a882de06b8425648cb6e1d31dbbf5eb58907886edef05d3cac90c4c3f74ac791d3f90af228e16728f309ad753a259644bd452e11d0e189c6ef7071d3e95a8608361b8c0042f5031c7b573d728d25c1d574851731ba96b8889c939ef8ec7af4e78cd5cd1aec6a36f2980b2c67e5789cf438ce01fc3a9f4a9ab45a8f3adba82762c58ed37aa22c6d94126307eeb7b7e54f9afeca2d596c6691bcd6c7cca32013d055b8e59da194dbc2be64685f605209c0c8edf8f5af377b7bfbabc7731c866662e4918e735786a0ab36e5a2417e43be96e517556b148a466407749b7e4fc31d6ba0d0cc7e680d82a78db8ed5e492c3a9d8ce24712866e770c90d5db786b509e4b5594a4a26cf53cf03bff0093462b07cb0e68bd070aee13bf43d35f5ab2d1ee21b69959c4ab908b8f947439278c77aecf4bb1fed6b392e63b27b6da410ac49dc08e3b5780f8d4de482daf8a18a4887ce00c6ce7e53cf18f7fa57d11f0a3c6569e2ef0fd9acaab6b7f6e8627855c156d8141651fc20f50a7a7d2b8d6097b2f68b5efe4742c4ce7553e6b47b7716d74861264dbc922a901f6601518249e7b75e3ad5ad5f451705fc841bd0021780c57b123fc457452cff67d5606fb3bc1624344e5a2c16901da0fae08e84f18a835c963c7992958b03019701b07b6783f866b8eaaa74d5ba9d90949bb9c35ee94d16e1b46dc66a8c5a647259cd340a9e544c51c1701891d783fd7ad4fab6b9e5c9218c33aaae7700724671ce38fc7f3ac296ff51be8e28e084ca253c2e400573ce4f4db8f4c9e78a54e2de891539f665691e296f5a3b72085504ee56254e781bba7e63eb5d65a78363b9d245db882caf7cbdcb2db29562deac3a77c74fa62b21743d6c11358adada975545114cd8cf38439e3383dbfc2b7749d0f5bb7965b67b916c92286c603fcd8e47f75b1c7a7515ab835b18c65ccfde2d68827b7897cf0aca6331b6d7e383c1c0e41c8f4ae6f58f0b3ea12cf2d84a3cd7c910b3e08f619e08cd75e9e1f9449e7992349547cc0c5b54e7e87b7356edecee0266178e58cf00b74cfbff81acf95c7546f74d58f38b6f085d343b6fed963948c32f273e87ffd554e7f031b12c22876b1009ea71d7aff009f4af598a0bef30032428a5896518dabf43d7144da8e9f116579a265fe37de181c7bfe358fb49aea1ece2fa1e34be65bf9b12abf98836e76f23f1e95ca4b63717baa348e3273b546323776cfbd7a578f6ff4a8616fb2bcb1b13f71318739e31fad72b36a5676f6ea34a13ac8ebcfdd03279fbc79033cfad74d1949aba4725782bdae719acc1b2574072cb8ebc60f707f5a224582ce49523ddb40cc8c703247f9e2aa5e5c195d4e49e793cf38ee7d6b12fbc43b525b78b7ba6ece4f1b8f4e6bd385194d591e7495de843abdeb619437ef24fbd8f4accbb3b628546edc17041fcea288b5d5e2f98f8dedc935aba8ded8a5ba46b0349246bb017e0823bfbd7ab08aa694521dada18db1b6ee7f957af3dea0924de703ee8e944ced2b65ba7a532a9b35480d2529a290c0f5a2948fe54da00d2632dc2c8cb0b48c4ee693049f7ab9696fa81d36eade3b299a37db2bb0427685cf3f4e6beddd1bc23a5db8543676fb4e07312e703a01d8015178abc056ede1bd461d26dadae2fa581d235bb6c212dc72546460138fa0af2a19b7b5d5434f53a2785e4ea7c5ba624fa75b7f68c379188c1d8f1a49f3e4e7823af6ebd2adf853599135168a79014998125ce32c38193efdcd1e27f05f88fc371b3eb9a3ddda421f679ac998f77fbc323f5e6b2b41d0355d7ef3ecba2d85cdf5c633b2042c40f53e95ea4a30a917b34ce549a763a8d39e18bc4ceb71726e2de4263676e7bf424fd3afd6bd53c3163a2fda20b72619669537c32328f9543761f5c8f4e2bc0afd6ef4e99ed6f2d5ed6ea262ae24465704704107bfe150d95dc96f711cc773ec1800bb2fea0823f0ae7c4e0956b72cac694eaf26e8fa37fb2f49bfbcba8221f6a9a01d5002a0f20807f3a962d15212865b68d6024a9ca6383c630077c1fe7577f662d223b6f0e4f7fa8062f792349046633b768e33bbd720f15edfa8245259bf9910923fbcdcf383e9fa5783569b84e508caf63bd38ca29b8ee7ce3e39d32ef48f0edd2e961a75949857232638db0768cfa631f8fad3ff00674d692c2c75ab6bc64003a496f1ed3be491b0a5578c90401c67b0ed5ea775a6b69ae536f9b62ec591c7cd81dbf019e95a3a769ba7dabbcb6d6115bc8ea373a2fdf1d803e99aba38992a52a4d6e653c3a73538b2d43aaa4881268da3940fba3e607d70475f7acfd6e292fed658e384cfc60291c2f1c02a6b47ec96e97391b94ffb24e081d88fafa5624d697304f330b7919d9c73cfa1e73dfb74ae294249dce9b2d8e562b4b91a8ada5ec6c21ced1e5808d919efd874e7e95b7a0699676735b5baaf971b2e77c983b0e7919e9d39f7ce6b2f5dd3af649e558ae2489a1c799202bb724160318c9c74e0e2a9f81f5ab95f374eb9285e3cb2a939423a17563ce41ebec6bb68a8b567b984a4a2ec7aeda476704664b5489378f9a45032d8e3934cb8d5a085c2a61998e3e6e87fc6b968eee5611a3471c722310ca5339f7fa73d47e3515fb16539203672360e7f2a994d45e868a9df73a69de39ad84e92c4d237aa8e31ee78eb5c2f893c4d7fa05d44f756c26b477201236e067b11c7b60d66df6b53d9878d26065380d9c9c7d40e7f0ae3b59f17de5d5bbabb84933d47a0ea08e9dfdbe9426e7d09a8d416e7aed9788ed351d1a4b8d3402e72be5cca786c8c83db1cfafd6b84f176a76de5b35bf972cb1fca536a80bd8723d0579fdaf8a6eedede7b55937a3ae539e87d78feb45a6a31dc5c3916a1eea7055a469c7b03b463038f5cf7c5258469dfa18fd715add4bf246faaa196ec2c8a4b2a2edf94727041ea7a75f4ae175a8f5bd264bdb9b9b78d2362634c3e11071caae79cf1d6bd1609563b90628c6c03f89f209efc9ed9ed5c0fc4ed3ee9e45d4da5636c5c44b0b71b38ea07a1c75f5af4f06973f2bb599cb526a5d4a2d1b5ff00874dcdb48bf68518976ae307ff00d5dc5715b79cf5aded3b565b1b030c110f39db2cecdc631e9f9fe74821b1b04dd778999d0300bd39af4a11f6575d3a18dcada269f24d7514aca562521b763af3d07bd676b1324da84af18c296240ad93e22688ecd3a1581154aa93f31c1f5cf1dfd2b996259989eb9a7ab7765453bdd866928a514cd0503d6929cfc7d6994085f4a5228078c629c36d3b01fa3f04fba5db1c242a9e09181ef534d32a9f9ce73c62aadd59bb4acf2b968970db173cf3d3dc557b6d34b879e1f3236207eedc9c1f5e3b1af8d7095b43d5f75bbb1da8d8596a7a74d69a959c177652ff00ac8e550508073920fa11f5acbf027817c2de1cbdbdd63c310344ba8a2a32a4acd128539f954f4c9f527db038ae8edc2058e28dfe6fe363dbd45496f716f6f9b68230238f83b71804fb574e1ab3843de7a19548a93d1106b3e1dd1f5a8fcbd5b4db2bf01760fb540b2ed1ec48c8fc08ae12ff00e17f8374f99eea2f0dda490411ef7b62c4abe5f0c7073c85c91cfb63a57a242f2899c336f4739fa7ff005aa2d4de316c56539933b5081ce4f5fc31d6b78625b5a36919ba6afa9cb78435cd1b59d3e14f0c7d916c51da248adc6d550a7180303071838ed9efd6bab49555bcb91178183839e3debe678a47f863f14ee74d2b3c5a0eb52ac96b2a8f961949c71cf4058a9ef820e0f43f40f86f7b6971b4a2562060993ef1f539efdea6bd09427cd17a3d51a424a51d7a1cbfc6ad6b51f086810eb5a269b15ec46611de7985888e223a803a0278cf6247ad4fe12d52d35fd1fedba15e0bbb52b80060b42c541dac3d464647b715dc4f6516a1a6dcd95caeeb6ba85a2914f3c30c1ebf5af15b7f8131d8f8b2f6fa2d61ad34999dda3d3ed0bc65d48f9519b23e5cf5033c703ad744634a74ef3f75afc4c79a7097bbaa67a058cf32451cf71190532091f32b73c1cf63edefdf8ad3b99cbc6e65da11c00b86c9e7d457ccbe28d6be20fc2f4b2b4d41ac6ef4c07ca81a4b652085e8a5800d9c63bf4efc5635b7c73f139bdb67b98f4f6b6470cf0a418dcb9e403938fad5ac04e6af169a1bc424f547d212e98753526c2678a0914ac9349191bb1c700f5ce3a8ae1fc4fe1378ae0b4173bd87ceacab86439edfe7eb5d4e85e34d3b56f0fade69d302260ce8920dbb393f2e39e9cf7accbdd49d8857618041c838cf15e54dce9cedb346d1a6aa4798e66dbc517f617223d72d818c8319ba894e5471ced1c7e5f87bea5cea96d7301b8b7d4acca47f39f367c32e31fc2dcf00f61ffd627962bede1625328e0055cfe958faf58d9f931b850c413bb001c01faf4cd6f19c66d292d4c64ead257dd183aadedb876984d05e9793016373231c1e48c60f1d77122b1bc46da7ab23e992165953950d960c47523d091dfdfa549736770f7f1d92799be51f28200dd93e98f6fd2a1b3b64b2ba94b45968f2b9230091d78aef8b8a8d9238fdb394aef619a64896d6ef1c9036d76dca46093ec4f4e3934d8e34fb6c1318c300f9d8ab9c0f7efc56bdc5c43f638da264f33243718db9e98ed59cd16c224041918ff7bdbd3f0a22dc96a6356ca5eeb25beba5c3ba18e16886d8994925bd723fc6b0fc4faf7fc52b3584fb66799c04671f3021b248f603bfbd49af5cdb69ef2477773179aa7798e360ecd9e70319fd715c56b97715ddba5e12a1ddcc6b129cf968a3bfa939eb5d586a0eea52d9046e65771505d4cd33fccd90a368fa0a6bcc48213201e0fbd47918c0af4252b9aa561d1b60d46c0863efcd381e734e94fa74a9e857522a5a28c52185252e2928016969b4b822803f4aade5c9772e0f3fa532cae8cf7ad12465e300e5fa053e95c841e25d31e296349024c01f507d339abf63e208fca0219cb3f7ce39f5c57c6c711aae63d27156d0eae6b189e27461c3e77638ce6b26df4dfecc8a7c3191188605ba8c7ad649f1cc70dfac1346a212bf2c8ae3391d411f91e2aade78d609a42be62c67b03d3f3ad6bce8ca3ee934dcaf63b1b727ca49180dede9515ccca2464900248eb9e83358763ac9b91e6619429c2e0f5e3bfb565eb9e2380c1308261f694f4e475e9e95cbedda4a313554f5bb38cfda07c333eb5e1b8ae74831acda739bb4550773800eec1f5c60e3dbe956be0d78f3fe127d2a396f48fed242b0dc00a4283bb2180e801c927b03c7008aab278aee9fcd8646578b3f3e3aafd3f2ae5248acbc03abcbe22b39a4b6d2ef2145921dbb8ac995656403f84e08c76e3ad7ad42afb6a4e8c97bcb6ff2309c1c65ceb6ea7d2e92aaed53cb1e9e9585e24f15e81e1c8e4baf10ea5696c11372c6d203230cf65ea7f015f397883e3febbaac4b65e17d2fca9c908b70c9e64879fe140319e9eb5e27e23d4352d5b53babfd6ee1a7d41df6ca65387c8e318ed8c6315db430127ad5309d64be13a7f8c3f106e7c7de246b91be2d2e0256d2ddb1f2038c938ea4919fd3b57060d309e696bd58a51564733d4e83c33afdf6973c51c1773456cd2ab491ab70c33cfe95f44926e5606b71b924c15c73c7bff8d7cb30e7771d7b57bdfc2df12a5ce8c61bb7669624dbf293bb1820fe9fcebcccd28de2aaa5b6e75612a72c9c1bdcd8f126bd0e816d3c976eb18c0540a33ce39c8f5f4ff0af12f1378c350d72e839736f0a82aa9131191eadea68f88f7b25df8b2f55a779238d822a93c2600c81f8e6b98cd6f82c2c69454deecc6b4dcd9e81f0c7c4135bebd676f22b4cde683131c9209e08fa6093ed8aec6f9266d4676ba89959c16000233939dd5e35653cd6656eade578a60485643823d6bb8f0aebcd0d8bdcead3cd2469b90316dcdf311c73d7bd3c5619b7ed21b9cf2dac6e6a66fb4fb379a0519f2cece03ae48c74c7f938af3f9b5693fb32581e6b86b8964def9380b8ec2bd367d54eafa49364c9242a9f3ed52bb0678fe55e65e2e8a382f62319e5a305b8c7359e0a5ab84d6a2514b4461c929c9a992ca5934c9aec63cb460a7ea6aa90cdd8d7436016e7454b29c30224dea5073823a9f502bd177e85bd0e608c52559bfb77b5b868e4f4c8f707a5571d6a0b5a8b522f20719a8c53d5c2fb91e9eb4d0319dc8f4a4e8693eb45218e068a414b838cf6a005500739e6949e29878a09a7711ef3ff000914315ce7ed709ba63c44241bb7631835b707883ecf19965c07ff009671e7bf7c7f5cd7ce30caf1c81d490ca720d75fe1fd5efeeeeda3b99048a1771dc391f4af32a65b06ae85ed270d533d5e7f1609a46322a6d63bb0a79ce3b1fceb266d79c67c95381cf2727f3ae5dde42edb703773802a47ba9160319dbb8f2580e715c8f091812f1351e973aeb3f13dd89232669319e00722ad8d46499ced677520e32726bcf239de3cf422b7b47bb6116f3ba3248e41c8c7bd63530ca3aa42f6d3968d9d0e8f3b8bc98de298e34c92e79cfa71ebcd77fa04ada8e932c7716f05d586c08d6b2a06f31719c303c91903b75fa562690d63a9da4100558ee000096c00589edf51fae7a54bac78822f08d8efb99fc840d932200cedea2b867cd3928d35a9ef61611852e6a8d58e9f5bf1559f837c0579aaae996b6ae836c090aaa2c92370a08033ee7d94d7c5f757125d5d4b713b1796572eec7a924e49aecbe2678f6e7c61791c48ad06976e4982027924f566f7ec0761c7ae787afa4c061a74297ef1de4f73cec5558d4a8dc15a23f8614dc1a01c53c60d77ee736c2dba932aaaf52702ba0f0b788a7f0eddcb3c2bbd9948dbb881bb040ce3a8f6ac1b76d9711b7a303fad170f995cf624f144a2a51e596c2d6fa1b1e2578aecdbea02556b9b905a6507f8bd6b101a66695482692d340b589e3f9d36f3b81e07ad6ee8fe5dd58dc58b8c4ac37c79381915cf24a639032e7839e2bafd224875010c8e765cc672b20e38cf423fcf5a273e58dcce68ada56b779a1acf6e10e5976856380a7d7deb0ee6479e42f33b3b1e4963926ba4f1459055b7ba03f76d98f1b86411eb54ec7476bb4599dc47160860a32d91e83de9c650e4f68f4b92a496a66d8dbbdd49b510b2a02481c671daac69f752db5e8b899cc51265738ce474c019adfb689208f65baec4553b98ff00335ca5cdb5ddc3b485848b9383b80cfb8a9855f697b6c34f9996fc571c292dab47389a468f2e47bf23a5622004f2702b405a9915a3cae634dc48f5f4aa6e8c802b291f5aae468d23a2b0c5c669db57af4a601cd39f3da81832ae29bb69326a4419146e1b0ce4500f6a7b0c5331e940c1bd69a69fd453293047ffd9", + "properties": {} + } + ] + } +] \ No newline at end of file diff --git a/test/expected/backend-l.1.1.1.json b/test/expected/backend-l.1.1.1.json new file mode 100644 index 0000000..fc7c6d6 --- /dev/null +++ b/test/expected/backend-l.1.1.1.json @@ -0,0 +1,13 @@ +[ + { + "version": 2, + "name": "_image", + "extent": 4096, + "features": [ + { + "raster": "ffd8ffe000104a46494600010100000100010000ffdb00430006040506050406060506070706080a100a0a09090a140e0f0c1017141818171416161a1d251f1a1b231c1616202c20232627292a29191f2d302d283025282928ffdb0043010707070a080a130a0a13281a161a2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828ffc00011080100010003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f9833835afe1ed4c585d1320cc52615f1d40ac5ce69e870456bbe8ccdaba3d9b4c8226b19e45d9247260a4847238e9f91ac9bfb578e4dca498cf3923a7b7f9f5a87c3376f3787215699488dca11ce5790547ea6afbccbb994bee8c11853fcbf0af1e7785468e7b3d8cf5b4924b7f31391cf518c56dda58dbea505bd94ae638c1cb904751c60d567bdf3136820328ea0633c53f4ed8cd209810cc06d653921bd4fa83c56729c9aec6b497bdaa3b1b65b4d35924668c08db265079da304e3df18af13f1bf88ae7c41ac4f34cc4421dbcb8fb019ebf5af48bcbf92ee18e15522245f9411c9cf723f315e3b7f0bc3752c722ed656208f4ae8cb6924e5297c474d6abcc9423b22a1eb52451efee07d68dbd3a7347dd38cf4af552ee637108c71d0d02a451bfeb4cc60d3b0839dc314c63926a407009a8a931a014aa79a4a55a43133cd5bd3af1ad66561d339aa9451706ae7a1c735beaba54db81936a6e655c6e158561a94564cd1f97298b8c73820f7ac2b1be9eca759addcabaf435ad1f8843cacf75656d31618395c66a6308a8b83d533174da342f754865b075b7de923fca5471f2d33cb8c69f1885504c21f33e7504b004822b2e6beb29a5dde4342bfdd4c114afe43c6811d9f79cf18057ea6b48538c55a22e52bdbce88afbf3113c32aa678fc4d695bde5bcb1c91caa194f08e13907dea85c476d19db11695c757cf1ff00d7a442d16c922429b4e738ce4d53575629d99b76fa4da5ec1b90ef7eef19c73f4aa973a13c313bc3224a07254f0d8a9741d46dac55d2ea397321199130703e95b1ae5f269f05b4b6e527f3be60c188f97e9d41fad73355a32f775467ccd3b1c825b195f02060a78e3b54524422660ac1941c6474ad6bed97b24934178f89065a20d820fd2b2a326d9da3605a363f3291d6ba56aaed1aa772175e334cdb56dd21784bc470e3f80fa555da766e1d3a52686861e29a4d29073401938c541684a54eb4829f1ae0824d0819ec3a7682345d0ac17c96fb64f025c38e4f2e370cfa6176e3f1aac74db8ddbdd321b93d01fcabb5f016b435ff00090bbfb2c72dc58c2969748df748036a301d46540fc41a174b334058b44581cb60f4e38af9fab5a50ab253dee75fb0e68a94363878f4d94ce029c83f3038cf15a3636cf6cfe6aa3b8dc0a91820f39ebf8574773a14d0da092411ae5bcb29924b7e1d71597771b25adc960c92b29091a7e008a87579b433541a5cc65ac62093cb571b187f1718049af36d7fe7d7aed6d4f9819f0368ce7dab43c57aa5c8bd92d83346a980483cb0c71d3b550f0b24d2ebd642de3f32412038232303a935ec61a93a517524f74735ee6959f8765b7d22eaf75284460a158d1f8209efff00d6ae4fbd7a77c4bbc7b6d3d6cc9e5cf38c60fb8fd7f3af31452c78c7e35786ab2ab0e797534a905095912463a9a68a5240000391de818aea3318dd29b4f614d22a59484a700369229b4e1f70d0818cef413cd2d3690c52734a0f4c5260e334e4033cf14210841cf4ab96503caea91a9676e0015a3a36857fac330b0b66942f56c8551f89e2bd43c0de029747d4c5eeaf346cea8764717cc013dc9ef58d7c5d2c326e4f5edd4da8e16ae21a505a77399b1f87b77756025372914e30cc8e38c13ebeb5da5be8515b69f1d9dd04951001f30041238cf35d6dcc201611f24f43eb5599211005982bb0380ac32306be7eae6b52b75b23d78e4dcaaed5da3c4fc6fa7dc41ac31fb2c91c3b4042178207d2afebba13cbe17b3b95251ede20ccb8eb902bd6ae2ca36b732c7107424020fcc07b63d2b2f5ab295ad4c4573138c314238fa76aed8e6bcfcaadb6e79d3c0ba526a5f23e7d287aa9a40cc7ae4e3a66ba4f11787e5d2a5cab79901e8d8c63eb5cfba90d835ee45a9c54a3b1c1b3b32263c60d4b6f187de0750b9c67ad21500e473f5a7b40c81668c864ea08fe5f5a696a321cd3e3467384524fa0148d8dd95e952c372f0a3a28187ea71c8fa1a17981553ef7b52b1f9f8a46e178a6d46c56e7b07ecf376dfdb3ae69ea9bcdde9cc40cf531bab7e78cd7b3695651aabe42a395c9e70471d2be50f0e6af77a1eab6fa869f27977303654e3208230411dc10483f5afa934fd6ec357d060bbb5fdd99a20f90df8608f6e47af15f3b9dd1929aaab667ad96cd38ba6ccff12de384f2e3452aad8273f91ae0f54d5becab34d3966112861b79c6382003fd7deb76f992dd1f6bef07a9033938e00af2bf1a6ae433d8c6c8c49cc840e9df159e0687b5925d09c75470f76273bafdf2ea1a8c97291f96ad80149ce3029de18d4c695addb5dbef31a361c2f52bdc565ca7205246327e95f4ae09c793a6c794aeb53a0f1b6b71eb5a9f9b6eaeb028c287001ae701c54921e31d6a3029460a9a518ec8a727277600d3852018e4d00f35448fea293146697ad310da5c7ca68a728ca9cd00454019a9542fad057e5c628b0ee45922a44dace33519eb4038391493b0da3e86f02c56d27846ca18c6244895b2482ad9272491ff00ebfcab52d98c721507a7be0f1fe7b570df07f53373a5cfa7b4c1248a4dd182bfc2c3907f11fad764f23412859804c1009dc0f7193faf4af91c6d2946bcd3eba9f61976229ce8c5754bf2274b829bf78cee6cd33093cca3253beecf7fad4b34691db79924a912e7ac9c00bee7b7e74cd31eda59e29ec6eadee0c4c18889c30cfa1ae55069732477fb5a72f75bd4ebb45d1e4895a5997109f95770c863d7f96715cef89e4588cde521d9bc803d07a81dfb577275a8bfb3e1b47b7280b138240032b9cd703afb46225318c11969016cee24e718fcfbd452f88f32b4655dbe656384d5a36beb4b886e22da84ed041fbc72391eddebca75388da5f4b013bb61c6715ecdac4aa96e542e015ddbb0005008eb5e39af4e6e35495b807807f015f5196d4934e3d0f98af4d42562b2f229119977282403d450838a403935eb9ce31ba9c74a45ea29e3041a6af5a9191939a28a2a4b1c8d822bbcd03c773e95a2259456eacd1e761c80bdf9231c9e6b82c719a327d6a2a528555cb515d0e13941de0eccec357f1dea5a84450a5bc44f568d306b932e6472ce4b313924f5269107ca69b4e9d28535682b1329393bc9dc243934b11c1a675a915703356b7b89ed606e4f148063ad3b803a5358d310d63401494ab5250b4e5a6d3d383cd3448878a33c529e69314c06d19a7114da431a7ad2a9001c8a314605219d1f83f5f8b43bdf3a48d981e0ed35afa8fc44bab99e631da40236fba5b2587be4719fc2b84345632a14e72e792bb348d49c55a2cbf7daadddf4cd2ddcf24aedd4bb134ed3b529ac6ea3b8b595a296360c083e959b4b5af4e5b6867d6fd4f6bf0b78d23d435111c920b732aec8541e840ee39e49271db802ba2bf9b7ae2561226d38e4e41f53f535f3c5a5ccb6b3c7342c55d18329f422ba987c5b7b2daf94e88c3f8994b06c7b73c7d6bcac4658a7352a5a1df4f30a908f2cf53a3f1a6af1a5a3b4123f988c141038ce3a67dbd2bcbd999dcb13927924d5fd4ee649405fbb137cc101e959fdb8aefc3d0f610e538aa547525ccc9227f5a931824f63558706ac2364d754599b44b6f089a511860a5b804f03351bc66372ac30470454b126e71d703a90338ad5f11bc3f232a219a54560c0f6c7523d4d4ca5669137d4e79be6a4e052e39a52010282c6139a2971cd21a431771a4ea6929ebea680d8722f14f233d299bb14a1cd56848a4629869fbf9cd358e4f4a18119e29569719a963419e692436c8f14a2a678b68c918cf4a888c53b58570a334945002d21a296801b8a4a7e2908a4034f3498a76292818d231453b1452b05c6e2a7b394c3306ed51e38a45e185160b97353b917971e60508028181ec2a8e7d2a57008cad4468b5b44082acd94325c5c2450a96773802ab015a1a5dcb59ceb34614b29ce08c8346bd0246fdd5a43a1582f9b287bf9e3c84d990993ebeb5cdb9dedb9d8b37a9356350bc9efee9a7b96dce78fa0f4aaa573de9c22d2bcb7208c8c537a9a7e41a6934ca0c52629375286cd2188473484d2b9a6526343969fb4d317ad3f763a5342634e4503de94b7ad2311fc340099e6a557c706a1a72f4a13068bb25d497091a4ae59635da83d054122fa5311b69a959b764f73577b93b101a4a731f5a603cd4143a969b4b408766933499a2980b499a292900a2969b9a506818ec714dc714b4e1cd310c1494b8e68a400054d1636d427d2a58d805eb4e20c90f1503c87240a5926ecbf9d4344a5d8231ee389a69a28a9b9420a5068a290c09cd145140051451400514514005390e29b4a0531324dc3d39a7a8e2a1ef5287e2a93ee4b1b22771518e0d58078a84f5a1a04c4a28a2900514514005211cd2d140c6d2834b4639a41716941a6d2d310e3cd276a01a777a6031ba532a52b4d2b49a1a6328a306940a561dc3071d292a5278c533193458571b453f68c537145877128a29c8b93400da29587cdc0a5514582e2629306af69f633ea17b05a59c4d2dccee238d17ab313802bd94fecdbe303a41bb5b8d31ae8297fb28958b1c0e81b6edc9fae3de9b5615cf0d03d696b6bc49e18d67c357496fae69d71652b8ca0917861ec7a1fc2b200a2c171b8a5a76da4c7b53b0850dc734dab767a75ddeb6db4b69a76c8188a32c727a0e3e86bd4745f803e32d574eb2bd55b0b68ae543edb89591e352320b8dbc7d3af34304791819a77979aefe5f847e3487587d3bfb0ae9dd580fb420cc2c3fbcafd08fd6be85d5be01784e5b3b4fb3c7750bc4816568989798050090338de7191db268d02cd9f1c95c1a315f437c59f80d2e8da6c9aaf8552e6f035cb13631a1668a16fba0724b15e87ff00ac6bcf7c03f0cb50f13788aeb47bc8ef74dba802972f6f911e59721f732edf95b70ee70700d095f60d763cef6d262bd0bc7bf0b7c49e10d565b69ec2e2f2d01fdd5e5bc4592407a74ce0fb1a8fe1e7c36d47c7506a474ab8863b9b2284c1302be629241dae7e5c8c74245160381c51835edfe3ff008177da14de1fb5d01aeb54bbbedc972de5e238586de723a2fcc793fddfc2a927c02f1a36af25a2da40d6b1c88a6ebcd50ac8dd5d41209c0edc52d0353c771462bbff001bfc2df11f8535d8b4d96ca5bdf3f1e44d6913ba49ec38ebed5c3c903c72346ea55d4ed2a46083e94ec1720a7034ef2c8a4c5160149a4cfad006690d002951d453714b9a33400da551cd7d0bad7ecc5ad412c8da3eb56373167e41708d1363df1b856e7867f6648937bf88b5b129c0db1da44405e39c96233cf4ff002295d0eccf97d8734dc57db7e0df817e0fd165ba9e481f53694e217ba21fca5da3a2e319ce4e483dbe95923f673f0e5c4a9717b24f14ccb1b49042c360703e701805ca93e88bf41d00da04ae7c758ab1656d35ccbb2de192590f45452c7f215efb37ecefa84fe2ebe5b36316836d770c43cc24cb22308cbb2960aa540739209c6d61cb0c57d19e13f06e8be1bd1e2b6d334dd3e398c4b1cf2c106c129fe238259b079e0b37d4f73992d41a67c449f0bbc692436b327873502973831931e383dd81fbbf8e2bd1bc25fb377883510926b97b6fa6c648cc6bfbd7c7d471f9135f5ecc0bc4fe5901f1c6464648a86d63f2208e2dccfb142ee6ea703bd473f62944e4fc31f0d7c33e13481b45d2e15b95410bdcb73232f7249ef9eb8ff003b1b58a3822db18c22a851cf4a14fcb83467b54bd4a460f8bfc29a678af45b8d3b55843452a14de00de84ff0012920e0fbd78d6abfb3268f25a28d2b5bbd86eb3cb4e8b2211f41b4e7f1afa13d8536495225dd21217bb63814d49ad84d267c51f14fe0f5ef80ec6c5e29ee75696e19cbbdbdab08e145c7de3cf273edd0d798d8da4d7f7b05a59c4d2dccf22c51c6a396627000fc6bf48fce8e7b6f3571244c323b835c969ff000d7c2963e297f10db68d6a9a91e55c29db1bf7755ced0dee067f1c9ad154ee43876395f80ff0c2f3c05a66a0dabde453dddf346c62872522d81bb9ea4eeea00e9debd68a851d3afe340ebc74a731f9ba715937765a56107038eb4a46547d68cd296ce78e290c68ef4df2a3dccc234dcf8dc42f271d327bfe34ef6a51e9400d74575c300cbe8466a2b7b686d9365bc49126776d4000cfaf1531a3ad000caac30c037d4503e51c74c6297a8e9d293bd000003c91d2b0ae3c23e1db8d452f65d0b4d7bc122cbe79b64de1c746ce339f7adea45ee68d80f937e27fc03d6a2f124b71e0fb75bbd3ae4bcbe59754301ebb793c839e3fc9af28f16f80fc47e13489f5ed2e5b68a52424990ea48ed95271f8d7e84f7a8aeed60bd81e0bc8639e0718649064115a2a8d6e4381f9a4460d0715f70fc44f82de19f1458402d238b459e152ab25ac11a87ce00dfc02718c0c103e639078c7cd3e39f83be20f0d597f69da18758d1593cd4bdb36dc0c78cee239e31ce41231cd5a9264b4d1e6349de9e45308a00fd30de4000217ff006b2304d2b79e0a9558c1e7396cfd2a4c051c0a0671cd6268456cb2c681a67df231cb6380be800febcd586603961c81d69bd3e947d68029b5d4eee765ac851002a58e0b1f4ab80e383d4e4d118da588e3341eb431244303399a7ddf7430da3d062a5ef470a78ef4809a18d6804e0f14e149efeb4b80290216a394e2363ce4038c1c1a73ee2842101bb67a552ba8ee1a1c799b4e41254903af41df1f5a69036496c5c4112775c0248c671e95648ef9e6abd844f0da451cac59d41c92724f24ff005a980f9cd0f7043c7028ce683494862819e694d1da83d78a004c6293bd2d14001e9476a434b40074fc6968038a28003d29051db9a05002d078149450047721dedd91594161fc433fe7b551bfb786eecae2def6259adae6331cb1b701c118619f704d5bbb6090316708318dc7a2e7a1fa66a290801dee1b65b463cc2ec428031939ed818ce4fd6a9099f12fc7af075a784bc5f18d2a230e9d7d089e28b0d888f464c9ebcf38edb8579a631f5aeebe3178affe12ef1e6a17b05cbcfa7c4e60b42dc0f2d4fde03b64e4fe2335c4119add2326f53f4bb1eb4bd28fe745731b09ce69693bd079a000f341e94a062908cd002633cd281467147539a00318a5e9d681cd0450014d61b8608c8a51d79a33cd02023a7e5498c1a775a050310d1d451ef466801075ef4b9a075a5c60d002519a33ce28a004cd293c714738a314002934b498c525003bad06928a0028ef41a43d38e3eb40886ed0cb0ba2e0938f7c73dc57cadf1d3c6de238f48b9f0eeaf147612cb78eb12da4d91259ae71b8ab1cee27041c7dde457d3f7b7b05bdca5b3b491c93a9c49b3e5f7e4f19e6be4df8b1a1de789fcdd52c2c8dbdd595c4b6f7566c08791c125a54cfdf0c558f03f0ce49da9a22478ad157f5ed22fb40d5ee34cd5a0f22f60204911604a920119c7b11542b4333f4bbbd2134134b8e2b94e8128e73474a5c8a0043d39a40734a79e28db4001ed4518a5ed408293ad039a5c503108a3ad29f7a4e94007b518cf149d79a774e70280107bd21f6a56048a518ef40083834a7a52014a4f14008477a3bd1450014a2928068101a40294f5a2800a28a3140c28c7140a6cb22c6bba460abef408e4fc771eaa6eb459b4b7648a0b80f38daac8e33b429cf4e4939c7f4a8b423a36ada989add6dfeda8cf23f046e739569139c9ce1806f43ef5d4dc40b700c2eb1c96edc9ddc9ce41c1f6a8ecb4ab4b29236b44f2762ecda8000c318008f6ed8c7e5569d90ada9c65e7c21f07ea1032eaf612ea376ea03dedcdc48d3be0b104be724e1b19392405c93818f11f8c9f0293c3da5dbea3e0d8f51be065d93db1c4ac8a7a32e003d78c73d7dabeaf3c52139e0d253681c531df4a33476a0d494251c5039a4a0075277a419a5cd0019a00cd140a005c62919b071eb4a4e69a466801fc6290d20e292801463149d4d14e036f5eb400a05277c52331cd20c9eb400e3cf4a3a52e4014dc8340075a3bd28028c62800c5000c64d1ce79a434080f5a09e693346298314d140049a752189591e20ba9e081043034ab236c7dafb4a03fc59ebc75c807b56b0e4fbd55d4768b76668c3b2e0a8f7c8c7bfe14d6e2e843a3cb3490bf9ec8c0bfeef6e7715c0e5bb67e95a1dea0b1896382305712ed05f9ce09cff00f5ea6279a6f7d010ec669a3de954d2f7e4548c418e7347ae29b9cd2834ec3b0a05068cf1499a2c2b0a47e546001c75a4cf5a33ed458760a5a4a09a2c2b0a78a728c8f6a88b52ab1c628b0ec388a5c0eb4d27d45217c0a2c161f40ebc544189a7a9e28b058523e6cd2f41499e6968b05843c9a00346681c9a2c161475a28ef46690585349d68a09a0561a451de9dda8a6d8582834518a4020e41e48cf7a63200140e1472727af6e4d498a648ed1955c6431c74cfeb4058ad0cb27da1d0946811b686de493c1273ee318c55b201ac79a7116a4d0c8d1b47383b411b48da077ef8fa7a7a55fb7918c6bbc8dc46703b03d39fa537dc48b38c1cd2f5a8f7d37cccd218b91da9c29a00079229e3029942f6a40334b47418a006f7a29c7a518e6801052914a053bbd3023c52eda7e38a5028019838a6b2f15362908a00854629d4a4518a004a4a5a29000a28a0734001340e941a2800a3348dd2917ad16b92c7f4a0d2819a08a4034d2d18a3bd002a8f5aa1ad895ac985aee131380ca013efd78fd6b43ad2346aca43e48208fc28039736e63bf4ba4b48cdd4b036e04658b61401bba741d73eb8ab7a4c530bfd4659f7264a478230acaa33b973cf39233c7dd157593fd2776d0a22c2c6a5b01ba76fc001f8d67f882e4b449656ea24bd940611a9c1600a8623db93d48cf356b5d096ada9b0082010720f20d262a09992d65c6c1b36e19d724e46028c7be6ac630707b1c54b403997bd28cfad2d2815455c551c52ff3a29474a9b0ee211cd1ede947ad039a760169e0714df6a72f434810014a053b1cd28140c4c531c7cd52d44f9ce6802314b41eb48681099a052502818528a4a514c414638a3a9a0f1c516010d20a4a72f34d08907141a0d1da934000714114a33476a2c037e9452f7a3b516033755b05bd31493dddc430c2c1cac526c5383ceee3a74f4acbd2269d2692f268600938ca2c4a4bb46a484cb1e07cbd877c7bd74aca0c6c58e0019ce338f7ae74c855ca34643b13b86402476e9c0cf5c7bfd69c7b12dd86cf3b1bed3e192612cf29cbc25bf873f23103fda5c7279c1ad2d26476d1ed6798e328198753924f1f9d606937b14b1457d6d0a473eab1aaa48251fdccaa853c9200623a77ad0ba8f507b4b5168acd0850bc90485c601393c939c93db1dea9ae825dcfffd9", + "properties": {} + } + ] + } +] \ No newline at end of file diff --git a/test/expected/backend-l.2.0.0.json b/test/expected/backend-l.2.0.0.json new file mode 100644 index 0000000..b87b0f6 --- /dev/null +++ b/test/expected/backend-l.2.0.0.json @@ -0,0 +1,13 @@ +[ + { + "version": 2, + "name": "_image", + "extent": 4096, + "features": [ + { + "raster": "ffd8ffe000104a46494600010100000100010000ffdb00430006040506050406060506070706080a100a0a09090a140e0f0c1017141818171416161a1d251f1a1b231c1616202c20232627292a29191f2d302d283025282928ffdb0043010707070a080a130a0a13281a161a2828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828282828ffc00011080100010003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f99e8a6938a6eeae8b98d87d14d073413400b9a506994038a2e3b12d25341a70a7b9228a5157f46d26f358bc16ba7c0669b69723200551c9624f000f535db49f0baf8e9af7165a9595ddc428249ede2593312e0725b6edc738ce7143928eec373ce4e69369abfa8e9f73a74e22bc88c6e5770e41047a822aef85f41b9f10ea6b696cf1c4bd5e590fca83d78e4fd053d37031029cd2918afa07c1df0b34682d6f2e359b0d4f5248b9134400461bb076a86cf071c9e3f4cd0f1efc2f863d2d24d174a9a0bb91b7c4ad3a92e8464294049df8e7e983df159bab08bb363b36784487269a0558bcb596d67921b8468e58d8ab230c1523b557ce05363418a434bd69082290c052d20a5c1a601453821346c228b0ae368a795a6e2801292971450312929692900f41cd4869b1f4a5aa5b12c652af5a08a00e690c1bad369ec29a450020341a28a0005380cd20a7a2d0903154568e91691dcdd2fda9a48ed10833491aee2ab9ea077a86d6cae6e9666b682495615df21452762fa9f6af50f849a6f873539755d3353d552ce2bb80c51cb3b6c064206d047a673cfd29ca5caae24aecf57f86de13d322b4dda3dd69d6df641ba57bb51e73c4e32cb27518ca8c1edc92315d578bbc4d6034b95b46d3a2759c932cd3afcbd410a8a3ef64aa9e78e9c1cd78ff0084bc317f1f884787af754d423b337263ba82050aeca7e5562dfc43822ba7f8e1f10747f0ff0085c7847c24f0b4f8d92ca06e64078621bb371827f2ae252955568b34b726ace6b46d3a0f89be26bb7974c736ba79df3246b8695e4272e76f000207ca3dfe95de683f0f6e74db57874bb258cc92923ca88e555c6012c707803f339f4aee7e05c0b2f81f45bfb3b25b0b07b529140e77480073f316c0cee396cf7c8af4caa8a6b45a20b27b9ce5ee832ae9f77f619992eae00698055fdeb05c64f18dc4753debc5fc51a46afa65ec62e66364b33131a00184400183bcff0011279206d03a66be8cae77c6da043af695b5e3df3db9f322193f31eea7eb59d6a4a5ef257669076d0f94f55f83f73a978675af12c97cf04d02bdc0fb410639d413d2438c1206471dc7ad78532e1ebdcbf681f16ea0f709e19f39e28226f32e6147fddb375518031c7a0e9c0ed5e2328ce2bb69ddc13673bd188aa00cd2302dd29f083232a0c649c0c9c57a5693f0c27b79e5ff0084b6e86936826fb20986d709315dc858921421c1f9b3dbdc55e823cc84673cd3c28aeafe20e83a4f86bc512699a56ae357b78914c93c4a1407239504120e38e6b97a690360a32c154649e00ab5796325bcb2c6fcc917de0067ebc8e383c55bfed485459b41671c52c077964032cfc61b38e800fbbebcf3935735bf14dd5fc734102ac104c5bcd3b419650cc1b0ee00cf2a3a0038e9408e7319a368a728c9edf8d069804b6b2c71ef78dd53714c95c0dc3a8fad5622bdd459dbf88be01c76da6c505b9d15deea7ba9464dc49b773a06c7076b0e3bede38071e1f2a152720823b1acd3e62b6213d69314e3498a0a2451f2d14a80914ed9c55589b91f5a5a08c502900a6958718a5d9cd0dc1f6aa110b800f149413924d15050e41935d1e89a2492431ea3788574c59023bf1963e807523d6b02152c4000924e0015db695ac35b5fc71789ac65fb288c44b0aa0854f1804f6e0739a526e2b404aef505d5e1d2fc477f7da525bb5a61556328caaebea14119c11dff009d1a6f88ce93a959eb7a658c31dc5bdc3ae278b745229e406e319193f8629dad6b9a324569fd951ccf7312f9721907c8c9fdc073d07ae3b569e85afe94fac473dd5ecd6ba63cf6e2eac5edfcc475f2995a6c723729c00719e73ed59b7a5ecc69799e99f062e2e46b50f88bc41a7318a659ae1aed6191b3956f948f63ce30401835c4e83adf87fc5ff172f2f754f0e5ecb6b3e3ecd6ba6805a3d9d58a606ec8073d08ce6acbdce8b63a0ddde45f14b579f5282067d3ed234900071f71b24819c91c631d7dabc7ecafa7b1bf86f6da4db730c825472036181c8241e0fe3452a7a37dc252d51fa4ba0cd05c68d6335a5b496b6ef023470491f96d1ae0614af620718ad0af8abe1b7c73f145978c6c4f88f5792f748b89522b94990111a9e37ae00208ebefe86bed45390082083e944a3ca54657169ae70a7240f7a7554d4cdb7d91c5e322c5d7e76da320e47eb8a928f81be30dc4b75e38be96e1e5790b104c8437424704751c63f0ae1253c5745e3df213c59aa7d995122f3df0a8c19473d8f707afe35ccbb126ba13f7518db51c87041af67b9f1edf5cf80215d5aeeda5b7d5ee21b3b8852352d1c16e9b5b0392a4ee43ce0e7918af165a9d1895032703b5095c1935d2451dccc96f2f9d0ab90926ddbbd41e0e3b67d2a2a28ab2428c12401c93da9f0c6f34a9144a5a4760aaa3a927802bd235cbdd13e1fdcc1a77876d60d47c4b678375ac5c12e904f8e5608feefc87a3b0272323b50d81e698209041047041a51c9c53a695e69a496676795d8b3331c9627924d59d32c24d42e3ca8d9540196663d07f5a52928abb1a4dbb2174ad4aeb4e9f7db4b2aa37cb2468e40917bab7a83d2b4fc6d7779aa6b0da95fd959d9c972a1bcbb48f620fc3d7d6b7ac3c3967691c52dc866e4b067fe21ea0569dfdcda98417850228fbcc32c7d87e75c32c6479d72a37f60d2d59e56c9e948b1fad4f310d33945da0b1c2fa73d29a012703ad7759185c403141e2ba0822d11fc38ed29b95d455c60a212b8e7393d3fbb8fa1ac8be8228255105c2ce84677018c7b1a98cf99dac0d58aa4034c2306a4a42335761124a86291918a92a7076b023f314d085c8500927a015a9ae68975a4dc324a8ed0e372c9b48054f427d2b53c26b60b0bc8edbae4e0307c0da3fd9f5ac6a5651873ad4b8c2f2b3394b9b39adce258d933d3231510535e984d8ef6577de98f98050723f1acab8b2d2ee670c96ad1e0fdd53f29c7638f5ae78e2d3f891a3a76d99c9d818e3bb81a7cf942452f8193b73cd7abe9b3e97e28bab8d3279249ec9361531fcb9723ae5b0060fca3fa8ae312dad40c3c0a632c0900608fa56ac5158584f25d691023b98423433a248a4e4138dfca9c0ea3d6b3ab52156cd5d3e83a7745df11f872d341d02686188dc3fda22959b39729b4e50119c60e791d7f411ea9e26786d755bdf0def4b6bfb486ceecca80146da7705c6067a723b9351cbaaeb176d26d58e162b81117c83ee0fafb6314b65605348166e8918910b4aa0ef0ef9f958fe19e9ede99a51a9eeaf68eeee0d6bee9da5f69da2a4f7674d974616f1585a3583dcdb8604aa8dea432f52d9241e5b7579d7c42f0a49a74edaa69cab36973ed667862d890c8c32c817270b9ce0f4c545768da66937204d31613010fef7909d30477c8aeabc21e2196e34cfec79eea092c0c6cae5d3210c89820b63240c0247232bc7ad69072a7795ee85269d95b53c950d7df5f03fc6f078cfc1b0317dda858a24173c6371dbc301ee07e60d7c37e25d02ff00c39ab4b63a946a244381246dba39060105587046083f8d7d27fb1eceee35c59e762c6183cb88001422b38cf0739cfb574d4b349911d19f4ae2bc8bf682bc44d1a0b517525accf8d8fbb0aec5b010e390490003d0679af57bcba86ced65b8b9916286252eeee70000324fe55f1e7c62f8db65e2eb596c748d06dd4e0c4350bb55924099e7cb523e5cfa9e476c1acd45cb445b958f0dba69249e46998b48589624e493df35015c548735139e6ba199214119a957915104cd755a169915be9c750bc8b76e60b0a48386ff00687b0a894d415d85ae73ed148a81d91c29e848e2995d65d4e2e632b315f200fb9dab1751d3d2178de09018a421704f2a7fad453c4467a3d01c6c4fe139160d5c5c6e513c31bc902b7f14a07cbf91e7f0aca6324f392db9e691b9cf25989fe79ad4b3d18cd1ee99fca1c81c72dcf5c76ad6b6d12d8a2a6f26453b967e9b31ebd88a996261193d46a0da1fff0008dc0c614deb1b0b70642dddb3dbf51f9568d8c1059c02258621220c175032ddc1f5e94c123b1c860eeb1fcd81c71fcbbd24b2223a3e0658e1813c138e09af3a75273d1b3a528c75259af0eff9dd9cf4eb9c54fe46e8927999411cac78c9fc7b67ebdaa45bb4554952351327cd9ea38f6e9ef5496e2697cccf0ac493c64f3ffebacb96c6bce88e5b0d3ee9922f2a30cad9564c29273dce39ac9f12693235ec2b6b1abbc9b892806323b1c715af8d80ece4e339ab10391012092dc609fcff00cfe1574eb4e0f9afb133845ab3464e8161f67b4905ccaebe61e5170411ef59da8e8127db02698ad2c6c33862063f13d4575177bbecb1b2282589c90b8e9d79f5e9545aea64545182aa3038e47e35ac3135149cbb984a115a1c5dcc12db4ad14e851c7506988a5d82af527032715da259dadf4f9bb88193030c18ff002ad38fc31a63db882e7cbf3046489233824ff0fb67d78ed5d6b1d0ea895464f54718faf5f4ba59b09662d164618fde0b8fbbf4ad6d29ae24d3a291e3b658f6796a5171237bf4e95c82386ebd6b7f41d5a783fd196059d083b474d9ea73fe35a56a5cd0b4110a4d3d4e86cb4b9ae2212c922c51312506c2ef2019dccaa3960bdf91d462993c2fa7ba99a02f14c82589cab20913b3ae79c76acad63c5171088a1d36e8ac488c10a8dad1b31f98a91d3381cf5c7a66b4f43f89178d6dfd99e25b68354d25db795f2d22955fb30902e7b739ce466b9d619dae5731604705e5948d0c22396300ba97383f9fafa5644312c459a30304e4e4f2726b5356d36080c1716f74cd613a992da4fbc76ff7580e8ca4e0f3efdc5664619620e5485e0838e0fd0d73cbddd07cc5f866dcacf962a3b6727e94d9355fb3c2eee404c7dde6a84ac8bf32b127392bd0d41a9dbb5ddaaf96c37a7214ff0017ff005eaa118b92bec5b9b48ada85edadfd82feea44bd12312c0820a9c6d5ebce307e95afa3ea31db5afd8efac85a4127cd1ca410246dbd093eb9ce7fa5725246e9218dd4ab83820d75a08bdd1bc8cfcac8a5410095c77fd0d76d6e58a49ec6517777ea61788ef7ed1769045753dc595aaf956de77544ea471ee4f35f437ec75af892e754d1ae2e9774717996f0328c91bb2db4f5ea7247d0f6af9e35fd3e2b35b66b77deaf18ddece3afe159b617d75a75d2dc58dc4d6d3ae40922728c01183c8f6ad34947412d1dcf70fda97c757ba8f8eae741b1bdb98f4cb08d619a0076a4929e589c751ca8e7d0d787c12b4722c8bf7948238ef4fd5350bad5b52b8bebf99a6bbb890cb2c8dd5989c9355c9ed56b4427a9d06a9acd8dd69896d6da72c3364169770e7b9e319ce4f5cf4e31deb0194939a00c0cd5c86d1a4b296e432ed8c80c3bf349251560bb64ba3e9575a93badac4ceb18dd230e8a3eb5afabdcec31c2bc32a886319e171c66a868fa84f6d6d776b6e9b8dc05279c602e49a2f9fcc92dd631ba6620827a8f418ac2aa729a4f6045b8c08d511cf9847527bd36ced638dbcc56de5b903d3ffaf52fd959406b9dfbc8076b71820f6c5583090a70bc8e82b8a53b5d27b8730df39c9cb703a5588a60cbb38e8738eac79c5442d1d955ce79cf6cd16d13e4e14100e38acb40e62ec73a2a900053ebebf5aaf70e1b27b8e453dd672470ff004a468c8cfca727b7a5256357252422cc48e0f18c6054c93b21c8c9f6aa6b1b22f5e3a6714e8cc8ff00220cb673f4aa6ae67ccfa170cb962081cf5c54f0384411b61d339eb826ab35b3aa024e1870727bd3763edf94838a8e57d0ae76b7372d2392e21592281a58d0e5948cedea064f5c7154eea1592e8b45f2ab0c9c8c0e9ce6b0753d6a4b42b05b101d7efe7b7b7d6b3e5d6afaf62fb2657f7a40ca8c1fa67d2ba61859c95c1cd33b32f046823b77594904a903391d38fc6a9ea974d630b335c2c57182c818f5f4c62b99d4de5d1adededede5c4d226e95c751c9c28f403f99ac3b8b896794bcb233b7a935a430a9bbb7a0d54696843bd14f1b8fe94f6ba94a9456d887aaaf43f5aaf45765c561d9f5a78351d2ad09833a7f0edd41730cb617b2a44ac3cc8a57c90ae303071d88efdbad6f5a5bc2cc9048fb655970417cab839191e8471eb5c0db92258f1c1dc39af5fd3b4092fb46d3e4b78d47cfbb70525ce49c8181db8e2b871ad42cfb8e9d373ba450bcf0fc6b197e412bc0c9233fceb06fe17b37456182c0e3078eb5ea2d6973268f6f34f80d36586e3f311bb00fd08c1ae1f58b4f30946ce5723835e751aaef690ea53e4d51813c71dddaed6da24eaa71df3df8a985c088363214671838c5034e742c5582287c12c49e31c63eb515d3c7676e59c16638efd7f0aeebded15a98f395e7bb82e116266de1b80a17a67fc2b9b9d0ab1e0823b1ab7757a9e779b0868e43c921bf95569ae4cd9918e5cf526bbe94395587abd480362827bd3072727ad498f96ad142a3e5b06ba5d36f2cddd22923648443b1940ff58c7d71cd72a7afbd75be13d135992582fac6032db970ad8239f6e7af4359d594547de62716f62fe97a12db1134db8bbe4c6390421f5f7ab7169b631c8f298c6fdd956273cfaf26997badda4376609cbc8c8f82aa080a3b9fc39ab161783cf78644dcee4b447390ca070ca4f07dc579d375a4b9d8ac2490b16395ca9cfcdd7e952c3665fcb4452ce381c739aababdfcba7436d1dac2d2b48fb89d840c0eaa3f1cfd2ac786b5b693512b7303c6e1cb0046001d874e6a3d8d474fda25a02e54d731b96fe1ebb745c8249ec47e3f4fc2af69fe139e3b305c7cdd5beb5d7fc39d5edf57f14dee8b7d22401504967134601981eb863d082738fad7a63e93651e9d728df3057c36405c803ef03e8723afa1ae1a8eac15e5a1dd4e14a5b23c2a3d1521db0cea9e713c30e95ce6ada6cff6d1696d1486524601c1c739e3d7f0af5fd46e34e8ee1d618de620150aabb8e4e00c1f4cfe7468ba638ba992ff0049bab98e4f95484da809e548ef9fc41a985597c4554a507eea3c7eefc2fa85adc06bab775126e61b57ee91f53dfdff000ac910345323b7c80b10aa324b1fa7602be929f413a85a4769a8db4ad0a9254efcb0c8c673d73f5cd5397c11a41b71e78680a70b24e141f7ff003c557d6dc7e2427854fe13c12f6c2e6dedd67911846c01dc7dfa551990c681892371c119af46f11d8da25d9b49efe3923b621888db25b39c003d47bd79dea1a95a5acf2cac366e0c23c7273dbffd75d14272a9b238eb4395d9181ac5adbc41f62b09b1b8f3ee2b2eca6f22ea2949e11831fc2a6925fb5acf34b2aa0e8bbb926b2e47cf0bf77f9d7b904e30b4884ae4d7d78f7774f2b13cf0a3d07a544aebc673515142d0bb01a29460d1b7d28b0c4a5a4a5a0055621811dabe88f83dad43ace93259417063d4edd4cf1c18fe2c61997b1190a707a64d7cec3ad69e83a89d33518e7fdef97f764589f6332fb1ec7201fc2b1c45055e36ea5d3a9ece573e978f458e4bf37705bb8821b736ef14d114da7192571c1c9ebfe71c078a123875011a0da18f5c71ef5d07c38f1cbea97b7565757a03cc4be507c81fb155278073d3b72315e69f1175a953c4924368d88e31d0a82771ea33dc578f430951d5707d0e8c4ce12a6b97a972e254f2c9326c8872c7a7f9ff00ebd70daedf7daaf9da372d18f9578c71572c2e2e2ed6e209ccb223af18c9dad9e0d65eab66f637b2c2e55b6b10194e41fc6bd8a386f64aef73cf8db9ac543ef452669cbc9ad8d472a8ea69cedc74a8d9a933557b0ac2819af69f86fa6f89f56f0cfd9b4ad32ce35642ab7172e50321fe2c63939e878e95ca7c1bf0149e3ef13fd89de4874eb74f3aee74032abd154678dcc7819f73dabecdf0e78774fd061b4d3ec630a218963c9624e1470327ad79798d7508a8257674e1e176e4d9f3ab7ecefaac5a6cd7835649a5489d9a18a03b890a4851cf24f4af1e44d534ed5ad6d56caee2bb8d862d591b7b13fec919e7e95f7e992e50f96b11724939240c01d481ff00d7a88e93a7dc6a967a8deda594b776d9f22e1e30658db1d15fae305b3f5ae7c3e653578d6572aa61d6f13e23f0f78c468772566d322b8c4bbc8989ca64fcc39c9fea0d7d11e07f0945e24f0a596b970b6f6571731998429186006e3b771ebd31f81af50d6fc3fa2ea91497375a569cf748095967b58dce7b6491cf6e3bd733f0cfc593eb505c58ea10c76fac69d235bde42830885781b571c291c8ed8e2a7135215a3cf4e3eba8528b8bb3392d3fc113db78decb59b4befb37d8e3689ace48cb2e181ced20f439079e3815daea4f70d6c21ba06547dcac50e4e00ee318cfe154bc5b61e29d3bc5716a5a1daff6b6937a82396cda610fd91c0fbeac78dadc120827238ae224f8d7a469170fa66b5a7eaf657c9b5268a684651b1c93f3648c1cf4aca585a955249dec5c6a4217d2c6958c96d61ae456f736f2a9772229a4dad9c1ceccfbe3f4aee24d74ada8fb346884019f976807d00fd2b95d73fb0f56d2a0943ace67412096363b707a60671eff00fd7ae6a69afacece622f16f2dd72ca67255faff7875fc7df9ac54afee6cd0dbe5f79ad0dcf1778d235b4220927b4bc419578f0c1883c820f1cfbd727abfc401ab58436c36acec9b2425303703d55403c938f6ae4afa69eefcc89ede18e267da642a49461c9da7af20f43db151dc5b889618f7aca910560768e071f9d747d5e2edcceece59e29ef02a78dadcae8bf6b88cef751312cf1be38e859b239f6ef5e7fa808efc5bcab2a232441666627683d8fd7d6ba9f14ebad145750c53279b221491436783c1c8e99e83d6bcea59770da0f1dfdebd8c2c3961a9cf773772dea4f6e96d1416ae64e4b3be3009f6ef59b4e3ca7d2995bb2d2b0e3c1c5000f5a4a0503173ed46483c5253860f068108496393d68a28c5030a7034da70a684cbda56a571a65d0b8b460af8c723a8ad9935bb0d46fa29f50b42930182e8dc1fa8ef5cd0a50b938149d35277ea4bd558dad66d901fb743721e395b08173daa8996e2e2298f91e70382cec092bf8d36d6695710c6a24dc78465ddcfb0af43b2921b1b0822955436ce6241dcf5cfe3eb5156afb18aea46c798bc7f26e0bb4fa5317ad77fa8c516a36ede74504410e1446bb49cd72fa9e8ef6f0b5c4219a0560ac4ff0939c7f23f952a75a33f26529a7a18edc1a54c67e6e94bec7a505456b62cf70fd997c436de1fb9d7a5bcb8d914c90a08b04ee2198eefc0647fc0abe8fd3fc77a6de8062440c780e4e2be08d3efa6b0ba59eddb0ca7a763ec6bb2b4f88535b42a8b0312393f3e066bc9c6e06a55a8ea537b9ac2b3868d5d1f6bc1af5a48f084ba8ca8cb36c6049ff00668bbd73426612ace8278c98d78c11ebf8735f1d787fe20dd4b73e5bc656466fdded3900fa9cf7ad9b8f11decf932ccc08cfcc1793f8d70cf055e9ae5959dcb78a8a7b58fabae75db48ac04a24017195ddd5f8ec0f735e437daa47a578edbc55a4ccf1e9d322c7ab42e7850b909281d38c63db3f5af34d37c433cecb15c4b230196e5b245779a398746b337b7d788fa6842649382093d9b3c719e8783584154c3cbded6fd0de8ce388764ad6ea58f1dfed1565696be5784ac9af65278b9b94290af1d875620fd057cbdac6a977ac6a973a86a3334f7770e649246ee4ff0021ed5d7fc5ff001b0f176b56f1d9b1fecbd3e3f2adc6c09bc9fbcf80063381dba015c1f0df5afa4c35350826959b38eabbc9eb73d4be0c6b0a2eee34bbc98ac5328688b1fba572481e99ac4f1f78c2f757d467b48dda1b18646408af9df83d49efed5c8d8dd4d632a5c5b48d1cc87e565ea2997571f69b8694a8567e4e3b9ee7f1a161e0aababd589d46e2a1d0eefc21e211f614d32f9df6a3995646236a8db83bbbf4a5f1d011c51dd595cbbdbb47b70dd0eeea57f2c5729a0aacd73b032ee236956e8c0f079ec6ad5f5a5ec9702c373c890ffab52780a79cd57b18fb4e78bb1cef7d4cbb1845cc92abe73b0eced96ed5464429232302194e0835bb776cfa7adbbc5be49b25b2bc0c8c7e3c5665fee96e5e7318457390074adb492ba2e2caaa71d7a536a4078e4520018f4c52b16340a3760629c41069ad40060d291c66a49b03a77a8bb50d5816a14a0719a542a3a8cd38e0fdd18a2c1723c1a70a5a514ec2b874a031072090690d1401a1a05dc569ac5b4d725c46adc95c120e383cf5c1ed5d7dc23453946196f5f5f71ec7a8af3ec126bd23e1f6a307886e2dbc3d7f6abf6978cc76d76a4e46dcb61867d33cfb0c835cb898b6b9bb07b3e7765b9588930b88f3bb38f7ad0d3ad1ee77acbc64edd98fbdf855cbcb4363a94b6cfb6531b9438185071c11efed57d22486318014e7820e064f5cd7933aafa0a14d735a4737e26f0be9f6da235e92b0c8177029c027b2907fa579c66bb3f1fde1905adb072026e6283a7a027df835c657af86e7f669cddd9a4b96feeec39052375a54a4635d04f526b3b992dae12588e194e457a82cd05e6996ce136ee8c1041efc93f875f7af29419615eed16836779a669f3e96ecd6d2401e25098c0000393dce4303ee0d716366a314df70f64ea3d3a187691c11cc14012c720dae1f80c3d3db278accf89faa492da5ada5a964b22c59947019801f981daba9fec6360f992374603cc19f4c1c633c579e7887518f54be834f86375449b6ee192dcf04015cd845ed2aa96f61da54e3cbdce4c0c1058714edb8c11d2b6bc5f6b6da7ea49616809f2102bb37566ea7358dd80f4af5a2d495d09a6b718fda9a3ad2b0e685eff4a0058a468a40e84860739adf1aca5c9864924fb3dca0dacdb370615ce9a500922814a29ee74125ef9af23192294edd80af1f88aa90cb240db728ca38381906b43c2de14d4359bc87cab7956d5d807b82b84519e4e4f5af5cd3fc1fa6e945c4118f31a30aef23121bf0ae6af8ea387f765bf637a381ab595e0b43caa3b7d3ae34d33c823478d46fd99cae4e071deb12e62489f03054938901073f957a9de7819211aa4af234cb72859142fdc39c8391db38af2abeb29ac6e1a1b8468e453820d6987af4eadfd9bb984a8ce93b4caf2a6d6ec78ce4542724f4a9d14eece3701d47b5226dddf39207b56ed5c572194e5cd36948c1a2a0a4029c31da9b45301e0d385301ed4e0698828a0d0298086bbaf82bfbbf1dc1700e0c104ae0633bb2bb71ff008f75ae16bbef83b6eb278899c921bcb6008edc66b9f152e5a527e46b47e34753ac069757ba91a404c9293b73d724f5fa715c978ab52b9b48d625b82b21ec9c605741e2cbb8744ba904b26e9d836c8f1939ec4fa738af2cd46f66bdb969677dee7a9af3f0541c9aa92d88a89a9b4472bbcce59d8b31ea58e6a2231499a7039af5b716c2a8e29a4734fed48781c53b08693818af7cf81dae5a5d68474db9da2eb4f2f246adc078dce783ea1b3f98af02abda4eab79a4ced358ccf0c8ca50b2f5c1ae5c5e1feb149d337a157d94d4cf67f885af1b481e7326d95b844c86f9bb578b25e4e9a92dda36275904a1b1fc59ce714ba8ea379a84c25beb99277ec5db38aa8b92d9a30986587872eec55aafb59b913ea3752dedf4d7370dba6958b31c639355c714f6e39ef51f535d36b6c65b8fea280b926851cd29a621bb38a4538233c8a520d34714867d07e16be8aefc33a5dcc6bb5562113301c02bc107d3a56a960d3476ef246c491f2161b88cfa6726be7db5f10ea96960b676b76f0c018b6d4e324fafad67add4eb3097cc6f301ddbb3ce7d735e2cf28e79ca4e56b9ee52ce654e0a1c97b1f5a789a3b5b6d26386ca557555cbb9e08271c0fcebc0be25c51c6d6cfbb74e4e0b7723aff5ab9a07c416362f6fab87965049571ce7d88ae37c4faabeada934ce0280301474a30182ab87abef6cbf138f1988a75d26b7287606a323e614e89b2307ad5a5815ad249490ac8475fe206bddf33ccd8a4ef9e000299451517b96b40a29c16976e45160b8c039a916900c53a9a1311a9b9a5634c3431a1e0d7a87c1eb07324f7c40310cc5b4f193807afa1e9d6bcb075aedfc27af5c45a0dd6931dcf92afbdd72c1304ae09049f6031d4e6b0c445ce9b8a2e9c9424a4cc5f13df4ba8eb57f773471c72cb2b1291905579e808e0fd7bd60f43cd5e2caa594e09e9d7a540c467b56fca924974324db776419a51d6a529bf90471f8546719c52b58ab8f1d2908c1a453520c1155b888f19c9ef4da95b1ebc53720d2b05c60e4d4aa540c544dd78a72631cd086c73608e29a8a58d21c75cd08483c5004ac850f34dcd4a5cc832e496f535031c1a6f4250eeb484500d2e690c611460d293429a062a128eac0f2296e1da4959dce598e49f5a319a691eb45844968a8d3a79a488f3f31039c55dd4278e59b16f1ecb74e2353d71ea7dcd518880df4a25933c29a6acb513d591ed34a01a7800504d2b0ee1da909a42691ba50004d37268a290c3345145030a721c5340cd491a6e6000a10986327d69429af41d6bc0b37863c01a56bfab5a4c6e755919208d9b6a451edcabb01c966192070063273d2bcfe53f371d6aac48631d78a6be3691de985893cd252b8ec2f028dc6928a4302734539971d29a462800a28032714b8e714ac312807078aded0bc23adebb617d7ba569f2cf6964864b89b215235032492c40e00cd65de58dcd85d496d7b6f2dbdc4670f1ca85594fb834ec2b91237f7a9245e7229769adef0ef83fc43e25dff00d87a45ddeaa0cb3c69f28e71f78f155d09ea73b923ad1c9af4df087c18f1678912f98597f67fd959548be578f7924e76f0738c73f8564df7c31f155af889347fec9b97b892431c720899637209190ec00c7ca793c11ce7041a561dce1f068aea23f0378925f100d11347bbfed4259440531b8a824e09e0f03ae79ad3b9f851e3287519ac9742bb9e689d636685772ee2bbb83dfaf27a0345877386069fd6b4759d0753d16ea4b6d52c6e2da58dcc6448840dc3b03d0f51d3d6b3f691da9937237539a6e2a6c9a438a4d0ee34f5a29f28e6a3a6c10734638a29c149ce074a431a05295ae93c11e0dd5bc65ac0d37448564b831b4a4bb6d50abd793f515abe22f865e2cf0fced1de68b772aaf064b7432a838ce32b9edcfd39a7625b3852b4043e95d2783ec2d2f7c5fa4586ac937d926bb8e29d23c2b952c01032460f6afac75dfd9ebc1ba8c20582dc6992e492d0b961db8c3138e9fad2765b8d36cf8b8464d7a97c2cf84dabf8cec1b55b1be86ce0866088e49f33702092076c0c907b918ec71b1ae7c01f1269de28d3f4d827b49ec6fa731457664098c2b39054f25b62336173c03e95ef1f07be1dea7f0fae757b192eed6ef47b9db2c1288b64c1c12087fef0da78e78f419343925b0926f7386fdae035a783fc2d6485da149d86ee80ed8828cfb9c9fa735f2abf535f5e7ed7a211e06d237b66717ea139ede5beeffd97f3af924a834e3aa07a32b114da999314eb7b69ae66586da292595b384452c4e064f0293434c86289e691638919e46380aa324fe15d6e87f0dbc5dad4b6e963e1fd476ce40596581a38c03cee2cc00c7bd7d2df01be10697a6f852c758d7ed1a5d62f156e76b964302ee0c8bc608e00241ebb88391c57b7dadbc56d6d15b5ac51c3044a1238e340aa8a0600007000e381f4a9e648ab1f0f587c09f1f5cea1f666d212000f334b71184c7ae4124fe02ba193f66af17fd8e0963bad31a67277c7e6901076e71cfe55f619538da59ff038a746a2340899000fad2e70b1f1d781ff00676f10ead75707c4320d22d607d8bf289249baf2a32303dcf5cf4af5bd0ff672f07e9b7c25bd6bdd49000424f2855cfd14027d7ad7b4a29524ee6249e84f03e9488a1176839c127f339a4e4c122be99a75969702c3a75a436d081811c4815471e82b0fc51e03f0bf89a5336bba3db5ccc13679a548703d88e6ba614c9dd96362a99c293d7149319f3df8a7f66fb1bfd7e0b9f0fea4b63a5c8ea66b6742c63400676364e49c67e6f5fc2bdcfc31a069de19d0edb4ad1adc41676e36a28e4f2492493c9249249ad088158d4118240c83daa5a6e4d82490a02807fa50bc7e3476a4a91885177eedabbba6714e239ed494b4015ee6cedae828b9822940391bd41c578c78aff675f0dead2de5ce957375a75d4ee5d5410d1213db6e338fc6bdbbbd14d36b613499f0e7c43f82be27f079927487fb4f4d45de6e6d97ee8c64ee4ea31ebc8af2d22bf49f516b754985cb449198cf98d2b00aa9c924e7a01cf3d2bf3dfc673d85ef8b357b9d1a15874e96ea468117a04dc718f407ae3b66b58b6c86ac6332e6a33131385e49ed5f4278ebf674d4b4eb989bc292ddeab6d20398cac2af09007de679101079c60718e7b13adf0b3e00ded97882def7c651a35b245e7451412826395594812107af5fbbb87ca724719bd1ab93669d8e27e0e7c0fbef174b35df88c5de97a6c2c9843115927c827e5247006067bf22beaed1bc1fe1bd2ac16df4cd174f821d8108102ee603a6e6c65bf1279cd6f93d430ebfa5290074ac1cae6a915ecac6cec2354b4b682dd40da0451aa0c7a600a96ee086eeda5b6b98a39a0990a49148a19645230411d0839ef52633452b81cadcfc3cf08dc6e32787f4f0ccb1a868e2f2ca08f1b3615c14c6d1f771d2ba8550a001d29d9cd078c628bb616178c8cd31d4ee20103f95314c9e7c818031f0579fcf8f623f5a97f5a0670df16be1ce9ff1174786daea692d6f2d8b3dadc2f3b19800432f707033df8e0d7c5fe37f05eb5e0dd5a7b2d66d24458df6a5caa1f2a51d8ab639c8edd477afd091cd60f8dbc29a678cb446d275a8cc96eee2405490518670411d0f26aa33b6e44a373f3bcd7d09fb317c37d49bc470f8af57b492dac2da36369bdb6b4b230db9db8e57696eb8e71d6bbdf0d7ecebe1bd1b5482f6f6eeef51681c3ac329558c90723700391d38cd7b600000aa30076f4aa94eeb414616dc318ce09e78a503d2814a062b2340a4a3e941a003f9d1c51ce68fad002f6e290d039a0d00140340e7ad18fca800038a281d28a0031474a33477a0028a28240193c0a00f16fda58de5d78512d749178d7723bc4f1c1bc2c89852c8c3a3123900f3d71debe3f9e192de79219d1a39a3628e8c3054838208afd0f6d21bfb65ef6de4458e67479d181632151b46d3fc3800608f7ac2f1cfc32f0d78b74d9adeeb4fb7b6ba650a977044ab2478e9838e7fc335aa9a4ac66e373b61ce7239e942e33c76a4de3269370193eb591a126320d339ce3a502400f7a378273400eed8a31eb4ddc280e01e050039b819a17e6c126982419c6324d2a8e73e94c7614c6acea4e7238fa8f4a7bf0d8279a4eb43b80d9348420ce79a38dc09ebe94d6900e7f1a6452895dc0040519ce38a007c8e55b27383da98158bb1e76f6e7ad47136e7766e57240fa0a9c3a8229ec20030783934ea6f9800cf6e99a4de290c9292901cd2e450160ce68ef499140a760b0a7fd9a09cd20619a0b01d68b0ec2819ebd28cf38148ad9a70c520b01c7e3498a3f9d2d1615829b9a71eb498a0000cd57d42332d94a8aee848e193af1cf1f9559a6b8c2e48e942022b4431dac6ac72428fc3daa6eb8aa567361e443b880e4658e707a800fd31c55bf300fc69b120c71cd35978acc8354796f27850094a36c08bd43038604f4e39eb57ac2f21beb613db3878892323daaac03f6d38631d29c718e6a3738048e942421739ce281c1e6913934d72db8055079e72718a2c31c3ad4e838a6a2738f4a94e225cb1c01de958ab91e48e94de4d3c8e69ad9c516132aea0fe540ec49c2a963819e00c9e3f0a2d95bc8576c06750703a0ef4bb1d998b03b4fa9efdc7d2a65e80516122351c8f7a738c73438c74a553b873d68b0c0282bf5a8f904015274048a68ce68b012af5ea29d4d0b93c53c0a2c3b8dc5380e28c734f51cd21dc6eda0a715305a4931b69dc0836e38a314a69b482e28a29075a5f7ed4c04279c53b14c1c9a97da86891b4cb9845c5b490b1215d4a920e0e0d4ddba5369580c39e08ed98ce4bb4a8e4c5167ef923038eb9ea73e95a4ae19d9320b2f5c0aa5aac71c37514c06c6c1662bc64f0013ebc0c73db3505948eb1c97304525c87505020c000edc753cf001cfd6aad7449ffd9", + "properties": {} + } + ] + } +] \ No newline at end of file diff --git a/test/expected/l.0.0.0.png b/test/expected/l.0.0.0.png new file mode 100644 index 0000000..f56aa31 Binary files /dev/null and b/test/expected/l.0.0.0.png differ diff --git a/test/expected/l.1.0.0.png b/test/expected/l.1.0.0.png new file mode 100644 index 0000000..df0e065 Binary files /dev/null and b/test/expected/l.1.0.0.png differ diff --git a/test/expected/l.1.1.1.png b/test/expected/l.1.1.1.png new file mode 100644 index 0000000..1f3f117 Binary files /dev/null and b/test/expected/l.1.1.1.png differ diff --git a/test/expected/l.2.0.0.png b/test/expected/l.2.0.0.png new file mode 100644 index 0000000..87e1414 Binary files /dev/null and b/test/expected/l.2.0.0.png differ diff --git a/test/expected/l.2.3.3.png b/test/expected/l.2.3.3.png new file mode 100644 index 0000000..1f2a55c Binary files /dev/null and b/test/expected/l.2.3.3.png differ diff --git a/test/expected/l.3.1.1.png b/test/expected/l.3.1.1.png new file mode 100644 index 0000000..8e4b8c0 Binary files /dev/null and b/test/expected/l.3.1.1.png differ diff --git a/test/fixtures/l.xml b/test/fixtures/l.xml new file mode 100644 index 0000000..12ad412 --- /dev/null +++ b/test/fixtures/l.xml @@ -0,0 +1,27 @@ + + + + + + -180,-85.0511,180,85.0511 + 0,0,2 + png8:m=h + 0 + 8 + 1 + test:///l + + + + + + + _image + + + diff --git a/test/fixtures/l/0.0.0.jpg b/test/fixtures/l/0.0.0.jpg new file mode 100644 index 0000000..8b87113 Binary files /dev/null and b/test/fixtures/l/0.0.0.jpg differ diff --git a/test/fixtures/l/1.0.0.jpg b/test/fixtures/l/1.0.0.jpg new file mode 100644 index 0000000..78ad885 Binary files /dev/null and b/test/fixtures/l/1.0.0.jpg differ diff --git a/test/test.js b/test/test.js index db976b7..907705c 100644 --- a/test/test.js +++ b/test/test.js @@ -17,6 +17,7 @@ var xml = { b: fs.readFileSync(path.resolve(__dirname + '/fixtures/b.xml'), 'utf8'), c: fs.readFileSync(path.resolve(__dirname + '/fixtures/c.xml'), 'utf8'), i: fs.readFileSync(path.resolve(__dirname + '/fixtures/i.xml'), 'utf8'), + l: fs.readFileSync(path.resolve(__dirname + '/fixtures/l.xml'), 'utf8'), space: fs.readFileSync(path.resolve(__dirname + '/fixtures/s p a c e/i.xml'), 'utf8'), expires: fs.readFileSync(path.resolve(__dirname + '/fixtures/expires.xml'), 'utf8'), invalid: fs.readFileSync(path.resolve(__dirname + '/fixtures/invalid.xml'), 'utf8') @@ -116,6 +117,7 @@ var sources = { h: new Vector({ backend: new Testsource('b'), xml: xml.b, scale: 2 }), i: new Vector({ backend: new Testsource('i'), xml: xml.i }), 'i@2x': new Vector({ backend: new Testsource('i'), xml: xml.i }), + l: new Vector({ backend: new Testsource('l'), xml: xml.l}), invalid: new Vector({ backend: new Testsource('invalid'), xml: xml.invalid }) }; var tests = { @@ -141,6 +143,8 @@ var tests = { i: ['0.0.0', '1.0.0'], // Image sources. 'i@2x': ['0.0.0', '1.0.0'], + // Image sources for multiple lookback + l: ['0.0.0', '1.0.0', '1.1.1', '2.0.0', '2.3.3', '3.1.1'], // Invalid tiles that are empty invalid: ['1.1.0', '1.1.1'], diff --git a/test/testsource.js b/test/testsource.js index 1aca11e..119d81f 100644 --- a/test/testsource.js +++ b/test/testsource.js @@ -47,6 +47,12 @@ var infos = { maxzoom:1, vector_layers: [] }, + l: { + minzoom:0, + maxzoom:4, + lookback:3, + vector_layers: [] + }, 'invalid-novector': { minzoom:0, maxzoom:1 @@ -120,6 +126,11 @@ Testsource.tiles = { memo[key] = fs.readFileSync(path.resolve(path.join(__dirname, 'fixtures', 'i', basename))); return memo; }, {}), + l: fs.readdirSync(path.resolve(path.join(__dirname, 'fixtures','l'))).reduce(function(memo, basename) { + var key = basename.split('.').slice(0,3).join('.'); + memo[key] = fs.readFileSync(path.resolve(path.join(__dirname, 'fixtures', 'l', basename))); + return memo; + }, {}), gz: fs.readdirSync(path.resolve(path.join(__dirname, 'fixtures','gz'))).reduce(function(memo, basename) { var key = basename.split('.').slice(0,3).join('.'); memo[key] = fs.readFileSync(path.resolve(path.join(__dirname, 'fixtures', 'gz', basename))); @@ -149,6 +160,7 @@ function Testsource(uri, callback) { minzoom: infos[uri].minzoom, maxzoom: infos[uri].maxzoom, fillzoom: infos[uri].fillzoom, + lookback: infos[uri].lookback, vector_layers: infos[uri].vector_layers }; this.stats = {};