├── .gitignore ├── LICENSE ├── README.md ├── file └── empty ├── requirements.txt ├── static ├── css │ ├── mdui.css │ └── mdui.min.css ├── fonts │ └── roboto │ │ ├── Roboto-Black.eot │ │ ├── Roboto-Black.ttf │ │ ├── Roboto-Black.woff │ │ ├── Roboto-Black.woff2 │ │ ├── Roboto-BlackItalic.eot │ │ ├── Roboto-BlackItalic.ttf │ │ ├── Roboto-BlackItalic.woff │ │ ├── Roboto-BlackItalic.woff2 │ │ ├── Roboto-Bold.eot │ │ ├── Roboto-Bold.ttf │ │ ├── Roboto-Bold.woff │ │ ├── Roboto-Bold.woff2 │ │ ├── Roboto-BoldItalic.eot │ │ ├── Roboto-BoldItalic.ttf │ │ ├── Roboto-BoldItalic.woff │ │ ├── Roboto-BoldItalic.woff2 │ │ ├── Roboto-Light.eot │ │ ├── Roboto-Light.ttf │ │ ├── Roboto-Light.woff │ │ ├── Roboto-Light.woff2 │ │ ├── Roboto-LightItalic.eot │ │ ├── Roboto-LightItalic.ttf │ │ ├── Roboto-LightItalic.woff │ │ ├── Roboto-LightItalic.woff2 │ │ ├── Roboto-Medium.eot │ │ ├── Roboto-Medium.ttf │ │ ├── Roboto-Medium.woff │ │ ├── Roboto-Medium.woff2 │ │ ├── Roboto-MediumItalic.eot │ │ ├── Roboto-MediumItalic.ttf │ │ ├── Roboto-MediumItalic.woff │ │ ├── Roboto-MediumItalic.woff2 │ │ ├── Roboto-Regular.eot │ │ ├── Roboto-Regular.ttf │ │ ├── Roboto-Regular.woff │ │ ├── Roboto-Regular.woff2 │ │ ├── Roboto-RegularItalic.eot │ │ ├── Roboto-RegularItalic.ttf │ │ ├── Roboto-RegularItalic.woff │ │ ├── Roboto-RegularItalic.woff2 │ │ ├── Roboto-Thin.eot │ │ ├── Roboto-Thin.ttf │ │ ├── Roboto-Thin.woff │ │ ├── Roboto-Thin.woff2 │ │ ├── Roboto-ThinItalic.eot │ │ ├── Roboto-ThinItalic.ttf │ │ ├── Roboto-ThinItalic.woff │ │ └── Roboto-ThinItalic.woff2 ├── icons │ └── material-icons │ │ ├── LICENSE.txt │ │ ├── MaterialIcons-Regular.eot │ │ ├── MaterialIcons-Regular.ijmap │ │ ├── MaterialIcons-Regular.svg │ │ ├── MaterialIcons-Regular.ttf │ │ ├── MaterialIcons-Regular.woff │ │ └── MaterialIcons-Regular.woff2 └── js │ ├── mdui.js │ └── mdui.min.js ├── templates ├── info.html ├── read.html ├── success.html └── up.html └── web.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | .hypothesis/ 47 | 48 | # Translations 49 | *.mo 50 | *.pot 51 | 52 | # Django stuff: 53 | *.log 54 | local_settings.py 55 | 56 | # Flask stuff: 57 | instance/ 58 | .webassets-cache 59 | 60 | # Scrapy stuff: 61 | .scrapy 62 | 63 | # Sphinx documentation 64 | docs/_build/ 65 | 66 | # PyBuilder 67 | target/ 68 | 69 | # IPython Notebook 70 | .ipynb_checkpoints 71 | 72 | # pyenv 73 | .python-version 74 | 75 | # celery beat schedule file 76 | celerybeat-schedule 77 | 78 | # dotenv 79 | .env 80 | 81 | # virtualenv 82 | venv/ 83 | ENV/ 84 | 85 | # Spyder project settings 86 | .spyderproject 87 | 88 | # Rope project settings 89 | .ropeproject 90 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | {one line to give the program's name and a brief idea of what it does.} 635 | Copyright (C) {year} {name of author} 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | {project} Copyright (C) {year} {fullname} 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HideByPixel 2 | 一个利用像素隐藏文字的程序 3 | 4 | 5 | ## 使用 6 | ```bash 7 | pip install -r requirements.txt 8 | python web.py 9 | ``` 10 | 11 | 临时文件存储在`file`文件夹中,确保该文件夹可读写。 12 | -------------------------------------------------------------------------------- /file/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/file/empty -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Pillow 2 | Flask 3 | numpy 4 | -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Black.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Black.eot -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Black.ttf -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Black.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Black.woff -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Black.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-BlackItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-BlackItalic.eot -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-BlackItalic.ttf -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-BlackItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-BlackItalic.woff -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-BlackItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-BlackItalic.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Bold.eot -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Bold.ttf -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Bold.woff -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Bold.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-BoldItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-BoldItalic.eot -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-BoldItalic.ttf -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-BoldItalic.woff -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-BoldItalic.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Light.eot -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Light.ttf -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Light.woff -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Light.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-LightItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-LightItalic.eot -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-LightItalic.ttf -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-LightItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-LightItalic.woff -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-LightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-LightItalic.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Medium.eot -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Medium.ttf -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Medium.woff -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Medium.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-MediumItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-MediumItalic.eot -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-MediumItalic.ttf -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-MediumItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-MediumItalic.woff -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-MediumItalic.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Regular.eot -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Regular.ttf -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Regular.woff -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Regular.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-RegularItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-RegularItalic.eot -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-RegularItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-RegularItalic.ttf -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-RegularItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-RegularItalic.woff -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-RegularItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-RegularItalic.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Thin.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Thin.eot -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Thin.ttf -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Thin.woff -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-Thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-Thin.woff2 -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-ThinItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-ThinItalic.eot -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-ThinItalic.ttf -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-ThinItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-ThinItalic.woff -------------------------------------------------------------------------------- /static/fonts/roboto/Roboto-ThinItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/fonts/roboto/Roboto-ThinItalic.woff2 -------------------------------------------------------------------------------- /static/icons/material-icons/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Attribution 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More_considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution 4.0 International Public License 58 | 59 | By exercising the Licensed Rights (defined below), You accept and agree 60 | to be bound by the terms and conditions of this Creative Commons 61 | Attribution 4.0 International Public License ("Public License"). To the 62 | extent this Public License may be interpreted as a contract, You are 63 | granted the Licensed Rights in consideration of Your acceptance of 64 | these terms and conditions, and the Licensor grants You such rights in 65 | consideration of benefits the Licensor receives from making the 66 | Licensed Material available under these terms and conditions. 67 | 68 | 69 | Section 1 -- Definitions. 70 | 71 | a. Adapted Material means material subject to Copyright and Similar 72 | Rights that is derived from or based upon the Licensed Material 73 | and in which the Licensed Material is translated, altered, 74 | arranged, transformed, or otherwise modified in a manner requiring 75 | permission under the Copyright and Similar Rights held by the 76 | Licensor. For purposes of this Public License, where the Licensed 77 | Material is a musical work, performance, or sound recording, 78 | Adapted Material is always produced where the Licensed Material is 79 | synched in timed relation with a moving image. 80 | 81 | b. Adapter's License means the license You apply to Your Copyright 82 | and Similar Rights in Your contributions to Adapted Material in 83 | accordance with the terms and conditions of this Public License. 84 | 85 | c. Copyright and Similar Rights means copyright and/or similar rights 86 | closely related to copyright including, without limitation, 87 | performance, broadcast, sound recording, and Sui Generis Database 88 | Rights, without regard to how the rights are labeled or 89 | categorized. For purposes of this Public License, the rights 90 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 91 | Rights. 92 | 93 | d. Effective Technological Measures means those measures that, in the 94 | absence of proper authority, may not be circumvented under laws 95 | fulfilling obligations under Article 11 of the WIPO Copyright 96 | Treaty adopted on December 20, 1996, and/or similar international 97 | agreements. 98 | 99 | e. Exceptions and Limitations means fair use, fair dealing, and/or 100 | any other exception or limitation to Copyright and Similar Rights 101 | that applies to Your use of the Licensed Material. 102 | 103 | f. Licensed Material means the artistic or literary work, database, 104 | or other material to which the Licensor applied this Public 105 | License. 106 | 107 | g. Licensed Rights means the rights granted to You subject to the 108 | terms and conditions of this Public License, which are limited to 109 | all Copyright and Similar Rights that apply to Your use of the 110 | Licensed Material and that the Licensor has authority to license. 111 | 112 | h. Licensor means the individual(s) or entity(ies) granting rights 113 | under this Public License. 114 | 115 | i. Share means to provide material to the public by any means or 116 | process that requires permission under the Licensed Rights, such 117 | as reproduction, public display, public performance, distribution, 118 | dissemination, communication, or importation, and to make material 119 | available to the public including in ways that members of the 120 | public may access the material from a place and at a time 121 | individually chosen by them. 122 | 123 | j. Sui Generis Database Rights means rights other than copyright 124 | resulting from Directive 96/9/EC of the European Parliament and of 125 | the Council of 11 March 1996 on the legal protection of databases, 126 | as amended and/or succeeded, as well as other essentially 127 | equivalent rights anywhere in the world. 128 | 129 | k. You means the individual or entity exercising the Licensed Rights 130 | under this Public License. Your has a corresponding meaning. 131 | 132 | 133 | Section 2 -- Scope. 134 | 135 | a. License grant. 136 | 137 | 1. Subject to the terms and conditions of this Public License, 138 | the Licensor hereby grants You a worldwide, royalty-free, 139 | non-sublicensable, non-exclusive, irrevocable license to 140 | exercise the Licensed Rights in the Licensed Material to: 141 | 142 | a. reproduce and Share the Licensed Material, in whole or 143 | in part; and 144 | 145 | b. produce, reproduce, and Share Adapted Material. 146 | 147 | 2. Exceptions and Limitations. For the avoidance of doubt, where 148 | Exceptions and Limitations apply to Your use, this Public 149 | License does not apply, and You do not need to comply with 150 | its terms and conditions. 151 | 152 | 3. Term. The term of this Public License is specified in Section 153 | 6(a). 154 | 155 | 4. Media and formats; technical modifications allowed. The 156 | Licensor authorizes You to exercise the Licensed Rights in 157 | all media and formats whether now known or hereafter created, 158 | and to make technical modifications necessary to do so. The 159 | Licensor waives and/or agrees not to assert any right or 160 | authority to forbid You from making technical modifications 161 | necessary to exercise the Licensed Rights, including 162 | technical modifications necessary to circumvent Effective 163 | Technological Measures. For purposes of this Public License, 164 | simply making modifications authorized by this Section 2(a) 165 | (4) never produces Adapted Material. 166 | 167 | 5. Downstream recipients. 168 | 169 | a. Offer from the Licensor -- Licensed Material. Every 170 | recipient of the Licensed Material automatically 171 | receives an offer from the Licensor to exercise the 172 | Licensed Rights under the terms and conditions of this 173 | Public License. 174 | 175 | b. No downstream restrictions. You may not offer or impose 176 | any additional or different terms or conditions on, or 177 | apply any Effective Technological Measures to, the 178 | Licensed Material if doing so restricts exercise of the 179 | Licensed Rights by any recipient of the Licensed 180 | Material. 181 | 182 | 6. No endorsement. Nothing in this Public License constitutes or 183 | may be construed as permission to assert or imply that You 184 | are, or that Your use of the Licensed Material is, connected 185 | with, or sponsored, endorsed, or granted official status by, 186 | the Licensor or others designated to receive attribution as 187 | provided in Section 3(a)(1)(A)(i). 188 | 189 | b. Other rights. 190 | 191 | 1. Moral rights, such as the right of integrity, are not 192 | licensed under this Public License, nor are publicity, 193 | privacy, and/or other similar personality rights; however, to 194 | the extent possible, the Licensor waives and/or agrees not to 195 | assert any such rights held by the Licensor to the limited 196 | extent necessary to allow You to exercise the Licensed 197 | Rights, but not otherwise. 198 | 199 | 2. Patent and trademark rights are not licensed under this 200 | Public License. 201 | 202 | 3. To the extent possible, the Licensor waives any right to 203 | collect royalties from You for the exercise of the Licensed 204 | Rights, whether directly or through a collecting society 205 | under any voluntary or waivable statutory or compulsory 206 | licensing scheme. In all other cases the Licensor expressly 207 | reserves any right to collect such royalties. 208 | 209 | 210 | Section 3 -- License Conditions. 211 | 212 | Your exercise of the Licensed Rights is expressly made subject to the 213 | following conditions. 214 | 215 | a. Attribution. 216 | 217 | 1. If You Share the Licensed Material (including in modified 218 | form), You must: 219 | 220 | a. retain the following if it is supplied by the Licensor 221 | with the Licensed Material: 222 | 223 | i. identification of the creator(s) of the Licensed 224 | Material and any others designated to receive 225 | attribution, in any reasonable manner requested by 226 | the Licensor (including by pseudonym if 227 | designated); 228 | 229 | ii. a copyright notice; 230 | 231 | iii. a notice that refers to this Public License; 232 | 233 | iv. a notice that refers to the disclaimer of 234 | warranties; 235 | 236 | v. a URI or hyperlink to the Licensed Material to the 237 | extent reasonably practicable; 238 | 239 | b. indicate if You modified the Licensed Material and 240 | retain an indication of any previous modifications; and 241 | 242 | c. indicate the Licensed Material is licensed under this 243 | Public License, and include the text of, or the URI or 244 | hyperlink to, this Public License. 245 | 246 | 2. You may satisfy the conditions in Section 3(a)(1) in any 247 | reasonable manner based on the medium, means, and context in 248 | which You Share the Licensed Material. For example, it may be 249 | reasonable to satisfy the conditions by providing a URI or 250 | hyperlink to a resource that includes the required 251 | information. 252 | 253 | 3. If requested by the Licensor, You must remove any of the 254 | information required by Section 3(a)(1)(A) to the extent 255 | reasonably practicable. 256 | 257 | 4. If You Share Adapted Material You produce, the Adapter's 258 | License You apply must not prevent recipients of the Adapted 259 | Material from complying with this Public License. 260 | 261 | 262 | Section 4 -- Sui Generis Database Rights. 263 | 264 | Where the Licensed Rights include Sui Generis Database Rights that 265 | apply to Your use of the Licensed Material: 266 | 267 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 268 | to extract, reuse, reproduce, and Share all or a substantial 269 | portion of the contents of the database; 270 | 271 | b. if You include all or a substantial portion of the database 272 | contents in a database in which You have Sui Generis Database 273 | Rights, then the database in which You have Sui Generis Database 274 | Rights (but not its individual contents) is Adapted Material; and 275 | 276 | c. You must comply with the conditions in Section 3(a) if You Share 277 | all or a substantial portion of the contents of the database. 278 | 279 | For the avoidance of doubt, this Section 4 supplements and does not 280 | replace Your obligations under this Public License where the Licensed 281 | Rights include other Copyright and Similar Rights. 282 | 283 | 284 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 285 | 286 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 287 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 288 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 289 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 290 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 291 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 292 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 293 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 294 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 295 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 296 | 297 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 298 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 299 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 300 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 301 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 302 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 303 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 304 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 305 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 306 | 307 | c. The disclaimer of warranties and limitation of liability provided 308 | above shall be interpreted in a manner that, to the extent 309 | possible, most closely approximates an absolute disclaimer and 310 | waiver of all liability. 311 | 312 | 313 | Section 6 -- Term and Termination. 314 | 315 | a. This Public License applies for the term of the Copyright and 316 | Similar Rights licensed here. However, if You fail to comply with 317 | this Public License, then Your rights under this Public License 318 | terminate automatically. 319 | 320 | b. Where Your right to use the Licensed Material has terminated under 321 | Section 6(a), it reinstates: 322 | 323 | 1. automatically as of the date the violation is cured, provided 324 | it is cured within 30 days of Your discovery of the 325 | violation; or 326 | 327 | 2. upon express reinstatement by the Licensor. 328 | 329 | For the avoidance of doubt, this Section 6(b) does not affect any 330 | right the Licensor may have to seek remedies for Your violations 331 | of this Public License. 332 | 333 | c. For the avoidance of doubt, the Licensor may also offer the 334 | Licensed Material under separate terms or conditions or stop 335 | distributing the Licensed Material at any time; however, doing so 336 | will not terminate this Public License. 337 | 338 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 339 | License. 340 | 341 | 342 | Section 7 -- Other Terms and Conditions. 343 | 344 | a. The Licensor shall not be bound by any additional or different 345 | terms or conditions communicated by You unless expressly agreed. 346 | 347 | b. Any arrangements, understandings, or agreements regarding the 348 | Licensed Material not stated herein are separate from and 349 | independent of the terms and conditions of this Public License. 350 | 351 | 352 | Section 8 -- Interpretation. 353 | 354 | a. For the avoidance of doubt, this Public License does not, and 355 | shall not be interpreted to, reduce, limit, restrict, or impose 356 | conditions on any use of the Licensed Material that could lawfully 357 | be made without permission under this Public License. 358 | 359 | b. To the extent possible, if any provision of this Public License is 360 | deemed unenforceable, it shall be automatically reformed to the 361 | minimum extent necessary to make it enforceable. If the provision 362 | cannot be reformed, it shall be severed from this Public License 363 | without affecting the enforceability of the remaining terms and 364 | conditions. 365 | 366 | c. No term or condition of this Public License will be waived and no 367 | failure to comply consented to unless expressly agreed to by the 368 | Licensor. 369 | 370 | d. Nothing in this Public License constitutes or may be interpreted 371 | as a limitation upon, or waiver of, any privileges and immunities 372 | that apply to the Licensor or You, including from the legal 373 | processes of any jurisdiction or authority. 374 | 375 | 376 | ======================================================================= 377 | 378 | Creative Commons is not a party to its public licenses. 379 | Notwithstanding, Creative Commons may elect to apply one of its public 380 | licenses to material it publishes and in those instances will be 381 | considered the "Licensor." Except for the limited purpose of indicating 382 | that material is shared under a Creative Commons public license or as 383 | otherwise permitted by the Creative Commons policies published at 384 | creativecommons.org/policies, Creative Commons does not authorize the 385 | use of the trademark "Creative Commons" or any other trademark or logo 386 | of Creative Commons without its prior written consent including, 387 | without limitation, in connection with any unauthorized modifications 388 | to any of its public licenses or any other arrangements, 389 | understandings, or agreements concerning use of licensed material. For 390 | the avoidance of doubt, this paragraph does not form part of the public 391 | licenses. 392 | 393 | Creative Commons may be contacted at creativecommons.org. 394 | -------------------------------------------------------------------------------- /static/icons/material-icons/MaterialIcons-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/icons/material-icons/MaterialIcons-Regular.eot -------------------------------------------------------------------------------- /static/icons/material-icons/MaterialIcons-Regular.ijmap: -------------------------------------------------------------------------------- 1 | {"icons":{"e84d":{"name":"3d Rotation"},"eb3b":{"name":"Ac Unit"},"e190":{"name":"Access Alarm"},"e191":{"name":"Access Alarms"},"e192":{"name":"Access Time"},"e84e":{"name":"Accessibility"},"e914":{"name":"Accessible"},"e84f":{"name":"Account Balance"},"e850":{"name":"Account Balance Wallet"},"e851":{"name":"Account Box"},"e853":{"name":"Account Circle"},"e60e":{"name":"Adb"},"e145":{"name":"Add"},"e439":{"name":"Add A Photo"},"e193":{"name":"Add Alarm"},"e003":{"name":"Add Alert"},"e146":{"name":"Add Box"},"e147":{"name":"Add Circle"},"e148":{"name":"Add Circle Outline"},"e567":{"name":"Add Location"},"e854":{"name":"Add Shopping Cart"},"e39d":{"name":"Add To Photos"},"e05c":{"name":"Add To Queue"},"e39e":{"name":"Adjust"},"e630":{"name":"Airline Seat Flat"},"e631":{"name":"Airline Seat Flat Angled"},"e632":{"name":"Airline Seat Individual Suite"},"e633":{"name":"Airline Seat Legroom Extra"},"e634":{"name":"Airline Seat Legroom Normal"},"e635":{"name":"Airline Seat Legroom Reduced"},"e636":{"name":"Airline Seat Recline Extra"},"e637":{"name":"Airline Seat Recline Normal"},"e195":{"name":"Airplanemode Active"},"e194":{"name":"Airplanemode Inactive"},"e055":{"name":"Airplay"},"eb3c":{"name":"Airport Shuttle"},"e855":{"name":"Alarm"},"e856":{"name":"Alarm Add"},"e857":{"name":"Alarm Off"},"e858":{"name":"Alarm On"},"e019":{"name":"Album"},"eb3d":{"name":"All Inclusive"},"e90b":{"name":"All Out"},"e859":{"name":"Android"},"e85a":{"name":"Announcement"},"e5c3":{"name":"Apps"},"e149":{"name":"Archive"},"e5c4":{"name":"Arrow Back"},"e5db":{"name":"Arrow Downward"},"e5c5":{"name":"Arrow Drop Down"},"e5c6":{"name":"Arrow Drop Down Circle"},"e5c7":{"name":"Arrow Drop Up"},"e5c8":{"name":"Arrow Forward"},"e5d8":{"name":"Arrow Upward"},"e060":{"name":"Art Track"},"e85b":{"name":"Aspect Ratio"},"e85c":{"name":"Assessment"},"e85d":{"name":"Assignment"},"e85e":{"name":"Assignment Ind"},"e85f":{"name":"Assignment Late"},"e860":{"name":"Assignment Return"},"e861":{"name":"Assignment Returned"},"e862":{"name":"Assignment Turned In"},"e39f":{"name":"Assistant"},"e3a0":{"name":"Assistant Photo"},"e226":{"name":"Attach File"},"e227":{"name":"Attach Money"},"e2bc":{"name":"Attachment"},"e3a1":{"name":"Audiotrack"},"e863":{"name":"Autorenew"},"e01b":{"name":"Av Timer"},"e14a":{"name":"Backspace"},"e864":{"name":"Backup"},"e19c":{"name":"Battery Alert"},"e1a3":{"name":"Battery Charging Full"},"e1a4":{"name":"Battery Full"},"e1a5":{"name":"Battery Std"},"e1a6":{"name":"Battery Unknown"},"eb3e":{"name":"Beach Access"},"e52d":{"name":"Beenhere"},"e14b":{"name":"Block"},"e1a7":{"name":"Bluetooth"},"e60f":{"name":"Bluetooth Audio"},"e1a8":{"name":"Bluetooth Connected"},"e1a9":{"name":"Bluetooth Disabled"},"e1aa":{"name":"Bluetooth Searching"},"e3a2":{"name":"Blur Circular"},"e3a3":{"name":"Blur Linear"},"e3a4":{"name":"Blur Off"},"e3a5":{"name":"Blur On"},"e865":{"name":"Book"},"e866":{"name":"Bookmark"},"e867":{"name":"Bookmark Border"},"e228":{"name":"Border All"},"e229":{"name":"Border Bottom"},"e22a":{"name":"Border Clear"},"e22b":{"name":"Border Color"},"e22c":{"name":"Border Horizontal"},"e22d":{"name":"Border Inner"},"e22e":{"name":"Border Left"},"e22f":{"name":"Border Outer"},"e230":{"name":"Border Right"},"e231":{"name":"Border Style"},"e232":{"name":"Border Top"},"e233":{"name":"Border Vertical"},"e06b":{"name":"Branding Watermark"},"e3a6":{"name":"Brightness 1"},"e3a7":{"name":"Brightness 2"},"e3a8":{"name":"Brightness 3"},"e3a9":{"name":"Brightness 4"},"e3aa":{"name":"Brightness 5"},"e3ab":{"name":"Brightness 6"},"e3ac":{"name":"Brightness 7"},"e1ab":{"name":"Brightness Auto"},"e1ac":{"name":"Brightness High"},"e1ad":{"name":"Brightness Low"},"e1ae":{"name":"Brightness Medium"},"e3ad":{"name":"Broken Image"},"e3ae":{"name":"Brush"},"e6dd":{"name":"Bubble Chart"},"e868":{"name":"Bug Report"},"e869":{"name":"Build"},"e43c":{"name":"Burst Mode"},"e0af":{"name":"Business"},"eb3f":{"name":"Business Center"},"e86a":{"name":"Cached"},"e7e9":{"name":"Cake"},"e0b0":{"name":"Call"},"e0b1":{"name":"Call End"},"e0b2":{"name":"Call Made"},"e0b3":{"name":"Call Merge"},"e0b4":{"name":"Call Missed"},"e0e4":{"name":"Call Missed Outgoing"},"e0b5":{"name":"Call Received"},"e0b6":{"name":"Call Split"},"e06c":{"name":"Call To Action"},"e3af":{"name":"Camera"},"e3b0":{"name":"Camera Alt"},"e8fc":{"name":"Camera Enhance"},"e3b1":{"name":"Camera Front"},"e3b2":{"name":"Camera Rear"},"e3b3":{"name":"Camera Roll"},"e5c9":{"name":"Cancel"},"e8f6":{"name":"Card Giftcard"},"e8f7":{"name":"Card Membership"},"e8f8":{"name":"Card Travel"},"eb40":{"name":"Casino"},"e307":{"name":"Cast"},"e308":{"name":"Cast Connected"},"e3b4":{"name":"Center Focus Strong"},"e3b5":{"name":"Center Focus Weak"},"e86b":{"name":"Change History"},"e0b7":{"name":"Chat"},"e0ca":{"name":"Chat Bubble"},"e0cb":{"name":"Chat Bubble Outline"},"e5ca":{"name":"Check"},"e834":{"name":"Check Box"},"e835":{"name":"Check Box Outline Blank"},"e86c":{"name":"Check Circle"},"e5cb":{"name":"Chevron Left"},"e5cc":{"name":"Chevron Right"},"eb41":{"name":"Child Care"},"eb42":{"name":"Child Friendly"},"e86d":{"name":"Chrome Reader Mode"},"e86e":{"name":"Class"},"e14c":{"name":"Clear"},"e0b8":{"name":"Clear All"},"e5cd":{"name":"Close"},"e01c":{"name":"Closed Caption"},"e2bd":{"name":"Cloud"},"e2be":{"name":"Cloud Circle"},"e2bf":{"name":"Cloud Done"},"e2c0":{"name":"Cloud Download"},"e2c1":{"name":"Cloud Off"},"e2c2":{"name":"Cloud Queue"},"e2c3":{"name":"Cloud Upload"},"e86f":{"name":"Code"},"e3b6":{"name":"Collections"},"e431":{"name":"Collections Bookmark"},"e3b7":{"name":"Color Lens"},"e3b8":{"name":"Colorize"},"e0b9":{"name":"Comment"},"e3b9":{"name":"Compare"},"e915":{"name":"Compare Arrows"},"e30a":{"name":"Computer"},"e638":{"name":"Confirmation Number"},"e0d0":{"name":"Contact Mail"},"e0cf":{"name":"Contact Phone"},"e0ba":{"name":"Contacts"},"e14d":{"name":"Content Copy"},"e14e":{"name":"Content Cut"},"e14f":{"name":"Content Paste"},"e3ba":{"name":"Control Point"},"e3bb":{"name":"Control Point Duplicate"},"e90c":{"name":"Copyright"},"e150":{"name":"Create"},"e2cc":{"name":"Create New Folder"},"e870":{"name":"Credit Card"},"e3be":{"name":"Crop"},"e3bc":{"name":"Crop 16 9"},"e3bd":{"name":"Crop 3 2"},"e3bf":{"name":"Crop 5 4"},"e3c0":{"name":"Crop 7 5"},"e3c1":{"name":"Crop Din"},"e3c2":{"name":"Crop Free"},"e3c3":{"name":"Crop Landscape"},"e3c4":{"name":"Crop Original"},"e3c5":{"name":"Crop Portrait"},"e437":{"name":"Crop Rotate"},"e3c6":{"name":"Crop Square"},"e871":{"name":"Dashboard"},"e1af":{"name":"Data Usage"},"e916":{"name":"Date Range"},"e3c7":{"name":"Dehaze"},"e872":{"name":"Delete"},"e92b":{"name":"Delete Forever"},"e16c":{"name":"Delete Sweep"},"e873":{"name":"Description"},"e30b":{"name":"Desktop Mac"},"e30c":{"name":"Desktop Windows"},"e3c8":{"name":"Details"},"e30d":{"name":"Developer Board"},"e1b0":{"name":"Developer Mode"},"e335":{"name":"Device Hub"},"e1b1":{"name":"Devices"},"e337":{"name":"Devices Other"},"e0bb":{"name":"Dialer Sip"},"e0bc":{"name":"Dialpad"},"e52e":{"name":"Directions"},"e52f":{"name":"Directions Bike"},"e532":{"name":"Directions Boat"},"e530":{"name":"Directions Bus"},"e531":{"name":"Directions Car"},"e534":{"name":"Directions Railway"},"e566":{"name":"Directions Run"},"e533":{"name":"Directions Subway"},"e535":{"name":"Directions Transit"},"e536":{"name":"Directions Walk"},"e610":{"name":"Disc Full"},"e875":{"name":"Dns"},"e612":{"name":"Do Not Disturb"},"e611":{"name":"Do Not Disturb Alt"},"e643":{"name":"Do Not Disturb Off"},"e644":{"name":"Do Not Disturb On"},"e30e":{"name":"Dock"},"e7ee":{"name":"Domain"},"e876":{"name":"Done"},"e877":{"name":"Done All"},"e917":{"name":"Donut Large"},"e918":{"name":"Donut Small"},"e151":{"name":"Drafts"},"e25d":{"name":"Drag Handle"},"e613":{"name":"Drive Eta"},"e1b2":{"name":"Dvr"},"e3c9":{"name":"Edit"},"e568":{"name":"Edit Location"},"e8fb":{"name":"Eject"},"e0be":{"name":"Email"},"e63f":{"name":"Enhanced Encryption"},"e01d":{"name":"Equalizer"},"e000":{"name":"Error"},"e001":{"name":"Error Outline"},"e926":{"name":"Euro Symbol"},"e56d":{"name":"Ev Station"},"e878":{"name":"Event"},"e614":{"name":"Event Available"},"e615":{"name":"Event Busy"},"e616":{"name":"Event Note"},"e903":{"name":"Event Seat"},"e879":{"name":"Exit To App"},"e5ce":{"name":"Expand Less"},"e5cf":{"name":"Expand More"},"e01e":{"name":"Explicit"},"e87a":{"name":"Explore"},"e3ca":{"name":"Exposure"},"e3cb":{"name":"Exposure Neg 1"},"e3cc":{"name":"Exposure Neg 2"},"e3cd":{"name":"Exposure Plus 1"},"e3ce":{"name":"Exposure Plus 2"},"e3cf":{"name":"Exposure Zero"},"e87b":{"name":"Extension"},"e87c":{"name":"Face"},"e01f":{"name":"Fast Forward"},"e020":{"name":"Fast Rewind"},"e87d":{"name":"Favorite"},"e87e":{"name":"Favorite Border"},"e06d":{"name":"Featured Play List"},"e06e":{"name":"Featured Video"},"e87f":{"name":"Feedback"},"e05d":{"name":"Fiber Dvr"},"e061":{"name":"Fiber Manual Record"},"e05e":{"name":"Fiber New"},"e06a":{"name":"Fiber Pin"},"e062":{"name":"Fiber Smart Record"},"e2c4":{"name":"File Download"},"e2c6":{"name":"File Upload"},"e3d3":{"name":"Filter"},"e3d0":{"name":"Filter 1"},"e3d1":{"name":"Filter 2"},"e3d2":{"name":"Filter 3"},"e3d4":{"name":"Filter 4"},"e3d5":{"name":"Filter 5"},"e3d6":{"name":"Filter 6"},"e3d7":{"name":"Filter 7"},"e3d8":{"name":"Filter 8"},"e3d9":{"name":"Filter 9"},"e3da":{"name":"Filter 9 Plus"},"e3db":{"name":"Filter B And W"},"e3dc":{"name":"Filter Center Focus"},"e3dd":{"name":"Filter Drama"},"e3de":{"name":"Filter Frames"},"e3df":{"name":"Filter Hdr"},"e152":{"name":"Filter List"},"e3e0":{"name":"Filter None"},"e3e2":{"name":"Filter Tilt Shift"},"e3e3":{"name":"Filter Vintage"},"e880":{"name":"Find In Page"},"e881":{"name":"Find Replace"},"e90d":{"name":"Fingerprint"},"e5dc":{"name":"First Page"},"eb43":{"name":"Fitness Center"},"e153":{"name":"Flag"},"e3e4":{"name":"Flare"},"e3e5":{"name":"Flash Auto"},"e3e6":{"name":"Flash Off"},"e3e7":{"name":"Flash On"},"e539":{"name":"Flight"},"e904":{"name":"Flight Land"},"e905":{"name":"Flight Takeoff"},"e3e8":{"name":"Flip"},"e882":{"name":"Flip To Back"},"e883":{"name":"Flip To Front"},"e2c7":{"name":"Folder"},"e2c8":{"name":"Folder Open"},"e2c9":{"name":"Folder Shared"},"e617":{"name":"Folder Special"},"e167":{"name":"Font Download"},"e234":{"name":"Format Align Center"},"e235":{"name":"Format Align Justify"},"e236":{"name":"Format Align Left"},"e237":{"name":"Format Align Right"},"e238":{"name":"Format Bold"},"e239":{"name":"Format Clear"},"e23a":{"name":"Format Color Fill"},"e23b":{"name":"Format Color Reset"},"e23c":{"name":"Format Color Text"},"e23d":{"name":"Format Indent Decrease"},"e23e":{"name":"Format Indent Increase"},"e23f":{"name":"Format Italic"},"e240":{"name":"Format Line Spacing"},"e241":{"name":"Format List Bulleted"},"e242":{"name":"Format List Numbered"},"e243":{"name":"Format Paint"},"e244":{"name":"Format Quote"},"e25e":{"name":"Format Shapes"},"e245":{"name":"Format Size"},"e246":{"name":"Format Strikethrough"},"e247":{"name":"Format Textdirection L To R"},"e248":{"name":"Format Textdirection R To L"},"e249":{"name":"Format Underlined"},"e0bf":{"name":"Forum"},"e154":{"name":"Forward"},"e056":{"name":"Forward 10"},"e057":{"name":"Forward 30"},"e058":{"name":"Forward 5"},"eb44":{"name":"Free Breakfast"},"e5d0":{"name":"Fullscreen"},"e5d1":{"name":"Fullscreen Exit"},"e24a":{"name":"Functions"},"e927":{"name":"G Translate"},"e30f":{"name":"Gamepad"},"e021":{"name":"Games"},"e90e":{"name":"Gavel"},"e155":{"name":"Gesture"},"e884":{"name":"Get App"},"e908":{"name":"Gif"},"eb45":{"name":"Golf Course"},"e1b3":{"name":"Gps Fixed"},"e1b4":{"name":"Gps Not Fixed"},"e1b5":{"name":"Gps Off"},"e885":{"name":"Grade"},"e3e9":{"name":"Gradient"},"e3ea":{"name":"Grain"},"e1b8":{"name":"Graphic Eq"},"e3eb":{"name":"Grid Off"},"e3ec":{"name":"Grid On"},"e7ef":{"name":"Group"},"e7f0":{"name":"Group Add"},"e886":{"name":"Group Work"},"e052":{"name":"Hd"},"e3ed":{"name":"Hdr Off"},"e3ee":{"name":"Hdr On"},"e3f1":{"name":"Hdr Strong"},"e3f2":{"name":"Hdr Weak"},"e310":{"name":"Headset"},"e311":{"name":"Headset Mic"},"e3f3":{"name":"Healing"},"e023":{"name":"Hearing"},"e887":{"name":"Help"},"e8fd":{"name":"Help Outline"},"e024":{"name":"High Quality"},"e25f":{"name":"Highlight"},"e888":{"name":"Highlight Off"},"e889":{"name":"History"},"e88a":{"name":"Home"},"eb46":{"name":"Hot Tub"},"e53a":{"name":"Hotel"},"e88b":{"name":"Hourglass Empty"},"e88c":{"name":"Hourglass Full"},"e902":{"name":"Http"},"e88d":{"name":"Https"},"e3f4":{"name":"Image"},"e3f5":{"name":"Image Aspect Ratio"},"e0e0":{"name":"Import Contacts"},"e0c3":{"name":"Import Export"},"e912":{"name":"Important Devices"},"e156":{"name":"Inbox"},"e909":{"name":"Indeterminate Check Box"},"e88e":{"name":"Info"},"e88f":{"name":"Info Outline"},"e890":{"name":"Input"},"e24b":{"name":"Insert Chart"},"e24c":{"name":"Insert Comment"},"e24d":{"name":"Insert Drive File"},"e24e":{"name":"Insert Emoticon"},"e24f":{"name":"Insert Invitation"},"e250":{"name":"Insert Link"},"e251":{"name":"Insert Photo"},"e891":{"name":"Invert Colors"},"e0c4":{"name":"Invert Colors Off"},"e3f6":{"name":"Iso"},"e312":{"name":"Keyboard"},"e313":{"name":"Keyboard Arrow Down"},"e314":{"name":"Keyboard Arrow Left"},"e315":{"name":"Keyboard Arrow Right"},"e316":{"name":"Keyboard Arrow Up"},"e317":{"name":"Keyboard Backspace"},"e318":{"name":"Keyboard Capslock"},"e31a":{"name":"Keyboard Hide"},"e31b":{"name":"Keyboard Return"},"e31c":{"name":"Keyboard Tab"},"e31d":{"name":"Keyboard Voice"},"eb47":{"name":"Kitchen"},"e892":{"name":"Label"},"e893":{"name":"Label Outline"},"e3f7":{"name":"Landscape"},"e894":{"name":"Language"},"e31e":{"name":"Laptop"},"e31f":{"name":"Laptop Chromebook"},"e320":{"name":"Laptop Mac"},"e321":{"name":"Laptop Windows"},"e5dd":{"name":"Last Page"},"e895":{"name":"Launch"},"e53b":{"name":"Layers"},"e53c":{"name":"Layers Clear"},"e3f8":{"name":"Leak Add"},"e3f9":{"name":"Leak Remove"},"e3fa":{"name":"Lens"},"e02e":{"name":"Library Add"},"e02f":{"name":"Library Books"},"e030":{"name":"Library Music"},"e90f":{"name":"Lightbulb Outline"},"e919":{"name":"Line Style"},"e91a":{"name":"Line Weight"},"e260":{"name":"Linear Scale"},"e157":{"name":"Link"},"e438":{"name":"Linked Camera"},"e896":{"name":"List"},"e0c6":{"name":"Live Help"},"e639":{"name":"Live Tv"},"e53f":{"name":"Local Activity"},"e53d":{"name":"Local Airport"},"e53e":{"name":"Local Atm"},"e540":{"name":"Local Bar"},"e541":{"name":"Local Cafe"},"e542":{"name":"Local Car Wash"},"e543":{"name":"Local Convenience Store"},"e556":{"name":"Local Dining"},"e544":{"name":"Local Drink"},"e545":{"name":"Local Florist"},"e546":{"name":"Local Gas Station"},"e547":{"name":"Local Grocery Store"},"e548":{"name":"Local Hospital"},"e549":{"name":"Local Hotel"},"e54a":{"name":"Local Laundry Service"},"e54b":{"name":"Local Library"},"e54c":{"name":"Local Mall"},"e54d":{"name":"Local Movies"},"e54e":{"name":"Local Offer"},"e54f":{"name":"Local Parking"},"e550":{"name":"Local Pharmacy"},"e551":{"name":"Local Phone"},"e552":{"name":"Local Pizza"},"e553":{"name":"Local Play"},"e554":{"name":"Local Post Office"},"e555":{"name":"Local Printshop"},"e557":{"name":"Local See"},"e558":{"name":"Local Shipping"},"e559":{"name":"Local Taxi"},"e7f1":{"name":"Location City"},"e1b6":{"name":"Location Disabled"},"e0c7":{"name":"Location Off"},"e0c8":{"name":"Location On"},"e1b7":{"name":"Location Searching"},"e897":{"name":"Lock"},"e898":{"name":"Lock Open"},"e899":{"name":"Lock Outline"},"e3fc":{"name":"Looks"},"e3fb":{"name":"Looks 3"},"e3fd":{"name":"Looks 4"},"e3fe":{"name":"Looks 5"},"e3ff":{"name":"Looks 6"},"e400":{"name":"Looks One"},"e401":{"name":"Looks Two"},"e028":{"name":"Loop"},"e402":{"name":"Loupe"},"e16d":{"name":"Low Priority"},"e89a":{"name":"Loyalty"},"e158":{"name":"Mail"},"e0e1":{"name":"Mail Outline"},"e55b":{"name":"Map"},"e159":{"name":"Markunread"},"e89b":{"name":"Markunread Mailbox"},"e322":{"name":"Memory"},"e5d2":{"name":"Menu"},"e252":{"name":"Merge Type"},"e0c9":{"name":"Message"},"e029":{"name":"Mic"},"e02a":{"name":"Mic None"},"e02b":{"name":"Mic Off"},"e618":{"name":"Mms"},"e253":{"name":"Mode Comment"},"e254":{"name":"Mode Edit"},"e263":{"name":"Monetization On"},"e25c":{"name":"Money Off"},"e403":{"name":"Monochrome Photos"},"e7f2":{"name":"Mood"},"e7f3":{"name":"Mood Bad"},"e619":{"name":"More"},"e5d3":{"name":"More Horiz"},"e5d4":{"name":"More Vert"},"e91b":{"name":"Motorcycle"},"e323":{"name":"Mouse"},"e168":{"name":"Move To Inbox"},"e02c":{"name":"Movie"},"e404":{"name":"Movie Creation"},"e43a":{"name":"Movie Filter"},"e6df":{"name":"Multiline Chart"},"e405":{"name":"Music Note"},"e063":{"name":"Music Video"},"e55c":{"name":"My Location"},"e406":{"name":"Nature"},"e407":{"name":"Nature People"},"e408":{"name":"Navigate Before"},"e409":{"name":"Navigate Next"},"e55d":{"name":"Navigation"},"e569":{"name":"Near Me"},"e1b9":{"name":"Network Cell"},"e640":{"name":"Network Check"},"e61a":{"name":"Network Locked"},"e1ba":{"name":"Network Wifi"},"e031":{"name":"New Releases"},"e16a":{"name":"Next Week"},"e1bb":{"name":"Nfc"},"e641":{"name":"No Encryption"},"e0cc":{"name":"No Sim"},"e033":{"name":"Not Interested"},"e06f":{"name":"Note"},"e89c":{"name":"Note Add"},"e7f4":{"name":"Notifications"},"e7f7":{"name":"Notifications Active"},"e7f5":{"name":"Notifications None"},"e7f6":{"name":"Notifications Off"},"e7f8":{"name":"Notifications Paused"},"e90a":{"name":"Offline Pin"},"e63a":{"name":"Ondemand Video"},"e91c":{"name":"Opacity"},"e89d":{"name":"Open In Browser"},"e89e":{"name":"Open In New"},"e89f":{"name":"Open With"},"e7f9":{"name":"Pages"},"e8a0":{"name":"Pageview"},"e40a":{"name":"Palette"},"e925":{"name":"Pan Tool"},"e40b":{"name":"Panorama"},"e40c":{"name":"Panorama Fish Eye"},"e40d":{"name":"Panorama Horizontal"},"e40e":{"name":"Panorama Vertical"},"e40f":{"name":"Panorama Wide Angle"},"e7fa":{"name":"Party Mode"},"e034":{"name":"Pause"},"e035":{"name":"Pause Circle Filled"},"e036":{"name":"Pause Circle Outline"},"e8a1":{"name":"Payment"},"e7fb":{"name":"People"},"e7fc":{"name":"People Outline"},"e8a2":{"name":"Perm Camera Mic"},"e8a3":{"name":"Perm Contact Calendar"},"e8a4":{"name":"Perm Data Setting"},"e8a5":{"name":"Perm Device Information"},"e8a6":{"name":"Perm Identity"},"e8a7":{"name":"Perm Media"},"e8a8":{"name":"Perm Phone Msg"},"e8a9":{"name":"Perm Scan Wifi"},"e7fd":{"name":"Person"},"e7fe":{"name":"Person Add"},"e7ff":{"name":"Person Outline"},"e55a":{"name":"Person Pin"},"e56a":{"name":"Person Pin Circle"},"e63b":{"name":"Personal Video"},"e91d":{"name":"Pets"},"e0cd":{"name":"Phone"},"e324":{"name":"Phone Android"},"e61b":{"name":"Phone Bluetooth Speaker"},"e61c":{"name":"Phone Forwarded"},"e61d":{"name":"Phone In Talk"},"e325":{"name":"Phone Iphone"},"e61e":{"name":"Phone Locked"},"e61f":{"name":"Phone Missed"},"e620":{"name":"Phone Paused"},"e326":{"name":"Phonelink"},"e0db":{"name":"Phonelink Erase"},"e0dc":{"name":"Phonelink Lock"},"e327":{"name":"Phonelink Off"},"e0dd":{"name":"Phonelink Ring"},"e0de":{"name":"Phonelink Setup"},"e410":{"name":"Photo"},"e411":{"name":"Photo Album"},"e412":{"name":"Photo Camera"},"e43b":{"name":"Photo Filter"},"e413":{"name":"Photo Library"},"e432":{"name":"Photo Size Select Actual"},"e433":{"name":"Photo Size Select Large"},"e434":{"name":"Photo Size Select Small"},"e415":{"name":"Picture As Pdf"},"e8aa":{"name":"Picture In Picture"},"e911":{"name":"Picture In Picture Alt"},"e6c4":{"name":"Pie Chart"},"e6c5":{"name":"Pie Chart Outlined"},"e55e":{"name":"Pin Drop"},"e55f":{"name":"Place"},"e037":{"name":"Play Arrow"},"e038":{"name":"Play Circle Filled"},"e039":{"name":"Play Circle Outline"},"e906":{"name":"Play For Work"},"e03b":{"name":"Playlist Add"},"e065":{"name":"Playlist Add Check"},"e05f":{"name":"Playlist Play"},"e800":{"name":"Plus One"},"e801":{"name":"Poll"},"e8ab":{"name":"Polymer"},"eb48":{"name":"Pool"},"e0ce":{"name":"Portable Wifi Off"},"e416":{"name":"Portrait"},"e63c":{"name":"Power"},"e336":{"name":"Power Input"},"e8ac":{"name":"Power Settings New"},"e91e":{"name":"Pregnant Woman"},"e0df":{"name":"Present To All"},"e8ad":{"name":"Print"},"e645":{"name":"Priority High"},"e80b":{"name":"Public"},"e255":{"name":"Publish"},"e8ae":{"name":"Query Builder"},"e8af":{"name":"Question Answer"},"e03c":{"name":"Queue"},"e03d":{"name":"Queue Music"},"e066":{"name":"Queue Play Next"},"e03e":{"name":"Radio"},"e837":{"name":"Radio Button Checked"},"e836":{"name":"Radio Button Unchecked"},"e560":{"name":"Rate Review"},"e8b0":{"name":"Receipt"},"e03f":{"name":"Recent Actors"},"e91f":{"name":"Record Voice Over"},"e8b1":{"name":"Redeem"},"e15a":{"name":"Redo"},"e5d5":{"name":"Refresh"},"e15b":{"name":"Remove"},"e15c":{"name":"Remove Circle"},"e15d":{"name":"Remove Circle Outline"},"e067":{"name":"Remove From Queue"},"e417":{"name":"Remove Red Eye"},"e928":{"name":"Remove Shopping Cart"},"e8fe":{"name":"Reorder"},"e040":{"name":"Repeat"},"e041":{"name":"Repeat One"},"e042":{"name":"Replay"},"e059":{"name":"Replay 10"},"e05a":{"name":"Replay 30"},"e05b":{"name":"Replay 5"},"e15e":{"name":"Reply"},"e15f":{"name":"Reply All"},"e160":{"name":"Report"},"e8b2":{"name":"Report Problem"},"e56c":{"name":"Restaurant"},"e561":{"name":"Restaurant Menu"},"e8b3":{"name":"Restore"},"e929":{"name":"Restore Page"},"e0d1":{"name":"Ring Volume"},"e8b4":{"name":"Room"},"eb49":{"name":"Room Service"},"e418":{"name":"Rotate 90 Degrees Ccw"},"e419":{"name":"Rotate Left"},"e41a":{"name":"Rotate Right"},"e920":{"name":"Rounded Corner"},"e328":{"name":"Router"},"e921":{"name":"Rowing"},"e0e5":{"name":"Rss Feed"},"e642":{"name":"Rv Hookup"},"e562":{"name":"Satellite"},"e161":{"name":"Save"},"e329":{"name":"Scanner"},"e8b5":{"name":"Schedule"},"e80c":{"name":"School"},"e1be":{"name":"Screen Lock Landscape"},"e1bf":{"name":"Screen Lock Portrait"},"e1c0":{"name":"Screen Lock Rotation"},"e1c1":{"name":"Screen Rotation"},"e0e2":{"name":"Screen Share"},"e623":{"name":"Sd Card"},"e1c2":{"name":"Sd Storage"},"e8b6":{"name":"Search"},"e32a":{"name":"Security"},"e162":{"name":"Select All"},"e163":{"name":"Send"},"e811":{"name":"Sentiment Dissatisfied"},"e812":{"name":"Sentiment Neutral"},"e813":{"name":"Sentiment Satisfied"},"e814":{"name":"Sentiment Very Dissatisfied"},"e815":{"name":"Sentiment Very Satisfied"},"e8b8":{"name":"Settings"},"e8b9":{"name":"Settings Applications"},"e8ba":{"name":"Settings Backup Restore"},"e8bb":{"name":"Settings Bluetooth"},"e8bd":{"name":"Settings Brightness"},"e8bc":{"name":"Settings Cell"},"e8be":{"name":"Settings Ethernet"},"e8bf":{"name":"Settings Input Antenna"},"e8c0":{"name":"Settings Input Component"},"e8c1":{"name":"Settings Input Composite"},"e8c2":{"name":"Settings Input Hdmi"},"e8c3":{"name":"Settings Input Svideo"},"e8c4":{"name":"Settings Overscan"},"e8c5":{"name":"Settings Phone"},"e8c6":{"name":"Settings Power"},"e8c7":{"name":"Settings Remote"},"e1c3":{"name":"Settings System Daydream"},"e8c8":{"name":"Settings Voice"},"e80d":{"name":"Share"},"e8c9":{"name":"Shop"},"e8ca":{"name":"Shop Two"},"e8cb":{"name":"Shopping Basket"},"e8cc":{"name":"Shopping Cart"},"e261":{"name":"Short Text"},"e6e1":{"name":"Show Chart"},"e043":{"name":"Shuffle"},"e1c8":{"name":"Signal Cellular 4 Bar"},"e1cd":{"name":"Signal Cellular Connected No Internet 4 Bar"},"e1ce":{"name":"Signal Cellular No Sim"},"e1cf":{"name":"Signal Cellular Null"},"e1d0":{"name":"Signal Cellular Off"},"e1d8":{"name":"Signal Wifi 4 Bar"},"e1d9":{"name":"Signal Wifi 4 Bar Lock"},"e1da":{"name":"Signal Wifi Off"},"e32b":{"name":"Sim Card"},"e624":{"name":"Sim Card Alert"},"e044":{"name":"Skip Next"},"e045":{"name":"Skip Previous"},"e41b":{"name":"Slideshow"},"e068":{"name":"Slow Motion Video"},"e32c":{"name":"Smartphone"},"eb4a":{"name":"Smoke Free"},"eb4b":{"name":"Smoking Rooms"},"e625":{"name":"Sms"},"e626":{"name":"Sms Failed"},"e046":{"name":"Snooze"},"e164":{"name":"Sort"},"e053":{"name":"Sort By Alpha"},"eb4c":{"name":"Spa"},"e256":{"name":"Space Bar"},"e32d":{"name":"Speaker"},"e32e":{"name":"Speaker Group"},"e8cd":{"name":"Speaker Notes"},"e92a":{"name":"Speaker Notes Off"},"e0d2":{"name":"Speaker Phone"},"e8ce":{"name":"Spellcheck"},"e838":{"name":"Star"},"e83a":{"name":"Star Border"},"e839":{"name":"Star Half"},"e8d0":{"name":"Stars"},"e0d3":{"name":"Stay Current Landscape"},"e0d4":{"name":"Stay Current Portrait"},"e0d5":{"name":"Stay Primary Landscape"},"e0d6":{"name":"Stay Primary Portrait"},"e047":{"name":"Stop"},"e0e3":{"name":"Stop Screen Share"},"e1db":{"name":"Storage"},"e8d1":{"name":"Store"},"e563":{"name":"Store Mall Directory"},"e41c":{"name":"Straighten"},"e56e":{"name":"Streetview"},"e257":{"name":"Strikethrough S"},"e41d":{"name":"Style"},"e5d9":{"name":"Subdirectory Arrow Left"},"e5da":{"name":"Subdirectory Arrow Right"},"e8d2":{"name":"Subject"},"e064":{"name":"Subscriptions"},"e048":{"name":"Subtitles"},"e56f":{"name":"Subway"},"e8d3":{"name":"Supervisor Account"},"e049":{"name":"Surround Sound"},"e0d7":{"name":"Swap Calls"},"e8d4":{"name":"Swap Horiz"},"e8d5":{"name":"Swap Vert"},"e8d6":{"name":"Swap Vertical Circle"},"e41e":{"name":"Switch Camera"},"e41f":{"name":"Switch Video"},"e627":{"name":"Sync"},"e628":{"name":"Sync Disabled"},"e629":{"name":"Sync Problem"},"e62a":{"name":"System Update"},"e8d7":{"name":"System Update Alt"},"e8d8":{"name":"Tab"},"e8d9":{"name":"Tab Unselected"},"e32f":{"name":"Tablet"},"e330":{"name":"Tablet Android"},"e331":{"name":"Tablet Mac"},"e420":{"name":"Tag Faces"},"e62b":{"name":"Tap And Play"},"e564":{"name":"Terrain"},"e262":{"name":"Text Fields"},"e165":{"name":"Text Format"},"e0d8":{"name":"Textsms"},"e421":{"name":"Texture"},"e8da":{"name":"Theaters"},"e8db":{"name":"Thumb Down"},"e8dc":{"name":"Thumb Up"},"e8dd":{"name":"Thumbs Up Down"},"e62c":{"name":"Time To Leave"},"e422":{"name":"Timelapse"},"e922":{"name":"Timeline"},"e425":{"name":"Timer"},"e423":{"name":"Timer 10"},"e424":{"name":"Timer 3"},"e426":{"name":"Timer Off"},"e264":{"name":"Title"},"e8de":{"name":"Toc"},"e8df":{"name":"Today"},"e8e0":{"name":"Toll"},"e427":{"name":"Tonality"},"e913":{"name":"Touch App"},"e332":{"name":"Toys"},"e8e1":{"name":"Track Changes"},"e565":{"name":"Traffic"},"e570":{"name":"Train"},"e571":{"name":"Tram"},"e572":{"name":"Transfer Within A Station"},"e428":{"name":"Transform"},"e8e2":{"name":"Translate"},"e8e3":{"name":"Trending Down"},"e8e4":{"name":"Trending Flat"},"e8e5":{"name":"Trending Up"},"e429":{"name":"Tune"},"e8e6":{"name":"Turned In"},"e8e7":{"name":"Turned In Not"},"e333":{"name":"Tv"},"e169":{"name":"Unarchive"},"e166":{"name":"Undo"},"e5d6":{"name":"Unfold Less"},"e5d7":{"name":"Unfold More"},"e923":{"name":"Update"},"e1e0":{"name":"Usb"},"e8e8":{"name":"Verified User"},"e258":{"name":"Vertical Align Bottom"},"e259":{"name":"Vertical Align Center"},"e25a":{"name":"Vertical Align Top"},"e62d":{"name":"Vibration"},"e070":{"name":"Video Call"},"e071":{"name":"Video Label"},"e04a":{"name":"Video Library"},"e04b":{"name":"Videocam"},"e04c":{"name":"Videocam Off"},"e338":{"name":"Videogame Asset"},"e8e9":{"name":"View Agenda"},"e8ea":{"name":"View Array"},"e8eb":{"name":"View Carousel"},"e8ec":{"name":"View Column"},"e42a":{"name":"View Comfy"},"e42b":{"name":"View Compact"},"e8ed":{"name":"View Day"},"e8ee":{"name":"View Headline"},"e8ef":{"name":"View List"},"e8f0":{"name":"View Module"},"e8f1":{"name":"View Quilt"},"e8f2":{"name":"View Stream"},"e8f3":{"name":"View Week"},"e435":{"name":"Vignette"},"e8f4":{"name":"Visibility"},"e8f5":{"name":"Visibility Off"},"e62e":{"name":"Voice Chat"},"e0d9":{"name":"Voicemail"},"e04d":{"name":"Volume Down"},"e04e":{"name":"Volume Mute"},"e04f":{"name":"Volume Off"},"e050":{"name":"Volume Up"},"e0da":{"name":"Vpn Key"},"e62f":{"name":"Vpn Lock"},"e1bc":{"name":"Wallpaper"},"e002":{"name":"Warning"},"e334":{"name":"Watch"},"e924":{"name":"Watch Later"},"e42c":{"name":"Wb Auto"},"e42d":{"name":"Wb Cloudy"},"e42e":{"name":"Wb Incandescent"},"e436":{"name":"Wb Iridescent"},"e430":{"name":"Wb Sunny"},"e63d":{"name":"Wc"},"e051":{"name":"Web"},"e069":{"name":"Web Asset"},"e16b":{"name":"Weekend"},"e80e":{"name":"Whatshot"},"e1bd":{"name":"Widgets"},"e63e":{"name":"Wifi"},"e1e1":{"name":"Wifi Lock"},"e1e2":{"name":"Wifi Tethering"},"e8f9":{"name":"Work"},"e25b":{"name":"Wrap Text"},"e8fa":{"name":"Youtube Searched For"},"e8ff":{"name":"Zoom In"},"e900":{"name":"Zoom Out"},"e56b":{"name":"Zoom Out Map"}}} -------------------------------------------------------------------------------- /static/icons/material-icons/MaterialIcons-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/icons/material-icons/MaterialIcons-Regular.ttf -------------------------------------------------------------------------------- /static/icons/material-icons/MaterialIcons-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/icons/material-icons/MaterialIcons-Regular.woff -------------------------------------------------------------------------------- /static/icons/material-icons/MaterialIcons-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HFO4/HideByPixel/cf400f025541e4392ef35ef44fc83a67e298e9fe/static/icons/material-icons/MaterialIcons-Regular.woff2 -------------------------------------------------------------------------------- /static/js/mdui.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * mdui v0.1.2 (http://mdui.org) 3 | * Copyright 2016-2017 zdhxiong 4 | * Licensed under MIT 5 | */ 6 | !function(t,e,n){"use strict";var i={},o={};!function(){o.isArray=function(t){return"[object Array]"===Object.prototype.toString.apply(t)},o.toArray=function(t){var e,n=[];for(e=0;e=0&&n.indexOf(">")>=0){var a="div";return 0===n.indexOf(":~]/)?o.queryAll(n):[o.queryId(n.split("#")[1])]}return n.nodeType||n===t||n===e?[n]:n.length>0&&n[0].nodeType?o.toArray(n):[]},o.children=function(t,e){var n=[],i=t.childNodes;if(!e)return o.toArray(i);for(var a=0;a=600&&t.innerWidth<1024},md:function(){return t.innerWidth>=1024&&t.innerWidth<1440},lg:function(){return t.innerWidth>=1440&&t.innerWidth<1920},xl:function(){return t.innerWidth>=1920},xsDown:function(){return t.innerWidth<600},smDown:function(){return t.innerWidth<1024},mdDown:function(){return t.innerWidth<1440},lgDown:function(){return t.innerWidth<1920},xlDown:function(){return!0},xsUp:function(){return!0},smUp:function(){return t.innerWidth>=600},mdUp:function(){return t.innerWidth>=1024},lgUp:function(){return t.innerWidth>=1440},xlUp:function(){return t.innerWidth>=1920}},i.showOverlay=function(t){var n=o.dom('
')[0];return e.body.appendChild(n),o.relayout(n),"undefined"==typeof t&&(t=2e3),n.style["z-index"]=t,n.classList.add("mdui-overlay-show"),n},i.hideOverlay=function(t){var e;e="undefined"==typeof t?o.queryAll(".mdui-overlay"):[t],o.each(e,function(t,e){e.classList.remove("mdui-overlay-show"),o.transitionEnd(e,function(){o.remove(e)})})},i.lockScreen=function(){var t=e.body,n=t.clientWidth,i=parseFloat(o.getStyle(t,"padding-left")),a=parseFloat(o.getStyle(t,"padding-right"));e.body.classList.add("mdui-locked"),e.body.style.width=n-i-a+"px"},i.unlockScreen=function(){e.body.classList.remove("mdui-locked"),e.body.style.width=""},i.throttle=function(t,e){var n=null;return function(){var i=this,o=arguments;null===n&&(n=setTimeout(function(){t.apply(i,o),n=null},e))}},i.guid=function(t){function e(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}var n=e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e();return t&&(n="mdui-"+t+"-"+n),n},o.ready(function(){setTimeout(function(){e.body.classList.add("mdui-loaded")},0),i.support.touch&&e.body.classList.add("mdui-support-touch")}),i.Headroom=function(){function e(t,e){var i=this;if(i.headroom=o.dom(t)[0],"undefined"!=typeof i.headroom){var a=o.data(i.headroom,"mdui.headroom");if(a)return a;i.options=o.extend(n,e||{});var s=i.options.tolerance;s!==Object(s)&&(i.options.tolerance={down:s,up:s}),i._init()}}var n={tolerance:5,offset:0,initialClass:"mdui-headroom",pinnedClass:"mdui-headroom-pinned-top",unpinnedClass:"mdui-headroom-unpinned-top"};return e.prototype._init=function(){var t=this;t.state="pinned",t.headroom.classList.add(t.options.initialClass),t.headroom.classList.remove(t.options.pinnedClass,t.options.unpinnedClass),t.inited=!1,t.lastScrollY=0,t._attachEvent()},e.prototype._attachEvent=function(){var e=this;e.inited||(e.lastScrollY=t.pageYOffset,e.inited=!0,o.on(t,"scroll",function(){e._scroll()}))},e.prototype._scroll=function(){var e=this;e.animationFrameId=o.requestAnimationFrame(function(){var n=t.pageYOffset,i=n>e.lastScrollY?"down":"up",o=Math.abs(n-e.lastScrollY)>=e.options.tolerance[i];n>e.lastScrollY&&n>=e.options.offset&&o?e.unpin():(n"};t.prototype.init=function(){var t=this;t.thRow=o.query("thead tr",t.table),t.tdRows=o.queryAll("tbody tr",t.table),t.tdCheckboxs=[],t.selectable=t.table.classList.contains("mdui-table-selectable"),t.updateTdCheckbox(),t.updateThCheckbox(),t.updateNumericCol()},t.prototype.updateTdCheckbox=function(){var t,n,i=this;i.tdCheckboxs=[],o.each(i.tdRows,function(a,s){if(n=o.query(".mdui-table-cell-checkbox",s),n&&o.remove(n),i.selectable){t=o.dom(e("td"))[0],o.prepend(s,t);var r=o.query('input[type="checkbox"]',t);s.classList.contains("mdui-table-row-selected")&&(r.checked=!0),o.on(r,"change",function(){s.classList[r.checked?"add":"remove"]("mdui-table-row-selected")}),i.tdCheckboxs.push(r)}})},t.prototype.updateThCheckbox=function(){var t,n=this;if(t=o.query(".mdui-table-cell-checkbox",n.thRow),t&&o.remove(t),n.selectable){var i=o.dom(e("th"))[0];o.prepend(n.thRow,i),t=o.query('input[type="checkbox"]',i),o.on(t,"change",function(){o.each(n.tdCheckboxs,function(e,n){n.checked=t.checked}),o.each(n.tdRows,function(e,n){n.classList[t.checked?"add":"remove"]("mdui-table-row-selected")})})}},t.prototype.updateNumericCol=function(){var t=this,e=o.queryAll("th",t.thRow);o.each(e,function(e,n){o.each(t.tdRows,function(t,i){var a=n.classList.contains("mdui-table-col-numeric")?"add":"remove",s=o.queryAll("td",i)[e];s&&s.classList[a]("mdui-table-col-numeric")})})},o.ready(function(){var e=o.queryAll(".mdui-table");o.each(e,function(e,n){var i=new t(n);o.data(n,"mdui.table",i)})}),i.updateTables=function(){var t;t=1===arguments.length?o.dom(arguments[0]):o.queryAll(".mdui-table"),o.each(t,function(t,e){var n=o.data(e,"mdui.table");n.init()})}}(),function(){function t(t){if(t&&!o.data(t,"isRemoved")){o.data(t,"isRemoved",!0);var e=setTimeout(function(){o.remove(t)},400);t.classList.add("mdui-ripple-wave-fill");var n=o.data(t,"translate");o.transform(t,n.replace("scale(1)","scale(1.01)")),o.transitionEnd(t,function(t){clearTimeout(e);var i=t.target;i.classList.add("mdui-ripple-wave-out"),o.transform(i,n.replace("scale(1)","scale(1.01)")),e=setTimeout(function(){o.remove(i)},700),setTimeout(function(){o.transitionEnd(i,function(t){clearTimeout(e),o.remove(t.target)})},0)})}}function n(t){if(r.allowEvent(t)===!1)return null;var e,n=null,i=t.target;return i.classList.contains("mdui-ripple")?n=i:(e=o.parents(i,".mdui-ripple"),e.length&&(n=e[0])),n}function a(t){var e=n(t);if(null!==e){if(e.disabled||e.getAttribute("disabled"))return;r.registerEvent(t),s.show(t,e),i.support.touch&&o.on(e,"touchmove touchend touchcancel",s.hide),o.on(e,"mousemove mouseup mouseleave",s.hide)}}var s={show:function(t,e){if(2!==t.button){var n;n="touches"in t&&t.touches.length?t.touches[0]:t;var i=n.pageX,a=n.pageY,s=e.getBoundingClientRect(),r=o.offset(e),d={x:i-r.left,y:a-r.top},l=s.height,c=s.width,u=Math.max(Math.pow(Math.pow(l,2)+Math.pow(c,2),.5),48),p="translate3d("+(-d.x+c/2)+"px, "+(-d.y+l/2)+"px, 0) scale(1)",f=o.dom('
')[0];o.data(f,{translate:p}),o.prepend(e,f),o.relayout(f),o.transform(f,p)}},hide:function(e,n){n=n||this;var a=o.children(n,".mdui-ripple-wave");o.each(a,function(e,n){t(n)}),i.support.touch&&o.off(n,"touchmove touchend touchcancel",s.hide),o.off(n,"mousemove mouseup mouseleave",s.hide)}},r={touches:0,allowEvent:function(t){var e=!0;return"mousedown"===t.type&&r.touches&&(e=!1),e},registerEvent:function(t){var e=t.type;"touchstart"===e?r.touches+=1:["touchmove","touchend","touchcancel"].indexOf(e)>-1&&setTimeout(function(){r.touches&&(r.touches-=1)},500)}};i.support.touch&&(o.on(e,"touchstart",a),o.on(e,"touchmove touchend touchcancel",r.registerEvent)),o.on(e,"mousedown",a)}(),function(){var t=["checkbox","button","submit","range","radio","image"],n={field:"mdui-textfield",input:"mdui-textfield-input",focus:"mdui-textfield-focus",notEmpty:"mdui-textfield-not-empty",disabled:"mdui-textfield-disabled",invalid:"mdui-textfield-invalid",expanded:"mdui-textfield-expanded"},a=function(e){var i,a=e.target,s=e.type,r=a.value;i=!("object"!=typeof e.detail||"undefined"==typeof e.detail.reInit||!e.detail.reInit)&&e.detail.reInit;var d;d=!("object"!=typeof e.detail||"undefined"==typeof e.detail.domLoadedEvent||!e.detail.domLoadedEvent)&&e.detail.domLoadedEvent;var l=a.getAttribute("type")||"";if(!(t.indexOf(l)>=0)){var c=o.parents(a,"."+n.field)[0];if("focus"===s&&c.classList.add(n.focus),"blur"===s&&c.classList.remove(n.focus),"blur"!==s&&"input"!==s||(r&&""!==r?c.classList.add(n.notEmpty):c.classList.remove(n.notEmpty)),a.disabled?c.classList.add(n.disabled):c.classList.remove(n.disabled),"input"!==s&&"blur"!==s||d||a.validity&&(a.validity.valid?c.classList.remove(n.invalid):c.classList.add(n.invalid)),"textarea"===e.target.nodeName.toLowerCase()){a.style.height="";var u=a.offsetHeight,p=u-a.clientHeight,f=a.scrollHeight;if(f+p>u){var m=f+p;a.style.height=m+"px"}}var h;i&&(c.classList.remove("mdui-textfield-has-counter"),h=o.query(".mdui-textfield-counter",c),h&&o.remove(h));var v=a.getAttribute("maxlength");if(v){(i||d)&&(h=o.dom('
/ '+v+"
")[0],c.appendChild(h),o.query(".mdui-textfield-error",c)||c.classList.add("mdui-textfield-has-counter"));var g=a.value.length+a.value.split("\n").length-1;o.query(".mdui-textfield-counter-inputed",c).innerText=g.toString()}}},s="."+n.field+" input, ."+n.field+" textarea";o.on(e,"input focus blur",s,a,!0),o.on(e,"click",".mdui-textfield-expandable .mdui-textfield-icon",function(){var t=this,e=o.parents(t,"."+n.field)[0],i=o.query("."+n.input,e);e.classList.add(n.expanded),i.focus()}),o.on(e,"click",".mdui-textfield-expandable .mdui-textfield-close",function(){var t=this,e=o.parents(t,"."+n.field)[0],i=o.query("."+n.input,e);e.classList.remove(n.expanded),i.value=""}),i.updateTextFields=function(){var t,e;t=1===arguments.length?o.dom(arguments[0]):o.queryAll(".mdui-textfield"),o.each(t,function(t,n){e=o.query(".mdui-textfield-input",n),e&&o.trigger(e,"input",{reInit:!0})})},o.ready(function(){o.each(o.queryAll(".mdui-textfield-input"),function(t,e){o.trigger(e,"input",{domLoadedEvent:!0})})})}(),function(){var t=function(t){var e=o.data(t,"track"),n=o.data(t,"fill"),i=o.data(t,"thumb"),a=o.data(t,"input"),s=o.data(t,"min"),r=o.data(t,"max"),d=o.data(t,"disabled"),l=o.data(t,"discrete"),c=o.data(t,"thumbText"),u=(a.value-s)/(r-s)*100;n.style.width=u+"%",e.style.width=100-u+"%",d&&(n.style["padding-right"]="6px",e.style["padding-left"]="6px"),i.style.left=u+"%",l&&(c.textContent=a.value),t.classList[0===parseFloat(u)?"add":"remove"]("mdui-slider-zero")},n=function(e){var n=o.dom('
')[0],i=o.dom('
')[0],a=o.dom('
')[0],s=o.query('input[type="range"]',e),r=s.disabled;e.classList[r?"add":"remove"]("mdui-slider-disabled"),o.remove(o.query(".mdui-slider-track",e)),e.appendChild(n),o.remove(o.query(".mdui-slider-fill",e)),e.appendChild(i),o.remove(o.query(".mdui-slider-thumb",e)),e.appendChild(a);var d,l=e.classList.contains("mdui-slider-discrete");l&&(d=o.dom("")[0],o.empty(a),a.appendChild(d)),o.data(e,{track:n,fill:i,thumb:a,input:s,min:s.getAttribute("min"),max:s.getAttribute("max"),disabled:r,discrete:l,thumbText:d}),t(e)};o.on(e,"input change",'.mdui-slider input[type="range"]',function(){var e=o.parent(this,".mdui-slider");t(e)}),o.on(e,i.touchEvents.start,'.mdui-slider input[type="range"]',function(){var t=o.parent(this,".mdui-slider");this.disabled||t.classList.add("mdui-slider-focus")}),o.on(e,i.touchEvents.end,'.mdui-slider input[type="range"]',function(){var t=o.parent(this,".mdui-slider");this.disabled||t.classList.remove("mdui-slider-focus")}),o.ready(function(){var t=o.queryAll(".mdui-slider");o.each(t,function(t,e){n(e)})}),i.updateSliders=function(){var t;t=1===arguments.length?o.dom(arguments[0]):o.queryAll(".mdui-slider"),o.each(t,function(t,e){n(e)})}}(),i.Fab=function(){function t(t,a){var s=this;if(s.fab=o.dom(t)[0],"undefined"!=typeof s.fab){var r=o.data(s.fab,"mdui.fab");if(r)return r;s.options=o.extend(n,a||{}),s.state="closed",s.btn=o.child(s.fab,".mdui-fab"),s.dial=o.child(s.fab,".mdui-fab-dial"),s.dialBtns=o.queryAll(".mdui-fab",s.dial),i.support.touch?(o.on(s.btn,"touchstart",function(){s.open()}),o.on(e,"touchend",function(t){o.parents(t.target,".mdui-fab-wrapper").length||s.close()})):("click"===s.options.trigger&&o.on(s.btn,"click",function(){s.toggle()}),"hover"===s.options.trigger&&(o.on(s.fab,"mouseenter",function(){s.open()}),o.on(s.fab,"mouseleave",function(){s.close()})))}}var n={trigger:"hover"};return t.prototype.open=function(){var t=this;"opening"!==t.state&&"opened"!==t.state&&(o.each(t.dialBtns,function(e,n){n.style["transition-delay"]=15*(t.dialBtns.length-e)+"ms"}),t.dial.classList.add("mdui-fab-dial-show"),o.query(".mdui-fab-opened",t.btn)&&t.btn.classList.add("mdui-fab-opened"),t.state="opening",o.pluginEvent("open","fab",t,t.fab),o.transitionEnd(t.dialBtns[0],function(){t.btn.classList.contains("mdui-fab-opened")&&(t.state="opened",o.pluginEvent("opened","fab",t,t.fab))}))},t.prototype.close=function(){var t=this;"closing"!==t.state&&"closed"!==t.state&&(o.each(t.dialBtns,function(t,e){e.style["transition-delay"]=15*t+"ms"}),t.dial.classList.remove("mdui-fab-dial-show"),t.btn.classList.remove("mdui-fab-opened"),t.state="closing",o.pluginEvent("close","fab",t,t.fab),o.transitionEnd(t.dialBtns[t.dialBtns.length-1],function(){t.btn.classList.contains("mdui-fab-opened")||(t.state="closed",o.pluginEvent("closed","fab",t,t.fab))}))},t.prototype.toggle=function(){var t=this;"opening"===t.state||"opened"===t.state?t.close():"closing"!==t.state&&"closed"!==t.state||t.open()},t.prototype.getState=function(){return this.state},t.prototype.show=function(){this.fab.classList.remove("mdui-fab-hide")},t.prototype.hide=function(){this.fab.classList.add("mdui-fab-hide")},t}(),o.ready(function(){var t=i.support.touch?"touchstart":"click mouseover";o.on(e,t,"[mdui-fab]",function(t){var e=this,n=t.type,a=o.data(e,"mdui.fab");if(!a){var s=o.parseOptions(e.getAttribute("mdui-fab"));a=new i.Fab(e,s),o.data(e,"mdui.fab",a),"touchstart"===n?a.open():("click"===a.options.trigger&&"click"===n||"hover"===a.options.trigger&&"mouseover"===n)&&a.open()}})}),o.ready(function(){o.each(o.queryAll(".mdui-appbar-scroll-hide"),function(t,e){o.data(e,"mdui.headroom",new i.Headroom(e))}),o.each(o.queryAll(".mdui-appbar-scroll-toolbar-hide"),function(t,e){var n=new i.Headroom(".mdui-appbar-scroll-toolbar-hide",{pinnedClass:"mdui-headroom-pinned-toolbar",unpinnedClass:"mdui-headroom-unpinned-toolbar"});o.data(e,"mdui.headroom",n)})}),i.Tab=function(){function e(e,a){var s,r=this;if(r.tab=o.dom(e)[0],"undefined"!=typeof r.tab){var d=o.data(r.tab,"mdui.tab");if(d)return d;r.options=o.extend(n,a||{}),r.tabs=o.children(r.tab,"a"),r.indicator=o.dom('
')[0],r.tab.appendChild(r.indicator),s=i.support.touch?"touchend":"hover"===r.options.trigger?"mouseenter":"click";var l=location.hash;l&&o.each(r.tabs,function(t,e){if(e.getAttribute("href")===l)return r.activeIndex=t,!1}),"undefined"==typeof r.activeIndex&&o.each(r.tabs,function(t,e){if(e.classList.contains("mdui-tab-active"))return r.activeIndex=t,!1}),"undefined"==typeof r.activeIndex&&(r.activeIndex=0),r._setActive(),o.on(t,"resize",i.throttle(function(){r._setIndicatorPosition()},100)),o.each(r.tabs,function(t,e){o.on(e,s,function(n){return null!==e.getAttribute("disabled")?void n.preventDefault():(r.activeIndex=t,void r._setActive())}),o.on(e,"click",function(t){0===e.getAttribute("href").indexOf("#")&&t.preventDefault()})})}}var n={trigger:"click",loop:!1};return e.prototype._setActive=function(){var t=this;o.each(t.tabs,function(e,n){var i,a=n.getAttribute("href");return null!==n.getAttribute("disabled")?void(0===a.indexOf("#")&&(i=o.query(a),i&&(i.style.display="none"))):(e===t.activeIndex?(o.pluginEvent("change","tab",t,t.tab,{index:t.activeIndex,target:n}),o.pluginEvent("show","tab",t,n),n.classList.contains("mdui-tab-active")||n.classList.add("mdui-tab-active")):n.classList.contains("mdui-tab-active")&&n.classList.remove("mdui-tab-active"),void(0===a.indexOf("#")&&(i=o.query(a),i&&(e===t.activeIndex?i.style.display="block":i.style.display="none"))))}),t._setIndicatorPosition()},e.prototype._setIndicatorPosition=function(){var t=this,e=t.tabs[t.activeIndex];if(null===e.getAttribute("disabled")){var n=o.offset(e);t.indicator.style.left=n.left+t.tab.scrollLeft-t.tab.getBoundingClientRect().left+"px",t.indicator.style.width=o.getStyle(e,"width")}},e.prototype.next=function(){var t=this;t.tabs.length>t.activeIndex+1?t.activeIndex++:t.options.loop&&(t.activeIndex=0),t._setActive()},e.prototype.prev=function(){var t=this;t.activeIndex>0?t.activeIndex--:t.options.loop&&(t.activeIndex=t.tabs.length-1),t._setActive()},e.prototype.show=function(t){var e=this;parseInt(t)===t?e.activeIndex=t:o.each(e.tabs,function(n,i){if(i.id===t)return e.activeIndex=n,!1}),e._setActive()},e.prototype.handleUpdate=function(){this._setIndicatorPosition()},e}(),o.ready(function(){o.each(o.queryAll("[mdui-tab]"),function(t,e){var n=o.parseOptions(e.getAttribute("mdui-tab")),a=o.data(e,"mdui.tab");a||(a=new i.Tab(e,n),o.data(e,"mdui.tab",a))})}),i.Drawer=function(){function n(e,n){var s=this;if(s.drawer=o.dom(e)[0],"undefined"!=typeof s.drawer){var r=o.data(s.drawer,"mdui.drawer");if(r)return r;s.options=o.extend(a,n||{}),s.overlay=!1,s.position=s.drawer.classList.contains("mdui-drawer-right")?"right":"left",s.drawer.classList.contains("mdui-drawer-close")?s.state="closed":s.drawer.classList.contains("mdui-drawer-open")?s.state="opened":i.screen.mdUp()?s.state="opened":s.state="closed",o.on(t,"resize",i.throttle(function(){i.screen.mdUp()?(s.overlay&&!s.options.overlay&&(i.hideOverlay(),s.overlay=!1,i.unlockScreen()),s.drawer.classList.contains("mdui-drawer-close")||(s.state="opened")):s.overlay||"opened"!==s.state||(s.drawer.classList.contains("mdui-drawer-open")?(i.showOverlay(),s.overlay=!0,i.lockScreen(),o.one(o.query(".mdui-overlay"),"click",function(){s.close()})):s.state="closed")},100)),i.support.touch||(s.drawer.style["overflow-y"]="hidden",s.drawer.classList.add("mdui-drawer-scrollbar"));var d=o.queryAll("[mdui-drawer-close]",s.drawer);o.each(d,function(t,e){o.on(e,"click",function(){s.close()})})}}var a={overlay:!1};return n.prototype.open=function(){var t=this;"opening"!==t.state&&"opened"!==t.state&&(t.drawer.classList.remove("mdui-drawer-close"),t.drawer.classList.add("mdui-drawer-open"),t.state="opening",o.pluginEvent("open","drawer",t,t.drawer),t.options.overlay||e.body.classList.add("mdui-drawer-body-"+t.position),o.transitionEnd(t.drawer,function(){t.drawer.classList.contains("mdui-drawer-open")&&(t.state="opened",o.pluginEvent("opened","drawer",t,t.drawer))}),i.screen.mdUp()&&!t.options.overlay||(i.showOverlay(),t.overlay=!0,i.lockScreen(),o.one(o.query(".mdui-overlay"),"click",function(){t.close()})))},n.prototype.close=function(){var t=this;"closing"!==t.state&&"closed"!==t.state&&(t.drawer.classList.add("mdui-drawer-close"),t.drawer.classList.remove("mdui-drawer-open"),t.state="closing",o.pluginEvent("close","drawer",t,t.drawer),t.options.overlay||e.body.classList.remove("mdui-drawer-body-"+t.position),o.transitionEnd(t.drawer,function(){t.drawer.classList.contains("mdui-drawer-open")||(t.state="closed",o.pluginEvent("closed","drawer",t,t.drawer))}),t.overlay&&(i.hideOverlay(),t.overlay=!1,i.unlockScreen()))},n.prototype.toggle=function(){var t=this;"opening"===t.state||"opened"===t.state?t.close():"closing"!==t.state&&"closed"!==t.state||t.open()},n.prototype.getState=function(){return this.state},n}(),o.ready(function(){o.each(o.queryAll("[mdui-drawer]"),function(t,e){var n=o.parseOptions(e.getAttribute("mdui-drawer")),a=n.target;delete n.target;var s=o.dom(a)[0],r=o.data(s,"mdui.drawer");r||(r=new i.Drawer(s,n),o.data(s,"mdui.drawer",r)),o.on(e,"click",function(){r.toggle()})})}),i.Dialog=function(){function n(t,n){var a=this;if(a.dialog=o.dom(t)[0],"undefined"!=typeof a.dialog){var s=o.data(a.dialog,"mdui.dialog");if(s)return s;if(e.body.contains(a.dialog)||(a.append=!0,e.body.appendChild(a.dialog)),a.options=o.extend(r,n||{}),a.state="closed",!i.support.touch){var d=o.query(".mdui-dialog-content",a.dialog);d&&d.classList.add("mdui-dialog-scrollbar")}var l=o.queryAll("[mdui-dialog-cancel]",a.dialog);o.each(l,function(t,e){o.on(e,"click",function(){o.pluginEvent("cancel","dialog",a,a.dialog),a.options.closeOnCancel&&a.close()})});var c=o.queryAll("[mdui-dialog-confirm]",a.dialog);o.each(c,function(t,e){o.on(e,"click",function(){o.pluginEvent("confirm","dialog",a,a.dialog),a.options.closeOnConfirm&&a.close()})});var u=o.queryAll("[mdui-dialog-close]",a.dialog);o.each(u,function(t,e){o.on(e,"click",function(){a.close()})})}}var a,s,r={history:!0,overlay:!0,modal:!1,closeOnEsc:!0,closeOnCancel:!0,closeOnConfirm:!0,destroyOnClosed:!1},d="__md_dialog",l=function(){if(s){var e=s.dialog,n=o.child(e,".mdui-dialog-title"),i=o.child(e,".mdui-dialog-content"),a=o.child(e,".mdui-dialog-actions");e.style.height="",i&&(i.style.height="");var r=e.clientHeight;e.style.top=(t.innerHeight-r)/2+"px",e.style.height=r+"px";var d=n?n.scrollHeight:0,l=a?a.scrollHeight:0;i&&(i.style.height=r-d-l+"px")}},c=function(){location.hash.substring(1).indexOf("&mdui-dialog")<0&&s.close(!0)},u=function(t){t.target.classList.contains("mdui-overlay")&&s.close()};return n.prototype.open=function(){var e=this;if("opening"!==e.state&&"opened"!==e.state){if(s&&("opening"===s.state||"opened"===s.state)||o.queue(d).length)return void o.queue(d,function(){e.open()});if(s=e,i.lockScreen(),e.dialog.style.display="block",l(),o.on(t,"resize",i.throttle(function(){l()},100)),e.dialog.classList.add("mdui-dialog-open"),e.state="opening",o.pluginEvent("open","dialog",e,e.dialog),o.transitionEnd(e.dialog,function(){e.dialog.classList.contains("mdui-dialog-open")&&(e.state="opened",o.pluginEvent("opened","dialog",e,e.dialog))}),a||(a=i.showOverlay()),o[e.options.modal?"off":"on"](a,"click",u),a.style.opacity=e.options.overlay?"":0,e.options.history){var n=location.hash.substring(1);n.indexOf("&mdui-dialog")>-1&&(n=n.replace(/&mdui-dialog/g,"")),location.hash=n+"&mdui-dialog",o.on(t,"hashchange",c)}}},n.prototype.close=function(){var e=this;"closing"!==e.state&&"closed"!==e.state&&(s=null,e.dialog.classList.remove("mdui-dialog-open"),e.state="closing",o.pluginEvent("close","dialog",e,e.dialog),0===o.queue(d).length&&(i.hideOverlay(a),a=null), 7 | o.transitionEnd(e.dialog,function(){e.dialog.classList.contains("mdui-dialog-open")||(e.state="closed",o.pluginEvent("closed","dialog",e,e.dialog),e.dialog.style.display="none",0!==o.queue(d).length||s||i.unlockScreen(),o.off(t,"resize",l),e.options.destroyOnClosed&&e.destroy())}),e.options.history&&0===o.queue(d).length&&(arguments[0]||t.history.back(),o.off(t,"hashchange",c)),setTimeout(function(){o.dequeue(d)},100))},n.prototype.toggle=function(){var t=this;"opening"===t.state||"opened"===t.state?t.close():"closing"!==t.state&&"closed"!==t.state||t.open()},n.prototype.getState=function(){return this.state},n.prototype.destroy=function(){var t=this;t.append&&o.remove(t.dialog),o.data(t.dialog,"mdui.dialog",null),s===t&&(i.unlockScreen(),i.hideOverlay())},n.prototype.handleUpdate=function(){l()},o.on(e,"keydown",function(t){s&&s.options.closeOnEsc&&"opened"===s.state&&27===t.keyCode&&s.close()}),n}(),o.ready(function(){o.on(e,"click","[mdui-dialog]",function(){var t=this,e=o.parseOptions(t.getAttribute("mdui-dialog")),n=e.target;delete e.target;var a=o.dom(n)[0],s=o.data(a,"mdui.dialog");s||(s=new i.Dialog(a,e),o.data(a,"mdui.dialog",s)),s.open()})}),i.dialog=function(t){var e={title:"",content:"",buttons:[],stackedButtons:!1,cssClass:"",history:!0,overlay:!0,modal:!1,closeOnEsc:!0,destroyOnClosed:!0,onOpen:function(){},onOpened:function(){},onClose:function(){},onClosed:function(){}},n={text:"",bold:!1,close:!0,onClick:function(t){}};t=o.extend(e,t||{}),o.each(t.buttons,function(e,i){t.buttons[e]=o.extend(n,i)});var a="";t.buttons.length&&(a='
',o.each(t.buttons,function(t,e){a+=''+e.text+""}),a+="
");var s='
'+(t.title?'
'+t.title+"
":"")+(t.content?'
'+t.content+"
":"")+a+"
",r=new i.Dialog(s,{history:t.history,overlay:t.overlay,modal:t.modal,closeOnEsc:t.closeOnEsc,destroyOnClosed:t.destroyOnClosed});if(t.buttons.length){var d=o.queryAll(".mdui-dialog-actions .mdui-btn",r.dialog);o.each(d,function(e,n){o.on(n,"click",function(){"function"==typeof t.buttons[e].onClick&&t.buttons[e].onClick(r),t.buttons[e].close&&r.close()})})}return"function"==typeof t.onOpen&&(o.on(r.dialog,"open.mdui.dialog",function(){t.onOpen(r)}),o.on(r.dialog,"opened.mdui.dialog",function(){t.onOpened(r)}),o.on(r.dialog,"close.mdui.dialog",function(){t.onClose(r)}),o.on(r.dialog,"closed.mdui.dialog",function(){t.onClosed(r)})),r.open(),r},i.alert=function(t,e,n,a){"function"==typeof e&&(e="",n=arguments[1],a=arguments[2]),"undefined"==typeof n&&(n=function(){}),"undefined"==typeof a&&(a={});var s={confirmText:"ok",history:!0,modal:!1,closeOnEsc:!0};return a=o.extend(s,a),i.dialog({title:e,content:t,buttons:[{text:a.confirmText,bold:!1,close:!0,onClick:n}],cssClass:"mdui-dialog-alert",history:a.history,modal:a.modal,closeOnEsc:a.closeOnEsc})},i.confirm=function(t,e,n,a,s){"function"==typeof e&&(e="",n=arguments[1],a=arguments[2],s=arguments[3]),"undefined"==typeof n&&(n=function(){}),"undefined"==typeof a&&(a=function(){}),"undefined"==typeof s&&(s={});var r={confirmText:"ok",cancelText:"cancel",history:!0,modal:!1,closeOnEsc:!0};return s=o.extend(r,s),i.dialog({title:e,content:t,buttons:[{text:s.cancelText,bold:!1,close:!0,onClick:a},{text:s.confirmText,bold:!1,close:!0,onClick:n}],cssClass:"mdui-dialog-confirm",history:s.history,modal:s.modal,closeOnEsc:s.closeOnEsc})},i.prompt=function(t,e,n,a,s){"function"==typeof e&&(e="",n=arguments[1],a=arguments[2],s=arguments[3]),"undefined"==typeof n&&(n=function(){}),"undefined"==typeof a&&(a=function(){}),"undefined"==typeof s&&(s={});var r={confirmText:"ok",cancelText:"cancel",history:!0,modal:!1,closeOnEsc:!0,type:"text",maxlength:"",defaultValue:""};s=o.extend(r,s);var d='
'+(t?'":"")+("text"===s.type?'":"")+("textarea"===s.type?'":"")+"
";return i.dialog({title:e,content:d,buttons:[{text:s.cancelText,bold:!1,close:!0,onClick:function(t){var e=o.query(".mdui-textfield-input",t.dialog).value;a(e,t)}},{text:s.confirmText,bold:!1,close:!0,onClick:function(t){var e=o.query(".mdui-textfield-input",t.dialog).value;n(e,t)}}],cssClass:"mdui-dialog-prompt",history:s.history,modal:s.modal,closeOnEsc:s.closeOnEsc,onOpen:function(t){var e=o.query(".mdui-textfield-input",t.dialog);i.updateTextFields(e),e.focus(),"textarea"===s.type&&o.on(e,"input",function(){t.handleUpdate()}),s.maxlength&&t.handleUpdate()}})},i.Tooltip=function(){function t(t){var n,a,s,r=t.target.getBoundingClientRect(),d=i.support.touch?24:14,l=t.tooltip.offsetWidth,c=t.tooltip.offsetHeight;switch(s=t.options.position,["bottom","top","left","right"].indexOf(s)===-1&&(s=r.top+r.height+d+c+2'+s.options.content+"
")[0],e.body.appendChild(s.tooltip);var l=i.support.touch?"touchstart":"mouseenter",c=i.support.touch?"touchend":"mouseleave";o.on(s.target,l,function(){s.open()}),o.on(s.target,c,function(){s.close()})}}var a={position:"auto",delay:0,content:""};return n.prototype.open=function(e){var n=this;if("opening"!==n.state&&"opened"!==n.state){var i=n.options,a=o.parseOptions(n.target.getAttribute("mdui-tooltip"));n.options=o.extend(n.options,a),e&&(n.options=o.extend(n.options,e)),i.content!==n.options.content&&(n.tooltip.innerHTML=n.options.content),t(n),n.timeoutId=setTimeout(function(){n.tooltip.classList.add("mdui-tooltip-open"),n.state="opening",o.pluginEvent("open","tooltip",n,n.target),o.transitionEnd(n.tooltip,function(){n.tooltip.classList.contains("mdui-tooltip-open")&&(n.state="opened",o.pluginEvent("opened","tooltip",n,n.target))})},n.options.delay)}},n.prototype.close=function(){var t=this;"closing"!==t.state&&"closed"!==t.state&&(clearTimeout(t.timeoutId),t.tooltip.classList.remove("mdui-tooltip-open"),t.state="closing",o.pluginEvent("close","tooltip",t,t.target),o.transitionEnd(t.tooltip,function(){t.tooltip.classList.contains("mdui-tooltip-open")||(t.state="closed",o.pluginEvent("closed","tooltip",t,t.target))}))},n.prototype.toggle=function(){var t=this;"opening"===t.state||"opened"===t.state?t.close():"closing"!==t.state&&"closed"!==t.state||t.open()},n.prototype.getState=function(){return this.state},n}(),function(){var t=i.support.touch?"touchstart":"mouseover";o.on(e,t,"[mdui-tooltip]",function(){var t=this,e=o.data(t,"mdui.tooltip");if(!e){var n=o.parseOptions(t.getAttribute("mdui-tooltip"));e=new i.Tooltip(t,n),o.data(t,"mdui.tooltip",e),e.open()}})}(),function(){function t(t){var n=this;if(n.options=o.extend(s,t||{}),n.options.message){n.state="closed";var a="",r="";0===n.options.buttonColor.indexOf("#")||0===n.options.buttonColor.indexOf("rgb")?a='style="color:'+n.options.buttonColor+'"':""!==n.options.buttonColor&&(r="mdui-text-color-"+n.options.buttonColor);var d='
'+n.options.message+"
"+(n.options.buttonText?'"+n.options.buttonText+"":"")+"
";n.snackbar=o.dom(d)[0],e.body.appendChild(n.snackbar),o.transform(n.snackbar,"translateY("+n.snackbar.clientHeight+"px)"),n.snackbar.style.left=(e.body.clientWidth-n.snackbar.clientWidth)/2+"px",n.snackbar.classList.add("mdui-snackbar-transition")}}var n,a="__md_snackbar",s={message:"",timeout:4e3,buttonText:"",buttonColor:"",closeOnButtonClick:!0,closeOnOutsideClick:!0,onClick:function(){},onButtonClick:function(){},onClose:function(){}},r=function(t){t.target.classList.contains("mdui-snackbar")||o.parents(t.target,".mdui-snackbar").length||n.close()};t.prototype.open=function(){var t=this;if("opening"!==t.state&&"opened"!==t.state){if(n)return void o.queue(a,function(){t.open()});n=t,t.state="opening",o.transform(t.snackbar,"translateY(0)"),o.transitionEnd(t.snackbar,function(){if("opening"===t.state){if(t.state="opened",t.options.buttonText){var n=o.query(".mdui-snackbar-action",t.snackbar);o.on(n,"click",function(){t.options.onButtonClick(),t.options.closeOnButtonClick&&t.close()})}o.on(t.snackbar,"click",function(e){e.target.classList.contains("mdui-snackbar-action")||t.options.onClick()}),t.options.closeOnOutsideClick&&o.on(e,i.support.touch?"touchstart":"click",r),t.timeoutId=setTimeout(function(){t.close()},t.options.timeout)}})}},t.prototype.close=function(){var t=this;"closing"!==t.state&&"closed"!==t.state&&("undefined"!=typeof t.timeoutId&&clearTimeout(t.timeoutId),t.options.closeOnOutsideClick&&o.off(e,i.support.touch?"touchstart":"click",r),t.state="closing",o.transform(t.snackbar,"translateY("+t.snackbar.clientHeight+"px)"),t.options.onClose(),o.transitionEnd(t.snackbar,function(){"closing"===t.state&&(n=null,t.state="closed",o.remove(t.snackbar),o.dequeue(a))}))},i.snackbar=function(e){var n=new t(e);return n.open(),n}}(),function(){o.on(e,"click",".mdui-bottom-nav>a",function(){var t=this,e=o.parent(t,".mdui-bottom-nav"),n=o.children(e,"a");o.each(n,function(n,i){t===i?(o.pluginEvent("change","bottomNav",null,e,{index:n}),i.classList.add("mdui-bottom-nav-active")):i.classList.remove("mdui-bottom-nav-active")})}),o.each(o.queryAll(".mdui-bottom-nav-scroll-hide"),function(t,e){var n=new i.Headroom(e,{pinnedClass:"mdui-headroom-pinned-down",unpinnedClass:"mdui-headroom-unpinned-down"});o.data(e,"mdui.headroom",n)})}(),function(){var t=function(){var t=1===arguments.length&&arguments[0];return'
'},e=function(e){var n;n=e.classList.contains("mdui-spinner-colorful")?t("1")+t("2")+t("3")+t("4"):t(),e.innerHTML=n};o.ready(function(){var t=o.queryAll(".mdui-spinner");o.each(t,function(t,n){e(n)})}),i.updateSpinners=function(){var t;t=1===arguments.length?o.dom(arguments[0]):o.queryAll(".mdui-spinner"),o.each(t,function(t,n){e(n)})}}(),i.Panel=function(){function t(t,e){return new o.Collapse(t,e,{item:"mdui-panel-item",itemOpen:"mdui-panel-item-open",header:"mdui-panel-item-header",body:"mdui-panel-item-body"},"panel")}return t}(),o.ready(function(){o.each(o.queryAll("[mdui-panel]"),function(t,e){var n=o.parseOptions(e.getAttribute("mdui-panel")),a=o.data(e,"mdui.panel");a||(a=new i.Panel(e,n),o.data(e,"mdui.panel",a))})}),i.Menu=function(){function n(n,d,l){var c=this;if(c.anchor=o.dom(n)[0],"undefined"!=typeof c.anchor){var u=o.data(c.anchor,"mdui.menu");if(u)return u;c.menu=o.dom(d)[0],o.child(c.anchor.parentNode,c.menu)&&(c.options=o.extend(a,l||{}),c.state="closed",c.isCascade=c.menu.classList.contains(s.cascade),"auto"===c.options.covered?c.isCovered=!c.isCascade:c.isCovered=c.options.covered,o.on(c.anchor,"click",function(){c.toggle()}),o.on(e,"click touchstart",function(t){"opening"!==c.state&&"opened"!==c.state||o.is(t.target,c.menu)||o.contains(c.menu,t.target)||o.is(t.target,c.anchor)||o.contains(c.anchor,t.target)||c.close()}),o.on(e,"click","."+s.item,function(){o.query("."+s.menu,this)||null!==this.getAttribute("disabled")||c.close()}),p(c),o.on(t,"resize",i.throttle(function(){r(c)},100)))}}var a={position:"auto",align:"auto",gutter:16,fixed:!1,covered:"auto",subMenuTrigger:"hover",subMenuDelay:200},s={menu:"mdui-menu",cascade:"mdui-menu-cascade",open:"mdui-menu-open",item:"mdui-menu-item",active:"mdui-menu-item-active",divider:"mdui-divider"},r=function(t){var n,i,a,s,r,d,l=e.documentElement.clientHeight,c=e.documentElement.clientWidth,u=t.options.gutter,p=t.isCovered,f=t.options.fixed,m=parseFloat(o.getStyle(t.menu,"width")),h=parseFloat(o.getStyle(t.menu,"height")),v=t.anchor,g=v.getBoundingClientRect(),y=g.top,b=g.left,x=g.height,w=g.width,k=l-y-x,L=c-b-w,O=v.offsetTop,C=v.offsetLeft;if(a="auto"===t.options.position?k+(p?x:0)>h+u?"bottom":y+(p?x:0)>h+u?"top":"center":t.options.position,s="auto"===t.options.align?L+w>m+u?"left":b+w>m+u?"right":"center":t.options.align,"bottom"===a)d="0",i=(p?0:x)+(f?y:O);else if("top"===a)d="100%",i=(p?x:0)+(f?y-h:O-h);else{d="50%";var E=h;t.menu.classList.contains("mdui-menu-cascade")||h+2*u>l&&(E=l-2*u,t.menu.style.height=E+"px"),i=(l-E)/2+(f?0:O-y)}if(t.menu.style.top=i+"px","left"===s)r="0",n=f?b:C;else if("right"===s)r="100%",n=f?b+w-m:C+w-m;else{r="50%";var A=m;m+2*u>c&&(A=c-2*u,t.menu.style.width=A+"px"),n=(c-A)/2+(f?0:C-b)}t.menu.style.left=n+"px",o.transformOrigin(t.menu,r+" "+d)},d=function(t){var n,i,a,r,d,l,c=o.parent(t,"."+s.item),u=e.documentElement.clientHeight,p=e.documentElement.clientWidth,f=parseFloat(o.getStyle(t,"width")),m=parseFloat(o.getStyle(t,"height")),h=c.getBoundingClientRect(),v=h.width,g=h.height,y=h.left,b=h.top;a=u-b>m?"bottom":b+g>m?"top":"bottom",r=p-y-v>f?"left":y>f?"right":"left","bottom"===a?(l="0",n="0"):"top"===a&&(l="100%",n=-m+g),t.style.top=n+"px","left"===r?(d="0",i=v):"right"===r&&(d="100%",i=-f),t.style.left=i+"px",o.transformOrigin(t,d+" "+l)},l=function(t){d(t),t.classList.add(s.open);var e=o.parent(t,"."+s.item);e.classList.add(s.active)},c=function(t){var e;t.classList.remove(s.open),e=o.parent(t,"."+s.item),e.classList.remove(s.active);var n=o.queryAll("."+s.menu,t);o.each(n,function(t,n){n.classList.remove(s.open),e=o.parent(n,"."+s.item),e.classList.remove(s.active)})},u=function(t){t.classList.contains(s.open)?c(t):l(t)},p=function(t){var e,n;if("hover"!==t.options.subMenuTrigger||i.support.touch?(e="click",n=0):(e="mouseover mouseout",n=t.options.subMenuDelay),"click"===e)o.on(t.menu,e,"."+s.item,function(t){var e=this;if(null===e.getAttribute("disabled")&&!o.is(t.target,"."+s.menu)&&!o.is(t.target,"."+s.divider)&&o.parents(t.target,"."+s.item)[0]===e){var n=o.child(e,"."+s.menu),i=o.parent(e,"."+s.menu),a=o.children(i,"."+s.item);o.each(a,function(t,e){var i=o.child(e,"."+s.menu);!i||n&&o.is(i,n)||c(i)}),n&&u(n)}});else{var a,r,d;o.on(t.menu,e,"."+s.item,function(t){var e=this,i=t.type,u=t.relatedTarget;if(null===e.getAttribute("disabled")){if("mouseover"===i){if(e!==u&&o.contains(e,u))return}else if("mouseout"===i&&(e===u||o.contains(e,u)))return;var p=o.child(e,"."+s.menu);if("mouseover"===i){if(p){var f=o.data(p,"timeoutClose.mdui.menu");if(f&&clearTimeout(f),p.classList.contains(s.open))return;clearTimeout(r),a=r=setTimeout(function(){l(p)},n),o.data(p,"timeoutOpen.mdui.menu",a)}}else if("mouseout"===i&&p){var m=o.data(p,"timeoutOpen.mdui.menu");m&&clearTimeout(m),a=d=setTimeout(function(){c(p)},n),o.data(p,"timeoutClose.mdui.menu",a)}}})}};return n.prototype.toggle=function(){var t=this;"opening"===t.state||"opened"===t.state?t.close():"closing"!==t.state&&"closed"!==t.state||t.open()},n.prototype.open=function(){var t=this;"opening"!==t.state&&"opened"!==t.state&&(t.state="opening",r(t),t.menu.style.position=t.options.fixed?"fixed":"absolute",t.menu.classList.add(s.open),o.pluginEvent("open","menu",t,t.menu),o.transitionEnd(t.menu,function(){"opening"===t.state&&(t.state="opened",o.pluginEvent("opened","menu",t,t.menu))}))},n.prototype.close=function(){var t=this;"closing"!==t.state&&"closed"!==t.state&&(t.menu.classList.remove(s.open),t.state="closing",o.pluginEvent("close","menu",t,t.menu),o.each(o.queryAll(".mdui-menu",t.menu),function(t,e){c(e)}),o.transitionEnd(t.menu,function(){"closing"===t.state&&(t.state="closed",o.pluginEvent("closed","menu",t,t.menu),t.menu.style.top="",t.menu.style.left="",t.menu.style.width="",t.menu.style.position="fixed")}))},n}(),o.ready(function(){o.on(e,"click","[mdui-menu]",function(){var t=this,e=o.data(t,"mdui.menu");if(!e){var n=o.parseOptions(t.getAttribute("mdui-menu")),a=n.target;delete n.target,e=new i.Menu(t,a,n),o.data(t,"mdui.menu",e),e.toggle()}})}),t.mdui=i}(window,document); -------------------------------------------------------------------------------- /templates/info.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 出错 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 |
25 | 26 | 像素隐写生成 27 | 28 |
29 | 30 | 31 | 39 |
40 |
41 |
42 |
43 |
44 | 45 |
46 |

出现错误,{{meg}}

47 |
48 |
49 |
50 | -------------------------------------------------------------------------------- /templates/read.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |     4 |
-------------------------------------------------------------------------------- /templates/success.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 读取结果 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 |
25 | 26 | 像素隐写生成 27 | 28 |
29 | 30 | 31 | 39 |
40 |
41 |
42 |
43 |
44 |
45 |
读取结果
46 | 47 | 48 |
49 |
50 |

{{meg}}

51 | 52 | 53 |
54 |
55 | 56 |
57 | -------------------------------------------------------------------------------- /templates/up.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 像素隐写生成 By Aaron 17 | 18 | 19 | 48 | 49 | 50 | 51 |
52 |
53 | 54 | 像素隐写生成 55 | 56 |
57 | 58 | 59 | 67 |
68 |
69 |
70 |
71 |
72 | 73 |
74 |
75 |
指南
76 | 77 | 78 |
79 |
80 |

欢迎使用图像像素隐写生成工具。本工具将微调现有图像的各个像素的色彩值,以此达到存放信息的目的。目前支持jpg,bmp,png等格式的图像,图像生成后请不要进行有损压缩,否则会损坏其中存放的信息。理论上一张图像可以存放的字数(中英文都算为1个字)=(图像长像素数X图像宽像素数-34)/16。比如:一张500像素X500像素的图像可以存放约15万字。

81 | 82 | 83 |
84 |
85 | 86 | 87 |
88 |
89 |
90 | 91 |
92 |
93 |
制作图像
94 | 95 | 96 |
97 |
98 | 99 |
100 |
101 | 102 | 103 |
104 |
105 | 106 | 107 | 108 |
109 |
支持主流图像格式,大小2mb以内
110 |
111 |


112 | 113 |
114 |
115 |
116 |
117 | 118 | 119 |
120 |
121 |
122 |
123 | 124 |
125 |
126 |
读取图像
127 | 128 | 129 |
130 |
131 | 132 |
133 | 134 |
135 | 136 | 137 | 138 |
139 |
选择已生成的图像进行解析
140 |
141 |


142 | 143 |
144 |
145 |
146 |
147 | 148 | 149 |
150 |
151 | 152 | 153 |
154 |
155 | 156 |
157 |
158 |
字数计算
159 | 160 | 161 |
162 |
163 | 164 | 计算一张图像能容纳的字数: 165 |
166 | 167 | 168 |
169 |
170 | 171 | 172 |
173 | 174 |
175 |
176 | 177 | 178 |
179 |
180 | 181 |
182 | -------------------------------------------------------------------------------- /web.py: -------------------------------------------------------------------------------- 1 | # -*- coding: UTF-8 -*- 2 | 3 | import random 4 | 5 | from PIL import Image 6 | from flask import render_template, Flask, request, send_from_directory 7 | from numpy import * 8 | 9 | ab_path = os.path.split(os.path.realpath(__file__))[0] 10 | 11 | 12 | def dec2bin(str_num): 13 | num = int(str_num) 14 | bit = [] 15 | while True: 16 | if num == 0: 17 | break 18 | num, rem = divmod(num, 2) 19 | bit.append(str(rem)) 20 | return ''.join(bit[::-1]) 21 | 22 | 23 | def text2bin(foo): 24 | t = "" 25 | for i in range(len(foo)): 26 | t = t + str(dec2bin(str(ord(foo[i]))).zfill(16)) 27 | return t 28 | 29 | 30 | def bin2dec(string_num): 31 | return str(int(string_num, 2)) 32 | 33 | 34 | def bringback(foo): 35 | t = "" 36 | count = 0 37 | text = "" 38 | for i in range(len(foo)): 39 | t = t + foo[i] 40 | count = count + 1 41 | if count == 16: 42 | text = text + chr(int(bin2dec(t))) 43 | t = "" 44 | count = 0 45 | return text 46 | 47 | 48 | def ling(im): 49 | if im == 0: 50 | return im + 1 51 | elif jiou(im): 52 | return im + 1 53 | else: 54 | return im 55 | 56 | 57 | def o(im): 58 | if im == 255: 59 | return im - 1 60 | elif jiou(im): 61 | return im 62 | else: 63 | return im - 1 64 | 65 | 66 | def jiou(num): 67 | if (num % 2) == 0: 68 | return True 69 | else: 70 | return False 71 | 72 | 73 | def han(filename, t): 74 | foo = "00000000000000000" + text2bin(t) + "11111111111111111" 75 | print(foo) 76 | strLen = len(foo) 77 | imm = Image.open(ab_path + "/file/" + filename) 78 | im = array(imm) 79 | count = 0 80 | for i in range(0, imm.size[1] - 1): 81 | for y in range(0, imm.size[0] - 1): 82 | for x in range(0, 3): 83 | if count > strLen - 1: 84 | break 85 | if foo[count] == "0": 86 | im[i, y, x] = ling(im[i, y, x]) 87 | else: 88 | im[i, y, x] = o(im[i, y, x]) 89 | count = count + 1 90 | tt = Image.fromarray(im) 91 | tt.save(ab_path + "/file/" + filename + "_result.png") 92 | 93 | 94 | def readImg(filename): 95 | imm = Image.open(ab_path + "/file/" + filename) 96 | im = array(imm) 97 | count = 0 98 | t = "" 99 | check = 0 100 | for i in range(0, imm.size[1] - 1): 101 | for y in range(0, imm.size[0] - 1): 102 | for x in range(0, 3): 103 | if check == 17: 104 | break 105 | if jiou(im[i, y, x]): 106 | t = t + "1" 107 | else: 108 | t = t + "0" 109 | check = check + 1 110 | if t == "00000000000000000": 111 | t = "" 112 | for i in range(0, imm.size[1] - 1): 113 | for y in range(0, imm.size[0] - 1): 114 | for x in range(0, 3): 115 | if count == 17: 116 | break 117 | if jiou(im[i, y, x]): 118 | t = t + "1" 119 | count = count + 1 120 | else: 121 | t = t + "0" 122 | count = 0 123 | return bringback(t[17:-16]) 124 | else: 125 | return "未读取到结果" 126 | 127 | 128 | # importlib.reload(sys) 129 | # sys.setdefaultencoding('utf-8') 130 | app = Flask(__name__) 131 | app.config['MAX_CONTENT_LENGTH'] = 2 * 1024 * 1024 132 | 133 | 134 | @app.route('/') 135 | def hello_world(): 136 | return render_template('up.html') 137 | 138 | 139 | @app.route('/read') 140 | def read(): 141 | return render_template('read.html') 142 | 143 | 144 | @app.route('/request', methods=['GET', 'POST']) 145 | def req(): 146 | if request.method == 'POST': 147 | fileName = '' 148 | t = '' 149 | try: 150 | t = request.form['t'] 151 | f = request.files['upload'] 152 | fileName = str(random.randint(1, 1000000000)) 153 | f.save(ab_path + '/file/' + fileName) 154 | except: 155 | return render_template('info.html', meg="Something Happend...") 156 | finally: 157 | try: 158 | han(fileName, t) 159 | return send_from_directory(ab_path + "/file/", fileName + "_result.png", as_attachment=True) 160 | except: 161 | return render_template('info.html', meg="无法处理请求,请检查你的输入和图片合法性") 162 | else: 163 | return '

bad req

' 164 | 165 | 166 | @app.route('/read_handle', methods=['GET', 'POST']) 167 | def req_r(): 168 | if request.method == 'POST': 169 | fileName = '' 170 | try: 171 | f = request.files['upload'] 172 | fileName = str(random.randint(1, 1000000000)) 173 | f.save(ab_path + '/file/' + fileName) 174 | except: 175 | return render_template('info.html', meg="Something Happend...") 176 | finally: 177 | try: 178 | return render_template('success.html', meg=readImg(fileName)) 179 | except: 180 | return render_template('info.html', meg="无法处理请求,图片可能已损坏") 181 | else: 182 | return '

bad req

' 183 | 184 | 185 | if __name__ == '__main__': 186 | app.run(debug=True) 187 | --------------------------------------------------------------------------------