From ed90b86905e50d74268b8f54810a921a69d3fed8 Mon Sep 17 00:00:00 2001 From: Richard Whitehouse Date: Sun, 30 Jan 2011 20:28:37 +0000 Subject: [PATCH] Added FLIR (Facelift Image Replacement) to allow for font support --- flir/.htaccess | 1 + flir/_COPYING.txt | 674 ++++++++++++ flir/_README.txt | 19 + .../56/07568a465b7405063058d478af23f46c.png | Bin 0 -> 1145 bytes .../d3/0dd3e6bb2eb0fb2b2f32d826f82f5865.png | Bin 0 -> 973 bytes .../52/1652b9f5c0b439e90f415804757ecff7.png | Bin 0 -> 526 bytes .../3e/203ef3b4ef7971929adb1518298c9161.png | Bin 0 -> 1129 bytes .../3f/263f83e95dbc13a2f74b071998428927.png | Bin 0 -> 1157 bytes .../1c/271c7bc657e02d61190de3227d796750.png | Bin 0 -> 1113 bytes .../8e/298ebbd1fcad3cab3baf8a13951a7360.png | Bin 0 -> 758 bytes .../f2/2cf2d0f6ff984a8967c5db95e088fac3.png | Bin 0 -> 827 bytes .../bb/30bb9e89f5b11a5d054417a476b00266.png | Bin 0 -> 758 bytes .../7c/327ce76099a52b41d978220bbde76e44.png | Bin 0 -> 3956 bytes .../e4/33e49d0bf5b7fab3f8dc39fe386669b4.png | Bin 0 -> 1124 bytes .../aa/37aaa7c55e4958de33ee1171db12ed32.png | Bin 0 -> 620 bytes .../f4/37f4e00c309c11efd0f5902126e3473a.png | Bin 0 -> 1363 bytes .../7a/397ade26810a76703054d8d11c771986.png | Bin 0 -> 3230 bytes .../04/3b04b6f60fa4f82431e650fec98a1237.png | Bin 0 -> 976 bytes .../48/444857e80465d210a6c753a90ef6cc68.png | Bin 0 -> 1034 bytes .../83/4d83703361f4a66ab031401a9aa897c0.png | Bin 0 -> 1134 bytes .../05/5305a28af4ee1c026e51053ee39d66d8.png | Bin 0 -> 956 bytes .../29/5f29138bafb0c85daffea206aabcaa22.png | Bin 0 -> 827 bytes .../d2/61d220e4a30cc7b78ea904a0eef274f3.png | Bin 0 -> 1369 bytes .../22/6922c9fa5f5835a262cf5b19a859378c.png | Bin 0 -> 1113 bytes .../36/6b368f8b9e0abb3c78264ecaedd1bc0e.png | Bin 0 -> 1397 bytes .../4e/704e6a31d610369dc1dce5580812ad0a.png | Bin 0 -> 716 bytes .../54/7554f5c7afb52fb566c8843b3780ed3c.png | Bin 0 -> 965 bytes .../ef/78ef669122c9e51daa4a346c2d2b5e50.png | Bin 0 -> 635 bytes .../95/7d95c52a7a30e7197fa9d55614956ff5.png | Bin 0 -> 755 bytes .../b2/80b22b109efb4afe70c69cc67ef4b51b.png | Bin 0 -> 952 bytes .../a4/82a467735095edea39fb95548456a6ec.png | Bin 0 -> 1619 bytes .../21/8321953f021be7d37282f95adb67565d.png | Bin 0 -> 1109 bytes .../99/8999ec3a758c0bb630e10a4f3764fbe7.png | Bin 0 -> 800 bytes .../9a/8a9ad0aaa5058a839ca0af676ac5d103.png | Bin 0 -> 800 bytes .../10/9010b9699bb63ead9fefdb569c071927.png | Bin 0 -> 617 bytes .../e0/94e0ccde9de3bad147222759c47368e9.png | Bin 0 -> 823 bytes .../0f/950f0dc59d005ab3ea279b86ef12f6d5.png | Bin 0 -> 958 bytes .../4e/9d4e7563e88c4e3065793752dac9933a.png | Bin 0 -> 803 bytes .../ba/9fba3e2486a08ad7469b1dd0dd605c7b.png | Bin 0 -> 965 bytes .../4f/a44f01132425d5acacddeb5ff1810089.png | Bin 0 -> 865 bytes .../3d/a83d03fc5ff048b52572d81e8be912fe.png | Bin 0 -> 965 bytes .../74/a874399f2b39583224fdfec1781ee2d7.png | Bin 0 -> 960 bytes .../7c/a97c71e0dd65133419bf92ac6d6a68a4.png | Bin 0 -> 538 bytes .../6f/b26fc7b21ad5169116fca87a6b71398b.png | Bin 0 -> 526 bytes .../af/b2af7ee811eaf4e0ac39e478c1a1d8d0.png | Bin 0 -> 4815 bytes .../10/bb10ce2f261226fd759659bd1e686e51.png | Bin 0 -> 1148 bytes .../89/bb8929683df9344ded31df119d7a02b6.png | Bin 0 -> 758 bytes .../1b/c91b0e0a27be07ee188f1a2adf365c6b.png | Bin 0 -> 620 bytes .../1d/d11d1658947ab4b5f6e9b60456766e2e.png | Bin 0 -> 984 bytes .../8b/d58b9874fba30a17c8c74535617d6129.png | Bin 0 -> 758 bytes .../68/d9687aa51c34f2134bba45288f6bd2ff.png | Bin 0 -> 620 bytes .../02/db026f83552ebdfab2a5d1cf7b819282.png | Bin 0 -> 811 bytes .../85/dd85501c617a1ceff816689a366ad21f.png | Bin 0 -> 998 bytes .../54/df545fd22a1cbd4ac9aa7968a41670f8.png | Bin 0 -> 526 bytes .../9d/e19d7a1ec20a544816f3130da249f9d4.png | Bin 0 -> 3230 bytes .../fc/e8fcbe4ee8a8c68dbb26da372493c351.png | Bin 0 -> 811 bytes .../47/e9471070893b66184c228b69550fe7f4.png | Bin 0 -> 800 bytes .../44/ec4455cf02a1d5f83a8b5e48d2952bca.png | Bin 0 -> 811 bytes .../3c/f53c4aeca1336d1a94ce018eb6d97426.png | Bin 0 -> 1113 bytes .../99/f5991e5ea83e80e1225e28b34573e863.png | Bin 0 -> 827 bytes .../84/fc84a8418481b2d59de45743c314f87b.png | Bin 0 -> 3230 bytes flir/config-flir.php | 72 ++ flir/flir.js | 955 ++++++++++++++++++ flir/fonts/Carousel.ttf | Bin 0 -> 77868 bytes flir/fonts/README.txt | 8 + flir/fonts/index.html | 10 + flir/generate.php | 280 +++++ flir/inc-flir.php | 912 +++++++++++++++++ flir/index.html | 10 + flir/js-plugins/detectimages.js | 112 ++ flir/js-plugins/index.html | 10 + flir/js-plugins/refreshimages.js | 84 ++ flir/plugins/FancyFonts.php | 102 ++ flir/plugins/QuickEffects.php | 261 +++++ .../QuickEffects/qe-pattern-fill-texture.jpg | Bin 0 -> 67083 bytes flir/plugins/index.html | 10 + flir/spacer.png | Bin 0 -> 153 bytes 77 files changed, 3520 insertions(+) create mode 100644 flir/.htaccess create mode 100644 flir/_COPYING.txt create mode 100644 flir/_README.txt create mode 100644 flir/cache/07/56/07568a465b7405063058d478af23f46c.png create mode 100644 flir/cache/0d/d3/0dd3e6bb2eb0fb2b2f32d826f82f5865.png create mode 100644 flir/cache/16/52/1652b9f5c0b439e90f415804757ecff7.png create mode 100644 flir/cache/20/3e/203ef3b4ef7971929adb1518298c9161.png create mode 100644 flir/cache/26/3f/263f83e95dbc13a2f74b071998428927.png create mode 100644 flir/cache/27/1c/271c7bc657e02d61190de3227d796750.png create mode 100644 flir/cache/29/8e/298ebbd1fcad3cab3baf8a13951a7360.png create mode 100644 flir/cache/2c/f2/2cf2d0f6ff984a8967c5db95e088fac3.png create mode 100644 flir/cache/30/bb/30bb9e89f5b11a5d054417a476b00266.png create mode 100644 flir/cache/32/7c/327ce76099a52b41d978220bbde76e44.png create mode 100644 flir/cache/33/e4/33e49d0bf5b7fab3f8dc39fe386669b4.png create mode 100644 flir/cache/37/aa/37aaa7c55e4958de33ee1171db12ed32.png create mode 100644 flir/cache/37/f4/37f4e00c309c11efd0f5902126e3473a.png create mode 100644 flir/cache/39/7a/397ade26810a76703054d8d11c771986.png create mode 100644 flir/cache/3b/04/3b04b6f60fa4f82431e650fec98a1237.png create mode 100644 flir/cache/44/48/444857e80465d210a6c753a90ef6cc68.png create mode 100644 flir/cache/4d/83/4d83703361f4a66ab031401a9aa897c0.png create mode 100644 flir/cache/53/05/5305a28af4ee1c026e51053ee39d66d8.png create mode 100644 flir/cache/5f/29/5f29138bafb0c85daffea206aabcaa22.png create mode 100644 flir/cache/61/d2/61d220e4a30cc7b78ea904a0eef274f3.png create mode 100644 flir/cache/69/22/6922c9fa5f5835a262cf5b19a859378c.png create mode 100644 flir/cache/6b/36/6b368f8b9e0abb3c78264ecaedd1bc0e.png create mode 100644 flir/cache/70/4e/704e6a31d610369dc1dce5580812ad0a.png create mode 100644 flir/cache/75/54/7554f5c7afb52fb566c8843b3780ed3c.png create mode 100644 flir/cache/78/ef/78ef669122c9e51daa4a346c2d2b5e50.png create mode 100644 flir/cache/7d/95/7d95c52a7a30e7197fa9d55614956ff5.png create mode 100644 flir/cache/80/b2/80b22b109efb4afe70c69cc67ef4b51b.png create mode 100644 flir/cache/82/a4/82a467735095edea39fb95548456a6ec.png create mode 100644 flir/cache/83/21/8321953f021be7d37282f95adb67565d.png create mode 100644 flir/cache/89/99/8999ec3a758c0bb630e10a4f3764fbe7.png create mode 100644 flir/cache/8a/9a/8a9ad0aaa5058a839ca0af676ac5d103.png create mode 100644 flir/cache/90/10/9010b9699bb63ead9fefdb569c071927.png create mode 100644 flir/cache/94/e0/94e0ccde9de3bad147222759c47368e9.png create mode 100644 flir/cache/95/0f/950f0dc59d005ab3ea279b86ef12f6d5.png create mode 100644 flir/cache/9d/4e/9d4e7563e88c4e3065793752dac9933a.png create mode 100644 flir/cache/9f/ba/9fba3e2486a08ad7469b1dd0dd605c7b.png create mode 100644 flir/cache/a4/4f/a44f01132425d5acacddeb5ff1810089.png create mode 100644 flir/cache/a8/3d/a83d03fc5ff048b52572d81e8be912fe.png create mode 100644 flir/cache/a8/74/a874399f2b39583224fdfec1781ee2d7.png create mode 100644 flir/cache/a9/7c/a97c71e0dd65133419bf92ac6d6a68a4.png create mode 100644 flir/cache/b2/6f/b26fc7b21ad5169116fca87a6b71398b.png create mode 100644 flir/cache/b2/af/b2af7ee811eaf4e0ac39e478c1a1d8d0.png create mode 100644 flir/cache/bb/10/bb10ce2f261226fd759659bd1e686e51.png create mode 100644 flir/cache/bb/89/bb8929683df9344ded31df119d7a02b6.png create mode 100644 flir/cache/c9/1b/c91b0e0a27be07ee188f1a2adf365c6b.png create mode 100644 flir/cache/d1/1d/d11d1658947ab4b5f6e9b60456766e2e.png create mode 100644 flir/cache/d5/8b/d58b9874fba30a17c8c74535617d6129.png create mode 100644 flir/cache/d9/68/d9687aa51c34f2134bba45288f6bd2ff.png create mode 100644 flir/cache/db/02/db026f83552ebdfab2a5d1cf7b819282.png create mode 100644 flir/cache/dd/85/dd85501c617a1ceff816689a366ad21f.png create mode 100644 flir/cache/df/54/df545fd22a1cbd4ac9aa7968a41670f8.png create mode 100644 flir/cache/e1/9d/e19d7a1ec20a544816f3130da249f9d4.png create mode 100644 flir/cache/e8/fc/e8fcbe4ee8a8c68dbb26da372493c351.png create mode 100644 flir/cache/e9/47/e9471070893b66184c228b69550fe7f4.png create mode 100644 flir/cache/ec/44/ec4455cf02a1d5f83a8b5e48d2952bca.png create mode 100644 flir/cache/f5/3c/f53c4aeca1336d1a94ce018eb6d97426.png create mode 100644 flir/cache/f5/99/f5991e5ea83e80e1225e28b34573e863.png create mode 100644 flir/cache/fc/84/fc84a8418481b2d59de45743c314f87b.png create mode 100644 flir/config-flir.php create mode 100644 flir/flir.js create mode 100644 flir/fonts/Carousel.ttf create mode 100644 flir/fonts/README.txt create mode 100644 flir/fonts/index.html create mode 100644 flir/generate.php create mode 100644 flir/inc-flir.php create mode 100644 flir/index.html create mode 100644 flir/js-plugins/detectimages.js create mode 100644 flir/js-plugins/index.html create mode 100644 flir/js-plugins/refreshimages.js create mode 100644 flir/plugins/FancyFonts.php create mode 100644 flir/plugins/QuickEffects.php create mode 100644 flir/plugins/QuickEffects/qe-pattern-fill-texture.jpg create mode 100644 flir/plugins/index.html create mode 100644 flir/spacer.png diff --git a/flir/.htaccess b/flir/.htaccess new file mode 100644 index 0000000..e406d25 --- /dev/null +++ b/flir/.htaccess @@ -0,0 +1 @@ +RewriteEngine off diff --git a/flir/_COPYING.txt b/flir/_COPYING.txt new file mode 100644 index 0000000..818433e --- /dev/null +++ b/flir/_COPYING.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/flir/_README.txt b/flir/_README.txt new file mode 100644 index 0000000..3a9b9a0 --- /dev/null +++ b/flir/_README.txt @@ -0,0 +1,19 @@ +Originally, I created Facelift Image Replacement because I didn't like sIFR but still wanted the +ability to add custom fonts to my websites. Since then, I've added a lot more functionality and +FLIR has been downloaded upwards of 7000 times as of this writing. + +If you appreciate FLIR and the time that went into creating it, the plug-ins, the documentation, +and providing support via the forums, than please think about making a small contribution to the +project. + +Thank you for downloading FLIR and I hope you find it as useful as I do. + +Sincerely, +Cory Mawhorter + +=== + +Homepage: http://facelift.mawhorter.net/ +Support: http://forums.mawhorter.net/ +Blog: http://www.mawhorter.net/c/projects/facelift-projects +Blog RSS: http://www.mawhorter.net/c/projects/facelift-projects/feed/ \ No newline at end of file diff --git a/flir/cache/07/56/07568a465b7405063058d478af23f46c.png b/flir/cache/07/56/07568a465b7405063058d478af23f46c.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d007e7d983ce4b03e2f6db797451a1cb279f16 GIT binary patch literal 1145 zcmV-<1cv*GP)@}_S`i~k>Mn}xfiXmuNy?HMOUCHMIlumQfB(P#Xh9Hk-rRf6J->6$JrCdW zn^V8OlmF?TQ$^l^@!?_PL(RYG%zv3G%bbk?L&k@d(b?m(F>ZV~1Go`542%P-qq9$x z(5nVs1Ui8uKv#5j|KGUhbYKN=I66Br8((Lze=cwV@HMa)SR9>wA=RlgK5Paa0P2CG zs(c8z0%!zUfxWZzVF$1lXi~mCNAGdqHofOM;0@rca)yl$yMS9LDhA`jUf|Z~>~AwU zXMA`N*aWPK&Ymcv`XMj{G$?;@u|fr~1qo!8D%JsaB0-!0zL?3OGSm%hNccQknS)ch zmg|&^>VTUQejCt_B;o_(LoRG3GzK&y)mDx!W%@gYjSsEHhqg>Gr+$5B)*8R7>>PEn z6&Q%leyUDw1eO9@qO+3#dGeHu56!^0%Fd0>PL$B;0QMxJ`=hhZ&G0yk5A%Uz%C1BT zs@C*XYG2jFbrJp^t5Rv}3~mhip6MZluy>}Ul* zbap)P?-k%)-~dozd{_p21N0yP9x^^G$&)9Ke9ZXpD}^9ZDu_ze$^Kt@%=z;ULaKWp6olN4kVcdse(_+ zeNO=ns*ofsRlXS@I=cx8BnVyy-S;FmUW?A&l$h9sp%9|F)5ojqCNo6KHi z@`fGAz{>b^cw{zqs&50pCCPb)-C1Y86`dUbqVj(jAF6aej8yIk;6ky>%OPy)qLRALi+H z0%_4Y3I(yo_^?3jgH+%(s@np5tatWBXP*Z7k8D5<z;Rq)x(m6tttWZyO&5frpSP z*`5ujJUJ4)HnlMZ)JJFgN<~6j|8C>MPT*Mtf8GSP0&9R>rM}ZvtK?MtD%NWNo(HZ4 z8jTOtI`mqAtE02;tKJd>X8NMDlg5W8WKIk#B$?>!+{Eq%3RTLVIgoGmqQV>%00000 LNkvXXu0mjf`1cmZ literal 0 HcmV?d00001 diff --git a/flir/cache/0d/d3/0dd3e6bb2eb0fb2b2f32d826f82f5865.png b/flir/cache/0d/d3/0dd3e6bb2eb0fb2b2f32d826f82f5865.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d9651209c041d27006f818453fe3543ba5bbd6 GIT binary patch literal 973 zcmV;;12X)HP)#RBXdo42z*$b0W-+44#1v*n`RV5%Sds+e8i>mI#`V5_e4>2Ay@W($D`F|`k zu`17Z53msjq@tL5JixXvVq}3I8YmWE3ckl)y&EA4_DzOY{tCoI~lWb z>{GBa+rKqfo-vdM+QNvDL-8@D_u0U&`UKM{RoelyOFgUumt$?#H=zr2VkmbORsA-u z$C%9O!qCiq5exHtUuJJc_aMCG7>Ap%4!7ha=Hl7`cq{W~8%E_=;C1|tN3;HF<_?tS zvoVy5+q1ziN6WNqbR9m(&!SWv%d*~_&?-Ek_r%3e-h(>ZO~I|$n)P4$tn&>v;=LBU z`Ph|xZtTMzH3;uWes&q2#G6^~lq#x`l`ZldP4CWqf~Ag@MKP57rRxVj#ZVr^xqSkF zU-4U>clGf0!T!C*JP7Gzk zYQ7&V&+lZ|TInQL;5j^=4I0M=dbp_Sv6!6`>B&J|n*HU#8)>R^9QD6Q)VM zWLFDbdmazQQ0|p_iK41^48Yqk!1|5e$T>Nmf%074EZ!sahuLzeOZW8NV}SSJ$2^~h zMN%WZUn=!|Qcr87Np^Zs)uVAupTPD=O?z5?w*5GG>;Vq*4ARmX^f9!CG3%Y8=#(ib92A<= zI4mtKEeBCT{vDQs) zJGc=M6Dg$@^k6(9CjX^qBL;9DofyQ{TpPjzET0QeN@*~qv}!KcCLF`}O73Y&sTKXW z5D_nC5o<=mas0r!*+d&^wVIStFCOLG3LM0d{GG57Z?FXSa4};y*E_=W{ogwt4u zCm6?MM2wY_!c3)+v)GQ8n9jsoupgtjiI$Arjgy(U3D@xjr*J4^)}sw$*hb-LRUEG1 za~2wih&_0iYa6fw6FFWM5u^B(sMSLTU3vhWnT z72D8Pope)0bSRTg;kUxu&RpwBDJ@1GUZsMqW5`OsCo zM!UkhrFgDbgS8lrh?$hqYKVxpl}4qMc422k97rkcL$l(S_TpSkF3+) QO#lD@07*qoM6N<$g3z$}$p8QV literal 0 HcmV?d00001 diff --git a/flir/cache/20/3e/203ef3b4ef7971929adb1518298c9161.png b/flir/cache/20/3e/203ef3b4ef7971929adb1518298c9161.png new file mode 100644 index 0000000000000000000000000000000000000000..28cb983952d0f9211030717db0cf202a87686437 GIT binary patch literal 1129 zcmV-v1eW`WP) z(m>G&MKl~V8l)n!BFscY%EU~1*!y^oANO8w-D^bjhr{9g*IIk;wZ661S?BADxXb_8 zaTwW2q!hbj4}2Yw)~6H|W=5o$|M=oy$%YFfQ;KnT5~DE(XW>gZ!0+Iq&W!lCAtJ3wDc-=zvL8~4(YR6esRxHP`UA;^ z8(plOk6X+0zW7XT37_DIh_tEGD5aQ&<1wcReoAp9&cjN4i(~L2PAiW5h?B4mi*PAw zoQ^|=U^^GH@m7()iBB<4&dvsFieKG$WdPY-xC8TXF2-X8=0>C!S~2L^o=y|s<;6ib z7!z?E?v6;SIs$tl7T_>!EWx-UB7Klj{ES_d48rHdksDe|+>S|@*5YR3wjtOqDz#^?ib(4_xOFMTq+-*rOz%r_lUzlMi;v&p zBe~iKqk|lk|%Nk5-ZP=iWNKeS+-gbNmzHV_FhQW4S zi_;2VcZ=R6Pebpf6eIeR>1|UZ@p19(61;@v5oy^Vb&vzxZptB-ez)9@SIEI#B9~l) z@p?;_{1Rf@dAYMX=>0KA^r82+ZTpye8=cWDdJ4Y61dJU(R=3u^PHs12F$)V)iaiFY zvsGaM9>WubtFTn=ZA*~#j^mtuYFJtePGYccq zl~q;$QP8<3RNJwR vGoL1pbQeUV&3{35F;0-Dj6Of5x2N+bbo|-yA;W|m00000NkvXXu0mjf&SNVK literal 0 HcmV?d00001 diff --git a/flir/cache/26/3f/263f83e95dbc13a2f74b071998428927.png b/flir/cache/26/3f/263f83e95dbc13a2f74b071998428927.png new file mode 100644 index 0000000000000000000000000000000000000000..4de5f846cfb078048ca969d89f21a9eb7ab73d4f GIT binary patch literal 1157 zcmV;01bX|4P)Wqc?SDkPMqDY|HBnPsGQu<%l8XdzM(Vs=3!QZjnT zEPUt!H4GJGQFcLOGBfePZYE(Ob_fv>>0$5jjHlx{f4iV$-^-r8XRmM8{`T5y?dj1n zd6NI}&!Xv6JMdpbbM=tqMH3d{L2Sb`494~{OAnkH_x>Fud2ughVkdTE1eTUry1A3N z!|@TOm06lM!rv4P`{Mohp)DATZ}BRo{OwhoeprH@xEqh+?9K#@7>WVWrXe)N2z?jV z2oZV~|8WvPagZZwr2|jjh8AxKr4jacILpoQw6C zigWNxnWcLw!z3>TV+EF%Sz0D}F#+R+s6QMX+lS>s>KR{V>5gc7Uz~dYD{&>>D6@2L zXWX@KuE7MX#ZS?G7jBE+xw$jmxR$RY&D<#7ix`gSWtMKJac{!(Mz!eCGI^3DFW$zD zHDP~=;$|48eU~<4lyGz)FSGReBrkel8Sckc^ox#9iMB0q{?mA<#<#l6(pgDf%!v!G za5xI{IcA-Jdr_ICN0Yqx207+O+g7ZKKF;lecX8Z=%C8xb8@82MIx@+NUoji62`9E& zEeOYdXjHzAfzioTc&awOUq}yIV?T-Q^OzSucwH3Y5nLJtsW1c2;z;Zdi|u)}IiKKz z_^xjk+$-YzYlV|gVHu7#z z6|l;))zPmmyF1G)-4_=C-w9D)VQ!hF3xr}w`>wAPqK9xiFA#1YcXYvh50qKD8wYFO zn6162bj4fGk?YDVZN=-c-yFHW7t#hHB{rgkrX(-s35DwM8bO6&9mWpD_KMh6SB%QR zo}ILH=c`?9>%e!lApR4A;3M#oki)v-?ueshmaZ4_>&$L=>-Lpczs2@g6qi|gv^K91 zEi_?~a2zHIyIjXxjz1o`4*fMkL0O15 z<5)8u=!UyOuWCI>Ui2-qbbpzpYrEkcP_rKt+w*Jd><>v^^sdcoL<>#WE99!)+9OF^ zOsnJZg^7gVqZs<-6;+3i^BzZ9v zuf*;ceAyw-oH1xri$?wuM%SKK2|IVDq9HAsI~%MJ!~YyR literal 0 HcmV?d00001 diff --git a/flir/cache/27/1c/271c7bc657e02d61190de3227d796750.png b/flir/cache/27/1c/271c7bc657e02d61190de3227d796750.png new file mode 100644 index 0000000000000000000000000000000000000000..0d965d66e59f29148f7ef0f6c24359bea76115fd GIT binary patch literal 1113 zcmV-f1g86mP)+ADB{d3x` z(?LYs6cHo-O=teg)YIi`Ek2Ei$(i}{wiu6yU2rbGML(uw=AA?6_2N;SgEg3)nQ#7$ zdv?NM_%<_FZi}y5vA;hK$LAP_ahdr@Tc;-?uEDh!gCDB$Dx8e*n1+|P(TDjs0ee?| zW(U1HaB;ooOgx9(x*3j$Cvc%b#SjrMi(GT&@IhJwD!=LtSVNE@|BSU%!jt}I1w=lKUH?JQWzh$ZA8SYn1}_~0WV>;(t!u#8zsTt;ShX{ zJ+VlE8#qEq@=q=P0UU+BGIRB?W@<;oA6027R^k~2*VffX?u2(0ESiDdq2!tQO|^F$ zuE$>kD>H|62*?HXq3|Rg#uHeAMVa|lmtZ!2@1wxT?KMcBWagm}(Wi9RNm!^r)(G5- z8|t@@U=)r~x?@>=Pj5ZH0*~YO%5RVNus$7PQ!7TxvV~L0-nXq2C~~p zE+V2n=uM356ojgKrGX&AEIfrtN);^a_Pqf(7_KDYfXYvR%)Cq~3`(HisQbAs8_#6s zd9Aa9aVkEm{9c*4sinUFU*Um>*n@%JpHVHPvomwo%)GVo2i5g^Wf)Pi)k#jlT$s}a z@d_b>>8`qdpd@8PeF)6W%nd_))7a~2ytJ7?pNV%T!UNiY5Rhi z%7k8nxe+m@b;+E1b}3$|I#Vx}+2&KWp_zD0N#?wk^F8>|Ky?pAQ|i6T z@gv?*TK0aMx9<45p3(>+V&}SDue9iB0|hZPB6hF#DHV7|)t#u!gymSAnfFlsBgZOJ zb!294sFQFERzqekjEH5*;Mj=UGqb-sGo)Mz-t=l?EyiT#;-Ml@TmOoPxDO91`13q& z#Z+bJY(cfvdTfbbgZ0KL!)pe{M?`P^bC`(JGxN2ox32;-i!*a$MC`51i4_%+CS~T1 fExVT(s8W9drQmC9q1HRZ00000NkvXXu0mjf--0pr literal 0 HcmV?d00001 diff --git a/flir/cache/29/8e/298ebbd1fcad3cab3baf8a13951a7360.png b/flir/cache/29/8e/298ebbd1fcad3cab3baf8a13951a7360.png new file mode 100644 index 0000000000000000000000000000000000000000..a21b9f5b52a104c5b95c1f035fed103d1baca551 GIT binary patch literal 758 zcmVAc{ppphW@(i?R)fJ*Y@fczsYPD(Xe7y+{RHXpe%$gGiCKR8bHW zt%5>DP|#&D)rwZ}Ao32jLWso%t*9Xs3891#JiPhZmk_~2MI3m{?(FW&fBri=Z_Us{ z5Bfhy@4p7{Pvx@yAmy?dJ28us_&JtFaUFKy3pCh(eNA0WU1~rnmr;y2b@lS9K=D3? za5i*b<^%jB>iCZS8z4i*u@B3DcCY?4Uc;#s2S3M6c(!AkywvDYE+Z+I3A}`LDVM9e z>lYYp>gvvv%k}srO!K$`vrS#ir(C+=ehcUKV4$h1+zB|0=dr)3tEOYW8DltxMQ!=4 z!w7!YvN+m_aWdsHgcq8++T9B$1F`t9mgQ-@6}Anb&vg?_xg5s?K2EtjopM>5ayf(_ zBlvqMm;EW1{;eIy+xQiKUp$T$>OdL!-)-Ip<3)0uBfxr~Q>0nfR};7IhsD&`+qE{mZju%}}m(v}bmgqH$MdG`)f3ELV+4?4)z%$z3 oeM?hU-*@8Ph9lbccA+Ky1qwFa;*T5r=Kufz07*qoM6N<$f+X*8YXATM literal 0 HcmV?d00001 diff --git a/flir/cache/2c/f2/2cf2d0f6ff984a8967c5db95e088fac3.png b/flir/cache/2c/f2/2cf2d0f6ff984a8967c5db95e088fac3.png new file mode 100644 index 0000000000000000000000000000000000000000..eb23da2bf202318d7251e5ffcde00acef1bd2763 GIT binary patch literal 827 zcmV-B1H}A^P)I>!eDhFvgk%-P(<`#U>Agp_6h&f=tdVEl8J$%8yODXfP9ite-UObOGFx2=*aHQ|xBGGTS28&85U!mX`oWbiC zv`(@u9o?Pec>B%n^?G`}o+OX9`~6AgCfS?h*CZoJCMVg|&J{^s?b{~Vk>tlDFD7{< z$$})ClU&j6eoFFrk_}1rh~IEw)w7?_({N4ZU8^5SFzZmf{v%k5#RGppWt} zc40B5;UV1|+>D>`3D#q4(?5p8c)20F2M^;0{D9fInVO=j>bYk3Azs2;ScQ*qC7!@0 zT^Eq#&z9+yB=eJeJ&^sfB=-!+Ynxt@>`XE}$;Kp`lKe5CH?^VO8$fYu;~z{iX+U?R z>Hgm2)k)?gS=p+YB-bX{-uV0ah#zX1o@@MWyoQ5V;QZz}P-}f3`C47UwNT1uJH*fV%TH#5)b zR_!ve}%334>qGQpyZ$#=2VTSaYxvqqWx4rIcaJueI(Q4_hf^X07#T z!+(nRY*d8MW3=$Gx!{ch*|(Z}M|EQEPp-l(M76GON})HsSyJ$uFfW z$4*@pm+H3GaIJL~=X>z~NZ;ZcEYZ!-3|%{6T&rA4^bg0Q@;z($cN72s002ovPDHLk FV1jX0008LNklvYjB(0NlQqp5d7bI;eiULXVB^{EqUD8-dTSDG1 z^U)ybYVdWTUmCIAh2PqcU(W8ml=Llp?TEN*B+Zc2P!t74Q9ytkDyb&BJV;Wtq$WvQ zGWjk^&B4EsbRdGHJC)3~62Myn+^UebNjehz(a=qn^d*b2CW?~idBkhYfjx*c#sWiuK_P1gHUUe37T^|e zC3Kr9AK@~f$;|o(jqVxJJ1gcK$$;wYVwT@F&KVy9KEW?%obeFtg_9)>?P(Ot$X6&CH%e othHwL0H~%Mk7+=syQlTccVy%5k-@J3TL1t607*qoM6N<$g5jQSV*mgE literal 0 HcmV?d00001 diff --git a/flir/cache/32/7c/327ce76099a52b41d978220bbde76e44.png b/flir/cache/32/7c/327ce76099a52b41d978220bbde76e44.png new file mode 100644 index 0000000000000000000000000000000000000000..8570bb08bace4ef22b3a585db221ed17555cda19 GIT binary patch literal 3956 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 V*ET?ASnL1*002ovPDHLkV1kXov+)1` literal 0 HcmV?d00001 diff --git a/flir/cache/39/7a/397ade26810a76703054d8d11c771986.png b/flir/cache/39/7a/397ade26810a76703054d8d11c771986.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4f4689a865b262c55e02e05226dfcbce228091 GIT binary patch literal 3230 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 Qh5!Hn07*qoM6N<$f^TY3jsO4v literal 0 HcmV?d00001 diff --git a/flir/cache/3b/04/3b04b6f60fa4f82431e650fec98a1237.png b/flir/cache/3b/04/3b04b6f60fa4f82431e650fec98a1237.png new file mode 100644 index 0000000000000000000000000000000000000000..955f5ee74f052d491c668303b556177553ee1963 GIT binary patch literal 976 zcmV;>126oEP)ESoW{_KNpJvJ}rcb%E<%y;H@+NLeO(f>`_ ziU}Rta6YzT8-BoXOpo=`@gAn(Q!K5EygZrGtgLRq3hc!J%)t7($b0^+gIQV4#{9a- zpB(L-G589zuo_?Dcl?Qc*pAmFaI-KO>qepXK@8(&+>ibL1yIQRQQABqW3m4fXZq?Q z-)>yiynW(8&~JWi=B|VL{9%)(u$1v@>mo0+ zvg(SpE)3w=y2#fAi0?7G#n*#U32ee1T#X~xh|96HF7m?-sLj|@7x~j!S#8AK7^sW< zjI6B2;nlcw7q*0fRrmxSVmyvwD8}tLTVlXpasD)kj^Cma=Z3@Y$N65Ig>hILLAe8K z0?05P4L`O7kVXd4hh24%FDFsyGQ1fFhFZUMkq=-IE|!`_BVS-cfEdCBm=}@j$DtAQ znk?1l6e&xG@kjvb!9}4HR%K;1H5$XASUXS``O3P;FO{<1>ccu57?x~BsAF{Gqgh_Rg4~#g!FLa-W?yRhC$K2Q(#CH;fACt0w zY=j@jva-4o%dt{w9$ixAda)F*HO9tBk==|rQskjME32lqTER8rqf!l!s397`4s6fL zYK}yuM%IO`9k>eJ_%-%sN)(@moA7d@(?8MgkZQbJs?9@q0K3EQ7eqs8KrO~SQUOkH zaipsiRMb~9?v&m&n46W=j4(Dn92&&bmg~pxxI~kMQbt~E*?(SY|5E}$d#v}zw-Y}_ zAf5?utEG39#DY5;Wn<(0=*h}zd;l4e3jf}$tlCl5MLsCeZ8#jLP#J y2+7K-L!#vRy2y8BWwij;Nww82(RX+2U(VlMS3Ww#BvKjx0000`~*~000BgNkl1nSB1qUD zQ7aLOA|r_8a-|50(y%{VOsL#nW)`xDi7ZQ$+1A53KmE1ruC59aG%s_`cjlZkXU@#r zxlPl1m-wG1M$H%6fd3+0Tpwgb*@ee38%OXS+Hs-^`ML{Z-oGg;%4_j4mRBJ!8t|Fu zsY3qp2>nslK{%9JYP$Hv0XmmN)^wQU0)#z)wJJ{-oJ zD&z-87~P4r=&L(3E6T;V4d3Fp==@@b-%*8pcUF`eu^2nC7yWnw zGaF1igz5Nh417J_6frXtG40;MvJNj#X4|I18 zWkoruqrbKmuP41_9sRY=j{aKR(KE3Gcj8Apjmct~UyA3G(UX%?CZa!Opu1~ZM}KV# z9>q%Bf?fC&H=s2+ep7mc&12x}#o*||_n3yBj{e$T1KnMpWJP)Fc=Ec_nnG*aA81MQ zJy?n@xJitJMG1QVCvc@02_Ik`)?gW4NP7(99bATxun)x#%oVtNg8F-_kYAS-7^W~f4b0F8BNZ{m~c>$0L; zkQL?Daq#OCc3iCEnHbe~r*lsyKWR|iIM{|+$>=p=>v71bey(K<-q`QeTYrNC+6{>SW|Y0 zh47_h@Jgo~+m(8sJk7T!-rnGZ>50!uyxt3TG{`5a53-`1+%WD;!vl$T;-_@++8Fq2 z4d=chmWgSiV_VKZ4w|cw?-axD8nIxW5ItQJ>&8*6K)v<&Ossiti(f*xx#6%CiLXg~ zL8?b{(|p=Q^|PW}kj8Vx7azphtSFnY9Q%@d7>lZq4~>DZ5`&-xKjS&E4_#V?{MhN_ zb%UEm{(Gj-eiHXqAwNDswot5btE-TIov==^fWK8wnXD*hi@nsbG@pkfRmf`-)o(bv zU2Im1D&!|qHp$w=6zZ!&{`nc;onj_!u0p=u2s)koAKQ4Gk`BGBW&i*H07*qoM6N<$ Ef~3|3`~Uy| literal 0 HcmV?d00001 diff --git a/flir/cache/4d/83/4d83703361f4a66ab031401a9aa897c0.png b/flir/cache/4d/83/4d83703361f4a66ab031401a9aa897c0.png new file mode 100644 index 0000000000000000000000000000000000000000..86e3469c457198e76d3c3859b8a8b7b008f5d39e GIT binary patch literal 1134 zcmV-!1d;oRP)p$t?7tNU#_}sUWDdiM8iyg$i8QPTDG8Z|5|J=D zD}2Z#eCPrhQb87F7h|Z*3lrGIOJT!gLx{>WtB1Xgv*+~rea9{++W%$kwa;Gvz4tn6 zueHyqNz;`7@$Vuz*$X%wQOX)3k^oD9hkjH*5gj^@)0cHee_43UK#7-o>ehr9drkAMiMEb~%SST7X8k zDTKr$bR%#bAwq8jegx`)i+~+}cjc!rE(M;6^y4`cU^6hl38cyzGaCo&i~809tATq6 zZ)Z9%2s8ob0qcP|z`4M4s=7Zj6p?122k2JSFGXY~FoO{FM}1-aKsO=v%uv-`Zad${ z9t2hb(}34h^*}l9XwEgjOhAD>ZoeD2-RHTb9Ix+Xo6{_G=cT|zV4kXOh`6@^^9uVS zO;gP5O&g7$%&f=Ewwu`>QU6vmI}+&|-M-GuR`|26X7;U_b(`59Gus!9@5%A4cKZdn z`Hz^{PBU9ufje>A?arHFeze9)yv@0F{Tk`pock9uo9%ste37OpiHNkg=VLShi-1+Y zvr+#5Aw7KU`ec_c09_u5Hv*l&qrhdr^2lC*=Yb*DTV0+Xjrj<8&!06^;O_D9*Aq@c zhULI;0p6kLSr@Q@koF+tQGhFfcf4KH7bL3M2RuTkf_bz9Uq$*8UIDW_n;rc-T=uDI zzi$BGJK*QYexa%^CKN*$$x|zVPrW@2xR7xBxT^y9{Q#=E7dRBn@em_Lr4nzPBiE^F z2k@%vCFlO0kTxKs#3H^R5s@xJp?WGJ$k3YWJM8jmm)R8~TVQP&881G2tAjbdYYEPO zn&9wBz)OT2R*5^0VO3pE$gk~Hcw_s_S--hF7R9PM9E~gD3liWl!f}{Ic*`-~VDvGm z6_G`RTR}gt!uzx6nIIyqzzwdy1&oR8$GL3E>1zlDWeM=Q_mzMLt8izi%l0E84XQez zs#=A&F|r@;@`7leV*x~@J{niV7bL&|LawT3B$DvWbTAs95pvn@z^v$_pcBX{^2fkh zLXPSHrbhOiBGO2xumCM0as?rB_q$vcjeoxicZSQO_H9wS67S^L#+}#}_04v96(L6t zG8)J81ts8Kzy5qkxaQND?i-_(d9GlImdMsC}>TY0)h)gG3PnN1`uU~^c zA>`6Q01;^eE>_j7C?F#3z|Fv7LS#(ykV}Kuka|nUa9Idx3FR%$%0F2MB zK_YSq(4neZa@=EqvsCr4h}=}o7XUTYeyE7Z9N=YFrvjhn^2`~7qP{5dl`ti0uOhs; zGZlq=Q7YG&!NdO$a1EjI?NZgDN;an}PQ({~0x)Z)?3st<807*qoM6N<$g6tI* A$^ZZW literal 0 HcmV?d00001 diff --git a/flir/cache/53/05/5305a28af4ee1c026e51053ee39d66d8.png b/flir/cache/53/05/5305a28af4ee1c026e51053ee39d66d8.png new file mode 100644 index 0000000000000000000000000000000000000000..928d8224a91ef1eb8f20625fbcc06e3c07c8a156 GIT binary patch literal 956 zcmV;t14I0YP)k`e;52X!mEOY zU`RoK1sn!G3EhCZ_nFx=U;(fa_#oTk?%p+qGw%iF0N=*ICzy#o9cfURc{L!f> z3M4g2`b&e7ZP+QCtYmAI*wZcP_i%cCX5SrwOVZ{z``_?4sGhD#Iw@&) z>3iP2zt7~IKtJi}1Kb__%gp9I;APSTcnnw%yc&BK0Vgxt9l(u{&kT9K&A@)33Ow%a z7l2(rBXAse0O$Az=LMC2bdXa13))03wWEXTW<@j!@wh?DRL>+T1gFdHn1Gn!(c{7 z!k-VE2etxTzzpCc(!~O)dzbXf5U^9h4+0xPu4U_;z(Sza%%(G#oddy}f;X7i1b4p@ zj$vl48BPs&7kGvA47bK5Y>ss&jkhXkTsD%jJS@JMT?Xz17L&%~oQU&9;1JYjdLZLn zK)ac3CuOA;m(XEmPlw%l;8@7tk>>qpq(3?U_h;Bksi%dcjP;YU(*g7XU$}dlyKezr zj{wh-YPJ_x;qF&Q!S4t9f^W<8|CDB)>1JRburX>B05e+!OmX-A+-rC51!kMs0$?N1 zR?crTn*{s}+(EjumJF`}xC%^k_gbc3L8`wJ{|z(SOKO;fyC2AGN5m&x;uF9oQmM28 eUG9FUG`I<$&47z248X|%0000I>!eDhFvgk%-P(<`#U>Agp_6h&f=tdVEl8J$%8yODXfP9ite-UObOGFx2=*aHQ|xBGGTS28&85U!mX`oWbiC zv`(@u9o?Pec>B%n^?G`}o+OX9`~6AgCfS?h*CZoJCMVg|&J{^s?b{~Vk>tlDFD7{< z$$})ClU&j6eoFFrk_}1rh~IEw)w7?_({N4ZU8^5SFzZmf{v%k5#RGppWt} zc40B5;UV1|+>D>`3D#q4(?5p8c)20F2M^;0{D9fInVO=j>bYk3Azs2;ScQ*qC7!@0 zT^Eq#&z9+yB=eJeJ&^sfB=-!+Ynxt@>`XE}$;Kp`lKe5CH?^VO8$fYu;~z{iX+U?R z>Hgm2)k)?gS=p+YB-bX{-uV0ah#zX1o@@MWyoQ5V;QZz}P-}f3`C47UwNT1uJH*fV%TH#5)b zR_!ve}%334>qGQpyZ$#=2VTSaYxvqqWx4rIcaJueI(Q4_hf^X07#T z!+(nRY*d8MW3=$Gx!{ch*|(Z}M|EQEPp-l(M76GON})HsSyJ$uFfW z$4*@pm+H3GaIJL~=X>z~NZ;ZcEYZ!-3|%{6T&rA4^bg0Q@;z($cN72s002ovPDHLk FV1jXxVEJ<0GmgR>| zS&{`RMyb6Jz7Q2=CM&&Y5?ZpEq&zITnVDH1<~-iH*WJC(29l_MxXjF%dCq_4%*;7w zZZ~NWmvDX{A2-ZY11tq501cA8Vy2#wwf!%%I}c!{I^d9GN6s}@xAbP1X$bHk&?oAj z1N;b7NVe`=Pv(4snN|VQy?GEg3A6z>N_ME7@p)huun(9l+3BwEE4#__yzxN=y9g+uq%=(i4zad!)$sdvI2S~<2@)ab1L2?X|Zy*`rIu4hN{|=HT zOZ0B>v7?;yW{$r)OAyK6F@r*pXqrUo*HT(%l&vv-dv03ew%bBSP z*w5Lx&3CYuw`(Z)PY5n` z3T_m@fNOvuz<4uFFT<72C+4dLmPdLIl;d&P$*6x7@LSZbAl&Rm;0}s$fNXZV8W@<9 zEFt*0w<(SjDH_Z)PO@u(S0nj8V31@FPzd;q(ZV(nt}KKU`Wes2nj;<6z@5M#;DpP1 zcvkX3i4jHt3w@sR%W(ln_8h@Yq^Kh#D0{sOh3}MXtz^e3+>TR{osz7X5MMSB z{B144kMEXjTShJjsc4D~ZnU+obAJXND1MJU=H;G9cHGO>NQPuby;{z0iDU2Ai zVlRMX^MT7GTbO|dpl6vm=Ui{myTVNA*m8DTnJQ5Ycx>j)Gyu5E+an1X(D%`I<1=zWaf;bDt@v%E9FH5c zCXx*(DIxfL%+!Noq8Lc*{RBUqF61;Jwcg|W&4f*x5Pi2MBNr4B0)Tq|%O^%T zo?#SkXoHz52!TJvG&6N41bzt5gI3^SZ+B`pkK5#Z;X5STW~Oa~9UDprYz>m_ixkB! z=2OD|SXIFLlBF5O95XdixJ^xxodhsbrE~TJTB7&I-N2Rc%hpWqxc*ywk&_4;wo$Up z<+xl&o^XQu5l-Mh!Yet>hGurgW2Sk)aG*K$^=7Ik{3Ws@;!3lsD%Ez(BFIyU{Msa<@? bWVe3-vWAIwShOLf00000NkvXXu0mjfe*t^9 literal 0 HcmV?d00001 diff --git a/flir/cache/69/22/6922c9fa5f5835a262cf5b19a859378c.png b/flir/cache/69/22/6922c9fa5f5835a262cf5b19a859378c.png new file mode 100644 index 0000000000000000000000000000000000000000..0d965d66e59f29148f7ef0f6c24359bea76115fd GIT binary patch literal 1113 zcmV-f1g86mP)+ADB{d3x` z(?LYs6cHo-O=teg)YIi`Ek2Ei$(i}{wiu6yU2rbGML(uw=AA?6_2N;SgEg3)nQ#7$ zdv?NM_%<_FZi}y5vA;hK$LAP_ahdr@Tc;-?uEDh!gCDB$Dx8e*n1+|P(TDjs0ee?| zW(U1HaB;ooOgx9(x*3j$Cvc%b#SjrMi(GT&@IhJwD!=LtSVNE@|BSU%!jt}I1w=lKUH?JQWzh$ZA8SYn1}_~0WV>;(t!u#8zsTt;ShX{ zJ+VlE8#qEq@=q=P0UU+BGIRB?W@<;oA6027R^k~2*VffX?u2(0ESiDdq2!tQO|^F$ zuE$>kD>H|62*?HXq3|Rg#uHeAMVa|lmtZ!2@1wxT?KMcBWagm}(Wi9RNm!^r)(G5- z8|t@@U=)r~x?@>=Pj5ZH0*~YO%5RVNus$7PQ!7TxvV~L0-nXq2C~~p zE+V2n=uM356ojgKrGX&AEIfrtN);^a_Pqf(7_KDYfXYvR%)Cq~3`(HisQbAs8_#6s zd9Aa9aVkEm{9c*4sinUFU*Um>*n@%JpHVHPvomwo%)GVo2i5g^Wf)Pi)k#jlT$s}a z@d_b>>8`qdpd@8PeF)6W%nd_))7a~2ytJ7?pNV%T!UNiY5Rhi z%7k8nxe+m@b;+E1b}3$|I#Vx}+2&KWp_zD0N#?wk^F8>|Ky?pAQ|i6T z@gv?*TK0aMx9<45p3(>+V&}SDue9iB0|hZPB6hF#DHV7|)t#u!gymSAnfFlsBgZOJ zb!294sFQFERzqekjEH5*;Mj=UGqb-sGo)Mz-t=l?EyiT#;-Ml@TmOoPxDO91`13q& z#Z+bJY(cfvdTfbbgZ0KL!)pe{M?`P^bC`(JGxN2ox32;-i!*a$MC`51i4_%+CS~T1 fExVT(s8W9drQmC9q1HRZ00000NkvXXu0mjf--0pr literal 0 HcmV?d00001 diff --git a/flir/cache/6b/36/6b368f8b9e0abb3c78264ecaedd1bc0e.png b/flir/cache/6b/36/6b368f8b9e0abb3c78264ecaedd1bc0e.png new file mode 100644 index 0000000000000000000000000000000000000000..1c0170fdd61c9372846ba84ecb90f3bc135ad6fb GIT binary patch literal 1397 zcmV-*1&aEKP)fXIgImk`wm}u`Lu;`@ zHu%SJDehmu@au3pmg5^ZyXZRz-GC+d0G`4ha2c+|Z>!kccpSQ~#3&{Pl>ai0;S=}* z4)z+JZ2T9nx3hMi9F;3DQr3Qc9E#3KDbx?+-MF)}{Obj_on3Sskqtl&kU=QoO!+M> zt-&wL_h+iu+%(`>zrdsgV7fzZ#MPboJymRmtJsWHvAL+AfD@K&8dt?;2>&dCZ@>|Z z<8(ZfLj6OiVzXR^sGTX)srSZ(_(kS(*jc8pTp;q-;x|3ZUrnLDdM^2S&Ui$I)Wa#% zuc>15F8rz^@_uZ>7O|yQ^2#iH_8}3gijUOuVYu|U6;!>rW;g~a>h@T^~cDbY9qg;i_7>Rp2HcqsjMHx22{Ae z?7yNPzlzPxxCe{MqxRtMWT($(u_`u;ncOHCE8T;|SB&Y6=Q>b^#2E=p+G#}lH50~$@SY0M(CAsVQR-gSX zwRembD0sZU=mTYaaSHVzxeID(o0;NzgV|9`4$77;Pocg_?!+iI?Fr~7u^w;7+A22R zpB6N`h`pFXeMJiOt2^ywD>pLF*pI)yeE+eGZ|>aHb$Ty#Bk>Y5#%k}Hv!={JOUgJZ z<9X}Qwt)AZbF4ULx7;pX*v-%s>M66Kvki+O)EY%~^8h zwtF_?M!AE!D}{Q3To9MydAzPI1V!m-@0P#aHC1fZ%hh}$g?is0{3Sz1NsA97O&*0@UTrBV5y$UZ& zp?;}Eevq+#s>r;j+;gzZhvYx`SENuM>6~?e9E9Lsn^D$#W!dee00000NkvXXu0mjf DaT&`G literal 0 HcmV?d00001 diff --git a/flir/cache/70/4e/704e6a31d610369dc1dce5580812ad0a.png b/flir/cache/70/4e/704e6a31d610369dc1dce5580812ad0a.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f5030642ef66eda9286e4a52c6554bbf8b1e30 GIT binary patch literal 716 zcmV;-0yF)IP)G|pA~dfbmCxFI6X4Rb(dyn~$)d107+qj((?)$Y}A zByfM-(hX_ zzZH?sX2w(n{2WeJuxIcK*5MFV<0Xt?Q$&878Hbfhb#lJ0UyHr?2wSTCB@Wb!?1{)3 zO2s;9pQ)c2tMRe&%!wqMhu*eF{fUnx(`{^-b2CUz=^bhwwy$4R4X;z`0lFz9XQ_j--yWDv9#uD&rRHcsd_1cz*_xfEW_n$ zzlqNV4(s7z+|pcXA~QxK^0K*dDKlV}sI-8|%dmMdTOV-ai5HqqytN4`jFi0000SrC<=kyI92XpyCa+F~y(v~978Nz;cj2e0e%Ja=KMCGh{{%$z&(KQrgdnR{=o zC<;!X8f{rHvreD@rU2IiZIT8iDzNdu%q|4x0bc?$fGLtTjEA!=i01>FfdOC+upRi$ z%$7*nJ)Q+72yX-D08@d#fHOuLnAuWbF>s}%;VQzqnY9C(g7jA4Enp@vANc*Biu^yu z0$^Rp2byfe5UD8UjfJr0?w0|dXHsAZ&<#;uTIDHe2zQ_C?%VuWYbW$v*`DmI}VY-QNqJjS+{t`=S97%To?}S|^a09S2^!=rE zJ_fb|uUGIb2KI%|btUf8Tksu;xw*h2z>A@`M@414P?6_!fI4ZD-UU{1ES5@{XK9k{9#*Z`?%cgNiBG4P!q1;D+)jgopR_|5}X11AH$W;VH$*l~QM9`q4#s-%-* z<5ozjNjihyN+6@@#A9b=0|?bWfMZ nIQTEcIiVO!o|P4K0ttTunao8#Gk6k@00000NkvXXu0mjfb8F3L literal 0 HcmV?d00001 diff --git a/flir/cache/78/ef/78ef669122c9e51daa4a346c2d2b5e50.png b/flir/cache/78/ef/78ef669122c9e51daa4a346c2d2b5e50.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5a07e202a6be177bf1942aac230f2065aa5706 GIT binary patch literal 635 zcmV->0)+jEP)RS$bj z0{O=4M?g z^*tQHGnm3wT*BQj|3~~^8vnkh~eMGkTBWlh}hjQ6CK9MSKxr3pm-+c^y~q9NyF;>3=_hXLX@mol5->>u|W& zy938?FY4(C;?1b9x4D^ZbF%@D_0Ii-A7WyIQQ@ID+-!5R8;8*1mo_)Idjhbh&CM*% zkMJxD{3n&VDV2IkH~#t9pTSzZf$jI1h!72lRs}9#J-$q(&W#wp5O_QAPT-)2=kN+% zhzlGF(@*1bY#E)z6Fq^+RO)hUz`MHleOvcD|Mvv09;vSeuEFoR@SY4a`*q=^%iiu$ z6Ep5#3n8#IdQOL_;o6l-eH2ec{bVY2y>85xV{Z{J>85ofaIVMk z&K*3idx|x2yK~6+D)J$fx(Qd>++6FsPo)lU3P;-9%%@Vf;APClM5b`Q%}p7e`41YP VqcVcp^%DR28tIEA}IwG@t!EJ z0wE{}iPkO0t6 zWf#jagAZ|{&Kbay`s?|XhYFFjGo-sFZTJ zO>`r6V*{SXB;LVWtspN{!adAY+3OBpw+=G!H&R4gZpC;IPqgfLtf=~mdZ>ub=v@JN+CjN;~&y}Fb#R{e8$*+K?~YcG7X+8^o1e3j$a)$$K&N(hE~`RrV;=E002ovPDHLkV1m)@aI^pb literal 0 HcmV?d00001 diff --git a/flir/cache/80/b2/80b22b109efb4afe70c69cc67ef4b51b.png b/flir/cache/80/b2/80b22b109efb4afe70c69cc67ef4b51b.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec2f8f517ac411bac912b47058f52f4902e3b08 GIT binary patch literal 952 zcmV;p14sOcP)`~*~000AjNkl*|ng7f^XJ+o1 zxwBnGQSd)?MwKh=z<-ghDw&kh0PrX<1e^i(0lmOKX7=2baqn_UDP0S^58P*F2Liqp z7&Wt(8|<6n3#E#0z7d!NMuA;G6&MGe0gf%^feWNHzzSen13uaWYlkn0x+JY4C#(Y8 z4_pr{0X6`e&FrhiK6Jj6QtAbc0>{j3y;sK$V9ZUfHnVfB@Wt|@OVSSDLEt@L0;mC} zf%RtgLxa=(z;>WkCNrh93AhFL2DnI0{tWOm@Dp$&unyQsz9kQIXn(7jeVS4l2Q~p8 z0$&4%fyaTh!NpTRAMkAp`~_e)xq^m)KY&-vY-@;dxSbvVNynAxJ4s6=-6iQ7NkfvV zMNuGWiKOQx{Uzz3q{EVGk}8sZlyp*cdQq3tvyv_Zxl{YS?!zzcTS<>edMNBQEor-? zkJ{ijdkm5^Dd~6TpY$`@>dPO&NRkdo8dOeo&2WzgU;ua>xDL3RJTc77L4PUO8u=q|o;+$ykQ?Dk?(kOXi5>9S zXM@Z8eeDfN=<{{Z*K!uD27RaY0HlN7_Z;+@ z{3@^X@)%d{TT<>T%Ur)&(wAjPDmTbIp+sH_W%IUUZ@GL@xgV8Hb$TB5BW^R|@^6xM zd%3RmQj+q=VomV58NS8$o_5_)Nq2@8&{kg*1znB*J^gAw0o-F|7aMeAz$3smGy5XE z@r}S6Wyz$JhRCzjIhTilGiG+AQ~PjsFL_u!U}l#})^$DP5~`Wm$8*5@$(2-?*?t;m aHvPYQZ4sPMPjfc_0000-d`XF*JsZ&Haj@_LK#t%X>xuRn-hm>y4j7A z68J8YM0qm9h-!}C+ zfxCh8iF2$57D@i}8|j#ZighFC3$&et(R-4j?UW05eEg>(Z=$t zfu8|=8LtmG0@#@Py|(7HF(&}&o?c7cF*S9L1s<%h|7~lWE!n!()^Ol7Bp+?7tD>+3 z7y#xIhucoTDFC+41x^DN9}EWS$Yj({cqu@gT(>#xZ#*z3G=DH@GwE^4#WmQ>C=nE)w+*05ZV9?e~TW=4Y!QyR6IPAv4(&vfK|2@+M1Qtnb2x3N|=Rk27u0t*F~9!uL8ybmjG*l z8Ne)H1L4?LW-_yZiwGlK4LqE5<|Lh!z)=KT7eP@)xm}WP1$L+Yd&NKpK$D2L37DQ1 z-9|vjT;Nq;8gM^wDUlD~%r0tP4VjK~fO+YHI?13<@*pk9RyQLf4PaBcj1|CITOXv0 zX+@u9?PBd?80i>A!P5&|nDHkN1}OrdKgpbz$^5>eGm(h29M-1;R0}`J`)yrIIQIRL z*A!zNFnpOg{guGzeZUgQucQqXa<39l01>`-W(R8}b2;Iu5YTcM5izyM))e4PU`obr z5YScRqs_oiCHK*qa;F^&Ao)+g;*38v@s|TzGJX$mJ%LOR)$nr4a|1lj$UHiMs40%7 zbd=8GDUy?|CkP`i05;f~TZ|Q#Tzz0KN`=FZB;T8Old|yvMnc-uHe?p0-`&79l0O56 zD<@m6lKG>Q)!-|@-&1=s<-7FHk_W1a2caAmPqg)btvNI?Xreqq*Ca!&O7hzhzY2MI zByEwrO7cF+s2h?zR59KV;ouzvobLdhv2{F@hC7mx)YIgEd09G<@SK8nwjoo@y*GR4 z_GfbAo2;GFiCKGqfaCWnGCKfl9o}LtfL!KeA}?)XWJDjVTHOjD`9|Qd6sgTpPhJIo z)z_-rK?ZkZ<<3Toyw zIjzasC#U(&tH>;~bvjW*w4&oG{RR;si!$CzSvyCB;T)PG2pImVlT+>-lafq>GGH3E zCRgMp5)R|k?*wj^{68oScUJn{LwM1ATeEFV&GO$eqTm=Ls;9@&#J`jLP#ZFN(k~4A zHgQ?~z~W|jpV6hjy3{_3D0CjJ$jkuV0Dk-x^I&T;JAIbRLz#hrfBH?>OUjT$nM&2;n Rk#hh5002ovPDHLkV1h-}^uquE literal 0 HcmV?d00001 diff --git a/flir/cache/83/21/8321953f021be7d37282f95adb67565d.png b/flir/cache/83/21/8321953f021be7d37282f95adb67565d.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3fcab0423d3ce0eb346552136e1ab0fde56011 GIT binary patch literal 1109 zcmV-b1giUqP)jVtjBolgh?2{QxTb&(U0Z$1jk3@Z=2dAGakh0mHh(i zuoj0#|CXBl3&PxB(aAMLd8pnXxaHD(O2JU*jQ6#H5H^Q0;xv zv-fA!){MGGKjvh{I9!JlFogGTO+>aC^_UXjmJZL1?=cp0@dVDP{30b-GchM3*H@k9 zQkq3H12p4ley?MBLH1^l=5?BFX@2PZZ^u}gB|U3D)4Wgf3(bUTXP`%Bpsv4L`Drv; z(R|#I`L**sqRQVx^HxXZOPV)nzNI;^qtlKhG|OqOj+iTAu09-q+ahvZjdV-vYlIsd ztpLxpIJqZcH(^ShFUAgd6gzf>s{IjsX3WISm=}=?af_}P9wmS}O7e~>2Uen zSQe4bb##C4=slo-=Ot(qe7H-g({>^gWtnk5&Z>6Kum65h%H(yW+o(Q0 zj_ol&B41N)WjyY|^F{*GxL$`Veb>Wx<=VO(jbm|n1s=84wX_~n>;A)7iHAG;_hX5Y z1?S)yERV=G!ecwO*5N|Df)zLs3l&V-MXBd^TZdbxpHWh3xL!a@6Kcdp&_??52c3DV ze*_Nfd|^ySuE8nF#k>yXyvLFMOx~=N)*up5xf+(*Ul^ zjLW)CpQ+^g$;!>P)UVXY2+EAnJxe!t<})&5BF?M)k9fPzx9Z3ZDbdZ!kH&1Jj@Nda z*-b%rN*S%L^JhD@F2;P!!}Pi~Rk?t7I&vFox-TNvM&yeXXj+i^314A$W}MaYd~88$ zjgsnrM>;A0NwUDrgQE`+R27G%Z$D87OsrQVH=^E?t5U%h+Nh4?;)I|0Lv8- zxuQpX47Q2Ll|6c=DG^m2dK(92#&jG~ZT;z)8Id<;#v8amse3pZw=3Odijv}^@pMGK b(CYpHFgc;nzFdAD00000NkvXXu0mjfwT>_l literal 0 HcmV?d00001 diff --git a/flir/cache/89/99/8999ec3a758c0bb630e10a4f3764fbe7.png b/flir/cache/89/99/8999ec3a758c0bb630e10a4f3764fbe7.png new file mode 100644 index 0000000000000000000000000000000000000000..a21b6a225e7cc966f90761c41a763f390150d58d GIT binary patch literal 800 zcmV+*1K<3KP)>x&^F?xRW{uyqDTu1B^M%Xj4TMLcqa&k z{=j6lh!&AiG2tc*ii*g@{+UIYM2XhqY4PqbPnl^(h1_&D@0{=V+!}Bls9|s{a#KT?kR7lm~Dpu8oM_Dz+6b zM#P~ra;L=4*7`~*L)e4YaTxos1#2SW@cC?h9(D|iv87NQeSL?~l zQLM+U*j@2!x)m;^^wvYKz~+b;ulPn>g)ea__TniV#Ep0y!`L>-S~m$(*#k9e=iY-)H7yop^U z-D$7m_4x{3?cguq&CcGl%8Q6UJKX--mUC*{i_ucbvZ?Ue9<(j~J08Wsi1=m(PA{Ir zA#A``n2Ss5^X1CHmD&NuWbt&w4B(;;zM{kR&o-|P!3mpNHICQ#K`gB6r^3f-yi+?w zH(^65W!?;&UOb8GaDP4EZtW0SRd0TiX^ZwuM2yveeHxBC@FBKpf7FYyD>x&^F?xRW{uyqDTu1B^M%Xj4TMLcqa&k z{=j6lh!&AiG2tc*ii*g@{+UIYM2XhqY4PqbPnl^(h1_&D@0{=V+!}Bls9|s{a#KT?kR7lm~Dpu8oM_Dz+6b zM#P~ra;L=4*7`~*L)e4YaTxos1#2SW@cC?h9(D|iv87NQeSL?~l zQLM+U*j@2!x)m;^^wvYKz~+b;ulPn>g)ea__TniV#Ep0y!`L>-S~m$(*#k9e=iY-)H7yop^U z-D$7m_4x{3?cguq&CcGl%8Q6UJKX--mUC*{i_ucbvZ?Ue9<(j~J08Wsi1=m(PA{Ir zA#A``n2Ss5^X1CHmD&NuWbt&w4B(;;zM{kR&o-|P!3mpNHICQ#K`gB6r^3f-yi+?w zH(^65W!?;&UOb8GaDP4EZtW0SRd0TiX^ZwuM2yveeHxBC@FBKpf7FYyDarT!e~9qzo~njJQ)8LPUvLqzgB#+#JwQ5{&83A_8X-gJ7jt$Q&1L zvW2K1v?*{CGKiW8DhLykh=@d(xDXXT7w>uF^+WL6c{a~I_nv#sbD#SRO;1mI-7(bb z_4eUw%)@nDz@M1IV!V%gnfc8i4I^R{n=B#L3RyznOU+&#)ac`2JOmB4Q*We!~$giHOC6k{D_|5fM)?AJ;Q;bwqrQDXhf^ zw%`UH7x{nce14ss#%QPa9W2KoT&tS<_yOZMm6`WiCE9pgxF{k5U*T3}UagBC75;>k zIDxmY0()_|2Ggkcvqr^P9Mz~AxK#C1?cgqncD(@WG^Sh@5eKju-*##P2l2G>(K6!Q z%5P`pL}qTl($2j<@OvpX{4x>?3h!p-ZtTYuT*}M`odK{nGbeDlug}85hY_(cB93d+ zo2mVAyonw7_yrPWqPEeJ!dZ;rL_|#X5x!dZpzu-Qa0f498{Vr2>@U)5a15LKl~~mo zusk9bVFNzX{O=yk_xxW|xU4UqD_nuUHRe59WWLmxm&VMy`$>#@F=lJPmZ~{Zq}uo- zBHq9|mA@SkV;Y%n*4{IGpi%2i;bf=Bxppzs>-84mJDk-R=aI(sWA&mrjkF))m-2^* z*oeO}^H!IAL=59NrZRITA~s_yCQ6YJT+Ym2+dIzz4JWEUcLc1y00000NkvXXu0mjf DvC$+I literal 0 HcmV?d00001 diff --git a/flir/cache/94/e0/94e0ccde9de3bad147222759c47368e9.png b/flir/cache/94/e0/94e0ccde9de3bad147222759c47368e9.png new file mode 100644 index 0000000000000000000000000000000000000000..47736494dec44f30f801fd49063d2163c0532fdd GIT binary patch literal 823 zcmV-71IYY|P)00091NklPr=6e2`P zB|%VK#K(uFW`u;8OcJqKE+$f2Y#|o0EU|Pk^OrvhqFr>++|0~7Gtc+Dr|0Wg@bGf~ z$I+7p26tdD-pMKc-8l$N+lT3#;`F%yg{Hj{*W(*3#KN57>;C~~(1&rniILE>-(nJ% z;bQ!X3q#Yc!;@H&Q#^GBti717@8FhyOC~h!2JFl!9y=G}ztnXgiui%K1$p`TU9>5EgTp!-U&)9@D72|59A`akA=v7K!Vn!x;?fe>PmHZ^8FfTOi!kps%x`*A^i66VLzQkwv@H9aT z;yWcJoiV4g$SF>B*$?4@x*n_Z0z4F&cCglJ=WH2H;bv^}+#B++wcbD0bx(H!CG|usU*7soCM2;za#_3@LJY6SmbLolw+fY2`55 zA>LQX^(m>mB&T>{MwA!fo^DACO?!C-ybE{d6h}kT&Q?_CysmqzI$6jm9>)!}xff$o zPI0_*H>Wrpn)X=z)~3+3-(!|i9?LMEQ|!pIe*mCy{_E@NQELDI002ovPDHLkV1f-O BjMxAG literal 0 HcmV?d00001 diff --git a/flir/cache/95/0f/950f0dc59d005ab3ea279b86ef12f6d5.png b/flir/cache/95/0f/950f0dc59d005ab3ea279b86ef12f6d5.png new file mode 100644 index 0000000000000000000000000000000000000000..48f708ddcc38122f8362fca3a7a11735587d2eec GIT binary patch literal 958 zcmV;v13~RciDv^CP>rP$mNIQ)EW_%5h(8~0ghm@RLj$|{aCES zW7sQ|$TmESuTkO2ynmTg9%Jx0HsX)Gb^%V}E2&>xi5d7P+wa5WxDab%8D1!=`kTMO zUzv$EGMF8*Czjz6PVe4(TJ!bjmr`FQ40X%qbv%(V?!a<9o%i03?^?F&GBG$fBz-4f zJ0{}J9F3PVfxWmMyR+@8qN*nigMUd&zdLi7A(f7yq`z#~H{vh>^S-7F7>dm+|uMJ9BQ{WY;u?`G_-{VvO=it)J zW5L--f9rJF9?Nhj7L z{2I&98_O^tWl|gSH7Nz>NfCX!wcaZ|Zxf{yZJc^md~A>$_Y6MBHXTwgIfL|IYwSaJ zQPpdus0?H$^b}S7K(Yw%wzs(OpmFgL|A>}c7Z6JK)TU3f~0 g_%!szGE|MhpL1_6<#U*nE&u=k07*qoM6N<$f)ozX=l}o! literal 0 HcmV?d00001 diff --git a/flir/cache/9d/4e/9d4e7563e88c4e3065793752dac9933a.png b/flir/cache/9d/4e/9d4e7563e88c4e3065793752dac9933a.png new file mode 100644 index 0000000000000000000000000000000000000000..4376a1bd2087550aaa5a81fa51a13b7b56d85cdc GIT binary patch literal 803 zcmV+;1Kj+HP)SUTW<^1tQ&?z7_|QW_8bs7f z&<90fUr-!Qkr6T2OUS7xs3sXg#3Do@M22DLVXw=aR-TVJvd+&ArXRWnQ z-?BT_``_sA4vMNC!i^Zf=O}TYN#z%3D7OF9`k|=moA4&S!;%>Pfz@XssG_PL$9-7Y zr1G!8w&Lw3mD9)h_QX%t`irVwf%owd4&rNU!MY}u2Ty17)375L!+25Eleia~aSS`5 zsOo`U_^Dc7I{Td6xE&ktQs7s%6)vi}6Ng@m%}pw21Ah#c;}@KVJ$MoOaRZ*mCTv@z z-*!0*FT)h}VHMUyD2FkG*D!hl{CiAbL@x2Wnp7TX#oLqXU~O!6eFSw4ZjEvg8S?|4 zjt#yos(Limtd#r8vlz#_I6ngX6pvu=B>X1uGcE}KK{-2TZ_sIR=KrcLmgy-UcXE0J!_3{Nc9XSQb>Q3QH?7)vGup;>1t3aESJQ*gWW|{kN3jm@*tP^-*N`-Z&LZ&0-TPV0n^xs zUokAdnPEBQrelLk<+sVacv`^>;j9+Es>KZ~)-Rf1*M=j;ZV5br<*~jOJ{j{Jauc1v z#-gf67T|R70>zU2)c!Z(gttSD%7kSBPVBi4Msn zIVX$uN|VaTXxRV4aSy)1R{5n4VrP@eKNsNiwZANjs$Pnh@o@Xo@t z_$V&IXH6<+i>kf~Q%x!l2Y(&D!i9_RYf?EE+|nkMpR~kLRP}ARxk=^S3*kjoKP2B$ h+nQ7!I?lf*_YaZ+Ejq}5C<*`o002ovPDHLkV1hzgg|`3z literal 0 HcmV?d00001 diff --git a/flir/cache/9f/ba/9fba3e2486a08ad7469b1dd0dd605c7b.png b/flir/cache/9f/ba/9fba3e2486a08ad7469b1dd0dd605c7b.png new file mode 100644 index 0000000000000000000000000000000000000000..8f420a6ff7c064979864fed9f89a40d153b6e9f3 GIT binary patch literal 965 zcmV;$13LVPP)SrC<=kyI92XpyCa+F~y(v~978Nz;cj2e0e%Ja=KMCGh{{%$z&(KQrgdnR{=o zC<;!X8f{rHvreD@rU2IiZIT8iDzNdu%q|4x0bc?$fGLtTjEA!=i01>FfdOC+upRi$ z%$7*nJ)Q+72yX-D08@d#fHOuLnAuWbF>s}%;VQzqnY9C(g7jA4Enp@vANc*Biu^yu z0$^Rp2byfe5UD8UjfJr0?w0|dXHsAZ&<#;uTIDHe2zQ_C?%VuWYbW$v*`DmI}VY-QNqJjS+{t`=S97%To?}S|^a09S2^!=rE zJ_fb|uUGIb2KI%|btUf8Tksu;xw*h2z>A@`M@414P?6_!fI4ZD-UU{1ES5@{XK9k{9#*Z`?%cgNiBG4P!q1;D+)jgopR_|5}X11AH$W;VH$*l~QM9`q4#s-%-* z<5ozjNjihyN+6@@#A9b=0|?bWfMZ nIQTEcIiVO!o|P4K0ttTunao8#Gk6k@00000NkvXXu0mjfb8F3L literal 0 HcmV?d00001 diff --git a/flir/cache/a4/4f/a44f01132425d5acacddeb5ff1810089.png b/flir/cache/a4/4f/a44f01132425d5acacddeb5ff1810089.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9d38519eb44107605fae80f53b42219d589795 GIT binary patch literal 865 zcmV-n1D^beP)y-h0009hNklGGi&$VF=&j8yu|TOYj0l@Ce3G>KeniIwF5K-Ogsl zb66FT{odMauffLZ&@x=y=#Jq{e1^nQOs=};&ye#Yn2#UvWY4z&yn|`FK$eZ0f1pNv zQD#il1<+&5Y4NxsGbUmsR$vM)ZS^Mth{)UPgw>6HOm`xK#;#;W!PH9asq(N7a24yy73*}u(P(Gm?r#wh`w93aR^CL!eO<%rl_%A5GH{(Ajw^9DA<8_pUjcz{W zCCc1p&T+~xWlb}_x9&BW@=C+6?D>dM1H6rM>u*zy@L6oejwbS(PjXuD1kS>@bv#tL z{&YWRPI3rqBXS9Lwu?mM7=CW3{gppFZofmBFB+$F&N-_ypP9mb~S!om&NaziBoV_ zmD_%}A~Wu8oZhKRM2`_&WA-=zeM9%Cx7);qYLnFRS608y!PG%r=qfC1jP~Mk-DB3` z;mjCRr+RF~i&Y-Oa=hB;=jm>m9#1uLo8?)!p&4J;$nQ1sGF|g-h{%J3%$S9jn*|SI zadq;Z${)jF-PJkM-{sP0@u=?Bnir9u<1uW|mBiAz{(dZu$c>FNZHaEuB?FG&q0G1d zB60&(HT!Lj$mKABvJxL*UqqhBNc~T=1|MR3L>{SpZ@;HD-YJn8Q*;jytR8Ql8TVp6 rc4G-{!ds_$*)wASrC<=kyI92XpyCa+F~y(v~978Nz;cj2e0e%Ja=KMCGh{{%$z&(KQrgdnR{=o zC<;!X8f{rHvreD@rU2IiZIT8iDzNdu%q|4x0bc?$fGLtTjEA!=i01>FfdOC+upRi$ z%$7*nJ)Q+72yX-D08@d#fHOuLnAuWbF>s}%;VQzqnY9C(g7jA4Enp@vANc*Biu^yu z0$^Rp2byfe5UD8UjfJr0?w0|dXHsAZ&<#;uTIDHe2zQ_C?%VuWYbW$v*`DmI}VY-QNqJjS+{t`=S97%To?}S|^a09S2^!=rE zJ_fb|uUGIb2KI%|btUf8Tksu;xw*h2z>A@`M@414P?6_!fI4ZD-UU{1ES5@{XK9k{9#*Z`?%cgNiBG4P!q1;D+)jgopR_|5}X11AH$W;VH$*l~QM9`q4#s-%-* z<5ozjNjihyN+6@@#A9b=0|?bWfMZ nIQTEcIiVO!o|P4K0ttTunao8#Gk6k@00000NkvXXu0mjfb8F3L literal 0 HcmV?d00001 diff --git a/flir/cache/a8/74/a874399f2b39583224fdfec1781ee2d7.png b/flir/cache/a8/74/a874399f2b39583224fdfec1781ee2d7.png new file mode 100644 index 0000000000000000000000000000000000000000..dfcd620a110bf7eec9abedc9675ae1f3b647b81d GIT binary patch literal 960 zcmV;x13&zUP)|bFf5c6Att>luz~BzKr4it5Fxb(n>|Ik3^)Kf0JxGkXBo1RMiS0gHfccOUq-37Xjw zV2!)KG*_D%pdV-hwgF!QW56VE9Own!A%SZHnt&a1@cS$<18e}c11J9rprAE#jCr0a zz{yMK47vN4X4U}wPAbHu=xX3P;EUitG_wk@7MKsb>F(z)=D^HaftP_>f^Ts5(K*Bh zNt-22OFAOyH_cMNq!CG5(e1lTm=z zN>DYxjllbHap&@I%*84?A)5jQfd=4tpbr?Y%46KjRs;6~TS?2K z1Gp)2*$BK{2CE@eb|27AsyslgnKfofmEg+rpTI=0GXbaq90YpJtR1M!%y&ergTT!| zC-7^?T7kDnH@zNsz4Xa!_2&bJ!)_Jn2A=_rM&7Rw3#9~g7w{;sm-KBasUrtvW_8)Q zh4ftmSY~F6B3OMSGzBck%*TNjNNuu~bR(~3awo0-<^WI|?}y{r0{j$(*dO4wk-n>t zy5QmS-m+~|AA|pQ41J%ZPD!;PUmXKGCh0&dkptPVPRC$x$OgUC@0YYt(g{gDSfn1MyeLZW2Ie%S?U7r06um1sj6FQ02+bI-TiDPy2s3( z2A%@G0rtB4RLs*TaD}^%XMXM_>jrm!&dlBbUIYqv{~(X+?n7p_g4B}T?taY7HUYPj iW~-CbzDM)FoPPlJ=kN8NP$*^q0000e*x{SoAM7m2as*5-s zORO#?lR2h~6sh!fFPc3O_J&zOk zfcvevymvx)-48GkCXUb$vunG ztO@3TbP2m+_JyH1F@F zTpK3t2*R`IR%}CGb<%AW(a}IYi{A=wJ43A}O0yN{3UO}`I~}lHxQb=?sPMl#U|*F2 zwWOuBEgZUm*Jx9C*Nzv8HQ0!;Jc;L{G+PgO62Gl9DoV4x*pnym;V8`xqCxRXd+{|- c;y|mS@#sB~S07*qoM6N<$g6vEDV*mgE literal 0 HcmV?d00001 diff --git a/flir/cache/b2/6f/b26fc7b21ad5169116fca87a6b71398b.png b/flir/cache/b2/6f/b26fc7b21ad5169116fca87a6b71398b.png new file mode 100644 index 0000000000000000000000000000000000000000..d04ee3b74238b6beff236ff4341f81892c620c49 GIT binary patch literal 526 zcmV+p0`dKcP)>;Vq*4ARmX^f9!CG3%Y8=#(ib92A<= zI4mtKEeBCT{vDQs) zJGc=M6Dg$@^k6(9CjX^qBL;9DofyQ{TpPjzET0QeN@*~qv}!KcCLF`}O73Y&sTKXW z5D_nC5o<=mas0r!*+d&^wVIStFCOLG3LM0d{GG57Z?FXSa4};y*E_=W{ogwt4u zCm6?MM2wY_!c3)+v)GQ8n9jsoupgtjiI$Arjgy(U3D@xjr*J4^)}sw$*hb-LRUEG1 za~2wih&_0iYa6fw6FFWM5u^B(sMSLTU3vhWnT z72D8Pope)0bSRTg;kUxu&RpwBDJ@1GUZsMqW5`OsCo zM!UkhrFgDbgS8lrh?$hqYKVxpl}4qMc422k97rkcL$l(S_TpSkF3+) QO#lD@07*qoM6N<$g3z$}$p8QV literal 0 HcmV?d00001 diff --git a/flir/cache/b2/af/b2af7ee811eaf4e0ac39e478c1a1d8d0.png b/flir/cache/b2/af/b2af7ee811eaf4e0ac39e478c1a1d8d0.png new file mode 100644 index 0000000000000000000000000000000000000000..a702ffe744b64aaa3cb34dc4d62f635e07f4e0ce GIT binary patch literal 4815 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 literal 0 HcmV?d00001 diff --git a/flir/cache/c9/1b/c91b0e0a27be07ee188f1a2adf365c6b.png b/flir/cache/c9/1b/c91b0e0a27be07ee188f1a2adf365c6b.png new file mode 100644 index 0000000000000000000000000000000000000000..b6ad506c0579ecdffc95ca688ed1ff169b1475a5 GIT binary patch literal 620 zcmV-y0+aoTP)<<-nxk!FEEzTVLh}?-Zn|Yo&@1JMpea=+Zb^cFr&j4C$ zOYj&jMa0#r?Zh!Wh&7mvh_~*FAbf?DCFFY5KE>NuT>ObUd3kGXKi-ds%l{<^&R{(j z6@L}`@CxQ}{tgMb7Y%!G9fyW*QUQAB(&v2RotJc2zD zF>bAG!ZIAk3QXfk{EjVny0-sTcO8w0-7@om%-o!rGnx5UX8w|y2eOYYGj|j|mzk&Y zR_yG$PG+vo%x^REN@mVw=EcmMt+R$$pPB3a#cvdTr|w(cb)6Bu#wR$1kMRaREA^W& zF1(^9^+oY#D$n6zz4`a*eK=Rs8sa=I7am8%8T?)RwBAQQ!U&(2fNS^_PhqwePrK!_ z?;_$PzAt{Q^6JVz;pf6@aCJh^Snm~Bs3*R!_y`}i*4EN{VRxzAfY++aHzy9ezw%6L zZ8@H;?v7M_=zNuaQiJ%LxLJGyb`)MzB8JJoj+v?(mH7_Vf_ZGjixZtaRCp>!0r|w&G+& z%)3pr)~2h|F%Cw=Le&rJ|GxM1z7i4NOzhi+=OSX)Q2PfCwjV_X^-tXZ0000mhj3Kskn8>gfbjZ+%>OyvvA>l=+MZQ!=2T64i45CCLOk_lOQA2-6 zLg-CJWETl5dV@$Rg>+VA!#1-)bNRA{rRlz1Jm=S*b+rp6)`1`AIj_HSzR&YJ&u>am z6#U<)@?RHlBdA&~%&ZA`4rl>}fG(ge)*FD6z!_ix@Upufxt@iX*?=_x&3BE(p{gU=eS|O=H(qc(#C9RayiKL&x`3Fh0l2%KaBdJAFLlo4QCGU`Q zK9hUGr#a;AXtt!?VgEK_OWG*ua;(qBdrNAM#>+;oMeO0I?dQz*prjWw`2bmBNjj#q zD_@6vSyF4DQPN*Z$o7{$S>qQa^(djJEJsb)pUCvTN%|w!bCq_tqi#*hBD+`SEWFXSqKyPpAW0p12404{{R2ACQ4 zOIe<$Ndo}jwag#jMDVG>N6c)gne7RA8Do?Cgu9Od!yyk=NJF8d{iKn-3V4Y$^#-D_ zl8yzx82l>yGkSZX&^5rmEM}PTH0ti}08Y9t)y4!6=t@G1oHB*y>Djo zGvARaupO92+MNcV8|V!rhJhD=d09cTgWnpw#?0!0cY!A0c<{%vm=e_z`HGoMclUGA z7-m*mI-6Nz>}(&<7*9V5{FrMxvT`R*thnZD?b&-RxEpzt~cRvk$6Z(fpck58d zL*@4{7>YJC>ja)B9f>QEd>Sy@-3J26c|cnLLg=cb`|La5ao~!(_lB)8?wNkzW}udY zei>T_)B`uU`=42(r_5{#um{-g?k6)_TfC>k-A|d>w$S%YnT$WQW;P4>kp#{wq`#q~ zq@l5Jvi{K4lN#DZ`cAt@18oz)q}(Y0GusX9b@vbcZTlPZ6b!YqF5!3p00000008LNklvYjB(0NlQqp5d7bI;eiULXVB^{EqUD8-dTSDG1 z^U)ybYVdWTUmCIAh2PqcU(W8ml=Llp?TEN*B+Zc2P!t74Q9ytkDyb&BJV;Wtq$WvQ zGWjk^&B4EsbRdGHJC)3~62Myn+^UebNjehz(a=qn^d*b2CW?~idBkhYfjx*c#sWiuK_P1gHUUe37T^|e zC3Kr9AK@~f$;|o(jqVxJJ1gcK$$;wYVwT@F&KVy9KEW?%obeFtg_9)>?P(Ot$X6&CH%e othHwL0H~%Mk7+=syQlTccVy%5k-@J3TL1t607*qoM6N<$g5jQSV*mgE literal 0 HcmV?d00001 diff --git a/flir/cache/d9/68/d9687aa51c34f2134bba45288f6bd2ff.png b/flir/cache/d9/68/d9687aa51c34f2134bba45288f6bd2ff.png new file mode 100644 index 0000000000000000000000000000000000000000..b6ad506c0579ecdffc95ca688ed1ff169b1475a5 GIT binary patch literal 620 zcmV-y0+aoTP)<<-nxk!FEEzTVLh}?-Zn|Yo&@1JMpea=+Zb^cFr&j4C$ zOYj&jMa0#r?Zh!Wh&7mvh_~*FAbf?DCFFY5KE>NuT>ObUd3kGXKi-ds%l{<^&R{(j z6@L}`@CxQ}{tgMb7Y%!G9fyW*QUQAB(&v2RotJc2zD zF>bAG!ZIAk3QXfk{EjVny0-sTcO8w0-7@om%-o!rGnx5UX8w|y2eOYYGj|j|mzk&Y zR_yG$PG+vo%x^REN@mVw=EcmMt+R$$pPB3a#cvdTr|w(cb)6Bu#wR$1kMRaREA^W& zF1(^9^+oY#D$n6zz4`a*eK=Rs8sa=I7am8%8T?)RwBAQQ!U&(2fNS^_PhqwePrK!_ z?;_$PzAt{Q^6JVz;pf6@aCJh^Snm~Bs3*R!_y`}i*4EN{VRxzAfY++aHzy9ezw%6L zZ8@H;?v7M_=zNuaQiJ%LxLJGyb`)MzB8JJoj+v?(mH7_Vf_ZGjixZtaRCp>!0r|w&G+& z%)3pr)~2h|F%Cw=Le&rJ|GxM1z7i4NOzhi+=OSX)Q2PfCwjV_X^-tXZ00000pkPCZN_{Jg z=A{(>p+t>L{=uY&9yA=aGI6G|Da6of5{Z@%-~Q@zoEg!4YQtskyUy9`tbO)5=ia8G zDEPlwlkK~J4&XS@03HTD1m;WH8W9cPj{MA#^#08(5E1tRGn2m^XqU9<_LXqGHGqS_ zr@)WE_duJZzk$UOF%kF(_!Z~_F5JQz`+>E!HS~5_Bh+WxwHkg-^+Nv?VTBKD~h6; z->|*JcBkzziS4%it?k!sud&@>d$a8}+b#arX4(Ec`dEBiD3ikvsy_Q@2{WxLn*6x&5EV%ytnU(EQa+=R*+SyWH* zy_ERZnP=PEb8IBe&KloOE*sKQ)zYXn?O^(+fo|aK{5~#ybr-tw_A9i^844bT}8t-$ic*8-P;E5O8vXdi{Mug3QUZ~)j@0gWMp0Aql6fK`-t ztFlw+r>Fn9Ha;W$mGtXV>;d3(M2t=R3@{hC1U#7YnsaO;@H_AZa7I%9D4aWhcY&{f z$AKx7jkvC;6SerTq(RE3y|VM^&!)eRvSR?Jhwu$bIwxtiq|boX#QP~bvJ7~I@G0`R7!Y7>X!Yyo}%0(dB~>Lk%r{iBG8M*t-K z)5eH+Leh>Q0*Qz=;KeL@wWPs_xQFsbygP;TOS&8pLM>&`dL_5 z7y0{_8>=fE3+%xuyoHt6f{W;v5_>Xy_Fw6QLS|wLUP0N?FAUvfC)LTy>Q?N;2-e{i z9FT5iK5oZrEuX8A5PXAkq9wAj>dDILYrKc4Sy@fG+(2WB2@^NtY3#>W*oXnluZ#Rt zd|(a^htJvo@BwCHWnJXE;@qb2AHkA1zpXCv;jFB-;1PU?Kkz4x<57$c+d=fdJV;DIjW;na#!>;t9f`1 z^Kfqfg}bG4z8~B0V(5D#&RD6u*Wgnuj)dO9%aOFtFdb}-ZmwmQJwiJ!u@*67jyab4uS_$>BaP#5`W+#r=i z?$Yg!#niB$Z^c<74FGu4=xXST^}1Mxva(u`mDTpxFLG&e_tix{A`uD$9cd^uvRfM2 zOYy2y7X1ONkzZo{E7ptrGkOmP(B;x?HZo|mjMPQGL+Y@zU+wC=H8a!Nj0c*E3pxrpJ0ytYfpXnk@B04}OhxS<9zk zwPC)KmDR+$$j?P$va%Z29L~zBJ8t%b)H~fcDUp0kD)FYLS4nScL;U$pUE~Mx1a8At ziTR#zzArwUwE!-OBo?%EkGs@c^MZ&I(z7toN^ovFj?r?L)MJC#l$BKnDV{G>@Bjb+07*qoM6N<$f_9heEdT%j literal 0 HcmV?d00001 diff --git a/flir/cache/df/54/df545fd22a1cbd4ac9aa7968a41670f8.png b/flir/cache/df/54/df545fd22a1cbd4ac9aa7968a41670f8.png new file mode 100644 index 0000000000000000000000000000000000000000..d04ee3b74238b6beff236ff4341f81892c620c49 GIT binary patch literal 526 zcmV+p0`dKcP)>;Vq*4ARmX^f9!CG3%Y8=#(ib92A<= zI4mtKEeBCT{vDQs) zJGc=M6Dg$@^k6(9CjX^qBL;9DofyQ{TpPjzET0QeN@*~qv}!KcCLF`}O73Y&sTKXW z5D_nC5o<=mas0r!*+d&^wVIStFCOLG3LM0d{GG57Z?FXSa4};y*E_=W{ogwt4u zCm6?MM2wY_!c3)+v)GQ8n9jsoupgtjiI$Arjgy(U3D@xjr*J4^)}sw$*hb-LRUEG1 za~2wih&_0iYa6fw6FFWM5u^B(sMSLTU3vhWnT z72D8Pope)0bSRTg;kUxu&RpwBDJ@1GUZsMqW5`OsCo zM!UkhrFgDbgS8lrh?$hqYKVxpl}4qMc422k97rkcL$l(S_TpSkF3+) QO#lD@07*qoM6N<$g3z$}$p8QV literal 0 HcmV?d00001 diff --git a/flir/cache/e1/9d/e19d7a1ec20a544816f3130da249f9d4.png b/flir/cache/e1/9d/e19d7a1ec20a544816f3130da249f9d4.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4f4689a865b262c55e02e05226dfcbce228091 GIT binary patch literal 3230 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 Qh5!Hn07*qoM6N<$f^TY3jsO4v literal 0 HcmV?d00001 diff --git a/flir/cache/e8/fc/e8fcbe4ee8a8c68dbb26da372493c351.png b/flir/cache/e8/fc/e8fcbe4ee8a8c68dbb26da372493c351.png new file mode 100644 index 0000000000000000000000000000000000000000..86de9abbbcb599f6dc2ab11d249cebccb812f907 GIT binary patch literal 811 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 literal 0 HcmV?d00001 diff --git a/flir/cache/f5/99/f5991e5ea83e80e1225e28b34573e863.png b/flir/cache/f5/99/f5991e5ea83e80e1225e28b34573e863.png new file mode 100644 index 0000000000000000000000000000000000000000..eb23da2bf202318d7251e5ffcde00acef1bd2763 GIT binary patch literal 827 zcmV-B1H}A^P)I>!eDhFvgk%-P(<`#U>Agp_6h&f=tdVEl8J$%8yODXfP9ite-UObOGFx2=*aHQ|xBGGTS28&85U!mX`oWbiC zv`(@u9o?Pec>B%n^?G`}o+OX9`~6AgCfS?h*CZoJCMVg|&J{^s?b{~Vk>tlDFD7{< z$$})ClU&j6eoFFrk_}1rh~IEw)w7?_({N4ZU8^5SFzZmf{v%k5#RGppWt} zc40B5;UV1|+>D>`3D#q4(?5p8c)20F2M^;0{D9fInVO=j>bYk3Azs2;ScQ*qC7!@0 zT^Eq#&z9+yB=eJeJ&^sfB=-!+Ynxt@>`XE}$;Kp`lKe5CH?^VO8$fYu;~z{iX+U?R z>Hgm2)k)?gS=p+YB-bX{-uV0ah#zX1o@@MWyoQ5V;QZz}P-}f3`C47UwNT1uJH*fV%TH#5)b zR_!ve}%334>qGQpyZ$#=2VTSaYxvqqWx4rIcaJueI(Q4_hf^X07#T z!+(nRY*d8MW3=$Gx!{ch*|(Z}M|EQEPp-l(M76GON})HsSyJ$uFfW z$4*@pm+H3GaIJL~=X>z~NZ;ZcEYZ!-3|%{6T&rA4^bg0Q@;z($cN72s002ovPDHLk FV1jXZoJKLBoeV001*PO14aW+ zx%;w$y1N3m0Vlir`hxOtz))aOt!)bWXaafx2Lcbf`-T|fgYG`G6I1-iz|8ssX9B+i z76R?Sa9}O46leq*-F;t^z?yDm26krLRaykK6 z39JW(yZhz&dflS(9>64Eb>#N~u66gfO8TD!bT_j(z^Tado^ED)XWN+BNMvC9MbxciFtq5J26-pF79d>gnk zzBd5pxVv`|t&4zGU~K#?0X6|6kg@z~4P)H|^o{hYT>5~bMzML{3A}=2eJ9e@gF88o z?Sh$I0Gtl&@9ytLUZITNXW3`*00hiGUo|mC$?ge-p>Ey0K>r*9teNepF zkuVDw1@w>f(M6RS!YJPc+zhlJf&CJ=Ey{{80yqUY4)_wV2516~Nh*ZVd>mL2S;v{# z6;XCc&>R$H%eU301V^!@;eG*lDaO|V+)>f?eTSJfn%Q@ODP(xl#kdN%vZSmDnAe50 z9GIL*PXi{z_klIEKNvWzBK>y0ftd{g9s-^QmLbJ{1=!c!m)AV|I>Ga8VDsE7>KqEpjqi8z2K+izZ-Z-GRRX-GOhSUHaB2-pk!zGqVQ3fG+}5+`T>8o)7E|{0aCh@M~Z;Qr52k zSECcbOn3ir)Sm?OL>}VF$oTJxyttiX>}LX(0`~$*{Jafq7PklQY8lU?z>U#~rMW-8LJj)b7h>>(ukwL$Nk2sd_==L;y-=|0)HyZh7#JI)Ten}7#^ zaljRk|03|M=xZQwINDr`cryi<5wxF2{9WVjFV;A|OWl1{$vSN)>${BaRdmn^b##oq z0ol#L!TVlC{bj~K5O^b!ySRID!r6=l6^9MOcWANPS6->r&vJ z5Y&{&n;%R)FVl8Pcsi|_y!LIiDH=rVx^E&wzbJmQiu_J^Tz>$*j~MlPGaC@)`y=LF zhCG1#V@`*lQ^UE)&`&b6i_qq^0eAv95^Vshk%vDMDc< z4n-&C(luAX$HKn1!S|}QJs3F(v!dGSklqoXGkS@M%@twq+hoMDR z_G)7l^5kwrN2be>Cvg@s1cReqdl0`42^F+>5}FB`YHX9oEM(wUBMpCJSP4DiYPobqTuLfjo0fNRa{ z4CEyo6P*-c*BHnqbaD3(I=W3oMj;W(v6(i>G5p^6ZO)YStg%fVHzDtCB&i`9n-rQ^ zH_|xv-$^ewhh+LlJivL#$RxNM?Rdo4TH^b9U>#ZjZ@c?Dq)K)*63jwic^t8mc{ZR> zO|9d3Ai_5`)K!hn0 z{0rSMk0&+g1FGnSOp?AD^XUSTNgTO7z89i!*X!sNLRZPRrh2)TC(DXtY-anF$i7O4 zs>-Uc5Xrg~t(Sw53;_C=*nY-VPHV}Y~WjsTC zzXjQ%@iC95J21ZGl<={l?``qDj1DOD3$m3XkqpY{CkA_3Hs&6o!L85@g$d@P3xN@6 zk)Mo?5QR5}=*ZNJ6#8bi^sEOU4{Qwbp#F(=%fV>J`B~KKooTaAjcvAoyHAd1ai9e{ z8y!&=MBW}~#~XkyDF;S=_R=U}Obhbd6AVZ3F-V_ijYdXc7K&@PnAw!f{MW}*r9)x! z#?X%VJQ;0(wT`EIE?u_EW-k(!q77;u=`r>sWITH!k0q_YL z%Y3(?`1C=*`Dmkl3T^CV^m=5{Eo_MvQsbK7R^S|TTpokGvgYXLKI9m5g?wwOmosEN z5D)S)ZbCYd&tFWr4po)i4=i@~89CnI?x)3N`en$g`#d^wCzwpSxhL}@m(KGX%5^$B z_tn7Hk=J__GE6rhxt|*K@_O98gf~sm&j4gV*P#pL*~q!5b$o?Rjy(LD$75!_NWGBJId2s+ z>w%83pNM{U2j&I8Mxo2RHOQE4KyvL(>RpXN@@qp%dn~D^z134FGwY3HvoZRc9do!4 z$!Zi!Ld-fO1`z$OAPY{6jEs+C*!!MDUyAa z4po)40skrB4Q4hL9g*7+4-X>^#k9xRJIZq?(CN58+C2BTRGfsuM{`lg;tgc9zYul% zo7oVwd4n8*o<%&1b}P|EZo>1jC$C$LFHp$GioUD(UPUKCa+-QK{>tbtjCxm-Mg`iC zthSQxPM!IeY%@E<-EYaH`yuaiY35yLa%*`WaJRe9&D8IKjuUrfkA_ukO2*NMJi@0U zMunMO3M_EZG_LF&8$N_FVpFwxtrMw$hba(^zKyTC>)9Y>1ch> z9PI8(t9WC2?bR4`M+2?y{scMHxaRWfw6gCazSl_S0^lWgUzE$w({D!My;aB=?c?rc zVVcev<~lw;Ftah};;0oJ(;h|tsa18^SVtYeX2X0S3JJ8L*F&$l`(7XFz&_&W)W2lc z@v*{-=;gu5=*dzq(pLy|)UhorMt2H}(5Yhq>FbO-I*Gc+Tt^*s)Uku%|0>-me_$vF Qh5!Hn07*qoM6N<$f^TY3jsO4v literal 0 HcmV?d00001 diff --git a/flir/config-flir.php b/flir/config-flir.php new file mode 100644 index 0000000..c459e26 --- /dev/null +++ b/flir/config-flir.php @@ -0,0 +1,72 @@ +. +*/ + +define('FONT_DISCOVERY', false); + +define('ALLOWED_DOMAIN', false); // ex: 'example.com', 'subdomain.domain.com', '.allsubdomains.com', false disabled + +define('UNKNOWN_FONT_SIZE', 16); // in pixels + +define('CACHE_CLEANUP_FREQ', -1); // -1 disable, 1 everytime, 10 would be about 1 in 10 times this script runs (higher number decreases frequency) +define('CACHE_KEEP_TIME', 604800); // 604800: 7 days + +define('CACHE_DIR', 'cache'); +define('FONTS_DIR', 'fonts'); +define('PLUGIN_DIR', 'plugins'); + +define('HBOUNDS_TEXT', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz[]{}()_'); // see http://facelift.mawhorter.net/docs/ + +// Each font you want to use should have an entry in the fonts array. +$fonts = array(); +$fonts['carousel'] = 'Carousel.ttf'; + + +// The font will default to the following (put your most common font here). +$fonts['default'] = $fonts['carousel']; + +/* +// You can now setup collections of fonts that will be automatically detected and used if the proper CSS conditions are met. +// For more information, please visit: http://www.mawhorter.net/projects/facelift-projects/facelift-font-collections +$fonts['your_font'] = array(); +$fonts['your_font'][] = array('file' => 'test/font_regular.ttf'); +$fonts['your_font'][] = array('file' => 'test/font_bolditalic.ttf' + ,'font-stretch' => '' + ,'font-style' => 'italic' + ,'font-variant' => '' + ,'font-weight' => 'bold' + ,'text-decoration' => ''); +$fonts['your_font'][] = array('file' => 'test/font_bold.ttf' + ,'font-weight' => 'bold'); +$fonts['your_font'][] = array('file' => 'test/font_italic.ttf' + ,'font-style' => 'italic'); +*/ + + +// Set default replacements for "web fonts" here +$fonts['arial'] = $fonts['helvetica'] = $fonts['sans-serif'] = $fonts['okolaks']; +$fonts['times new roman'] = $fonts['times'] = $fonts['serif'] = $fonts['illuminating']; +$fonts['courier new'] = $fonts['courier'] = $fonts['monospace'] = $fonts['wanta']; + +define('IM_EXEC_PATH', ''); // Path to ImageMagick (with trailing slash). ImageMagick is needed by some plugins, but not necessary. +?> diff --git a/flir/flir.js b/flir/flir.js new file mode 100644 index 0000000..a956e65 --- /dev/null +++ b/flir/flir.js @@ -0,0 +1,955 @@ +/* +Facelift Image Replacement v1.2 +Facelift was written and is maintained by Cory Mawhorter. +It is available from http://facelift.mawhorter.net/ + +=== + +This file is part of Facelife Image Replacement ("FLIR"). + +FLIR is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +FLIR is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Facelift Image Replacement. If not, see . +*/ + +var FLIR = { + version: '1.2.2' + + ,options: { + path: '/flir/' + ,classnameIgnore: false + ,findEmbededFonts: false + ,ignoredElements: 'BR,HR,IMG,INPUT,SELECT' + } + + ,onreplacing: null + ,onreplaced: null + ,onreplacingchild: null + ,onreplacedchild: null + + ,flirElements: {} + ,flirPlugins: [] + + ,isCraptastic: true + ,isIE: true + + ,defaultStyle: null + ,classStyles: {} + + ,embededFonts: {} + + ,dpi: 96 + + // either (options Object, fstyle FLIRStyle Object) or (fstyle FLIRStyle Object) + ,init: function(options, fstyle) { // or options for flir style + if(this.isFStyle(options)) { // (fstyle FLIRStyle Object) + this.defaultStyle = options; + }else { // [options Object, fstyle FLIRStyle Object] + if(typeof options != 'undefined') + this.loadOptions(options); + + if(typeof fstyle == 'undefined') { + this.defaultStyle = new FLIRStyle(); + }else { + if(this.isFStyle(fstyle)) + this.defaultStyle = fstyle; + else + this.defaultStyle = new FLIRStyle(fstyle); + } + } + + this.calcDPI(); + + if(this.options.findEmbededFonts) + this.discoverEmbededFonts(); + + this.isIE = (navigator.userAgent.toLowerCase().indexOf('msie')>-1 && navigator.userAgent.toLowerCase().indexOf('opera')<0); + this.isCraptastic = (typeof document.body.style.maxHeight=='undefined'); + + if(this.isIE) { + this.flirIERepObj = []; + this.flirIEHovEls = []; + this.flirIEHovStyles = []; + } + + FLIR._call_plugin('init', arguments); + } + + ,loadOptions: function(options) { + for(var i in options) + this.options[i] = options[i]; + } + + ,installPlugin: function(plugin) { + this.flirPlugins.push(plugin); + } + + ,_call_plugin: function(func, call) { + var ret = call; + for(var i=0; i-1?els.split(','):els); + var elements; + for(var i=0; i0) + this.replace(elements); + } + } + + + ,hover: function(e) { + var o=FLIR.evsrc(e); + var targ=o; + var targDescHover = o.flirHasHover; + var hoverTree = o; + + var on = (e.type == 'mouseover'); + + while(o != document.body && !o.flirMainObj) { + o = FLIR.getParentNode(o); + + if(!targDescHover) { + targDescHover = o.flirHasHover; + hoverTree = o; + } + } + + if(o==document.body) return; + + var FStyle = FLIR.getFStyle(o); + if(on && FStyle != FStyle.hoverStyle) + FStyle = FStyle.hoverStyle; + + if(!(args = FLIR._call_plugin('hover', [ on, targ, o, hoverTree ]))) return; + on = args[0]; + targ = args[1]; + o = args[2]; + hoverTree = args[3]; + + var objs = FLIR.getChildren(hoverTree); + if(objs.length == 0 || (objs.length == 1 && (objs[0].flirImage || objs[0].flirHasHover))) { + objs = [hoverTree]; + }else if(objs.length == 1 && !FLIR.isIgnoredElement(objs[0])) { + var subobjs = FLIR.getChildren(objs[0]); + if(subobjs.length > 0) + if((subobjs.length==1 && !subobjs[0].flirImage) || subobjs.length > 1) + objs = subobjs; + } + + var rep_obj; + for(var i=0; i < objs.length; i++) { + rep_obj = objs[i]; + if(rep_obj.nodeName == 'IMG') continue; + if(!rep_obj.innerHTML) continue; // IE + + if(FLIR.isIE) { + var idx = FLIR.flirIEHovEls.length; + FLIR.flirIERepObj[idx] = rep_obj; + FLIR.flirIEHovStyles[idx] = FStyle; + + if(!FLIR.isCraptastic) { + if(FStyle.useBackgroundMethod && FLIR.getStyle(rep_obj, 'display') == 'block') { + FLIR.flirIEHovEls[idx] = rep_obj; + setTimeout('FLIR.flirIERepObj['+idx+'].style.background = "url("+('+on+' ? FLIR.flirIEHovStyles['+idx+'].generateURL(FLIR.flirIERepObj['+idx+']) : FLIR.flirIERepObj['+idx+'].flirOrig)+") no-repeat";', 0); + }else { + FLIR.flirIEHovEls[idx] = rep_obj.flirImage ? rep_obj : FLIR.getChildren(rep_obj)[0]; + if(!FLIR.flirIEHovEls[idx].flirOrigWidth) { + FLIR.flirIEHovEls[idx].flirOrigWidth = FLIR.flirIEHovEls[idx].width; + FLIR.flirIEHovEls[idx].flirOrigHeight = FLIR.flirIEHovEls[idx].height; + } + var ie_js = 'FLIR.flirIEHovEls['+idx+'].src = '+on+' ? FLIR.flirIEHovStyles['+idx+'].generateURL(FLIR.flirIERepObj['+idx+'], FLIR.flirIEHovEls['+idx+'].alt) : FLIR.flirIERepObj['+idx+'].flirOrig;' + ie_js += 'FLIR.flirIEHovEls['+idx+'].onload = function() { '; + if(on && !FLIR.flirIEHovEls[idx].flirHoverWidth) { + ie_js += ' FLIR.flirIEHovEls['+idx+'].flirHoverWidth = this.width; '; + ie_js += ' FLIR.flirIEHovEls['+idx+'].flirHoverHeight = this.height; '; + } + ie_js += ' this.style.width = FLIR.flirIEHovEls['+idx+'].'+(on?'flirHoverWidth':'flirOrigWidth')+'+"px"; '; + ie_js += ' this.style.height = FLIR.flirIEHovEls['+idx+'].'+(on?'flirHoverHeight':'flirOrigHeight')+'+"px"; '; + ie_js += '}; '; + setTimeout(ie_js, 0); + } + }else { + FLIR.flirIEHovEls[idx] = rep_obj.flirImage ? rep_obj : FLIR.getChildren(rep_obj)[0]; + setTimeout(' FLIR.flirIEHovEls['+idx+'].style.filter = \'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="\'+FLIR.flirIEHovStyles['+idx+'].generateURL(FLIR.flirIERepObj['+idx+'], FLIR.flirIEHovEls['+idx+'].alt)+\'", sizingMethod="image")\'; ', 0); + } + }else { + if(FStyle.useBackgroundMethod && FLIR.getStyle(rep_obj, 'display') == 'block') { + var hovURL = rep_obj.flirHoverURL ? rep_obj.flirHoverURL : FStyle.generateURL(rep_obj); + rep_obj.style.background='url('+(on?hovURL:rep_obj.flirOrig)+') no-repeat'; + }else { + var img = rep_obj.flirImage ? rep_obj : FLIR.getChildren(rep_obj)[0]; + var hovURL = rep_obj.flirHoverURL ? rep_obj.flirHoverURL : FStyle.generateURL(rep_obj, img.alt); + img.src = on?hovURL:rep_obj.flirOrig; + } + } + } + } + + ,addHover: function(obj) { + if(!(args = FLIR._call_plugin('addHover', arguments))) return; + obj = args[0]; + + obj.flirHasHover = true; + + if(obj.addEventListener) { + obj.addEventListener( 'mouseover', FLIR.hover, false ); + obj.addEventListener( 'mouseout', FLIR.hover, false ); + }else if (obj.attachEvent) { + obj.attachEvent( 'onmouseover', function() { FLIR.hover( window.event ); } ); + obj.attachEvent( 'onmouseout', function() { FLIR.hover( window.event ); } ); + } + } + + ,prepare: function(n) { + if(!(args = FLIR._call_plugin('prepare', arguments))) return; + n = args[0]; + + if(n && n.hasChildNodes() && n.childNodes.length > 1) { + for(var i in n.childNodes) { + var node = n.childNodes[i]; + if(node && node.nodeType == 3) { + var span = document.createElement('SPAN'); + span.style.margin = span.style.padding = span.style.border = '0px'; + span.className = 'flir-span'; + span.flirSpan = true; + var txt = node.nodeValue.replace(/[\t\n\r]/g, ' ').replace(/\s\s+/g, ' '); + span.innerHTML = !FLIR.isIE ? txt : node.nodeValue.replace(/^\s+|\s+$/g,' '); + n.replaceChild(span, node); + } + } + } + } + + ,replace: function(o, FStyle) { + if(!(args = FLIR._call_plugin('replace', arguments))) return; + o = args[0]; + FStyle = args[1]; + + if (!o || o.flirReplaced) + return; + + if(!this.isFStyle(FStyle)) + FStyle = this.getFStyle(o); + + if(typeof o == 'string') + o = this.getElements(o); + + if(typeof o.length != 'undefined') { + if(o.length == 0) return; + + for(var i=0; i< o.length; i++) + this.replace(o[i], FStyle); + + return; + } + + if(typeof FLIR.onreplacing == 'function') o = FLIR.onreplacing(o, FStyle); + + o.flirMainObj = true; + this.setFStyle(o, FStyle); + this.saveObject(o); + + if(this.options.findEmbededFonts && typeof this.embededFonts[FStyle.getFont(o)] != 'undefined') + return; + + FLIR.prepare(o); + this._replace_tree(o, FStyle); + + if(typeof FLIR.onreplaced == 'function') FLIR.onreplaced(o, FStyle); + } + + ,_replace_tree: function(o, FStyle) { + if(typeof __flir_replacetree_recurse == 'undefined') __flir_replacetree_recurse = 1; + else __flir_replacetree_recurse++; + + if(__flir_replacetree_recurse>1000) { + console.error('Facelift: Too much recursion.'); + return; + } + + var objs = !o.hasChildNodes() || (o.hasChildNodes() && o.childNodes.length==1 && o.childNodes[0].nodeType==3) ? [o] : o.childNodes; + + var rep_obj; + for(var i=0; i < objs.length; i++) { + rep_obj = objs[i]; + if(typeof FLIR.onreplacingchild == 'function') rep_obj = FLIR.onreplacingchild(rep_obj, FStyle); + + if(!rep_obj.innerHTML || rep_obj.nodeType != 1) continue; + if(FLIR.isIgnoredElement(rep_obj)) continue; + if(rep_obj.flirReplaced) continue; + + if(rep_obj.nodeName == 'A' && !rep_obj.flirHasHover) + FLIR.addHover(rep_obj); + + if(rep_obj.hasChildNodes() && (rep_obj.childNodes.length > 1 || rep_obj.childNodes[0].nodeType != 3)) { + FLIR.prepare(rep_obj); + FLIR._replace_tree(rep_obj, FStyle); + continue; + } + + if(rep_obj.innerHTML == '') continue; // skip empty tags, if they exist + + if(!FLIR.isCraptastic) + if(FStyle.useBackgroundMethod) + FLIR.replaceMethodBackground(rep_obj, FStyle); + else + FLIR.replaceMethodOverlay(rep_obj, FStyle); + else + FLIR.replaceMethodCraptastic(rep_obj, FStyle); + + rep_obj.className += ' flir-replaced'; + rep_obj.flirReplaced = true; + + if(typeof FLIR.onreplacedchild == 'function') FLIR.onreplacedchild(o, FStyle); + } + } + + ,replaceMethodBackground: function(o, FStyle) { + if(!(args = FLIR._call_plugin('replaceMethodBackground', arguments))) return; + o = args[0]; + FStyle = args[1]; + + var oid = this.saveObject(o); + var url = FStyle.generateURL(o); + + if(FLIR.getStyle(o, 'display') != 'block') + o.style.display='block'; + + var tmp = new Image(); + tmp.onload = function() { + FLIR.flirElements[oid].style.width=this.width+'px'; + FLIR.flirElements[oid].style.height=this.height+'px'; + + if(FStyle != FStyle.hoverStyle) { + var h_img = new Image(); + o.flirHoverURL = h_img.src = FStyle.hoverStyle.generateURL(o); + } + }; + tmp.src = url; + + o.style.background = 'url("'+url.replace(/ /g, '%20')+'") no-repeat'; + o.flirOrig = url; + + o.oldTextIndent = o.style.textIndent; + o.style.textIndent='-9999px'; + } + + ,replaceMethodOverlay: function(o, FStyle) { + if(!(args = FLIR._call_plugin('replaceMethodOverlay', arguments))) return; + o = args[0]; + FStyle = args[1]; + + var oid = this.saveObject(o); + var img = document.createElement('IMG'); + img.alt = this.sanitizeHTML(o.innerHTML); + + if(FStyle != FStyle.hoverStyle) { + img.onload = function() { + var h_img = new Image(); + o.flirHoverURL = h_img.src = FStyle.hoverStyle.generateURL(o, img.alt); + }; + } + + if(img.onerror) { + img.onerror = function() { + var span = document.createElement('SPAN'); + span.innerHTML = img.alt; + try { + o.replaceChild(span,img) + }catch(err) { } + }; + } + + img.flirImage = true; + img.className = 'flir-image'; + img.src = FStyle.generateURL(o); + img.style.border='none'; + o.flirOrig = img.src; + o.innerHTML=''; + o.appendChild(img); + } + + ,replaceMethodCraptastic: function(o, FStyle) { + if(!(args = FLIR._call_plugin('replaceMethodCraptastic', arguments))) return; + o = args[0]; + FStyle = args[1]; + + var oid = this.saveObject(o); + var url = FStyle.generateURL(o); + + var img = document.createElement('IMG'); + img.alt = this.sanitizeHTML(o.innerHTML); + if(FStyle != FStyle.hoverStyle) { + img.onload = function() { + var h_img = new Image(); + o.flirHoverURL = h_img.src = FStyle.hoverStyle.generateURL(o, img.alt); + }; + } + + img.flirImage = true; + img.className = 'flir-image'; + img.src = this.options.path+'spacer.png'; + img.style.width=o.offsetWidth+'px'; + img.style.height=o.offsetHeight+'px'; + img.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+url+'", sizingMethod="image")'; + + o.flirOrig = url; + o.innerHTML=''; + o.appendChild(img); + } + + ,saveObject: function(o) { + if(typeof o.flirId == 'undefined') { + o.flirId = this.getUID(); + this.flirElements[o.flirId] = o; + } + + return o.flirId; + } + + ,getUID: function() { + var prefix='flir-'; + var id=prefix+Math.random().toString().split('.')[1]; + var i=0; + while(typeof this.flirElements[id] != 'undefined') { + if(i>100000) { + console.error('Facelift: Unable to generate unique id.'); + } + id=prefix+Math.random().toString().split('.')[1]; + i++; + } + + return id; + } + + ,getElements: function(tag) { + if(!(args = FLIR._call_plugin('getElements', arguments))) return; + switch(args.length) { + case 1: + tag = args[0]; + break; + case 2: // plugin returned list of elements + return args[0]; + break; + } + + var found = []; + + if(document.querySelectorAll) { + var qsa = false; + try{ + found = document.querySelectorAll(tag); + qsa = true; + }catch(err){ qsa=false; } + + if(qsa) + return found; + } + + var objs,subels,cn,childs,tag,el,matches,subel,rep_el; + + el = tag; + + subel=false; + if(el.indexOf(' ')>-1) { + var parts = el.split(' '); + el = parts[0]; + subel = parts[1]; + }else if(el[0] == '#') { + return document.getElementById(el.substr(1)); + } + + var grain_id=false; + if(el.indexOf('#') > -1) { + grain_id = el.split('#')[1]; + tag = el.split('#')[0]; + } + + var grain_cn=false; + if(el.indexOf('.') > -1) { + grain_cn = el.split('.')[1]; + tag = el.split('.')[0]; + } + + objs = document.getElementsByTagName(tag); + for(var p=0; p-1) continue; + + subels = false != subel ? objs[p].getElementsByTagName(subel) : [objs[p]]; + for(var pp=0; pp-1) continue; + + found.push(rep_el); + } + } + + return found; + } + + ,discoverEmbededFonts: function() { + this.embededFonts = {}; + for(var i in document.styleSheets) { + if(!document.styleSheets[i].cssRules) continue; + for(var ii in document.styleSheets[i].cssRules) { + if(!document.styleSheets[0].cssRules[ii]) continue; + var node = document.styleSheets[0].cssRules[ii]; + + if(node.type && node.type == node.FONT_FACE_RULE) { + var nodesrc = node.style.getPropertyValue('src').match(/url\("?([^"\)]+\.[ot]tf)"?\)/i)[1]; + var font = node.style.getPropertyValue('font-family'); + if(font.indexOf(',')) { + font = font.split(',')[0]; + } + + font = font.replace(/['"]/g, '').toLowerCase(); + + if(font!='' && nodesrc != '') + this.embededFonts[font] = nodesrc; + } + } + } + } + + ,getStyle: function(el,prop) { + if(el.currentStyle) { + if(prop.indexOf('-') > -1) + prop = prop.split('-')[0]+prop.split('-')[1].substr(0, 1).toUpperCase()+prop.split('-')[1].substr(1); + var y = el.currentStyle[prop]; + }else if(window.getComputedStyle) { + var y = document.defaultView.getComputedStyle(el,'').getPropertyValue(prop); + } + return y; + } + + ,getChildren: function(n) { + var children=[]; + if(n && n.hasChildNodes()) + for(var i in n.childNodes) + if(n.childNodes[i] && n.childNodes[i].nodeType == 1) + children[children.length]=n.childNodes[i]; + + return children; + } + + ,getParentNode: function(n) { + var o=n.parentNode; + while(o != document && o.nodeType != 1) + o=o.parentNode; + + return o; + } + + ,hasClass: function(o, cn) { + return (o && o.className && o.className.indexOf(cn)>-1); + } + + ,evsrc: function(e) { + var o; + if (e.target) o = e.target; + else if (e.srcElement) o = e.srcElement; + if (o.nodeType == 3) // defeat Safari bug + o = o.parentNode; + + return o; + } + + ,calcDPI: function() { + if(screen.logicalXDPI) { + var dpi = screen.logicalXDPI; + }else { + var id = 'flir-dpi-div-test'; + if(document.getElementById(id)) { + var test = document.getElementById(id); + }else { + var test = document.createElement('DIV'); + test.id = id; + test.style.position='absolute'; + test.style.visibility='hidden'; + test.style.border=test.style.padding=test.style.margin='0'; + test.style.left=test.style.top='-1000px'; + test.style.height=test.style.width='1in'; + document.body.appendChild(test); + } + + var dpi = test.offsetHeight; + } + + this.dpi = parseInt(dpi); + } + + ,isIgnoredElement: function(el, breakIgnored) { return ((','+this.options.ignoredElements).indexOf(','+el.nodeName)>-1); } + ,sanitizeHTML: function(html) { return html.replace(/<[^>]+>/g, ''); } + + ,getFStyle: function(o, fstyle) { + var cStyle = this.getClassStyle(o); + if(this.isFStyle(cStyle)) + fstyle = cStyle; + + if(this.isFStyle(fstyle)) { + return fstyle; + }else if(this.isFStyle(o.flirStyle)) { + return o.flirStyle; + }else { + return this.defaultStyle; + } + } + ,setFStyle: function(o, FStyle) { o.flirStyle = FStyle; } + ,isFStyle: function(o) { if(!o) return false; return (o.toString() == '[FLIRStyle Object]'); } + + ,addClassStyle: function(classname, FStyle) { + if(this.isFStyle(FStyle)) + this.classStyles[classname] = FStyle; + } + ,getClassStyle: function(o) { + if(!(args = FLIR._call_plugin('getClassStyle', arguments))) return; + switch(args.length) { + case 1: + o = args[0]; + break; + case 2: // plugin returned a style + return args[0]; + break; + } + + var cn = o.className; + if(this.classStyles.length == 0 || typeof cn == 'undefined' || cn=='') return false; + + var classes = cn.split(' '); + for(var i in this.classStyles) { + for(var ii=0; ii -1) { + pix = Math.round(parseFloat(raw)); + }else { + if(raw.indexOf('pt') > -1) { + var pts = parseFloat(raw); + pix = pts/(72/this.options.dpi); + }else if(raw.indexOf('em') > -1 || raw.indexOf('%') > -1) { + pix = this.calcFontSize(o); + } + } + + if(this.options.cSize && '*/+-'.indexOf(this.options.cSize[0])>-1) { + try { + pix = this.roundFloat(parseFloat(eval(pix.toString().concat(this.options.cSize)))); + }catch(err) { } + } + + o.flirFontSize = pix; + + return pix; +}; + +FLIRStyle.prototype.getSpacing = function(o) { + var spacing = FLIR.getStyle(o, 'letter-spacing'); + var ret; + if(spacing != 'normal') { + if(spacing.indexOf('em') > -1) { + var fontsize = o.flirFontSize ? o.flirFontSize : this.getSize(o); + ret = (parseFloat(spacing)*fontsize); + }else if(spacing.indexOf('px') > -1) { + ret = parseFloat(spacing); + }else if(spacing.indexOf('pt') > -1) { + var pts = parseFloat(spacing); + ret = pts/(72/this.options.dpi); + } + + return this.roundFloat(ret); + } + + return ''; +}; + +FLIRStyle.prototype.getLine = function(o) { + var spacing = FLIR.getStyle(o, 'line-height'); + var val = parseFloat(spacing); + var fontsize = o.flirFontSize ? o.flirFontSize : this.getSize(o); + if(spacing.indexOf('em') > -1) { + ret = (val*fontsize)/fontsize; + }else if(spacing.indexOf('px') > -1) { + ret = val/fontsize; + }else if(spacing.indexOf('pt') > -1) { + var pts = val; + ret = (pts/(72/this.options.dpi))/fontsize; + }else if(spacing.indexOf('%') > -1) { + return 1.0; + }else { + ret = val; + } + + return this.roundFloat(ret); +}; + +FLIRStyle.prototype.roundFloat = function(val) { + return Math.round(val*10000)/10000; +}; + +FLIRStyle.prototype.calcFontSize = function(o) { + var test = document.createElement('DIV'); + test.style.border = '0'; + test.style.padding = '0'; + test.style.position='absolute'; + test.style.visibility='hidden'; + test.style.left=test.style.top='-1000px'; + test.style.left=test.style.top='10px'; + test.style.lineHeight = '100%'; + test.innerHTML = 'Flir_Test'; + o.appendChild(test); + + var size = test.offsetHeight; + o.removeChild(test); + + return size; +}; + +FLIRStyle.prototype.copyObject = function(obj) { + var copy = {}; + for(var i in obj) { + copy[i] = obj[i]; + } + + return copy; +}; + +FLIRStyle.prototype.toString = function() { return '[FLIRStyle Object]'; }; diff --git a/flir/fonts/Carousel.ttf b/flir/fonts/Carousel.ttf new file mode 100644 index 0000000000000000000000000000000000000000..02807a8d75ed690bac402b116214a6dddd8b50ab GIT binary patch literal 77868 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 RU>(oFIu5rkEIEwW{|8%(SvUXy literal 0 HcmV?d00001 diff --git a/flir/fonts/README.txt b/flir/fonts/README.txt new file mode 100644 index 0000000..16e2d51 --- /dev/null +++ b/flir/fonts/README.txt @@ -0,0 +1,8 @@ +All fonts included with Facelift were retrieved from http://openfontlibrary.org/. + +Things you should know about the included fonts: + +-Most (if not all) of these fonts have a license that PROHIBITS commercial use. +-Be sure to read up on the font at the above website. +-Some fonts also have a license included with a similar name to the actual font file. +-All fonts are named as downloaded. \ No newline at end of file diff --git a/flir/fonts/index.html b/flir/fonts/index.html new file mode 100644 index 0000000..417d63b --- /dev/null +++ b/flir/fonts/index.html @@ -0,0 +1,10 @@ + + + + +Untitled Document + + + + + diff --git a/flir/generate.php b/flir/generate.php new file mode 100644 index 0000000..043854d --- /dev/null +++ b/flir/generate.php @@ -0,0 +1,280 @@ +. +*/ + +define('DEBUG', false); +define('ENABLE_FONTSIZE_BUG', false); + +define('FLIR_VERSION', '1.2.2'); +define('IS_WINDOWS', (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')); + +require('config-flir.php'); +require('inc-flir.php'); + +if(version_compare(PHP_VERSION, '4.3.0', '<')) + err('PHP_TOO_OLD'); +if(version_compare(PHP_VERSION, '6.0.0', '>=')) + err('PHP_UNSUPPORTED'); + +if(false !== ALLOWED_DOMAIN && $_SERVER['HTTP_REFERER'] != '') { + $refhost = get_hostname($_SERVER['HTTP_REFERER']); + if(substr(ALLOWED_DOMAIN, 0, 1) == '.') { + if(false === strpos($refhost, substr(ALLOWED_DOMAIN, 1))) + err('DISALLOWED_DOMAIN'); + }else { + if($refhost != ALLOWED_DOMAIN) + err('DISALLOWED_DOMAIN'); + } +} + +$fonts_dir = str_replace('\\', '/', realpath(FONTS_DIR.'/')); + +if(substr($fonts_dir, -1) != '/') + $fonts_dir .= '/'; + +$FLIR = array(); +$FStyle = preg_match('#^\{("[\w]+":"[^"]*",?)*\}$#i', $_GET['fstyle'])?json_decode($_GET['fstyle'], true):array(); + +$FLIR['mode'] = isset($FStyle['mode']) ? $FStyle['mode'] : ''; +$FLIR['output'] = isset($FStyle['output']) ? ($FStyle['output']=='gif'?'gif':'png') : 'auto'; + +$FLIR['bkg_transparent'] = is_transparent($FStyle['cBackground']); + +if($FLIR['output'] == 'auto') + $FLIR['output'] = $FLIR['bkg_transparent'] ? 'png' : 'gif'; + +// format not supported, fall back to png +if(($FLIR['output'] == 'gif' && !function_exists('imagegif')) || ($FLIR['output'] == 'jpg' && !function_exists('imagejpeg'))) + $FLIR['output'] = 'png'; + +$FLIR['dpi'] = preg_match('#^[0-9]+$#', $FStyle['dpi']) ? $FStyle['dpi'] : 96; +$FLIR['size'] = is_number($FStyle['cSize'], true) ? $FStyle['cSize'] : UNKNOWN_FONT_SIZE; // pixels +$FLIR['size_pts'] = ENABLE_FONTSIZE_BUG ? $FLIR['size'] : get_points($FLIR['dpi'], $FLIR['size']); +$FLIR['maxheight']= is_number($_GET['h']) ? $_GET['h'] : UNKNOWN_FONT_SIZE; // pixels +$FLIR['maxwidth']= is_number($_GET['w']) ? $_GET['w'] : 800; // pixels + +$font_file = ''; +$FStyle['cFont'] = strtolower($FStyle['cFont']); +$FONT_PARENT = false; +if(isset($fonts[$FStyle['cFont']])) { + $font_file = $fonts[$FStyle['cFont']]; + + if(is_array($font_file)) { + $FONT_PARENT = reset($font_file); + $font_file = match_font_style($font_file); + $FONT_PARENT = $fonts_dir.(isset($FONT_PARENT['file']) ? $FONT_PARENT['file'] : $font_file); + } +}elseif(FONT_DISCOVERY) { + $font_file = discover_font($fonts['default'], $FStyle['cFont']); +}else { + $font_file = $fonts['default']; +} +$FLIR['font'] = $fonts_dir.$font_file; + +//die($FStyle['cFont']); + +if(!is_file($FLIR['font'])) + err('FONT_DOESNT_EXIST'); + +if(in_array(strtolower(pathinfo($FLIR['font'], PATHINFO_EXTENSION)), array('pfb','pfm'))) { // pfm doesn't work + // You can try uncommenting this line to see what kind of mileage you get. + err('FONT_PS_UNSUPPORTED'); // PostScript will work as long as you don't set any kind of spacing... unless you are using Windows (PHP bug?). + + $FLIR['postscript'] = true; + $FLIR['ps'] = array('kerning' => 0, 'space' => 0); + if(false === (@$FLIR['ps']['font'] = imagepsloadfont($FLIR['font']))) + err('FONT_PS_COULDNT_LOAD'); +} + +$FLIR['color'] = convert_color($FStyle['cColor']); + +if($FLIR['bkg_transparent']) { + $FLIR['bkgcolor'] = array('red' => abs($FLIR['color']['red']-100) + , 'green' => abs($FLIR['color']['green']-100) + , 'blue' => abs($FLIR['color']['blue']-100)); +}else { + $FLIR['bkgcolor'] = convert_color($FStyle['cBackground'], false, 'FFFFFF'); +} + +$FLIR['opacity'] = is_number($FStyle['cOpacity'], true) ? $FStyle['cOpacity']*100 : 100; +if($FLIR['opacity'] > 100 || $FLIR['opacity'] < 0) + $FLIR['opacity'] = 100; + +$FLIR['text'] = $_GET['text']!=''?str_replace(array('{amp}nbsp;', '{amp}', '{plus}'), array(' ','&','+'), trim($_GET['text'], "\t\n\r")):'null'; + +$FLIR['cache'] = get_cache_fn(md5(($FLIR['mode']=='wrap'?$FLIR['maxwidth']:'').$FLIR['font'].(print_r($FStyle,true).$FLIR['text'])), $FLIR['output']); + +$FLIR['text_encoded'] = $FLIR['text']; +$FLIR['text'] = $FLIR['original_text'] = strip_tags(html_entity_decode_utf8($FLIR['text'])); + +$SPACE_BOUNDS = false; +if(is_number($FStyle['cSpacing'], true, false, true)) { + $SPACE_BOUNDS = bounding_box(' '); + $spaces = ceil(($FStyle['cSpacing']/$SPACE_BOUNDS['width'])); + if($spaces>0) { + $FLIR['text'] = space_out($FLIR['text'], $spaces); + define('SPACING_GAP', $spaces); + } + + if($FLIR['postscript']) { + $FLIR['ps']['kerning'] = ($FStyle['cSpacing']/$FLIR['size'])*1000; + } +} + +if($FLIR['postscript'] && isset($FStyle['space_width'])) { + $FLIR['ps']['space'] = ($FStyle['space_width']/$FLIR['size'])*1000; +} + +if(($SPACES_COUNT = substr_count($FLIR['text'], ' ')) == strlen($FLIR['text'])) { + if(false === $SPACE_BOUNDS) + $SPACE_BOUNDS = bounding_box(' '); + + $FLIR['cache'] = get_cache_fn(md5($FLIR['font'].$FLIR['size'].$SPACES_COUNT)); + $FLIR['mode'] = 'spacer'; +} + +if(file_exists($FLIR['cache']) && !DEBUG) { + output_file($FLIR['cache']); +}else { + verify_gd(); + + $REAL_HEIGHT_BOUNDS = $FStyle['realFontHeight']=='true' ? bounding_box(HBOUNDS_TEXT, (false !== $FONT_PARENT ? $FONT_PARENT : $FLIR['font'])): false; + + switch($FLIR['mode']) { + default: + $dir = dir(PLUGIN_DIR); + $php_mode = strtolower($FLIR['mode'].'.php'); + while(false !== ($entry = $dir->read())) { + $p = PLUGIN_DIR.'/'.$entry; + if(is_dir($p) || $entry == '.' || $entry == '..') continue; + + if($php_mode == strtolower($entry)) { + $dir->close(); + $PLUGIN_ERROR = false; + + include($p); + + if(false !== $PLUGIN_ERROR) + break; + else + break(2); + } + } + $dir->close(); + + $bounds = bounding_box($FLIR['text']); + if($FStyle['realFontHeight']!='true') + $REAL_HEIGHT_BOUNDS = $bounds; + + if(false === (@$image = imagecreatetruecolor($bounds['width'], $REAL_HEIGHT_BOUNDS['height']))) + err('COULD_NOT_CREATE'); + + gd_alpha(); + imagefilledrectangle($image, 0, 0, imagesx($image), imagesy($image), gd_bkg()); + render_text($bounds); + break; + case 'wrap': + if(!is_number($FStyle['cLine'], true)) + $FStyle['cLine'] = 1.0; + + $bounds = bounding_box($FLIR['text']); + if($FStyle['realFontHeight']!='true') + $REAL_HEIGHT_BOUNDS = $bounds; + + // if mode is wrap, check to see if text needs to be wrapped, otherwise let continue to progressive + if($bounds['width'] > $FLIR['maxwidth']) { + $image = imagettftextbox($FLIR['size_pts'], 0, 0, 0, $FLIR['color'], $FLIR['font'], $FLIR['text'], $FLIR['maxwidth'], strtolower($FStyle['cAlign']), $FStyle['cLine']); + break; + }else { + if(false === (@$image = imagecreatetruecolor($bounds['width'], $REAL_HEIGHT_BOUNDS['height']))) + err('COULD_NOT_CREATE'); + + gd_alpha(); + imagefilledrectangle($image, 0, 0, imagesx($image), imagesy($image), gd_bkg()); + render_text($bounds); + } + break; + case 'progressive': + $bounds = bounding_box($FLIR['text']); + if($FStyle['realFontHeight']!='true') + $REAL_HEIGHT_BOUNDS = $bounds; + + $offset_left = 0; + + $nsize=$FLIR['size_pts']; + while(($REAL_HEIGHT_BOUNDS['height'] > $FLIR['maxheight'] || $bounds['width'] > $FLIR['maxwidth']) && $nsize > 2) { + $nsize-=0.5; + $bounds = bounding_box($FLIR['text'], NULL, $nsize); + $REAL_HEIGHT_BOUNDS = $FStyle['realFontHeight']=='true' ? bounding_box(HBOUNDS_TEXT, NULL, $nsize) : $bounds; + } + $FLIR['size_pts'] = $nsize; + + if(false === (@$image = imagecreatetruecolor($bounds['width'], $REAL_HEIGHT_BOUNDS['height']))) + err('COULD_NOT_CREATE'); + + gd_alpha(); + imagefilledrectangle($image, $offset_left, 0, imagesx($image), imagesy($image), gd_bkg()); + + imagettftext($image, $FLIR['size_pts'], 0, $bounds['xOffset'], $REAL_HEIGHT_BOUNDS['yOffset'], gd_color(), $FLIR['font'], $FLIR['text']); + render_text($bounds); + break; + + case 'spacer': + if(false === (@$image = imagecreatetruecolor(($SPACE_BOUNDS['width']*$SPACES_COUNT), 1))) + err('COULD_NOT_CREATE'); + + imagesavealpha($image, true); + imagealphablending($image, false); + + imagefilledrectangle($image, 0, 0, imagesx($image), imagesy($image), gd_bkg()); + break; + } + + if($FLIR['postscript']) + imagepsfreefont($FLIR['ps']['font']); + + if(false !== $image) { + switch($FLIR['output']) { + default: + case 'png': + imagepng($image, $FLIR['cache']); + break; + case 'gif': + imagegif($image, $FLIR['cache']); + break; + case 'jpg': + $qual = is_number($FStyle['quality']) ? $FStyle['quality'] : 90; + imagejpeg($image, $FLIR['cache'], $qual); + break; + } + imagedestroy($image); + } + + output_file($FLIR['cache']); +} // if(file_exists($FLIR['cache'])) { + +flush(); + +if(CACHE_CLEANUP_FREQ != -1 && rand(1, CACHE_CLEANUP_FREQ) == 1) + @cleanup_cache(); +?> \ No newline at end of file diff --git a/flir/inc-flir.php b/flir/inc-flir.php new file mode 100644 index 0000000..0e2157e --- /dev/null +++ b/flir/inc-flir.php @@ -0,0 +1,912 @@ +. +*/ +if(consttrue('DEBUG')) { + header( 'Expires: Wed, 27 Jul 1983 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +} + +/*** + * + * Can be deleted if magic quotes is disabled. Magic quotes, what a plague it is/was. + * +*/ +if (get_magic_quotes_gpc()) { + function stripslashes_deep($value) + { + $value = is_array($value) ? + array_map('stripslashes_deep', $value) : + stripslashes($value); + + return $value; + } + + $_POST = array_map('stripslashes_deep', $_POST); + $_GET = array_map('stripslashes_deep', $_GET); + $_COOKIE = array_map('stripslashes_deep', $_COOKIE); + $_REQUEST = array_map('stripslashes_deep', $_REQUEST); +} + +$ERROR_MSGS = array( + 'COULD_NOT_CREATE' => 'Invalid: Could not create image.' + ,'DISALLOWED_DOMAIN' => 'Bad Domain: Domain is not allowed to generate images.' + + ,'PHP_TOO_OLD' => 'The version of PHP you are using is too old. Facelift requires at least PHP v4.3.0.' + ,'PHP_UNSUPPORTED' => 'The version of PHP you are using is not supported.' + + ,'GD_NOT_INSTALLED' => 'Facelift requires the GD extension for PHP.' + ,'GD_TOO_OLD' => 'The version of GD you are using is too old. Facelift requires at least GD v2.' + ,'GD_NO_IMAGES' => 'Facelift needs to be able to create images in PNG, GIF, or JPG. You have none of these supported by your version of GD. Please enable the ability to create PNG, GIF, or JPG images in your GD installation.' + ,'GD_NO_FREETYPE' => 'The version of GD you are using does not have support for FreeType. Facelift requires GD with FreeType support to work.' + + ,'FONT_DOESNT_EXIST' => 'Cannot find font. Be sure you have specified a valid default font file.' + ,'FONT_PS_COULDNT_LOAD' => 'Unable to load the PostScript font.' + ,'FONT_PS_UNSUPPORTED' => 'PostScript fonts are unsupported at this time. That goes double for Windows servers.

If you want, you can comment out "err(\'FONT_PS_UNSUPPORTED\');" and give it a shot.' + + ,'CACHE_DOESNT_EXIST' => 'Cache directory does not exist.' + ,'CACHE_UNABLE_CREATE' => 'Unable to create the cache directory. Verify that permissions are properly set.' +); + + +// functions + +function get_cache_fn($md5, $ext='png') { + if(!file_exists(CACHE_DIR)) + err('CACHE_DOESNT_EXIST'); + + $tier1 = CACHE_DIR.'/'.$md5[0].$md5[1]; + $tier2 = $tier1.'/'.$md5[2].$md5[3]; + + if(!file_exists($tier1)) + @mkdir($tier1); + if(!file_exists($tier2)) + @mkdir($tier2); + + if(!file_exists($tier2)) + err('CACHE_UNABLE_CREATE'); + + return $tier2.'/'.$md5.'.'.$ext; +} + +function cleanup_cache() { + $d1 = dir(CACHE_DIR); + while(false !== ($tier1 = $d1->read())) { + if($tier1 == '.' || $tier1 == '..') continue; + + $d2 = dir(CACHE_DIR.'/'.$tier1); + while(false !== ($tier2 = $d2->read())) { + if($tier2 == '.' || $tier2 == '..') continue; + + $path = CACHE_DIR.'/'.$tier1.'/'.$tier2; + $d3 = dir($path); + while(false !== ($entry = $d3->read())) { + if($entry == '.' || $entry == '..') continue; + + if((time() - filectime($path.'/'.$entry)) > CACHE_KEEP_TIME) { +// echo $path.'/'.$entry.' removed
'; + unlink($path.'/'.$entry); + } + } + $d3->close(); + } + $d2->close(); + } + $d1->close(); +} + +function imagettftextbox($size_pts, $angle, $left, $top, $color, $font, $raw_text, $max_width, $align='left', $lineheight=1.0) { + global $FLIR; + + $raw_textlines = explode("\n", $raw_text); + + $formatted_lines = $formatted_widths = array(); + $max_values = bounding_box(HBOUNDS_TEXT); + $previous_bounds = array('width' => 0); + + $spaces = ' '.str_repeat(' ', (defined('SPACING_GAP')?SPACING_GAP:0)); + + foreach($raw_textlines as $text) { + $bounds = bounding_box($text); + if($bounds['height'] > $max_lineheight) + $max_lineheight = $bounds['height']; + if($bounds['belowBasepoint'] > $max_baseheight) + $max_baseheight = $bounds['belowBasepoint']; + if($bounds['xOffset'] > $max_leftoffset) + $max_leftoffset = $bounds['xOffset']; + if($bounds['yOffset'] > $max_rightoffset) + $max_rightoffset = $bounds['yOffset']; + + if($bounds['width'] < $max_width) { // text doesn't require wrapping + $formatted_lines[] = $text; + $formatted_widths[$text] = $bounds['width']; + }else { // text requires wrapping + $words = explode($spaces, trim($text)); + + $test_line = ''; + for($i=0; $i < count($words); $i++) { // test words one-by-one to see if they put the width over + $prepend = $i==0 ? '' : $test_line.$spaces; // add space if not the first word + $working_line = $prepend.$words[$i]; + + $bounds = bounding_box($working_line); + + if($bounds['width'] > $max_width) { // if working line is too big previous line isn't, use that + $formatted_lines[] = $test_line; + $formatted_widths[$test_line] = $previous_bounds['width']; + $test_line = $words[$i]; + + $bounds = bounding_box($test_line); + }else { // keep adding + $test_line = $working_line; + } + + $previous_bounds = $bounds; + } + + if($test_line!='') { // if words are finished and there is something left in the buffer add it + $bounds = bounding_box($test_line); + + $formatted_lines[] = $test_line; + $formatted_widths[$test_line] = $bounds['width']; + } + } + } + + $max_lineheight = ($max_values['height']*$lineheight); + $image = imagecreatetruecolor($max_width, (($max_lineheight*(count($formatted_lines)-1))+$max_values['yOffset'])+$max_values['belowBasepoint']); + + gd_alpha($image); + imagefilledrectangle($image, 0, 0, imagesx($image), imagesy($image), gd_bkg($image)); + + for($i=0; $i < count($formatted_lines); $i++) { + if($i==0) + $offset_top = $max_values['yOffset']; + else + $offset_top = ($max_lineheight*$i)+$max_values['yOffset']; + + switch(strtolower($align)) { + default: + case 'left': + $offset_left = 0; + break; + case 'center': + $offset_left = ($max_width-$formatted_widths[$formatted_lines[$i]])/2; + break; + case 'right': + $offset_left = ($max_width-$formatted_widths[$formatted_lines[$i]])-1; + break; + } + +// imagettftext($image, $size_pts, $angle, $offset_left, $offset_top, gd_color($image), $font, $formatted_lines[$i]); + $bounds = array('xOffset' => $offset_left, 'yOffset' => $offset_top); + render_text($bounds, $formatted_lines[$i], $image, $bounds); + } + + return $image; +} + +function css2hex($css_str, $default_color='000000') { + $css_color = array(); + + $css_color['aliceblue'] = 'f0f8ff'; + $css_color['antiquewhite'] = 'faebd7'; + $css_color['aqua'] = '00ffff'; + $css_color['aquamarine'] = '7fffd4'; + $css_color['azure'] = 'f0ffff'; + $css_color['beige'] = 'f5f5dc'; + $css_color['bisque'] = 'ffe4c4'; + $css_color['black'] = '000000'; + $css_color['blanchedalmond'] = 'ffebcd'; + $css_color['blue'] = '0000ff'; + $css_color['blueviolet'] = '8a2be2'; + $css_color['brown'] = 'a52a2a'; + $css_color['burlywood'] = 'deb887'; + $css_color['cadetblue'] = '5f9ea0'; + $css_color['chartreuse'] = '7fff00'; + $css_color['chocolate'] = 'd2691e'; + $css_color['coral'] = 'ff7f50'; + $css_color['cornflowerblue'] = '6495ed'; + $css_color['cornsilk'] = 'fff8dc'; + $css_color['crimson'] = 'dc143c'; + $css_color['cyan'] = '00ffff'; + $css_color['darkblue'] = '00008b'; + $css_color['darkcyan'] = '008b8b'; + $css_color['darkgoldenrod'] = 'b8860b'; + $css_color['darkgray'] = 'a9a9a9'; + $css_color['darkgrey'] = 'a9a9a9'; + $css_color['darkgreen'] = '006400'; + $css_color['darkkhaki'] = 'bdb76b'; + $css_color['darkmagenta'] = '8b008b'; + $css_color['darkolivegreen'] = '556b2f'; + $css_color['darkorange'] = 'ff8c00'; + $css_color['darkorchid'] = '9932cc'; + $css_color['darkred'] = '8b0000'; + $css_color['darksalmon'] = 'e9967a'; + $css_color['darkseagreen'] = '8fbc8f'; + $css_color['darkslateblue'] = '483d8b'; + $css_color['darkslategray'] = '2f4f4f'; + $css_color['darkslategrey'] = '2f4f4f'; + $css_color['darkturquoise'] = '00ced1'; + $css_color['darkviolet'] = '9400d3'; + $css_color['deeppink'] = 'ff1493'; + $css_color['deepskyblue'] = '00bfff'; + $css_color['dimgray'] = '696969'; + $css_color['dimgrey'] = '696969'; + $css_color['dodgerblue'] = '1e90ff'; + $css_color['firebrick'] = 'b22222'; + $css_color['floralwhite'] = 'fffaf0'; + $css_color['forestgreen'] = '228b22'; + $css_color['fuchsia'] = 'ff00ff'; + $css_color['gainsboro'] = 'dcdcdc'; + $css_color['ghostwhite'] = 'f8f8ff'; + $css_color['gold'] = 'ffd700'; + $css_color['goldenrod'] = 'daa520'; + $css_color['gray'] = '808080'; + $css_color['grey'] = '808080'; + $css_color['green'] = '008000'; + $css_color['greenyellow'] = 'adff2f'; + $css_color['honeydew'] = 'f0fff0'; + $css_color['hotpink'] = 'ff69b4'; + $css_color['indianred'] = 'cd5c5c'; + $css_color['indigo'] = '4b0082'; + $css_color['ivory'] = 'fffff0'; + $css_color['khaki'] = 'f0e68c'; + $css_color['lavender'] = 'e6e6fa'; + $css_color['lavenderblush'] = 'fff0f5'; + $css_color['lawngreen'] = '7cfc00'; + $css_color['lemonchiffon'] = 'fffacd'; + $css_color['lightblue'] = 'add8e6'; + $css_color['lightcoral'] = 'f08080'; + $css_color['lightcyan'] = 'e0ffff'; + $css_color['lightgoldenrodyellow'] = 'fafad2'; + $css_color['lightgray'] = 'd3d3d3'; + $css_color['lightgrey'] = 'd3d3d3'; + $css_color['lightgreen'] = '90ee90'; + $css_color['lightpink'] = 'ffb6c1'; + $css_color['lightsalmon'] = 'ffa07a'; + $css_color['lightseagreen'] = '20b2aa'; + $css_color['lightskyblue'] = '87cefa'; + $css_color['lightslategray'] = '778899'; + $css_color['lightslategrey'] = '778899'; + $css_color['lightsteelblue'] = 'b0c4de'; + $css_color['lightyellow'] = 'ffffe0'; + $css_color['lime'] = '00ff00'; + $css_color['limegreen'] = '32cd32'; + $css_color['linen'] = 'faf0e6'; + $css_color['magenta'] = 'ff00ff'; + $css_color['maroon'] = '800000'; + $css_color['mediumaquamarine'] = '66cdaa'; + $css_color['mediumblue'] = '0000cd'; + $css_color['mediumorchid'] = 'ba55d3'; + $css_color['mediumpurple'] = '9370d8'; + $css_color['mediumseagreen'] = '3cb371'; + $css_color['mediumslateblue'] = '7b68ee'; + $css_color['mediumspringgreen'] = '00fa9a'; + $css_color['mediumturquoise'] = '48d1cc'; + $css_color['mediumvioletred'] = 'c71585'; + $css_color['midnightblue'] = '191970'; + $css_color['mintcream'] = 'f5fffa'; + $css_color['mistyrose'] = 'ffe4e1'; + $css_color['moccasin'] = 'ffe4b5'; + $css_color['navajowhite'] = 'ffdead'; + $css_color['navy'] = '000080'; + $css_color['oldlace'] = 'fdf5e6'; + $css_color['olive'] = '808000'; + $css_color['olivedrab'] = '6b8e23'; + $css_color['orange'] = 'ffa500'; + $css_color['orangered'] = 'ff4500'; + $css_color['orchid'] = 'da70d6'; + $css_color['palegoldenrod'] = 'eee8aa'; + $css_color['palegreen'] = '98fb98'; + $css_color['paleturquoise'] = 'afeeee'; + $css_color['palevioletred'] = 'd87093'; + $css_color['papayawhip'] = 'ffefd5'; + $css_color['peachpuff'] = 'ffdab9'; + $css_color['peru'] = 'cd853f'; + $css_color['pink'] = 'ffc0cb'; + $css_color['plum'] = 'dda0dd'; + $css_color['powderblue'] = 'b0e0e6'; + $css_color['purple'] = '800080'; + $css_color['red'] = 'ff0000'; + $css_color['rosybrown'] = 'bc8f8f'; + $css_color['royalblue'] = '4169e1'; + $css_color['saddlebrown'] = '8b4513'; + $css_color['salmon'] = 'fa8072'; + $css_color['sandybrown'] = 'f4a460'; + $css_color['seagreen'] = '2e8b57'; + $css_color['seashell'] = 'fff5ee'; + $css_color['sienna'] = 'a0522d'; + $css_color['silver'] = 'c0c0c0'; + $css_color['skyblue'] = '87ceeb'; + $css_color['slateblue'] = '6a5acd'; + $css_color['slategray'] = '708090'; + $css_color['slategrey'] = '708090'; + $css_color['snow'] = 'fffafa'; + $css_color['springgreen'] = '00ff7f'; + $css_color['steelblue'] = '4682b4'; + $css_color['tan'] = 'd2b48c'; + $css_color['teal'] = '008080'; + $css_color['thistle'] = 'd8bfd8'; + $css_color['tomato'] = 'ff6347'; + $css_color['turquoise'] = '40e0d0'; + $css_color['violet'] = 'ee82ee'; + $css_color['wheat'] = 'f5deb3'; + $css_color['white'] = 'ffffff'; + $css_color['whitesmoke'] = 'f5f5f5'; + $css_color['yellow'] = 'ffff00'; + $css_color['yellowgreen'] = '9acd32'; + + $color = isset($css_color[$css_str])?$css_color[$css_str]:$default_color; + $colors = explode(',',substr(chunk_split($color, 2, ','), 0, -1)); + $acolor = array(); + $acolor['red'] = hexdec($colors[0]); + $acolor['green'] = hexdec($colors[1]); + $acolor['blue'] = hexdec($colors[2]); + + return $acolor; +} + +function dec2hex($r, $g, $b) { + $hxr = dechex($r); + $hxg = dechex($g); + $hxb = dechex($b); + + return strtoupper((strlen($hxr)==1?'0'.$hxr:$hxr).(strlen($hxg)==1?'0'.$hxg:$hxg).(strlen($hxb)==1?'0'.$hxb:$hxb)); +} + +function output_file($cache_file) { + $ts = filemtime($cache_file); + + $ifmodsince = isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])?$_SERVER['HTTP_IF_MODIFIED_SINCE']:false; + if ($ifmodsince && strtotime($ifmodsince) >= $ts) { + header('HTTP/1.0 304 Not Modified', true, 304); + return; + } + + $etag = isset($_SERVER['HTTP_IF_NONE-MATCH'])?$_SERVER['HTTP_IF_NONE-MATCH']:false; + if($etag && $etag == md5($ts)) { + header('HTTP/1.0 304 Not Modified', true, 304); + return; + } + + header('Last-Modified: '.gmdate('D, d M Y H:i:s \G\M\T', $ts)); + header('ETag: "'.md5($ts).'"'); + + switch(exif_imagetype($cache_file)) { + case IMAGETYPE_PNG: + header('Content-Type: image/png'); + break; + case IMAGETYPE_GIF: + header('Content-Type: image/gif'); + break; + case IMAGETYPE_JPEG: + header('Content-Type: image/jpeg'); + break; + } + readfile($cache_file); +// exit; +} + + +function bounding_box($text, $font=NULL, $size=NULL) { + global $FLIR; + + if(is_null($font)) + $font = $FLIR['postscript'] ? $FLIR['ps']['font'] : $FLIR['font']; + + if(is_null($size)) + $size = $FLIR['postscript'] ? $FLIR['size'] : $FLIR['size_pts']; + elseif($FLIR['postscript']) + $size = get_points($FLIR['dpi'], $size); // convert to points + + if($FLIR['postscript']) + return convertPSBoundingBox(imagepsbbox($text, $font, $size, $FLIR['ps']['space'], $FLIR['ps']['kerning'], 0)); + else + return convertBoundingBox(imagettfbbox($size, 0, $font, $text)); +} + +/* +0 lower left corner, X position -3 +1 lower left corner, Y position 10 +2 lower right corner, X position 735 +3 lower right corner, Y position 10 +4 upper right corner, X position 735 +5 upper right corner, Y position -44 +6 upper left corner, X position -3 +7 upper left corner, Y position -44 + +$width = abs($bounds[2]) + abs($bounds[0]); +$height = abs($bounds[7]) + abs($bounds[1]); +*/ +function convertBoundingBox ($bbox) { + if ($bbox[0] >= -1) + $xOffset = -abs($bbox[0] + 1); + else + $xOffset = abs($bbox[0] + 2); + $width = abs($bbox[2] - $bbox[0]); + if ($bbox[0] < -1) $width = abs($bbox[2]) + abs($bbox[0]) - 1; + $yOffset = abs($bbox[5] + 1); + if ($bbox[5] >= -1) $yOffset = -$yOffset; // Fixed characters below the baseline. + $height = abs($bbox[7]) - abs($bbox[1]); + if ($bbox[3] > 0) $height = abs($bbox[7] - $bbox[1]) - 1; + return array( + 'width' => $width, + 'height' => $height, + 'xOffset' => $xOffset, // Using xCoord + xOffset with imagettftext puts the left most pixel of the text at xCoord. + 'yOffset' => $yOffset, // Using yCoord + yOffset with imagettftext puts the top most pixel of the text at yCoord. + 'belowBasepoint' => max(0, $bbox[1]) + ); +} + +function convertPSBoundingBox ($bbox) { +//echo 'here'; +//print_r($bbox); + if ($bbox[0] >= -1) + $xOffset = -abs($bbox[0] + 1); + else + $xOffset = abs($bbox[0] + 2); + + $yOffset = abs($bbox[1] + 1); + + $width = abs($bb[2] - $bb[0]); + $height = abs($bbox[1]) - abs($bbox[3]); + + return array( + 'width' => $width, + 'height' => $height, + 'xOffset' => $xOffset, // Using xCoord + xOffset with imagettftext puts the left most pixel of the text at xCoord. + 'yOffset' => $yOffset, // Using yCoord + yOffset with imagettftext puts the top most pixel of the text at yCoord. + 'belowBasepoint' => max(0, $bbox[1]) + ); +} + +/* +imagettftext( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text ) +imagepstext( resource $image , string $text , resource $font_index + , int $size , int $foreground , int $background + , int $x , int $y + [, int $space [, int $tightness [, float $angle [, int $antialias_steps ]]]] ) +*/ +function render_text($bounds, $text=NULL, $img=NULL, $realheight=NULL) { + global $FLIR; + + if(!is_null($realheight)) + $REAL_HEIGHT_BOUNDS = $realheight; + else + global $REAL_HEIGHT_BOUNDS; + + if(is_null($img)) + global $image; + else + $image = $img; + + if(is_null($text)) + $text = $FLIR['postscript'] ? $FLIR['original_text'] : $FLIR['text']; + + if($FLIR['postscript']) { + imagepstext($image, $text, $FLIR['ps']['font'], $FLIR['size'], gd_color($image) + , imagecolorallocatealpha($image , $FLIR['bkgcolor']['red'] + , $FLIR['bkgcolor']['green'] + , $FLIR['bkgcolor']['blue'], 127) + , $bounds['xOffset'], $REAL_HEIGHT_BOUNDS['yOffset'] + , $FLIR['ps']['space'], $FLIR['ps']['kerning'], 0, ($FLIR['size'] < 20 ? 16 : 4 )); + }else { + imagettftext($image, $FLIR['size_pts'], 0, $bounds['xOffset'] + , $REAL_HEIGHT_BOUNDS['yOffset'], gd_color($image), $FLIR['font'], $text); + } +} + +function is_number($str, $bAllowDecimals=false, $bAllowZero=false, $bAllowNeg=false) { + if($bAllowDecimals) + $regex = $bAllowZero?'[0-9]+(\.[0-9]+)?': '(^([0-9]*\.[0-9]*[1-9]+[0-9]*)$)|(^([0-9]*[1-9]+[0-9]*\.[0-9]+)$)|(^([1-9]+[0-9]*)$)'; + else + $regex = $bAllowZero?'[0-9]+': '[1-9]+[0-9]*'; + + return preg_match('#^'.($bAllowNeg?'\-?':'').$regex.'$#', $str); +} + +function is_hexcolor($str) { + return preg_match('#^[a-f0-9]{6}$#i', $str); +} + +function convert_color($color, $bHex=false, $default_color='000000') { + $rgb = array(); + if(preg_match('#(\(([0-9]{1,3}), ?([0-9]{1,3}), ?([0-9]{1,3})(, ?([0-9]{1,3}))?\))#i', $color, $m)) { + $rgb['red'] = $m[2]; + $rgb['green'] = $m[3]; + $rgb['blue'] = $m[4]; + }elseif(preg_match('#[a-f0-9]{3}|[a-f0-9]{6}#i', $color)) { + if(strlen($color) == 3) + $color = $color[0].$color[0].$color[1].$color[1].$color[2].$color[2]; + + $colors = explode(',',substr(chunk_split($color, 2, ','), 0, -1)); + $rgb['red'] = hexdec($colors[0]); + $rgb['green'] = hexdec($colors[1]); + $rgb['blue'] = hexdec($colors[2]); + }else { + $rgb = css2hex($color, $default_color); + } + + return $bHex ? dec2hex($rgb['red'],$rgb['green'],$rgb['blue']) : $rgb; +} + +function is_transparent($str) { + if(trim($str) == '' || $str == 'transparent' || $str == 'none') + return true; + + if(false !== strpos($str, 'rgba') && preg_match('#\([0-9]{1,3}, ?[0-9]{1,3}, ?[0-9]{1,3}, 0\)#i', $str, $m)) + return true; + + return false; +} + +function get_points($dpi, $pxsize) { + return round(((72/$dpi)*$pxsize), 3); +} + +function discover_font($default, $passed) { + $passed_fn = strtolower(get_filename($passed)); + $ret = $default; + $fdir = str_replace('\\', '/', (getcwd().'/'.FONTS_DIR)); + $d = dir($fdir); + while(false !== ($entry = $d->read())) { + if($passed_fn == strtolower(get_filename($entry))) { + $ret = $entry; + } + } + $d->close(); + + $rp = realpath(($fdir.'/'.$ret)); + + return (!$rp || false === strpos(str_replace('\\', '/', $rp), $fdir)) ? $default : $ret; +} + +function match_font_style($font) { + global $FStyle; + + $best_match = array(); + $best_match_value = -1.0; + foreach($font as $k => $v) { + $stretch = $FStyle['cStretch']=='normal' || $FStyle['cStretch']=='' ? '' : $FStyle['cStretch']; + $style = $FStyle['cFontStyle']=='normal' || $FStyle['cFontStyle']=='' ? '' : $FStyle['cFontStyle']; + $variant = $FStyle['cVariant']=='normal' || $FStyle['cVariant']=='' ? '' : $FStyle['cVariant']; + $weight = $FStyle['cWeight']=='normal' || $FStyle['cWeight']=='' ? '' : $FStyle['cWeight']; + $decoration = $FStyle['cDecoration']=='none' || $FStyle['cDecoration']=='' ? '' : $FStyle['cDecoration']; + + $total = ( + ($v['font-stretch'] == $stretch ? 1 : 0) + + ($v['font-style'] == $style ? 1 : 0) + + ($v['font-variant'] == $variant ? 1 : 0) + + ($v['font-weight'] == $weight ? 1 : 0) + + ($v['text-decoration'] == $decoration ? 1 : 0) + ); + if($total>0) + $total /= 5; + + if($total > $best_match_value) { + $best_match_value = $total; + $best_match = $v['file']; + } + } + + return $best_match; +} + +function space_out($text, $spaces) { + $ret = ''; + for($i=0; $i', $errors); + exit; + } + } +} + +function gd_bkg($img=NULL) { + global $FLIR; + + if(is_null($img)) + global $image; + else + $image = $img; + + switch($FLIR['output']) { + case 'png': + return imagecolorallocatealpha($image, $FLIR['bkgcolor']['red'], $FLIR['bkgcolor']['green'], $FLIR['bkgcolor']['blue'], 127); + case 'gif': + case 'jpg': + return imagecolorallocate($image, $FLIR['bkgcolor']['red'], $FLIR['bkgcolor']['green'], $FLIR['bkgcolor']['blue']); + } +} + +function gd_color($img=NULL) { + global $FLIR; + + if(is_null($img)) + global $image; + else + $image = $img; + + $color = ''; + if($opacity != 100) + $color = imagecolorallocatealpha($image, $FLIR['color']['red'], $FLIR['color']['green'], $FLIR['color']['blue'], round(127-(($FLIR['opacity']/100)*127))); + else + $color = imagecolorallocate($image, $FLIR['color']['red'], $FLIR['color']['green'], $FLIR['color']['blue']); + + return $color; +} + +function gd_alpha($img=NULL) { + global $FLIR; + + if(is_null($img)) + global $image; + else + $image = $img; + + if($FLIR['output'] == 'png') { + imagesavealpha($image, true); + imagealphablending($image, false); + } +} + +function fix_path($str) { + return IS_WINDOWS ? str_replace('/', '\\', $str) : str_replace('\\', '/', $str); +} + +function consttrue($const) { + return !defined($const) ? false : constant($const); +} + +function err($k) { + global $ERROR_MSGS; + + die(isset($ERROR_MSGS[$k]) ? $ERROR_MSGS[$k] : 'Unknown Error'); +} + + +/* + manfred at werkzeugH dot at +27-May-2008 04:35 +here is my version for strings with utf8-characters represented as numerical entities (e.g. Ӓ) +*/ + +function utf8_entities_strrev($str, $preserve_numbers = true) +{ + //split string into string-portions (1 byte characters, numerical entitiesor numbers) + + $parts=Array(); + while ($str) + { + if ($preserve_numbers && preg_match('/^([0-9]+)(.*)$/',$str,$m)) + { + // number-flow + $parts[]=$m[1]; + $str=$m[2]; + } + elseif (preg_match('/^(\&#[0-9]+;)(.*)$/',$str,$m)) + { + // numerical entity + $parts[]=$m[1]; + $str=$m[2]; + } + else + { + $parts[]=substr($str,0,1); + $str=substr($str,1); + } + } + + $str=implode(array_reverse($parts),""); + + return $str; +} + + + + + +// PHP Compat stuff +if(!function_exists('json_decode')) { + // very plain json_decode + function json_decode($str, $ignore=true) { + $str = trim($str); + if(!preg_match('#^\{(("[\w]+":"[^"]*",?)*)\}$#i', $str, $m)) return array(); + $data = explode('","', substr($m[1], 1, -1)); + $ret = array(); + for($i=0; $i"; + + // replace numeric entities + $string = preg_replace('~�*([0-9a-f]+);~ei', 'code2utf(hexdec("\\1"))', $string); + $string = preg_replace('~�*([0-9]+);~e', 'code2utf(\\1)', $string); + + // replace literal entities + if (!isset($trans_tbl)) + { + $trans_tbl = array(); + + foreach (get_html_translation_table(HTML_ENTITIES) as $val=>$key) + $trans_tbl[$key] = utf8_encode($val); + } + + return strtr($string, $trans_tbl); + } + + function code2utf($number) + { + if ($number < 0) + return FALSE; + + if ($number < 128) + return chr($number); + + // Removing / Replacing Windows Illegals Characters + if ($number < 160) + { + if ($number==128) $number=8364; + elseif ($number==129) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160 + elseif ($number==130) $number=8218; + elseif ($number==131) $number=402; + elseif ($number==132) $number=8222; + elseif ($number==133) $number=8230; + elseif ($number==134) $number=8224; + elseif ($number==135) $number=8225; + elseif ($number==136) $number=710; + elseif ($number==137) $number=8240; + elseif ($number==138) $number=352; + elseif ($number==139) $number=8249; + elseif ($number==140) $number=338; + elseif ($number==141) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160 + elseif ($number==142) $number=381; + elseif ($number==143) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160 + elseif ($number==144) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160 + elseif ($number==145) $number=8216; + elseif ($number==146) $number=8217; + elseif ($number==147) $number=8220; + elseif ($number==148) $number=8221; + elseif ($number==149) $number=8226; + elseif ($number==150) $number=8211; + elseif ($number==151) $number=8212; + elseif ($number==152) $number=732; + elseif ($number==153) $number=8482; + elseif ($number==154) $number=353; + elseif ($number==155) $number=8250; + elseif ($number==156) $number=339; + elseif ($number==157) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160 + elseif ($number==158) $number=382; + elseif ($number==159) $number=376; + } //if + + if ($number < 2048) + return unichr(($number >> 6) + 192) . unichr(($number & 63) + 128); + if ($number < 65536) + return unichr(($number >> 12) + 224) . unichr((($number >> 6) & 63) + 128) . unichr(($number & 63) + 128); + if ($number < 2097152) + return unichr(($number >> 18) + 240) . unichr((($number >> 12) & 63) + 128) . unichr((($number >> 6) & 63) + 128) . chr(($number & 63) + 128); + + + return FALSE; + } //code2utf() + function unichr($c) { +// echo 'unichr: '.$c."
"; + + if ($c <= 0x7F) { + return chr($c); + } else if ($c <= 0x7FF) { + return chr(0xC0 | $c >> 6) . chr(0x80 | $c & 0x3F); + } else if ($c <= 0xFFFF) { + return chr(0xE0 | $c >> 12) . chr(0x80 | $c >> 6 & 0x3F) + . chr(0x80 | $c & 0x3F); + } else if ($c <= 0x10FFFF) { + return chr(0xF0 | $c >> 18) . chr(0x80 | $c >> 12 & 0x3F) + . chr(0x80 | $c >> 6 & 0x3F) + . chr(0x80 | $c & 0x3F); + } else { + return false; + } + } +}else { + function html_entity_decode_utf8($text) { + return html_entity_decode($text, ENT_QUOTES, 'UTF-8'); + } +} +?> \ No newline at end of file diff --git a/flir/index.html b/flir/index.html new file mode 100644 index 0000000..417d63b --- /dev/null +++ b/flir/index.html @@ -0,0 +1,10 @@ + + + + +Untitled Document + + + + + diff --git a/flir/js-plugins/detectimages.js b/flir/js-plugins/detectimages.js new file mode 100644 index 0000000..d58bbd4 --- /dev/null +++ b/flir/js-plugins/detectimages.js @@ -0,0 +1,112 @@ +/* +FLIR Plugin - DetectImages v1.0 +Facelift was written and is maintained by Cory Mawhorter. +It is available from http://facelift.mawhorter.net/ + +=== + +This file is part of Facelife Image Replacement ("FLIR"). + +FLIR is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +FLIR is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Facelift Image Replacement. If not, see . +*/ + +/* + +To use this plugin, simple include it AFTER you include the flir.js on your page. It will automatically install itself and configure. + +*/ + +var FLIR_DetectImages = { + version: '1.0' + ,imagesDisabled: null + ,inserted_id: 'detectimagestate-test-img' + ,ie_detectionComplete: false + ,callback: function() { } + ,img: null + ,ie_Timeout: 100 + + ,callQueue: [] + + ,init: function() { + this.callback = this._detection_complete; + document.body.innerHTML += ''; + this.img = document.getElementById(this.inserted_id); + + if(window.opera || navigator.userAgent.toLowerCase().indexOf('opera')>-1) { + var pre = this.img.complete; + this.img.src = 'about:blank'; + this.imagesDisabled = (!pre && this.img.complete) ? false : true; + this.callback(this.imagesDisabled); + return; + }else if(FLIR.isIE) { + this.img.src = FLIR.options.path+'generate.php?'+Math.random(); + this.img.onabort = function() { + FLIR_DetectImages.ie_detectionComplete = true; + FLIR_DetectImages.imagesDisabled = false; + FLIR_DetectImages.callback(FLIR_DetectImages.imagesDisabled); + }; + + setTimeout('if(!FLIR_DetectImages.ie_detectionComplete) FLIR_DetectImages.callback(true);', this.ie_Timeout); + return; + }else { + this.imagesDisabled = this.img.complete; + this.callback(this.imagesDisabled); + return; + } + } + + ,_add_to_queue: function(fn,args) { + this.callQueue.push([fn,args]); + } + + ,_detection_complete: function(disabled) { + this.imagesDisabled = disabled; + + if(!disabled) + this._process_queue(); + } + + ,_process_queue: function() { + if(this.callQueue.length > 0) { + for(var i=0; i< this.callQueue.length; i++) { + FLIR[this.callQueue[i][0]].apply(FLIR, this.callQueue[i][1]); + } + } + } + + ,auto: function() { + if(this.imagesDisabled) return false; + if(this.imagesDisabled == null) { + this._add_to_queue('auto', arguments); + return false; + } + + return true; + } + + ,replace: function() { + if(this.imagesDisabled) return false; + if(this.imagesDisabled == null) { + this._add_to_queue('replace', arguments); + return false; + } + + return true; + } + + ,toString: function() { + return '[DetectImages FLIRPlugin]'; + } +}; +FLIR.installPlugin(FLIR_DetectImages); diff --git a/flir/js-plugins/index.html b/flir/js-plugins/index.html new file mode 100644 index 0000000..417d63b --- /dev/null +++ b/flir/js-plugins/index.html @@ -0,0 +1,10 @@ + + + + +Untitled Document + + + + + diff --git a/flir/js-plugins/refreshimages.js b/flir/js-plugins/refreshimages.js new file mode 100644 index 0000000..5a5864d --- /dev/null +++ b/flir/js-plugins/refreshimages.js @@ -0,0 +1,84 @@ +// JavaScript Document + +var FLIR_RefreshImages = { + version: '1.0' + + ,watch_element: null + + ,is_safari: false + ,safari_poll: null + + ,init: function() { + this.watch_element = document.createElement('SPAN'); + this.watch_element.id = 'flir-refreshimages-test' + this.watch_element.style.fontSize = '1em'; + this.watch_element.style.visibility = 'hidden'; + this.watch_element.style.left = this.watch_element.style.top = '-1000px'; + this.watch_element.innerHTML = 'Test'; + document.body.appendChild(this.watch_element); + this.watch_element.previousFontSize = FLIR.getStyle(this.watch_element, 'font-size'); + + var oldresize = window.onresize; + window.onresize = function() { + FLIR_RefreshImages.refreshReplacedImages(); + if(typeof oldresize == 'function') + oldresize(window.event); + }; + + this.is_safari = (navigator.userAgent.search(/safari|chrome/i)>-1); + + if(this.is_safari) + this._init_safari(); + } + + ,_init_safari: function() { + this.safari_poll = setInterval('FLIR_RefreshImages._textsize_watch();', 1000); + } + + ,_textsize_watch: function() { + var csize = FLIR.getStyle(this.watch_element, 'font-size'); + if(this.watch_element.previousFontSize != csize) { + this.refreshReplacedImages(); + this.watch_element.previousFontSize = csize; + } + } + + ,refreshReplacedImages: function() { + for(var i in FLIR.flirElements) { + var o=FLIR.flirElements[i]; + if(o.flirMainObj) + this.refreshReplacedElement(o, FLIR.getFStyle(o)); + } + } + + ,refreshReplacedElement: function(n, FStyle, root) { + if(typeof root == 'undefined') root = n; + + if(FStyle.useBackgroundMethod) + return false; // background method not supported + + if(n && n.hasChildNodes()) { + for(var i in n.childNodes) { + var node = n.childNodes[i]; + if(node && node.nodeType == 1) { + if(node.flirImage) { + var url = FStyle.buildURL(node.alt, node, root.offsetWidth); + n.flirOrig = url; + if(!FLIR.isCraptastic) { + node.src = url; + }else { + node.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+url+'", sizingMethod="image")'; + } + }else { + this.refreshReplacedElement(node, FStyle, root); + } + } + } + } + } + + ,toString: function() { + return '[RefreshImages FLIRPlugin]'; + } +}; +FLIR.installPlugin(FLIR_RefreshImages); diff --git a/flir/plugins/FancyFonts.php b/flir/plugins/FancyFonts.php new file mode 100644 index 0000000..85e43fe --- /dev/null +++ b/flir/plugins/FancyFonts.php @@ -0,0 +1,102 @@ +. +*/ + +$PLUGIN_ERROR = false; +define('FULL_CACHE_PATH', fix_path(getcwd().'/'.$FLIR['cache'])); +define('CONVERT', IM_EXEC_PATH.'convert'); + +if(DEBUG && file_exists(FULL_CACHE_PATH)) + unlink(FULL_CACHE_PATH); + +$image = false; + +if($FLIR['text'][0] == '@') $FLIR['text'] = '\\'.$FLIR['text']; + +$bounds = bounding_box($FLIR['text']);// convertBoundingBox(imagettfbbox($FLIR['size_pts'], 0, $FLIR['font'], $FLIR['text'])); + +$fulltrim = ''; +if($FStyle['realFontHeight']!='true') { + $bounds['height'] += 200; + $REAL_HEIGHT_BOUNDS = $bounds; + $fulltrim = '-trim +repage'; +} + +$fore_hex = dec2hex($FLIR['color']['red'], $FLIR['color']['green'], $FLIR['color']['blue']); +$bkg_hex = $FLIR['output'] == 'png' ? 'transparent' : ('"#'.dec2hex($FLIR['bkgcolor']['red'], $FLIR['bkgcolor']['green'], $FLIR['bkgcolor']['blue']).'"'); + +$opacity = ''; +if($FLIR['opacity'] < 100 && $FLIR['opacity'] >= 0) + $opacity = strlen($FLIR['opacity']) == 1 ? '0'.$FLIR['opacity'] : (strlen($FLIR['opacity'])>2?substr($FLIR['opacity'], 0, 2) : $FLIR['opacity']); + +switch($FStyle['cAlign']) { + case 'center': + $align = 'center'; + break; + default: + $align = 'west'; + break; + case 'right': + $align = 'east'; + break; +} + +if($FStyle['ff_Wrap']=='true') { + $cmd = CONVERT.' -background '.$bkg_hex.' ' + .' -font '.escapeshellarg(fix_path($FLIR['font'])) + .' -fill '.escapeshellarg('#'.$fore_hex.$opacity) + .' -density '.$FLIR['dpi'].' -pointsize '.$FLIR['size_pts'].' -gravity '.$align + .' -size '.$FLIR['maxwidth'].'x' + .' caption:'.escapeshellarg($FLIR['text']) + .' '.escapeshellarg(FULL_CACHE_PATH); +}else { + $xOffset = $bounds['xOffset'] >= 0 ? ('+'.$bounds['xOffset']) : $bounds['xOffset']; + $yOffset = $bounds['yOffset'] >= 0 ? ('+'.$bounds['yOffset']) : $bounds['yOffset']; + $cmd = CONVERT.' -size '.($bounds['width']+300).'x'.$REAL_HEIGHT_BOUNDS['height'].' xc:'.$bkg_hex.' ' + .' -font '.escapeshellarg(fix_path($FLIR['font'])) + .' -fill '.escapeshellarg('#'.$fore_hex.$opacity) + .' -density '.$FLIR['dpi'].' -pointsize '.$FLIR['size_pts'] + .' -annotate 0x0'.$xOffset.$yOffset.' '.escapeshellarg($FLIR['text']) + .' '.$fulltrim.' '.escapeshellarg(FULL_CACHE_PATH); +} + +//die($cmd); +exec($cmd); + +if($FStyle['ff_BlurEdges']=='true') { + $cmd2 = CONVERT.' '.escapeshellarg(FULL_CACHE_PATH).' -matte -virtual-pixel transparent -channel A -blur 0x0.3 -level 0,90% '.escapeshellarg(FULL_CACHE_PATH); + exec($cmd2); +} + + +if($FStyle['ff_Wrap']!='true' && $FStyle['realFontHeight']=='true') { // trim sides + $info = shell_exec(CONVERT.' '.escapeshellarg(FULL_CACHE_PATH).' -trim info:'); + if(preg_match('#(PNG|GIF|JPEG) ([0-9]+)x([0-9]+) ([0-9]+)x([0-9]+)([+-][0-9]+)([+-][0-9]+)#', $info, $m)) + exec(CONVERT.' '.escapeshellarg(FULL_CACHE_PATH) + .' -crop '.$m[2].'x'.$m[5].$m[6].'+0 +repage ' + .escapeshellarg(FULL_CACHE_PATH)); +} +?> \ No newline at end of file diff --git a/flir/plugins/QuickEffects.php b/flir/plugins/QuickEffects.php new file mode 100644 index 0000000..052daf6 --- /dev/null +++ b/flir/plugins/QuickEffects.php @@ -0,0 +1,261 @@ +. +*/ + +function add_girth($wh, $bHeight=false) { + global $add_height,$add_width; + + if($bHeight) + if($wh>$add_height) + $add_height = $wh; + else + if($wh>$add_width) + $add_width = $wh; +} + + +$PLUGIN_ERROR = false; +define('FULL_CACHE_PATH', fix_path(getcwd().'/'.$FLIR['cache'])); +define('QE_DIR', fix_path(getcwd().'/'.PLUGIN_DIR.'/QuickEffects')); +define('CONVERT', IM_EXEC_PATH.'convert'); + +if(!file_exists(QE_DIR)) { + @mkdir(QE_DIR); + if(!file_exists(QE_DIR)) + die('QuickEffects directory does not exists and cannot be created.'); +} + +if(DEBUG && file_exists(FULL_CACHE_PATH)) + unlink(FULL_CACHE_PATH); + +$image = false; + +if($FLIR['text'][0] == '@') $FLIR['text'] = '\\'.$FLIR['text']; +if(substr_count($FLIR['text'], ' ') == strlen($FLIR['text'])) exit; + +$cmdtext = escapeshellarg($FLIR['text']); + +$bounds = convertBoundingBox(imagettfbbox($FLIR['size_pts'], 0, $FLIR['font'], $FLIR['text'])); + +$fulltrim = ''; +if($FStyle['realFontHeight']!='true') { + $bounds['height'] += 200; + $REAL_HEIGHT_BOUNDS = $bounds; + $fulltrim = '-trim +repage '; +} + +$fore_hex = dec2hex($FLIR['color']['red'], $FLIR['color']['green'], $FLIR['color']['blue']); +$bkg_hex = $FLIR['output'] == 'png' ? 'transparent' : ('"#'.dec2hex($FLIR['bkgcolor']['red'], $FLIR['bkgcolor']['green'], $FLIR['bkgcolor']['blue']).'"'); +$out_width = $bounds['width']+300; +$out_height = $REAL_HEIGHT_BOUNDS['height']; + + +$opacity = ''; +if($FLIR['opacity'] < 100 && $FLIR['opacity'] >= 0) + $opacity = strlen($FLIR['opacity']) == 1 ? '0'.$FLIR['opacity'] : (strlen($FLIR['opacity'])>2?substr($FLIR['opacity'], 0, 2) : $FLIR['opacity']); + +$add_width = $add_height = 0; + +$stroke = ''; +$strokewidth = 0; +if(isset($FStyle['qe_Stroke'])) { + list($strokewidth, $strokecolor, $quality) = explode(',', $FStyle['qe_Stroke'], 3); + + $strokewidth=trim($strokewidth); + $strokecolor=trim($strokecolor); + $strokewidth = is_number($strokewidth)?$strokewidth:1; + $strokecolor = escapeshellarg('#'.(is_hexcolor($strokecolor)?strtoupper($strokecolor):'FF0000')); + + if(trim($quality) == 'high') { + for($i=1; $i <= $strokewidth; $i++) { + $stroke .= '-fill '.$strokecolor.' -annotate 0x0-'.$i.'-'.$i.' '.$cmdtext.' '; + $stroke .= '-fill '.$strokecolor.' -annotate 0x0+'.$i.'-'.$i.' '.$cmdtext.' '; + $stroke .= '-fill '.$strokecolor.' -annotate 0x0+'.$i.'+'.$i.' '.$cmdtext.' '; + $stroke .= '-fill '.$strokecolor.' -annotate 0x0-'.$i.'+'.$i.' '.$cmdtext.' '; + } + }else { + $stroke = '-strokewidth '.$strokewidth.' -stroke '.$strokecolor; + } + + add_girth($strokewidth*2); + add_girth($strokewidth*2, true); +} + +$fill = '-fill '.escapeshellarg('#'.$fore_hex.$opacity).' '; +if(isset($FStyle['qe_Fill'])) { + list($fill_type, $fill_options) = explode(',', $FStyle['qe_Fill'], 2); + switch($fill_type) { + case 'pattern': + $pattern_file = QE_DIR.(IS_WINDOWS?'\\':'/').basename($fill_options); + if(!file_exists($pattern_file)) + die('Pattern file does not exists. Be sure that you have uploaded the pattern file to the QuickEffects directory.'); + $fill = '-tile '.escapeshellarg($pattern_file).' '; + break; + default: + case 'gradient': + list($color1, $color2) = explode(',', $fill_options, 2); + $color1 = is_hexcolor($color1)?strtoupper($color1):'999999'; + $color2 = is_hexcolor($color2)?strtoupper($color2):'000000'; + $fill = '-tile gradient:'.escapeshellarg('#'.$color1.$opacity).'-'.escapeshellarg('#'.$color2.$opacity).' '; + break; + } +} + +$extrude = ''; +if(isset($FStyle['qe_Extrude'])) { + list($extrudedirection, $extrudewidth, $extrudecolor) = explode(',', $FStyle['qe_Extrude'], 3); + + $extrudewidth=trim($extrudewidth); + $extrudecolor=trim($extrudecolor); + $extrudewidth = is_number($extrudewidth)?$extrudewidth:1; + $extrudecolor = escapeshellarg('#'.(is_hexcolor($extrudecolor)?strtoupper($extrudecolor):'FF0000').$opacity); + + add_girth($extrudewidth*2); + add_girth($extrudewidth*2, true); + + $offset = $strokewidth; + + for($i=$strokewidth; $i < ($extrudewidth+$strokewidth); $i++) { + $extrude .= '-fill '.$extrudecolor.' -annotate 0x0'; + switch($extrudedirection) { + case 'ne': + $extrude .= '+'.$i.'-'.$i; + break; + case 'nw': + $extrude .= '-'.$i.'-'.$i; + break; + default: + case 'se': + $extrude .= '+'.$i.'+'.$i; + break; + case 'sw': + $extrude .= '-'.$i.'+'.$i; + break; + } + $extrude .= ' '.$cmdtext.' '; + } + + if($offset>0) { + add_girth(($extrudewidth+$strokewidth)*2); + add_girth(($extrudewidth+$strokewidth)*2, true); + }else { + add_girth($extrudewidth*2); + add_girth($extrudewidth*2, true); + } +} + +// SHADOW +$shadow = ''; +if(isset($FStyle['qe_Shadow'])) { + switch($FStyle['qe_Shadow']) { + case 'high': + $shadow = array('opacity' => 55 + ,'sigma' => 3 + ,'left' => '+2' + ,'top' => '+2' + ,'color' => '000000'); + break; + case 'low': + $shadow = array('opacity' => 65 + ,'sigma' => 2 + ,'left' => '+2' + ,'top' => '+2' + ,'color' => '000000'); + break; + case 'fuzzy': + $shadow = array('opacity' => 55 + ,'sigma' => 4 + ,'left' => '+0' + ,'top' => '+0' + ,'color' => '000000'); + break; + case 'hard': + $shadow = array('opacity' => 90 + ,'sigma' => 0 + ,'left' => '+1' + ,'top' => '+1' + ,'color' => '000000'); + break; +/* + case 'perspective': + $shadow = array('opacity' => 75 + ,'sigma' => 0 + ,'left' => '+1' + ,'top' => '+1'); + break; + */ + + default: + list($shadow_opac, $shadow_sig, $shadow_ol, $shadow_ot, $shadow_color) = explode(',', $FStyle['qe_Shadow'], 4); + $shadow_opac = (is_number($shadow_opac) && $shadow_opac<=100) ? $shadow_opac : 75; + $shadow_sig = is_number($shadow_sig)?$shadow_sig:2; + $shadow_ol = preg_match('#^[+-][0-9]{1,4}$#', $shadow_ol)?$shadow_ol:'+2'; + $shadow_ot = preg_match('#^[+-][0-9]{1,4}$#', $shadow_ot)?$shadow_ot:'+2'; + $shadow_color = is_hexcolor($shadow_color)?strtoupper($shadow_color):'FF0000'; + $shadow = array('opacity' => $shadow_opac + ,'sigma' => $shadow_sig + ,'left' => $shadow_ol + ,'top' => $shadow_ot + ,'color' => $shadow_color); + break; + } + + $shadow = (IS_WINDOWS?'':'\\').'( +clone -background '.escapeshellarg('#'.$shadow['color']).' -shadow '.$shadow['opacity'].'x'.$shadow['sigma'].$shadow['left'].$shadow['top'].' '.(IS_WINDOWS?'':'\\').' ) +swap -background none -mosaic -matte '; + + $left = substr($shadow['offset-left'], 1); + $top = substr($shadow['offset-top'], 1); + + if($left>0) + add_girth($left*2); + if($top>0) + add_girth($top*2, true); +} + +$out_width += $add_width; +$out_height += $add_height; + +$cmd = CONVERT.' -size '.$out_width.'x'.$out_height.' xc:'.$bkg_hex.' ' + .'-font '.escapeshellarg(fix_path($FLIR['font'])) + .' -density '.$FLIR['dpi'].' -pointsize '.$FLIR['size_pts'].' -gravity North ' + .$extrude.' ' + .$stroke.' ' + .$fill.' ' + .' -annotate 0 '.$cmdtext.' ' + .$shadow.' ' + .' '.$fulltrim.' '.escapeshellarg(FULL_CACHE_PATH); + +//die($cmd); +exec($cmd); + +if($FStyle['realFontHeight']=='true') { // trim sides + $info = shell_exec(CONVERT.' '.escapeshellarg(FULL_CACHE_PATH).' -trim info:'); + if(preg_match('#(PNG|GIF|JPEG) ([0-9]+)x([0-9]+) ([0-9]+)x([0-9]+)([+-][0-9]+)([+-][0-9]+)#', $info, $m)) + exec(CONVERT.' '.escapeshellarg(FULL_CACHE_PATH) + .' -crop '.$m[2].'x'.$m[5].$m[6].'+0 +repage ' + .escapeshellarg(FULL_CACHE_PATH)); +} + +?> \ No newline at end of file diff --git a/flir/plugins/QuickEffects/qe-pattern-fill-texture.jpg b/flir/plugins/QuickEffects/qe-pattern-fill-texture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9eac7002aa5b3e1c19fb85ef0634bc490c360fc1 GIT binary patch literal 67083 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 (JsU?GJ|(y$L7tB~RLy)k|B2NAVv|D%>Y?~jS+ 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 + + + +Untitled Document + + + + + diff --git a/flir/spacer.png b/flir/spacer.png new file mode 100644 index 0000000000000000000000000000000000000000..bf867a398714bb94d8b6058c1d5d1a64cd41a4c6 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx3?wy9o9qTsEa{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i=?1^9%x0%;&vn!fWqkYX$e@(X5g pcy=QV$l>vHaSW-rm6X81VZgw^#K7pE8~G5V*wfX|Wt~$(699j@CBy&# literal 0 HcmV?d00001 -- 2.34.1