Move away from rust 😢
This commit is contained in:
		
							parent
							
								
									f3393ef7f5
								
							
						
					
					
						commit
						28d28433f8
					
				
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,4 +1,3 @@
 | 
				
			|||||||
/target
 | 
					 | 
				
			||||||
**/*.rs.bk
 | 
					 | 
				
			||||||
Cargo.lock
 | 
					 | 
				
			||||||
assets/
 | 
					assets/
 | 
				
			||||||
 | 
					node_modules
 | 
				
			||||||
 | 
					package.lock
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										13
									
								
								Cargo.toml
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								Cargo.toml
									
									
									
									
									
								
							@ -1,13 +0,0 @@
 | 
				
			|||||||
[package]
 | 
					 | 
				
			||||||
name = "pytron-web"
 | 
					 | 
				
			||||||
version = "0.1.0"
 | 
					 | 
				
			||||||
authors = ["Thomas Forgione <thomas@forgione.fr>"]
 | 
					 | 
				
			||||||
edition = "2018"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[dependencies]
 | 
					 | 
				
			||||||
rocket = "0.4.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
rocket_contrib = { version = "0.4.0", features = ["tera_templates"] }
 | 
					 | 
				
			||||||
serde_derive = "1.0.89"
 | 
					 | 
				
			||||||
serde = "1.0.89"
 | 
					 | 
				
			||||||
serde_json = "1.0.39"
 | 
					 | 
				
			||||||
							
								
								
									
										817
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										817
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							@ -0,0 +1,817 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "pytron-web",
 | 
				
			||||||
 | 
					  "version": "1.0.0",
 | 
				
			||||||
 | 
					  "lockfileVersion": 1,
 | 
				
			||||||
 | 
					  "requires": true,
 | 
				
			||||||
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "@types/babel-types": {
 | 
				
			||||||
 | 
					      "version": "7.0.6",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.6.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-8zYZyy2kgwBXdz2j8Ix7LOghGiZbOiHf6vqmmBX1r76FdAzVNv7cODyJTEglUWiOdRnXh0s/o58neUwv5vaitQ=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "@types/babylon": {
 | 
				
			||||||
 | 
					      "version": "6.16.5",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "@types/babel-types": "*"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "accepts": {
 | 
				
			||||||
 | 
					      "version": "1.3.5",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "mime-types": "~2.1.18",
 | 
				
			||||||
 | 
					        "negotiator": "0.6.1"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "acorn": {
 | 
				
			||||||
 | 
					      "version": "3.3.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "acorn-globals": {
 | 
				
			||||||
 | 
					      "version": "3.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "acorn": "^4.0.4"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "acorn": {
 | 
				
			||||||
 | 
					          "version": "4.0.13",
 | 
				
			||||||
 | 
					          "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
 | 
				
			||||||
 | 
					          "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "align-text": {
 | 
				
			||||||
 | 
					      "version": "0.1.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "kind-of": "^3.0.2",
 | 
				
			||||||
 | 
					        "longest": "^1.0.1",
 | 
				
			||||||
 | 
					        "repeat-string": "^1.5.2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "array-flatten": {
 | 
				
			||||||
 | 
					      "version": "1.1.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "asap": {
 | 
				
			||||||
 | 
					      "version": "2.0.6",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "babel-runtime": {
 | 
				
			||||||
 | 
					      "version": "6.26.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "core-js": "^2.4.0",
 | 
				
			||||||
 | 
					        "regenerator-runtime": "^0.11.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "babel-types": {
 | 
				
			||||||
 | 
					      "version": "6.26.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "babel-runtime": "^6.26.0",
 | 
				
			||||||
 | 
					        "esutils": "^2.0.2",
 | 
				
			||||||
 | 
					        "lodash": "^4.17.4",
 | 
				
			||||||
 | 
					        "to-fast-properties": "^1.0.3"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "babylon": {
 | 
				
			||||||
 | 
					      "version": "6.18.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "body-parser": {
 | 
				
			||||||
 | 
					      "version": "1.18.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "bytes": "3.0.0",
 | 
				
			||||||
 | 
					        "content-type": "~1.0.4",
 | 
				
			||||||
 | 
					        "debug": "2.6.9",
 | 
				
			||||||
 | 
					        "depd": "~1.1.2",
 | 
				
			||||||
 | 
					        "http-errors": "~1.6.3",
 | 
				
			||||||
 | 
					        "iconv-lite": "0.4.23",
 | 
				
			||||||
 | 
					        "on-finished": "~2.3.0",
 | 
				
			||||||
 | 
					        "qs": "6.5.2",
 | 
				
			||||||
 | 
					        "raw-body": "2.3.3",
 | 
				
			||||||
 | 
					        "type-is": "~1.6.16"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "bytes": {
 | 
				
			||||||
 | 
					      "version": "3.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "camelcase": {
 | 
				
			||||||
 | 
					      "version": "1.2.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "center-align": {
 | 
				
			||||||
 | 
					      "version": "0.1.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "align-text": "^0.1.3",
 | 
				
			||||||
 | 
					        "lazy-cache": "^1.0.3"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "character-parser": {
 | 
				
			||||||
 | 
					      "version": "2.2.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "is-regex": "^1.0.3"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "clean-css": {
 | 
				
			||||||
 | 
					      "version": "4.2.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "source-map": "~0.6.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "cliui": {
 | 
				
			||||||
 | 
					      "version": "2.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "center-align": "^0.1.1",
 | 
				
			||||||
 | 
					        "right-align": "^0.1.1",
 | 
				
			||||||
 | 
					        "wordwrap": "0.0.2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "constantinople": {
 | 
				
			||||||
 | 
					      "version": "3.1.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "@types/babel-types": "^7.0.0",
 | 
				
			||||||
 | 
					        "@types/babylon": "^6.16.2",
 | 
				
			||||||
 | 
					        "babel-types": "^6.26.0",
 | 
				
			||||||
 | 
					        "babylon": "^6.18.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "content-disposition": {
 | 
				
			||||||
 | 
					      "version": "0.5.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "content-type": {
 | 
				
			||||||
 | 
					      "version": "1.0.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "cookie": {
 | 
				
			||||||
 | 
					      "version": "0.3.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "cookie-signature": {
 | 
				
			||||||
 | 
					      "version": "1.0.6",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "core-js": {
 | 
				
			||||||
 | 
					      "version": "2.6.5",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "debug": {
 | 
				
			||||||
 | 
					      "version": "2.6.9",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "ms": "2.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "decamelize": {
 | 
				
			||||||
 | 
					      "version": "1.2.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "depd": {
 | 
				
			||||||
 | 
					      "version": "1.1.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "destroy": {
 | 
				
			||||||
 | 
					      "version": "1.0.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "doctypes": {
 | 
				
			||||||
 | 
					      "version": "1.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "ee-first": {
 | 
				
			||||||
 | 
					      "version": "1.1.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "encodeurl": {
 | 
				
			||||||
 | 
					      "version": "1.0.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "escape-html": {
 | 
				
			||||||
 | 
					      "version": "1.0.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "esutils": {
 | 
				
			||||||
 | 
					      "version": "2.0.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "etag": {
 | 
				
			||||||
 | 
					      "version": "1.8.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "express": {
 | 
				
			||||||
 | 
					      "version": "4.16.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "accepts": "~1.3.5",
 | 
				
			||||||
 | 
					        "array-flatten": "1.1.1",
 | 
				
			||||||
 | 
					        "body-parser": "1.18.3",
 | 
				
			||||||
 | 
					        "content-disposition": "0.5.2",
 | 
				
			||||||
 | 
					        "content-type": "~1.0.4",
 | 
				
			||||||
 | 
					        "cookie": "0.3.1",
 | 
				
			||||||
 | 
					        "cookie-signature": "1.0.6",
 | 
				
			||||||
 | 
					        "debug": "2.6.9",
 | 
				
			||||||
 | 
					        "depd": "~1.1.2",
 | 
				
			||||||
 | 
					        "encodeurl": "~1.0.2",
 | 
				
			||||||
 | 
					        "escape-html": "~1.0.3",
 | 
				
			||||||
 | 
					        "etag": "~1.8.1",
 | 
				
			||||||
 | 
					        "finalhandler": "1.1.1",
 | 
				
			||||||
 | 
					        "fresh": "0.5.2",
 | 
				
			||||||
 | 
					        "merge-descriptors": "1.0.1",
 | 
				
			||||||
 | 
					        "methods": "~1.1.2",
 | 
				
			||||||
 | 
					        "on-finished": "~2.3.0",
 | 
				
			||||||
 | 
					        "parseurl": "~1.3.2",
 | 
				
			||||||
 | 
					        "path-to-regexp": "0.1.7",
 | 
				
			||||||
 | 
					        "proxy-addr": "~2.0.4",
 | 
				
			||||||
 | 
					        "qs": "6.5.2",
 | 
				
			||||||
 | 
					        "range-parser": "~1.2.0",
 | 
				
			||||||
 | 
					        "safe-buffer": "5.1.2",
 | 
				
			||||||
 | 
					        "send": "0.16.2",
 | 
				
			||||||
 | 
					        "serve-static": "1.13.2",
 | 
				
			||||||
 | 
					        "setprototypeof": "1.1.0",
 | 
				
			||||||
 | 
					        "statuses": "~1.4.0",
 | 
				
			||||||
 | 
					        "type-is": "~1.6.16",
 | 
				
			||||||
 | 
					        "utils-merge": "1.0.1",
 | 
				
			||||||
 | 
					        "vary": "~1.1.2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "finalhandler": {
 | 
				
			||||||
 | 
					      "version": "1.1.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "debug": "2.6.9",
 | 
				
			||||||
 | 
					        "encodeurl": "~1.0.2",
 | 
				
			||||||
 | 
					        "escape-html": "~1.0.3",
 | 
				
			||||||
 | 
					        "on-finished": "~2.3.0",
 | 
				
			||||||
 | 
					        "parseurl": "~1.3.2",
 | 
				
			||||||
 | 
					        "statuses": "~1.4.0",
 | 
				
			||||||
 | 
					        "unpipe": "~1.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "forwarded": {
 | 
				
			||||||
 | 
					      "version": "0.1.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "fresh": {
 | 
				
			||||||
 | 
					      "version": "0.5.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "function-bind": {
 | 
				
			||||||
 | 
					      "version": "1.1.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "has": {
 | 
				
			||||||
 | 
					      "version": "1.0.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "function-bind": "^1.1.1"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "http-errors": {
 | 
				
			||||||
 | 
					      "version": "1.6.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "depd": "~1.1.2",
 | 
				
			||||||
 | 
					        "inherits": "2.0.3",
 | 
				
			||||||
 | 
					        "setprototypeof": "1.1.0",
 | 
				
			||||||
 | 
					        "statuses": ">= 1.4.0 < 2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "iconv-lite": {
 | 
				
			||||||
 | 
					      "version": "0.4.23",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "safer-buffer": ">= 2.1.2 < 3"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "inherits": {
 | 
				
			||||||
 | 
					      "version": "2.0.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "ipaddr.js": {
 | 
				
			||||||
 | 
					      "version": "1.8.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "is-buffer": {
 | 
				
			||||||
 | 
					      "version": "1.1.6",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "is-expression": {
 | 
				
			||||||
 | 
					      "version": "3.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "acorn": "~4.0.2",
 | 
				
			||||||
 | 
					        "object-assign": "^4.0.1"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "acorn": {
 | 
				
			||||||
 | 
					          "version": "4.0.13",
 | 
				
			||||||
 | 
					          "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
 | 
				
			||||||
 | 
					          "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "is-promise": {
 | 
				
			||||||
 | 
					      "version": "2.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "is-regex": {
 | 
				
			||||||
 | 
					      "version": "1.0.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "has": "^1.0.1"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "js-stringify": {
 | 
				
			||||||
 | 
					      "version": "1.0.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "jstransformer": {
 | 
				
			||||||
 | 
					      "version": "1.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "is-promise": "^2.0.0",
 | 
				
			||||||
 | 
					        "promise": "^7.0.1"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "kind-of": {
 | 
				
			||||||
 | 
					      "version": "3.2.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "is-buffer": "^1.1.5"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "lazy-cache": {
 | 
				
			||||||
 | 
					      "version": "1.0.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "lodash": {
 | 
				
			||||||
 | 
					      "version": "4.17.11",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "longest": {
 | 
				
			||||||
 | 
					      "version": "1.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "media-typer": {
 | 
				
			||||||
 | 
					      "version": "0.3.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "merge-descriptors": {
 | 
				
			||||||
 | 
					      "version": "1.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "methods": {
 | 
				
			||||||
 | 
					      "version": "1.1.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "mime": {
 | 
				
			||||||
 | 
					      "version": "1.4.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "mime-db": {
 | 
				
			||||||
 | 
					      "version": "1.38.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "mime-types": {
 | 
				
			||||||
 | 
					      "version": "2.1.22",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "mime-db": "~1.38.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "ms": {
 | 
				
			||||||
 | 
					      "version": "2.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "negotiator": {
 | 
				
			||||||
 | 
					      "version": "0.6.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "object-assign": {
 | 
				
			||||||
 | 
					      "version": "4.1.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "on-finished": {
 | 
				
			||||||
 | 
					      "version": "2.3.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "ee-first": "1.1.1"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "parseurl": {
 | 
				
			||||||
 | 
					      "version": "1.3.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "path-parse": {
 | 
				
			||||||
 | 
					      "version": "1.0.6",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "path-to-regexp": {
 | 
				
			||||||
 | 
					      "version": "0.1.7",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "promise": {
 | 
				
			||||||
 | 
					      "version": "7.3.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "asap": "~2.0.3"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "proxy-addr": {
 | 
				
			||||||
 | 
					      "version": "2.0.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "forwarded": "~0.1.2",
 | 
				
			||||||
 | 
					        "ipaddr.js": "1.8.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pug": {
 | 
				
			||||||
 | 
					      "version": "2.0.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-ccuoJTfJWl6rftBGluQiH1Oqh44=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "pug-code-gen": "^2.0.1",
 | 
				
			||||||
 | 
					        "pug-filters": "^3.1.0",
 | 
				
			||||||
 | 
					        "pug-lexer": "^4.0.0",
 | 
				
			||||||
 | 
					        "pug-linker": "^3.0.5",
 | 
				
			||||||
 | 
					        "pug-load": "^2.0.11",
 | 
				
			||||||
 | 
					        "pug-parser": "^5.0.0",
 | 
				
			||||||
 | 
					        "pug-runtime": "^2.0.4",
 | 
				
			||||||
 | 
					        "pug-strip-comments": "^1.0.3"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pug-attrs": {
 | 
				
			||||||
 | 
					      "version": "2.0.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "constantinople": "^3.0.1",
 | 
				
			||||||
 | 
					        "js-stringify": "^1.0.1",
 | 
				
			||||||
 | 
					        "pug-runtime": "^2.0.4"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pug-code-gen": {
 | 
				
			||||||
 | 
					      "version": "2.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-CVHsgyJddNjPxHan+Zolm199BQw=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "constantinople": "^3.0.1",
 | 
				
			||||||
 | 
					        "doctypes": "^1.1.0",
 | 
				
			||||||
 | 
					        "js-stringify": "^1.0.1",
 | 
				
			||||||
 | 
					        "pug-attrs": "^2.0.3",
 | 
				
			||||||
 | 
					        "pug-error": "^1.3.2",
 | 
				
			||||||
 | 
					        "pug-runtime": "^2.0.4",
 | 
				
			||||||
 | 
					        "void-elements": "^2.0.1",
 | 
				
			||||||
 | 
					        "with": "^5.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pug-error": {
 | 
				
			||||||
 | 
					      "version": "1.3.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pug-filters": {
 | 
				
			||||||
 | 
					      "version": "3.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "clean-css": "^4.1.11",
 | 
				
			||||||
 | 
					        "constantinople": "^3.0.1",
 | 
				
			||||||
 | 
					        "jstransformer": "1.0.0",
 | 
				
			||||||
 | 
					        "pug-error": "^1.3.2",
 | 
				
			||||||
 | 
					        "pug-walk": "^1.1.7",
 | 
				
			||||||
 | 
					        "resolve": "^1.1.6",
 | 
				
			||||||
 | 
					        "uglify-js": "^2.6.1"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pug-lexer": {
 | 
				
			||||||
 | 
					      "version": "4.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-IQwYRX7y4XYCQnQMXmR715TOwng=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "character-parser": "^2.1.1",
 | 
				
			||||||
 | 
					        "is-expression": "^3.0.0",
 | 
				
			||||||
 | 
					        "pug-error": "^1.3.2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pug-linker": {
 | 
				
			||||||
 | 
					      "version": "3.0.5",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.5.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-npp65ABWgtAn3uuWsAD4juuDoC8=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "pug-error": "^1.3.2",
 | 
				
			||||||
 | 
					        "pug-walk": "^1.1.7"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pug-load": {
 | 
				
			||||||
 | 
					      "version": "2.0.11",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.11.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "object-assign": "^4.1.0",
 | 
				
			||||||
 | 
					        "pug-walk": "^1.1.7"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pug-parser": {
 | 
				
			||||||
 | 
					      "version": "5.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "pug-error": "^1.3.2",
 | 
				
			||||||
 | 
					        "token-stream": "0.0.1"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pug-runtime": {
 | 
				
			||||||
 | 
					      "version": "2.0.4",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.4.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pug-strip-comments": {
 | 
				
			||||||
 | 
					      "version": "1.0.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "pug-error": "^1.3.2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pug-walk": {
 | 
				
			||||||
 | 
					      "version": "1.1.7",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.7.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "qs": {
 | 
				
			||||||
 | 
					      "version": "6.5.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "range-parser": {
 | 
				
			||||||
 | 
					      "version": "1.2.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "raw-body": {
 | 
				
			||||||
 | 
					      "version": "2.3.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "bytes": "3.0.0",
 | 
				
			||||||
 | 
					        "http-errors": "1.6.3",
 | 
				
			||||||
 | 
					        "iconv-lite": "0.4.23",
 | 
				
			||||||
 | 
					        "unpipe": "1.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "regenerator-runtime": {
 | 
				
			||||||
 | 
					      "version": "0.11.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "repeat-string": {
 | 
				
			||||||
 | 
					      "version": "1.6.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "resolve": {
 | 
				
			||||||
 | 
					      "version": "1.10.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "path-parse": "^1.0.6"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "right-align": {
 | 
				
			||||||
 | 
					      "version": "0.1.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "align-text": "^0.1.1"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "safe-buffer": {
 | 
				
			||||||
 | 
					      "version": "5.1.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "safer-buffer": {
 | 
				
			||||||
 | 
					      "version": "2.1.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "send": {
 | 
				
			||||||
 | 
					      "version": "0.16.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "debug": "2.6.9",
 | 
				
			||||||
 | 
					        "depd": "~1.1.2",
 | 
				
			||||||
 | 
					        "destroy": "~1.0.4",
 | 
				
			||||||
 | 
					        "encodeurl": "~1.0.2",
 | 
				
			||||||
 | 
					        "escape-html": "~1.0.3",
 | 
				
			||||||
 | 
					        "etag": "~1.8.1",
 | 
				
			||||||
 | 
					        "fresh": "0.5.2",
 | 
				
			||||||
 | 
					        "http-errors": "~1.6.2",
 | 
				
			||||||
 | 
					        "mime": "1.4.1",
 | 
				
			||||||
 | 
					        "ms": "2.0.0",
 | 
				
			||||||
 | 
					        "on-finished": "~2.3.0",
 | 
				
			||||||
 | 
					        "range-parser": "~1.2.0",
 | 
				
			||||||
 | 
					        "statuses": "~1.4.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "serve-static": {
 | 
				
			||||||
 | 
					      "version": "1.13.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "encodeurl": "~1.0.2",
 | 
				
			||||||
 | 
					        "escape-html": "~1.0.3",
 | 
				
			||||||
 | 
					        "parseurl": "~1.3.2",
 | 
				
			||||||
 | 
					        "send": "0.16.2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "setprototypeof": {
 | 
				
			||||||
 | 
					      "version": "1.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "source-map": {
 | 
				
			||||||
 | 
					      "version": "0.6.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "statuses": {
 | 
				
			||||||
 | 
					      "version": "1.4.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "to-fast-properties": {
 | 
				
			||||||
 | 
					      "version": "1.0.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "token-stream": {
 | 
				
			||||||
 | 
					      "version": "0.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "type-is": {
 | 
				
			||||||
 | 
					      "version": "1.6.16",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "media-typer": "0.3.0",
 | 
				
			||||||
 | 
					        "mime-types": "~2.1.18"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "uglify-js": {
 | 
				
			||||||
 | 
					      "version": "2.8.29",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "source-map": "~0.5.1",
 | 
				
			||||||
 | 
					        "uglify-to-browserify": "~1.0.0",
 | 
				
			||||||
 | 
					        "yargs": "~3.10.0"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "source-map": {
 | 
				
			||||||
 | 
					          "version": "0.5.7",
 | 
				
			||||||
 | 
					          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
 | 
				
			||||||
 | 
					          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "uglify-to-browserify": {
 | 
				
			||||||
 | 
					      "version": "1.0.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
 | 
				
			||||||
 | 
					      "optional": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "unpipe": {
 | 
				
			||||||
 | 
					      "version": "1.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "utils-merge": {
 | 
				
			||||||
 | 
					      "version": "1.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "vary": {
 | 
				
			||||||
 | 
					      "version": "1.1.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "void-elements": {
 | 
				
			||||||
 | 
					      "version": "2.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "window-size": {
 | 
				
			||||||
 | 
					      "version": "0.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "with": {
 | 
				
			||||||
 | 
					      "version": "5.1.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "acorn": "^3.1.0",
 | 
				
			||||||
 | 
					        "acorn-globals": "^3.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "wordwrap": {
 | 
				
			||||||
 | 
					      "version": "0.0.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "yargs": {
 | 
				
			||||||
 | 
					      "version": "3.10.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "camelcase": "^1.0.2",
 | 
				
			||||||
 | 
					        "cliui": "^2.1.0",
 | 
				
			||||||
 | 
					        "decamelize": "^1.0.0",
 | 
				
			||||||
 | 
					        "window-size": "0.1.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										12
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "pytron-web",
 | 
				
			||||||
 | 
					  "version": "1.0.0",
 | 
				
			||||||
 | 
					  "main": "server.js",
 | 
				
			||||||
 | 
					  "scripts": {
 | 
				
			||||||
 | 
					    "test": "echo \"Error: no test specified\" && exit 1"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "express": "^4.16.4",
 | 
				
			||||||
 | 
					    "pug": "^2.0.3"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										23
									
								
								server.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								server.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					const fs = require('fs');
 | 
				
			||||||
 | 
					const express = require('express');
 | 
				
			||||||
 | 
					const pug = require('pug');
 | 
				
			||||||
 | 
					const app = express();
 | 
				
			||||||
 | 
					const port = 8000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app.set('view engine', 'pug');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app.get('/', (req, res) => {
 | 
				
			||||||
 | 
					    fs.readFile('assets/data.json', 'utf-8', (err, data) => {
 | 
				
			||||||
 | 
					        if (err != null) {
 | 
				
			||||||
 | 
					            console.log("Error: " + e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        let parsed = JSON.parse(data);
 | 
				
			||||||
 | 
					        res.render('index', parsed);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app.use('/static', express.static('static'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app.listen(port, () => {
 | 
				
			||||||
 | 
					    console.log(`Example app listening on port ${port}!`)
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
							
								
								
									
										124
									
								
								src/lib.rs
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								src/lib.rs
									
									
									
									
									
								
							@ -1,124 +0,0 @@
 | 
				
			|||||||
#[macro_use]
 | 
					 | 
				
			||||||
extern crate serde_derive;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use std::collections::HashMap;
 | 
					 | 
				
			||||||
use std::fs::File;
 | 
					 | 
				
			||||||
use std::io::Read;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[derive(Serialize, Deserialize)]
 | 
					 | 
				
			||||||
/// The data contained from the json file generated by python.
 | 
					 | 
				
			||||||
pub struct JsonData {
 | 
					 | 
				
			||||||
    /// The names of the AIs.
 | 
					 | 
				
			||||||
    pub ais: Vec<String>,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// The results of the battles.
 | 
					 | 
				
			||||||
    pub battles: HashMap<String, f64>,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl JsonData {
 | 
					 | 
				
			||||||
    /// Creates some data data.
 | 
					 | 
				
			||||||
    pub fn data() -> JsonData {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Open the file
 | 
					 | 
				
			||||||
        let mut file = File::open("./assets/data.json")
 | 
					 | 
				
			||||||
            .expect("Couldn't open file");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        let mut content = String::new();
 | 
					 | 
				
			||||||
        file.read_to_string(&mut content)
 | 
					 | 
				
			||||||
            .expect("Couldn't read data");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        serde_json::from_str(&content)
 | 
					 | 
				
			||||||
            .expect("Couldn't parse json")
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[derive(Serialize, Deserialize, Clone)]
 | 
					 | 
				
			||||||
/// An AI.
 | 
					 | 
				
			||||||
pub struct Ai {
 | 
					 | 
				
			||||||
    /// The name of the ai.
 | 
					 | 
				
			||||||
    pub name: String,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// The number of battles won by the ai.
 | 
					 | 
				
			||||||
    pub victory_count: usize,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// The number of battles lost by the ai.
 | 
					 | 
				
			||||||
    pub defeat_count: usize,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[derive(Serialize, Deserialize)]
 | 
					 | 
				
			||||||
pub struct Data {
 | 
					 | 
				
			||||||
    /// The AIs
 | 
					 | 
				
			||||||
    pub ais: Vec<Ai>,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// The battles.
 | 
					 | 
				
			||||||
    ///
 | 
					 | 
				
			||||||
    /// This hashmap is symmetric.
 | 
					 | 
				
			||||||
    pub battles: HashMap<String, f64>,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// The ais sorted by victory count.
 | 
					 | 
				
			||||||
    pub sorted_ais: Vec<Ai>,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl Data {
 | 
					 | 
				
			||||||
    /// Creates some data data.
 | 
					 | 
				
			||||||
    pub fn data() -> Data {
 | 
					 | 
				
			||||||
        JsonData::data().into()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl From<JsonData> for Data {
 | 
					 | 
				
			||||||
    fn from(d: JsonData) -> Data {
 | 
					 | 
				
			||||||
        let mut ais = vec![];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        for ai in d.ais {
 | 
					 | 
				
			||||||
            ais.push(Ai {
 | 
					 | 
				
			||||||
                name: ai,
 | 
					 | 
				
			||||||
                victory_count: 0,
 | 
					 | 
				
			||||||
                defeat_count: 0,
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        let mut battles = HashMap::new();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        for (key, val) in d.battles {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            let playing_ais = key.split("/")
 | 
					 | 
				
			||||||
                .collect::<Vec<_>>();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            let key1 = format!("{}/{}", playing_ais[0], playing_ais[1]);
 | 
					 | 
				
			||||||
            let key2 = format!("{}/{}", playing_ais[1], playing_ais[0]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            battles.insert(key1, val);
 | 
					 | 
				
			||||||
            battles.insert(key2, val);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if val != 0.5 {
 | 
					 | 
				
			||||||
                let (winner, loser) = if val > 0.5 {
 | 
					 | 
				
			||||||
                    (playing_ais[0], playing_ais[1])
 | 
					 | 
				
			||||||
                } else {
 | 
					 | 
				
			||||||
                    (playing_ais[1], playing_ais[0])
 | 
					 | 
				
			||||||
                };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                for ai in &mut ais {
 | 
					 | 
				
			||||||
                    if ai.name == winner {
 | 
					 | 
				
			||||||
                        ai.victory_count += 1;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if ai.name == loser {
 | 
					 | 
				
			||||||
                        ai.defeat_count += 1;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        let mut sorted_ais = ais.clone();
 | 
					 | 
				
			||||||
        sorted_ais.sort_by_key(|ai| {
 | 
					 | 
				
			||||||
            (std::usize::MAX - ai.victory_count, ai.defeat_count)
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Data {
 | 
					 | 
				
			||||||
            ais,
 | 
					 | 
				
			||||||
            sorted_ais,
 | 
					 | 
				
			||||||
            battles,
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										22
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								src/main.rs
									
									
									
									
									
								
							@ -1,22 +0,0 @@
 | 
				
			|||||||
#![feature(proc_macro_hygiene, decl_macro)]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[macro_use]
 | 
					 | 
				
			||||||
extern crate rocket;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use rocket_contrib::templates::Template;
 | 
					 | 
				
			||||||
use rocket_contrib::serve::StaticFiles;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use pytron_web::Data;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[get("/")]
 | 
					 | 
				
			||||||
fn hello() -> Template {
 | 
					 | 
				
			||||||
    Template::render("index", &Data::data())
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fn main() {
 | 
					 | 
				
			||||||
    rocket::ignite()
 | 
					 | 
				
			||||||
        .mount("/", routes![hello])
 | 
					 | 
				
			||||||
        .mount("/static", StaticFiles::from("static"))
 | 
					 | 
				
			||||||
        .attach(Template::fairing())
 | 
					 | 
				
			||||||
        .launch();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,50 +0,0 @@
 | 
				
			|||||||
<!doctype html>
 | 
					 | 
				
			||||||
<html lang="en">
 | 
					 | 
				
			||||||
    <head>
 | 
					 | 
				
			||||||
        <meta charset="utf-8">
 | 
					 | 
				
			||||||
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 | 
					 | 
				
			||||||
        <link rel="stylesheet" href="/static/main.css">
 | 
					 | 
				
			||||||
        {% block extracss %}{% endblock extracss %}
 | 
					 | 
				
			||||||
        <title>Pytron</title>
 | 
					 | 
				
			||||||
    </head>
 | 
					 | 
				
			||||||
    <body class="layout-documentation page-components">
 | 
					 | 
				
			||||||
        <nav class="navbar is-link" role="navigation" aria-label="main navigation">
 | 
					 | 
				
			||||||
            <div class="container">
 | 
					 | 
				
			||||||
                <div class="navbar-brand">
 | 
					 | 
				
			||||||
                    <a class="navbar-item is-size-4" href="/">
 | 
					 | 
				
			||||||
                        <strong>Pytron</strong>
 | 
					 | 
				
			||||||
                    </a>
 | 
					 | 
				
			||||||
                    <a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false" data-target="navbarBasicExample">
 | 
					 | 
				
			||||||
                        <span aria-hidden="true"></span>
 | 
					 | 
				
			||||||
                        <span aria-hidden="true"></span>
 | 
					 | 
				
			||||||
                        <span aria-hidden="true"></span>
 | 
					 | 
				
			||||||
                    </a>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
                <div id="navbarBasicExample" class="navbar-menu">
 | 
					 | 
				
			||||||
                    <div class="navbar-end">
 | 
					 | 
				
			||||||
                        <a class="navbar-item is-size-6" href="/button">
 | 
					 | 
				
			||||||
                            <strong>Button</strong>
 | 
					 | 
				
			||||||
                        </a>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
        </nav>
 | 
					 | 
				
			||||||
        {% block content %}{% endblock %}
 | 
					 | 
				
			||||||
        <script>
 | 
					 | 
				
			||||||
            document.addEventListener('DOMContentLoaded', () => {
 | 
					 | 
				
			||||||
              const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);
 | 
					 | 
				
			||||||
              if ($navbarBurgers.length > 0) {
 | 
					 | 
				
			||||||
                $navbarBurgers.forEach( el => {
 | 
					 | 
				
			||||||
                  el.addEventListener('click', () => {
 | 
					 | 
				
			||||||
                    const target = el.dataset.target;
 | 
					 | 
				
			||||||
                    const $target = document.getElementById(target);
 | 
					 | 
				
			||||||
                    el.classList.toggle('is-active');
 | 
					 | 
				
			||||||
                    $target.classList.toggle('is-active');
 | 
					 | 
				
			||||||
                  });
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        </script>
 | 
					 | 
				
			||||||
        {% block extrajs %}{% endblock %}
 | 
					 | 
				
			||||||
    </body>
 | 
					 | 
				
			||||||
</html>
 | 
					 | 
				
			||||||
@ -1,56 +0,0 @@
 | 
				
			|||||||
{% extends "base" %}
 | 
					 | 
				
			||||||
{% block content %}
 | 
					 | 
				
			||||||
<section class="section">
 | 
					 | 
				
			||||||
    <div class="container">
 | 
					 | 
				
			||||||
        <div class="columns is-centered">
 | 
					 | 
				
			||||||
            <div class="column is-narrow is-desktop">
 | 
					 | 
				
			||||||
                <table class="table is-bordered is-striped is-narrow is-hoverable">
 | 
					 | 
				
			||||||
                    <tr>
 | 
					 | 
				
			||||||
                        <th></th>
 | 
					 | 
				
			||||||
                        {% for ai in ais %}
 | 
					 | 
				
			||||||
                            <th class="has-text-centered">{{ ai.name }}</th>
 | 
					 | 
				
			||||||
                        {% endfor %}
 | 
					 | 
				
			||||||
                        <th class="has-text-success has-text-centered">✓</th>
 | 
					 | 
				
			||||||
                        <th class="has-text-danger has-text-centered">✗</th>
 | 
					 | 
				
			||||||
                    </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    {% for ai1 in ais %}
 | 
					 | 
				
			||||||
                        <tr>
 | 
					 | 
				
			||||||
                            <th class="has-text-centered">{{ ai1.name }}</th>
 | 
					 | 
				
			||||||
                            {% for ai2 in ais %}
 | 
					 | 
				
			||||||
                                {% if ai1.name == ai2.name %}
 | 
					 | 
				
			||||||
                                    <td></td>
 | 
					 | 
				
			||||||
                                {% else %}
 | 
					 | 
				
			||||||
                                    {% set key = ai1.name ~ "/" ~ ai2.name %}
 | 
					 | 
				
			||||||
                                    {% set value = battles | get(key=key) %}
 | 
					 | 
				
			||||||
                                    {% if value > 0.5 %}
 | 
					 | 
				
			||||||
                                        <td class="has-text-success">{{ value }}</td>
 | 
					 | 
				
			||||||
                                    {% elif value < 0.5 %}
 | 
					 | 
				
			||||||
                                        <td class="has-text-danger">{{ value }}</td>
 | 
					 | 
				
			||||||
                                    {% else %}
 | 
					 | 
				
			||||||
                                        <td>{{ value }}</td>
 | 
					 | 
				
			||||||
                                    {% endif %}
 | 
					 | 
				
			||||||
                                    {% endif %}
 | 
					 | 
				
			||||||
                            {% endfor %}
 | 
					 | 
				
			||||||
                            <td class="has-text-centered"><strong>{{ ai1.victory_count }}</strong></td>
 | 
					 | 
				
			||||||
                            <td class="has-text-centered"><strong>{{ ai1.defeat_count }}</strong></td>
 | 
					 | 
				
			||||||
                        </tr>
 | 
					 | 
				
			||||||
                    {% endfor %}
 | 
					 | 
				
			||||||
                </table>
 | 
					 | 
				
			||||||
             </div>
 | 
					 | 
				
			||||||
            <div class="column is-narrow">
 | 
					 | 
				
			||||||
                <table class="table is-bordered is-striped is-narrow is-hoverable">
 | 
					 | 
				
			||||||
                    <tr><th class="has-text-centered">AI</th><th>Score</th></tr>
 | 
					 | 
				
			||||||
                    {% for ai in sorted_ais %}
 | 
					 | 
				
			||||||
                        <tr>
 | 
					 | 
				
			||||||
                            <td class="has-text-centered"><strong>{{ ai.name }}</strong></td>
 | 
					 | 
				
			||||||
                            <td class="has-text-centered">{{ ai.victory_count - ai.defeat_count }}</td>
 | 
					 | 
				
			||||||
                        </tr>
 | 
					 | 
				
			||||||
                    {% endfor %}
 | 
					 | 
				
			||||||
                </table>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
</section>
 | 
					 | 
				
			||||||
{% endblock %}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
							
								
								
									
										37
									
								
								views/base.pug
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								views/base.pug
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					doctype html
 | 
				
			||||||
 | 
					html(lang='en')
 | 
				
			||||||
 | 
					    head
 | 
				
			||||||
 | 
					        meta(charset='utf-8')
 | 
				
			||||||
 | 
					        meta(name='viewport', content='width=device-width, initial-scale=1, shrink-to-fit=no')
 | 
				
			||||||
 | 
					        link(rel='stylesheet', href='/static/main.css')
 | 
				
			||||||
 | 
					    body.layout-documentation.page-components
 | 
				
			||||||
 | 
					        block extracss
 | 
				
			||||||
 | 
					        title Pytron
 | 
				
			||||||
 | 
					        nav.navbar.is-link(role='navigation', aria-label='main navigation')
 | 
				
			||||||
 | 
					            .container
 | 
				
			||||||
 | 
					                .navbar-brand
 | 
				
			||||||
 | 
					                    a.navbar-item.is-size-4(href='/')
 | 
				
			||||||
 | 
					                        strong Pytron
 | 
				
			||||||
 | 
					                    a.navbar-burger.burger(role='button', aria-label='menu', aria-expanded='false', data-target='navbarBasicExample')
 | 
				
			||||||
 | 
					                        span(aria-hidden='true')
 | 
				
			||||||
 | 
					                        span(aria-hidden='true')
 | 
				
			||||||
 | 
					                        span(aria-hidden='true')
 | 
				
			||||||
 | 
					                #navbarBasicExample.navbar-menu
 | 
				
			||||||
 | 
					                    .navbar-end
 | 
				
			||||||
 | 
					                        a.navbar-item.is-size-6(href='/button')
 | 
				
			||||||
 | 
					                            strong Button
 | 
				
			||||||
 | 
					        block content
 | 
				
			||||||
 | 
					        script.
 | 
				
			||||||
 | 
					            document.addEventListener('DOMContentLoaded', () => {
 | 
				
			||||||
 | 
					                const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);
 | 
				
			||||||
 | 
					                if ($navbarBurgers.length > 0) {
 | 
				
			||||||
 | 
					                    $navbarBurgers.forEach( el => {
 | 
				
			||||||
 | 
					                        el.addEventListener('click', () => {
 | 
				
			||||||
 | 
					                            const target = el.dataset.target;
 | 
				
			||||||
 | 
					                             const $target = document.getElementById(target);
 | 
				
			||||||
 | 
					                             el.classList.toggle('is-active');
 | 
				
			||||||
 | 
					                             $target.classList.toggle('is-active');
 | 
				
			||||||
 | 
					                        });
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
							
								
								
									
										41
									
								
								views/index.pug
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								views/index.pug
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					extends base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					block content
 | 
				
			||||||
 | 
					    section.section
 | 
				
			||||||
 | 
					        .container
 | 
				
			||||||
 | 
					            .columns.is-centered
 | 
				
			||||||
 | 
					                .column.is-narrow.is-desktop
 | 
				
			||||||
 | 
					                    table.table.is-bordered.is-striped.is-narrow.is-hoverable
 | 
				
			||||||
 | 
					                        tr
 | 
				
			||||||
 | 
					                            th
 | 
				
			||||||
 | 
					                            for ai in ais
 | 
				
			||||||
 | 
					                                th.has-text-centered= ai
 | 
				
			||||||
 | 
					                            th.has-text-centered.has-text-success ✓
 | 
				
			||||||
 | 
					                            th.has-text-centered.has-text-danger ✗
 | 
				
			||||||
 | 
					                        for ai1 in ais
 | 
				
			||||||
 | 
					                            tr
 | 
				
			||||||
 | 
					                                th.has-text-centered= ai1
 | 
				
			||||||
 | 
					                                for ai2 in ais
 | 
				
			||||||
 | 
					                                    if ai1 == ai2
 | 
				
			||||||
 | 
					                                        td
 | 
				
			||||||
 | 
					                                    else
 | 
				
			||||||
 | 
					                                        td.has-text-success= battles[ai1 + "/" + ai2]
 | 
				
			||||||
 | 
					                                td.has-text-centered
 | 
				
			||||||
 | 
					                                    strong= 0
 | 
				
			||||||
 | 
					                                td.has-text-centered
 | 
				
			||||||
 | 
					                                    strong= 0
 | 
				
			||||||
 | 
					                .column.is-narrow.is-desktop
 | 
				
			||||||
 | 
					                    table.table.is-bordered.is-striped.is-hoverable
 | 
				
			||||||
 | 
					                        tr
 | 
				
			||||||
 | 
					                            th.has-text-centered AI
 | 
				
			||||||
 | 
					                            th.has-text-centered Score
 | 
				
			||||||
 | 
					                        for ai in ais
 | 
				
			||||||
 | 
					                            tr
 | 
				
			||||||
 | 
					                                td.has-text-centered
 | 
				
			||||||
 | 
					                                    strong= ai
 | 
				
			||||||
 | 
					                                td.has-text-centered
 | 
				
			||||||
 | 
					                                    strong 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user