From 6b7816c46a453f19dc183c57a3adb4e5d0a36f98 Mon Sep 17 00:00:00 2001 From: Alex-Wengg Date: Wed, 23 Sep 2026 01:08:42 -0400 Subject: [PATCH 1/9] Add Subway Surfers-style lane runner model comparison Retry of the runner idea after the Flappy Bird trial ruled out per-frame control: one decision per row, five moves (left/right/jump/slide/stay), and every option labeled with its consequence over the three visible rows (the Tetris harness pattern). Option order rotates each row. - DecisionPolicy: the 13 model backends move out of FlappyBirdPolicy into a shared target (choose(state:instruction:options:)). FlappyBirdPolicy is now a thin wrapper; Flappy results are unchanged (GLiNER multilingual seeds 1-4 still 1 pipe / 10.98 s). - maximumOptions per model: Kai/Lex Choice packages have 3 candidate slots (marker_positions [1, 3]), NanoJev 4, so they cannot take the runner's 4-5 moves and now fail up front instead of in the worker. - LaneRunner engine (solvable by construction), LaneRunnerCheck headless runner (model, heuristic, random), LaneRunnerDemo app that shows the exact model input and counts late rows. Seeds 1-4, 200-row cap: heuristic 800/800; GLiNER base 184, GLiNER multilingual 160, Kev 0.6B 132 (66% first-position picks), GLiClass 70, GLiNER small 56, Jeff 30 = random 30, Laya 22, Verdict 16, LFM 12, Kev 0.5B 10. Every run ended on an option labeled "crash". Co-Authored-By: Claude Opus 5.5 (1M context) --- Package.swift | 11 +- Sources/DecisionPolicy/DecisionPolicy.swift | 290 ++++++++++++++++++ .../FlappyBirdPolicy/FlappyBirdPolicy.swift | 246 +-------------- Sources/LaneRunner/LaneRunner.swift | 179 +++++++++++ Sources/LaneRunnerCheck/main.swift | 97 ++++++ .../LaneRunnerDemo/LaneRunnerDemoApp.swift | 14 + Sources/LaneRunnerDemo/LaneRunnerModel.swift | 167 ++++++++++ Sources/LaneRunnerDemo/LaneRunnerView.swift | 165 ++++++++++ Sources/LaneRunnerDemo/README.md | 35 +++ .../LaneRunnerPolicy/LaneRunnerPolicy.swift | 44 +++ Tests/LaneRunnerTests/LaneRunnerTests.swift | 48 +++ 11 files changed, 1060 insertions(+), 236 deletions(-) create mode 100644 Sources/DecisionPolicy/DecisionPolicy.swift create mode 100644 Sources/LaneRunner/LaneRunner.swift create mode 100644 Sources/LaneRunnerCheck/main.swift create mode 100644 Sources/LaneRunnerDemo/LaneRunnerDemoApp.swift create mode 100644 Sources/LaneRunnerDemo/LaneRunnerModel.swift create mode 100644 Sources/LaneRunnerDemo/LaneRunnerView.swift create mode 100644 Sources/LaneRunnerDemo/README.md create mode 100644 Sources/LaneRunnerPolicy/LaneRunnerPolicy.swift create mode 100644 Tests/LaneRunnerTests/LaneRunnerTests.swift diff --git a/Package.swift b/Package.swift index a1a1545..608a1cf 100644 --- a/Package.swift +++ b/Package.swift @@ -25,8 +25,17 @@ let package = Package( ), .target(name: "LayaTetris", dependencies: ["FluidUse"]), .target(name: "Game2048"), + .target(name: "DecisionPolicy", dependencies: ["FluidUse"]), .target(name: "FlappyBird"), - .target(name: "FlappyBirdPolicy", dependencies: ["FlappyBird", "FluidUse"]), + .target(name: "FlappyBirdPolicy", dependencies: ["FlappyBird", "DecisionPolicy"]), + .target(name: "LaneRunner"), + .target(name: "LaneRunnerPolicy", dependencies: ["LaneRunner", "DecisionPolicy"]), + .executableTarget(name: "LaneRunnerCheck", dependencies: ["LaneRunner", "LaneRunnerPolicy", "DecisionPolicy"]), + .executableTarget( + name: "LaneRunnerDemo", dependencies: ["LaneRunner", "LaneRunnerPolicy", "DecisionPolicy"], + exclude: ["README.md"] + ), + .testTarget(name: "LaneRunnerTests", dependencies: ["LaneRunner"]), .executableTarget( name: "GLiClassFlappyDemo", dependencies: ["FlappyBird", "FlappyBirdPolicy"], exclude: ["README.md"] ), diff --git a/Sources/DecisionPolicy/DecisionPolicy.swift b/Sources/DecisionPolicy/DecisionPolicy.swift new file mode 100644 index 0000000..7d461ef --- /dev/null +++ b/Sources/DecisionPolicy/DecisionPolicy.swift @@ -0,0 +1,290 @@ +import FluidUse +import Foundation + +public enum DecisionModel: String, CaseIterable, Sendable { + case gliclass + case laya + case gliner2Small + case gliner2Base + case gliner2Multilingual + case verdict + case kev05 + case kev06 + case kai + case lex + case lfm350 + case jeff + case nanojev + + public var title: String { + switch self { + case .gliclass: "GLiClass LUT8" + case .laya: "Laya E8" + case .gliner2Small: "GLiNER 2.5 small W8" + case .gliner2Base: "GLiNER 2.5 base W8" + case .gliner2Multilingual: "GLiNER 2.5 multilingual W8" + case .verdict: "Verdict FP16" + case .kev05: "Kev 0.5B FP16" + case .kev06: "Kev 0.6B FP16" + case .kai: "Decision 1.0 Kai FP16" + case .lex: "Decision 1.0 Lex FP16" + case .lfm350: "LFM2.5-350M-RLCD FP16" + case .jeff: "Jeff FP16" + case .nanojev: "NanoJev FP16 (local)" + } + } + + /// Largest option count the published package accepts; Kai/Lex Choice packages take three candidates. + public var maximumOptions: Int { + switch self { + case .kai, .lex: 3 + case .nanojev: 4 + case .jeff, .gliner2Small, .gliner2Base, .gliner2Multilingual: 8 + case .gliclass, .verdict: 24 + case .laya, .kev05, .kev06, .lfm350: 32 + } + } + + var published: PublishedCoreMLModel? { + switch self { + case .kev05: .kev05 + case .kev06: .kev06 + case .kai: .kai + case .lex: .lex + case .lfm350: .lfm350 + case .jeff: .jeff + case .nanojev: .nanojev + case .gliclass, .laya, .gliner2Small, .gliner2Base, .gliner2Multilingual, .verdict: nil + } + } +} + +/// One option: a short id (`name`) and the text the model reads (`label`). +public struct DecisionOptionText: Sendable, Equatable { + public let name: String + public let label: String + + public init(name: String, label: String) { + self.name = name + self.label = label + } +} + +public struct DecisionChoice: Sendable { + /// Index into the options as presented. + public let index: Int + /// Per-option scores in presented order. + public let probabilities: [Float] + public let milliseconds: Double + public let tokens: Int +} + +/// One real Core ML choice among caller-described options, with no heuristic override. +public actor DecisionPolicy { + private enum Backend: Sendable { + case gliclass(GLiClassManager) + case laya(LayaManager) + case gliner2(GLiNER2Manager) + case verdict(VerdictManager) + case published(PublishedCoreMLManager) + } + + private let backend: Backend + public nonisolated let model: DecisionModel + + private init(model: DecisionModel, backend: Backend) { + self.model = model + self.backend = backend + } + + /// Uses cached/published Core ML assets, or a model-specific local directory environment variable. + public static func load(_ model: DecisionModel) async throws -> DecisionPolicy { + let policy: DecisionPolicy + switch model { + case .gliclass: + policy = try await loadGLiClass() + case .laya: + policy = try await loadLaya() + case .gliner2Small, .gliner2Base, .gliner2Multilingual: + policy = try await loadGLiNER2(model) + case .verdict: + policy = try await loadVerdict() + case .kev05, .kev06, .kai, .lex, .lfm350, .jeff, .nanojev: + policy = try await loadPublished(model) + } + return policy + } + + private static func loadGLiClass() async throws -> DecisionPolicy { + let configuration = GLiClassManager.Configuration(lengths: [128], precision: "lut8") + let manager: GLiClassManager + if let path = ProcessInfo.processInfo.environment["GLICLASS_MODEL_DIR"], !path.isEmpty { + manager = try await GLiClassManager.load( + from: URL(fileURLWithPath: path), configuration: configuration) + } else { + manager = try await GLiClassManager.load(configuration: configuration) + } + return DecisionPolicy(model: .gliclass, backend: .gliclass(manager)) + } + + private static func loadLaya() async throws -> DecisionPolicy { + let configuration = LayaManager.Configuration(lengths: [128], precision: "e8") + let manager: LayaManager + if let path = ProcessInfo.processInfo.environment["LAYA_MODEL_DIR"], !path.isEmpty { + manager = try await LayaManager.load(from: URL(fileURLWithPath: path), configuration: configuration) + } else { + manager = try await LayaManager.load(configuration: configuration) + } + return DecisionPolicy(model: .laya, backend: .laya(manager)) + } + + private static func loadGLiNER2(_ model: DecisionModel) async throws -> DecisionPolicy { + let variant: GLiNER2Variant + let directoryKey: String + switch model { + case .gliner2Small: (variant, directoryKey) = (.small, "GLINER2_SMALL_MODEL_DIR") + case .gliner2Base: (variant, directoryKey) = (.base, "GLINER2_BASE_MODEL_DIR") + default: (variant, directoryKey) = (.multilingual, "GLINER2_MULTI_MODEL_DIR") + } + let manager: GLiNER2Manager + if let path = ProcessInfo.processInfo.environment[directoryKey], !path.isEmpty { + manager = try await GLiNER2Manager.load(from: URL(fileURLWithPath: path), variant: variant) + } else { + manager = try await GLiNER2Manager.load(variant: variant) + } + return DecisionPolicy(model: model, backend: .gliner2(manager)) + } + + private static func loadVerdict() async throws -> DecisionPolicy { + let configuration = VerdictManager.Configuration(lengths: [128]) + let manager: VerdictManager + if let path = ProcessInfo.processInfo.environment["VERDICT_MODEL_DIR"], !path.isEmpty { + manager = try await VerdictManager.load(from: URL(fileURLWithPath: path), configuration: configuration) + } else { + manager = try await VerdictManager.load(configuration: configuration) + } + return DecisionPolicy(model: .verdict, backend: .verdict(manager)) + } + + /// NanoJev weights are not redistributed: it needs `NANOJEV_MODEL_DIR` and `NANOJEV_PYTHON`. + private static func loadPublished(_ model: DecisionModel) async throws -> DecisionPolicy { + guard let published = model.published else { throw LayaError.invalidOutput("\(model) is not bridged") } + let manager: PublishedCoreMLManager + if published == .nanojev { + let environment = ProcessInfo.processInfo.environment + guard let directory = environment["NANOJEV_MODEL_DIR"], let python = environment["NANOJEV_PYTHON"], + !directory.isEmpty, !python.isEmpty + else { throw PublishedCoreMLError.missingAsset("NANOJEV_MODEL_DIR and NANOJEV_PYTHON") } + manager = try await PublishedCoreMLManager.start( + model: .nanojev, from: URL(fileURLWithPath: directory), python: URL(fileURLWithPath: python)) + } else { + manager = try await PublishedCoreMLManager.load(model: published) + } + return DecisionPolicy(model: model, backend: .published(manager)) + } + + public func choose( + state: String, instruction: String, options: [DecisionOptionText] + ) async throws + -> DecisionChoice + { + guard (1...model.maximumOptions).contains(options.count) else { + throw LayaError.invalidOutput("\(model.title) accepts at most \(model.maximumOptions) options") + } + let names = options.map(\.name) + let labels = options.map(\.label) + let started = DispatchTime.now().uptimeNanoseconds + let probabilities: [Float] + let selectedIndex: Int + let tokenCount: Int + let truncated: Bool + switch backend { + case .gliclass(let manager): + let answer = try await manager.classify(text: state, labels: labels, prompt: instruction) + probabilities = answer.probabilities + selectedIndex = answer.selectedIndex + tokenCount = answer.tokenCount + truncated = answer.textWasTruncated + case .laya(let manager): + let answer = try await manager.answer( + state: state, question: .choice(instruction, options: labels)) + probabilities = answer.probabilities + selectedIndex = answer.selectedIndex + tokenCount = answer.tokenCount + truncated = answer.stateWasTruncated + case .gliner2(let manager): + let answer = try await manager.classify(text: state, task: instruction, labels: labels) + probabilities = answer.probabilities + selectedIndex = answer.selectedIndex + tokenCount = answer.tokenCount + truncated = false + case .verdict(let manager): + let options = zip(names, labels).map { VerdictQuestion.Option(id: $0, description: $1) } + let answer = try await manager.answer( + context: state, question: .choice(question: instruction, options: options)) + // Drop abstention; the game needs one of the two actions. + let substantive = names.map { name in + answer.candidateIDs.firstIndex(of: name).map { answer.probabilities[$0] } ?? 0 + } + probabilities = substantive.map(Float.init) + selectedIndex = substantive.indices.max { substantive[$0] < substantive[$1] } ?? 0 + tokenCount = answer.tokenCount + truncated = false + case .published(let manager): + (probabilities, selectedIndex, tokenCount) = try await Self.published( + manager, state: state, instruction: instruction, names: names, labels: labels) + truncated = false + } + let milliseconds = Double(DispatchTime.now().uptimeNanoseconds - started) / 1e6 + guard !truncated else { + throw LayaError.invalidOutput("State exceeded the model token budget") + } + return DecisionChoice( + index: selectedIndex, probabilities: probabilities, milliseconds: milliseconds, tokens: tokenCount) + } + + private static func published( + _ manager: PublishedCoreMLManager, state: String, instruction: String, names: [String], labels: [String] + ) async throws -> (probabilities: [Float], selectedIndex: Int, tokens: Int) { + switch manager.model.family { + case .systemOne: + let options = zip(names, labels).map { DecisionOption($0, $1) } + let response = try await manager.evaluate( + SystemOneRequest( + state: state, questions: [.choice("action", instruction, options: options)])) + guard case .choice(let selected, _, let distribution) = response["action"], + let index = names.firstIndex(of: selected) + else { throw PublishedCoreMLError.invalidResponse("No action choice") } + return (distribution.map { Float($0.probability) }, index, response.inputTokens) + case .constrainedSchema: + let context = instruction + state + " Options: " + labels.joined(separator: "; ") + "." + let decision = try await manager.constrained(context: context, fields: [.oneOf("action", names)]) + guard case .string(let selected) = decision["action"], let index = names.firstIndex(of: selected), + let scores = decision.candidates.first?.scores + else { throw PublishedCoreMLError.invalidResponse("No action value") } + let logLikelihoods = names.map { name in + scores.first { $0.value == .string(name) }?.logLikelihood ?? -.infinity + } + let peak = logLikelihoods.max() ?? 0 + let weights = logLikelihoods.map { exp($0 - peak) } + let total = weights.reduce(0, +) + return (weights.map { Float($0 / total) }, index, 0) + case .labelClassification: + let answer = try await manager.classify( + text: state, labels: labels, name: "Flappy Bird", description: instruction) + return (answer.probabilities.map(Float.init), answer.selectedIndex, 0) + case .nanoJev: + let options = zip(names, labels).map { DecisionOption($0, $1) } + let decision = try await manager.decide( + state: .string(state), + question: NanoJevQuestion(id: "action", instructions: instruction, kind: .choice(options))) + guard let index = names.firstIndex(of: decision.selectedID) else { + throw PublishedCoreMLError.invalidResponse("No action choice") + } + let probabilities = names.map { name in + decision.candidateIDs.firstIndex(of: name).map { Float(decision.probabilities[$0]) } ?? 0 + } + return (probabilities, index, 0) + } + } +} diff --git a/Sources/FlappyBirdPolicy/FlappyBirdPolicy.swift b/Sources/FlappyBirdPolicy/FlappyBirdPolicy.swift index c0e8f07..dc1f39c 100644 --- a/Sources/FlappyBirdPolicy/FlappyBirdPolicy.swift +++ b/Sources/FlappyBirdPolicy/FlappyBirdPolicy.swift @@ -1,55 +1,10 @@ +import DecisionPolicy import FlappyBird -import FluidUse import Foundation /// Real Core ML choice between both projected actions, with no heuristic override. public actor FlappyBirdPolicy { - public enum Model: String, CaseIterable, Sendable { - case gliclass - case laya - case gliner2Small - case gliner2Base - case gliner2Multilingual - case verdict - case kev05 - case kev06 - case kai - case lex - case lfm350 - case jeff - case nanojev - - public var title: String { - switch self { - case .gliclass: "GLiClass LUT8" - case .laya: "Laya E8" - case .gliner2Small: "GLiNER 2.5 small W8" - case .gliner2Base: "GLiNER 2.5 base W8" - case .gliner2Multilingual: "GLiNER 2.5 multilingual W8" - case .verdict: "Verdict FP16" - case .kev05: "Kev 0.5B FP16" - case .kev06: "Kev 0.6B FP16" - case .kai: "Decision 1.0 Kai FP16" - case .lex: "Decision 1.0 Lex FP16" - case .lfm350: "LFM2.5-350M-RLCD FP16" - case .jeff: "Jeff FP16" - case .nanojev: "NanoJev FP16 (local)" - } - } - - var published: PublishedCoreMLModel? { - switch self { - case .kev05: .kev05 - case .kev06: .kev06 - case .kai: .kai - case .lex: .lex - case .lfm350: .lfm350 - case .jeff: .jeff - case .nanojev: .nanojev - case .gliclass, .laya, .gliner2Small, .gliner2Base, .gliner2Multilingual, .verdict: nil - } - } - } + public typealias Model = DecisionModel public struct Decision: Sendable { public let action: FlappyBird.Action @@ -58,209 +13,30 @@ public actor FlappyBirdPolicy { public let tokens: Int } - private enum Backend: Sendable { - case gliclass(GLiClassManager) - case laya(LayaManager) - case gliner2(GLiNER2Manager) - case verdict(VerdictManager) - case published(PublishedCoreMLManager) - } - - private let backend: Backend + private let policy: DecisionPolicy public nonisolated let model: Model private static let instruction = "Choose the Flappy Bird action that avoids collision and stays near the gap center. " - private init(model: Model, backend: Backend) { - self.model = model - self.backend = backend + private init(policy: DecisionPolicy) { + self.policy = policy + model = policy.model } /// Uses cached/published Core ML assets, or a model-specific local directory environment variable. public static func load(_ model: Model = .gliclass) async throws -> FlappyBirdPolicy { - let policy: FlappyBirdPolicy - switch model { - case .gliclass: - policy = try await loadGLiClass() - case .laya: - policy = try await loadLaya() - case .gliner2Small, .gliner2Base, .gliner2Multilingual: - policy = try await loadGLiNER2(model) - case .verdict: - policy = try await loadVerdict() - case .kev05, .kev06, .kai, .lex, .lfm350, .jeff, .nanojev: - policy = try await loadPublished(model) - } + let policy = FlappyBirdPolicy(policy: try await DecisionPolicy.load(model)) _ = try await policy.decide(game: FlappyBird(seed: 1), reversed: false) return policy } - private static func loadGLiClass() async throws -> FlappyBirdPolicy { - let configuration = GLiClassManager.Configuration(lengths: [128], precision: "lut8") - let manager: GLiClassManager - if let path = ProcessInfo.processInfo.environment["GLICLASS_MODEL_DIR"], !path.isEmpty { - manager = try await GLiClassManager.load( - from: URL(fileURLWithPath: path), configuration: configuration) - } else { - manager = try await GLiClassManager.load(configuration: configuration) - } - return FlappyBirdPolicy(model: .gliclass, backend: .gliclass(manager)) - } - - private static func loadLaya() async throws -> FlappyBirdPolicy { - let configuration = LayaManager.Configuration(lengths: [128], precision: "e8") - let manager: LayaManager - if let path = ProcessInfo.processInfo.environment["LAYA_MODEL_DIR"], !path.isEmpty { - manager = try await LayaManager.load(from: URL(fileURLWithPath: path), configuration: configuration) - } else { - manager = try await LayaManager.load(configuration: configuration) - } - return FlappyBirdPolicy(model: .laya, backend: .laya(manager)) - } - - private static func loadGLiNER2(_ model: Model) async throws -> FlappyBirdPolicy { - let variant: GLiNER2Variant - let directoryKey: String - switch model { - case .gliner2Small: (variant, directoryKey) = (.small, "GLINER2_SMALL_MODEL_DIR") - case .gliner2Base: (variant, directoryKey) = (.base, "GLINER2_BASE_MODEL_DIR") - default: (variant, directoryKey) = (.multilingual, "GLINER2_MULTI_MODEL_DIR") - } - let manager: GLiNER2Manager - if let path = ProcessInfo.processInfo.environment[directoryKey], !path.isEmpty { - manager = try await GLiNER2Manager.load(from: URL(fileURLWithPath: path), variant: variant) - } else { - manager = try await GLiNER2Manager.load(variant: variant) - } - return FlappyBirdPolicy(model: model, backend: .gliner2(manager)) - } - - private static func loadVerdict() async throws -> FlappyBirdPolicy { - let configuration = VerdictManager.Configuration(lengths: [128]) - let manager: VerdictManager - if let path = ProcessInfo.processInfo.environment["VERDICT_MODEL_DIR"], !path.isEmpty { - manager = try await VerdictManager.load(from: URL(fileURLWithPath: path), configuration: configuration) - } else { - manager = try await VerdictManager.load(configuration: configuration) - } - return FlappyBirdPolicy(model: .verdict, backend: .verdict(manager)) - } - - /// NanoJev weights are not redistributed: it needs `NANOJEV_MODEL_DIR` and `NANOJEV_PYTHON`. - private static func loadPublished(_ model: Model) async throws -> FlappyBirdPolicy { - guard let published = model.published else { throw LayaError.invalidOutput("\(model) is not bridged") } - let manager: PublishedCoreMLManager - if published == .nanojev { - let environment = ProcessInfo.processInfo.environment - guard let directory = environment["NANOJEV_MODEL_DIR"], let python = environment["NANOJEV_PYTHON"], - !directory.isEmpty, !python.isEmpty - else { throw PublishedCoreMLError.missingAsset("NANOJEV_MODEL_DIR and NANOJEV_PYTHON") } - manager = try await PublishedCoreMLManager.start( - model: .nanojev, from: URL(fileURLWithPath: directory), python: URL(fileURLWithPath: python)) - } else { - manager = try await PublishedCoreMLManager.load(model: published) - } - return FlappyBirdPolicy(model: model, backend: .published(manager)) - } - /// `reversed` changes presentation order, retaining the semantic action mapping. public func decide(game: FlappyBird, reversed: Bool) async throws -> Decision { let actions: [FlappyBird.Action] = reversed ? [.coast, .flap] : [.flap, .coast] - let labels = actions.map { game.label(for: $0) } - let started = DispatchTime.now().uptimeNanoseconds - let probabilities: [Float] - let selectedIndex: Int - let tokenCount: Int - let truncated: Bool - switch backend { - case .gliclass(let manager): - let answer = try await manager.classify(text: game.observation, labels: labels, prompt: Self.instruction) - probabilities = answer.probabilities - selectedIndex = answer.selectedIndex - tokenCount = answer.tokenCount - truncated = answer.textWasTruncated - case .laya(let manager): - let answer = try await manager.answer( - state: game.observation, question: .choice(Self.instruction, options: labels)) - probabilities = answer.probabilities - selectedIndex = answer.selectedIndex - tokenCount = answer.tokenCount - truncated = answer.stateWasTruncated - case .gliner2(let manager): - let answer = try await manager.classify(text: game.observation, task: Self.instruction, labels: labels) - probabilities = answer.probabilities - selectedIndex = answer.selectedIndex - tokenCount = answer.tokenCount - truncated = false - case .verdict(let manager): - let options = zip(actions, labels).map { VerdictQuestion.Option(id: $0.rawValue, description: $1) } - let answer = try await manager.answer( - context: game.observation, question: .choice(question: Self.instruction, options: options)) - // Drop abstention; the game needs one of the two actions. - let substantive = actions.map { action in - answer.candidateIDs.firstIndex(of: action.rawValue).map { answer.probabilities[$0] } ?? 0 - } - probabilities = substantive.map(Float.init) - selectedIndex = substantive.indices.max { substantive[$0] < substantive[$1] } ?? 0 - tokenCount = answer.tokenCount - truncated = false - case .published(let manager): - (probabilities, selectedIndex, tokenCount) = try await Self.published( - manager, game: game, actions: actions, labels: labels) - truncated = false - } - let milliseconds = Double(DispatchTime.now().uptimeNanoseconds - started) / 1e6 - guard !truncated else { - throw LayaError.invalidOutput("Flappy Bird state exceeded the model token budget") - } + let options = actions.map { DecisionOptionText(name: $0.rawValue, label: game.label(for: $0)) } + let choice = try await policy.choose(state: game.observation, instruction: Self.instruction, options: options) return Decision( - action: actions[selectedIndex], milliseconds: milliseconds, - flapProbability: probabilities[reversed ? 1 : 0], tokens: tokenCount) - } - - private static func published( - _ manager: PublishedCoreMLManager, game: FlappyBird, actions: [FlappyBird.Action], labels: [String] - ) async throws -> (probabilities: [Float], selectedIndex: Int, tokens: Int) { - let names = actions.map(\.rawValue) - switch manager.model.family { - case .systemOne: - let options = zip(names, labels).map { DecisionOption($0, $1) } - let response = try await manager.evaluate( - SystemOneRequest( - state: game.observation, questions: [.choice("action", Self.instruction, options: options)])) - guard case .choice(let selected, _, let distribution) = response["action"], - let index = names.firstIndex(of: selected) - else { throw PublishedCoreMLError.invalidResponse("No action choice") } - return (distribution.map { Float($0.probability) }, index, response.inputTokens) - case .constrainedSchema: - let context = Self.instruction + game.observation + " Options: " + labels.joined(separator: "; ") + "." - let decision = try await manager.constrained(context: context, fields: [.oneOf("action", names)]) - guard case .string(let selected) = decision["action"], let index = names.firstIndex(of: selected), - let scores = decision.candidates.first?.scores - else { throw PublishedCoreMLError.invalidResponse("No action value") } - let logLikelihoods = names.map { name in - scores.first { $0.value == .string(name) }?.logLikelihood ?? -.infinity - } - let peak = logLikelihoods.max() ?? 0 - let weights = logLikelihoods.map { exp($0 - peak) } - let total = weights.reduce(0, +) - return (weights.map { Float($0 / total) }, index, 0) - case .labelClassification: - let answer = try await manager.classify( - text: game.observation, labels: labels, name: "Flappy Bird", description: Self.instruction) - return (answer.probabilities.map(Float.init), answer.selectedIndex, 0) - case .nanoJev: - let options = zip(names, labels).map { DecisionOption($0, $1) } - let decision = try await manager.decide( - state: .string(game.observation), - question: NanoJevQuestion(id: "action", instructions: Self.instruction, kind: .choice(options))) - guard let index = names.firstIndex(of: decision.selectedID) else { - throw PublishedCoreMLError.invalidResponse("No action choice") - } - let probabilities = names.map { name in - decision.candidateIDs.firstIndex(of: name).map { Float(decision.probabilities[$0]) } ?? 0 - } - return (probabilities, index, 0) - } + action: actions[choice.index], milliseconds: choice.milliseconds, + flapProbability: choice.probabilities[reversed ? 1 : 0], tokens: choice.tokens) } } diff --git a/Sources/LaneRunner/LaneRunner.swift b/Sources/LaneRunner/LaneRunner.swift new file mode 100644 index 0000000..6e81f66 --- /dev/null +++ b/Sources/LaneRunner/LaneRunner.swift @@ -0,0 +1,179 @@ +import Foundation + +/// Deterministic three-lane endless runner in the style of Subway Surfers. One step enters the next row. +public struct LaneRunner: Sendable, Equatable { + public enum Action: String, CaseIterable, Sendable, Codable { + case left, right, jump, slide, stay + } + + public enum Obstacle: String, Sendable, Codable { + case open, coin + /// Low barrier: jump over it. + case low + /// Overhead barrier: slide under it. + case high + /// Blocks the whole lane: change lanes. + case train + + var word: String { + switch self { + case .open: "open" + case .coin: "coin" + case .low: "low bar" + case .high: "high bar" + case .train: "train" + } + } + } + + public static let lanes = 3 + /// Rows described to models and drawn by the app. + public static let visibleRows = 3 + static let bufferedRows = 8 + /// Rows the consequence labels and heuristic search look past the next one. + static let searchDepth = 3 + + public internal(set) var lane = 1 + /// Upcoming rows; `rows[0]` is entered by the next step. + public internal(set) var rows: [[Obstacle]] = [] + public private(set) var distance = 0 + public private(set) var coins = 0 + public private(set) var isOver = false + public private(set) var crash: String? + private var randomState: UInt64 + private var generated = 0 + + public init(seed: UInt64) { + randomState = seed + while rows.count < Self.bufferedRows { appendRow() } + } + + public var legalActions: [Action] { + Action.allCases.filter { action in + switch action { + case .left: lane > 0 + case .right: lane < Self.lanes - 1 + case .jump, .slide, .stay: true + } + } + } + + public mutating func step(_ action: Action) { + guard !isOver else { return } + let target = Self.target(lane: lane, action: action) + let obstacle = rows[0][target] + lane = target + if let cause = Self.crashCause(obstacle, action) { + isOver = true + crash = cause + return + } + if obstacle == .coin { coins += 1 } + distance += 1 + rows.removeFirst() + appendRow() + } + + /// Heuristic reference: survive the search horizon, then prefer coins, then staying put. + public var heuristicAction: Action { + legalActions.max { lhs, rhs in heuristicValue(lhs) < heuristicValue(rhs) } ?? .stay + } + + /// Human-readable model input: the current lane and the next three rows, left to right. + public var observation: String { + let ahead = rows.prefix(Self.visibleRows).map { row in row.map(\.word).joined(separator: ", ") } + return "Lane \(lane + 1) of 3. Next row: \(ahead[0]). Then: \(ahead[1]). Then: \(ahead[2])." + } + + /// Action labels state each move's consequence, as the Tetris harness does for placements. + public func label(for action: Action) -> String { + let target = Self.target(lane: lane, action: action) + let obstacle = rows[0][target] + if let cause = Self.crashCause(obstacle, action) { return "\(action.rawValue): crash, \(cause)" } + var next = self + next.step(action) + let escape = next.survivableDepth(Self.searchDepth - 1) == Self.searchDepth - 1 + return "\(action.rawValue): safe\(obstacle == .coin ? ", coin" : "")\(escape ? "" : ", then trapped")" + } + + /// Whether `action` crashes on the next row or leaves no way through the search horizon. + public func isSafe(_ action: Action) -> Bool { + guard Self.crashCause(rows[0][Self.target(lane: lane, action: action)], action) == nil else { return false } + var next = self + next.step(action) + return next.survivableDepth(Self.searchDepth - 1) == Self.searchDepth - 1 + } + + static func target(lane: Int, action: Action) -> Int { + switch action { + case .left: max(lane - 1, 0) + case .right: min(lane + 1, lanes - 1) + case .jump, .slide, .stay: lane + } + } + + static func crashCause(_ obstacle: Obstacle, _ action: Action) -> String? { + switch obstacle { + case .open, .coin: nil + case .train: "hit a train" + case .low: action == .jump ? nil : "tripped on a low bar" + case .high: action == .slide ? nil : "hit a high bar" + } + } + + private func heuristicValue(_ action: Action) -> Int { + var next = self + next.step(action) + guard !next.isOver else { return -1_000 } + // Same visible horizon as the labels: no peeking past the rows a model is shown. + let depth = next.survivableDepth(Self.searchDepth - 1) + return depth * 100 + (next.coins - coins) * 10 + (action == .stay ? 1 : 0) + } + + /// Rows survivable within `limit` further steps under the best sequence. + private func survivableDepth(_ limit: Int) -> Int { + guard limit > 0, !isOver else { return 0 } + var best = 0 + for action in legalActions { + var next = self + next.step(action) + guard !next.isOver else { continue } + best = max(best, 1 + next.survivableDepth(limit - 1)) + if best == limit { break } + } + return best + } + + /// Obstacle rows alternate with open rows, and every obstacle row leaves at least one open lane, + /// so two lane changes always reach it. + private mutating func appendRow() { + defer { generated += 1 } + guard generated >= 2 else { + rows.append(Array(repeating: .open, count: Self.lanes)) + return + } + if generated % 2 == 1 { + rows.append((0.. UInt64 { + randomState &+= 0x9E37_79B9_7F4A_7C15 + var value = randomState + value = (value ^ (value >> 30)) &* 0xBF58_476D_1CE4_E5B9 + value = (value ^ (value >> 27)) &* 0x94D0_49BB_1331_11EB + return value ^ (value >> 31) + } +} diff --git a/Sources/LaneRunnerCheck/main.swift b/Sources/LaneRunnerCheck/main.swift new file mode 100644 index 0000000..d8e22b6 --- /dev/null +++ b/Sources/LaneRunnerCheck/main.swift @@ -0,0 +1,97 @@ +import DecisionPolicy +import Foundation +import LaneRunner +import LaneRunnerPolicy + +private struct Row: Encodable { + let seed: UInt64 + let policy: String + let distance: Int + let coins: Int + let crash: String? + let modelCalls: Int + let medianModelMs: Double? + let maxTokens: Int + /// Decisions where the chosen move was unsafe although a safe one was offered. + let unsafeChoices: Int + /// How often each presented position was chosen. + let positionCounts: [Int] + let actionCounts: [String: Int] +} + +@main +struct LaneRunnerCheck { + static func main() async throws { + let arguments = Array(CommandLine.arguments.dropFirst()) + let name = arguments.first ?? "heuristic" + let seeds = parseList(arguments, "--seeds=") ?? [1, 2, 3, 4] + let maxRows = parseList(arguments, "--max-rows=")?.first.map(Int.init) ?? 200 + let policy: LaneRunnerPolicy? + switch name { + case "heuristic", "random": + policy = nil + default: + guard let model = DecisionModel(rawValue: name) else { + let names = (["heuristic", "random"] + DecisionModel.allCases.map(\.rawValue)) + fputs("Use one of: \(names.joined(separator: ", "))\n", stderr) + exit(2) + } + policy = try await LaneRunnerPolicy.load(model) + } + var rows: [Row] = [] + for seed in seeds { + rows.append(try await run(seed: seed, name: name, policy: policy, maxRows: maxRows)) + } + let encoder = JSONEncoder() + encoder.outputFormatting = [.prettyPrinted, .sortedKeys] + print(String(decoding: try encoder.encode(rows), as: UTF8.self)) + } + + private static func parseList(_ arguments: [String], _ prefix: String) -> [UInt64]? { + guard let argument = arguments.first(where: { $0.hasPrefix(prefix) }) else { return nil } + let components = argument.dropFirst(prefix.count).split(separator: ",") + let parsed = components.compactMap { UInt64($0) } + guard !parsed.isEmpty, parsed.count == components.count else { + fputs("\(prefix) requires comma-separated unsigned integers\n", stderr) + exit(2) + } + return parsed + } + + private static func run(seed: UInt64, name: String, policy: LaneRunnerPolicy?, maxRows: Int) async throws -> Row { + var game = LaneRunner(seed: seed) + var random = seed &* 0x2545_F491_4F6C_DD1D | 1 + var latencies: [Double] = [] + var maxTokens = 0 + var unsafe = 0 + var positions = Array(repeating: 0, count: LaneRunner.Action.allCases.count) + var actions: [String: Int] = [:] + var decisions = 0 + while !game.isOver && game.distance < maxRows { + let action: LaneRunner.Action + if let policy { + let decision = try await policy.decide(game: game, rotation: decisions) + action = decision.action + positions[decision.position] += 1 + latencies.append(decision.milliseconds) + maxTokens = max(maxTokens, decision.tokens) + } else if name == "random" { + random ^= random << 13 + random ^= random >> 7 + random ^= random << 17 + action = game.legalActions[Int(random % UInt64(game.legalActions.count))] + } else { + action = game.heuristicAction + } + if !game.isSafe(action) && game.legalActions.contains(where: game.isSafe) { unsafe += 1 } + actions[action.rawValue, default: 0] += 1 + decisions += 1 + game.step(action) + } + latencies.sort() + return Row( + seed: seed, policy: name, distance: game.distance, coins: game.coins, crash: game.crash, + modelCalls: latencies.count, medianModelMs: latencies.isEmpty ? nil : latencies[latencies.count / 2], + maxTokens: maxTokens, unsafeChoices: unsafe, positionCounts: positions, actionCounts: actions) + } +} diff --git a/Sources/LaneRunnerDemo/LaneRunnerDemoApp.swift b/Sources/LaneRunnerDemo/LaneRunnerDemoApp.swift new file mode 100644 index 0000000..355dadf --- /dev/null +++ b/Sources/LaneRunnerDemo/LaneRunnerDemoApp.swift @@ -0,0 +1,14 @@ +import SwiftUI + +@main +struct LaneRunnerDemoApp: App { + @StateObject private var model = LaneRunnerModel() + + var body: some Scene { + WindowGroup("Lane Runner · Local model lab") { + LaneRunnerView().environmentObject(model) + .frame(minWidth: 800, minHeight: 700) + } + .defaultSize(width: 820, height: 720) + } +} diff --git a/Sources/LaneRunnerDemo/LaneRunnerModel.swift b/Sources/LaneRunnerDemo/LaneRunnerModel.swift new file mode 100644 index 0000000..d4b7cfc --- /dev/null +++ b/Sources/LaneRunnerDemo/LaneRunnerModel.swift @@ -0,0 +1,167 @@ +import DecisionPolicy +import Foundation +import LaneRunner +import LaneRunnerPolicy +import SwiftUI + +@MainActor +final class LaneRunnerModel: ObservableObject { + enum Control: Hashable, Identifiable { + case model(DecisionModel) + case heuristic + case manual + + static var allCases: [Control] { DecisionModel.allCases.map(Control.model) + [.heuristic, .manual] } + var id: String { title } + var title: String { + switch self { + case .model(let model): model.title + case .heuristic: "Heuristic" + case .manual: "Manual (arrow keys)" + } + } + var model: DecisionModel? { + if case .model(let model) = self { return model } + return nil + } + } + + @Published private(set) var game = LaneRunner(seed: 1) + @Published private(set) var isRunning = false + @Published private(set) var isLoading = false + @Published private(set) var loadedModels: Set = [] + @Published private(set) var calls = 0 + @Published private(set) var lateRows = 0 + @Published private(set) var unsafeChoices = 0 + @Published private(set) var modelMs = 0.0 + @Published private(set) var confidence: Float = 0 + @Published private(set) var lastAction = "—" + @Published var errorMessage: String? + @Published var control: Control = .model(.gliner2Multilingual) + @Published var seed: UInt64 = 1 + @Published var rowMs = 400.0 + + private var policies: [DecisionModel: LaneRunnerPolicy] = [:] + private var loopTask: Task? + private var generation = 0 + private var inFlight = false + private var reply: (row: Int, decision: LaneRunnerPolicy.Decision)? + private var queuedAction: LaneRunner.Action = .stay + private var decisionNumber = 0 + + var usesModel: Bool { control.model != nil } + var canPlay: Bool { control.model.map { loadedModels.contains($0) } ?? true } + + func loadModel() { + guard let selected = control.model, !loadedModels.contains(selected), !isLoading else { return } + isLoading = true + errorMessage = nil + Task { + defer { isLoading = false } + do { + policies[selected] = try await LaneRunnerPolicy.load(selected) + loadedModels.insert(selected) + } catch { + errorMessage = error.localizedDescription + } + } + } + + func reset() { + pause() + game = LaneRunner(seed: seed) + calls = 0 + lateRows = 0 + unsafeChoices = 0 + modelMs = 0 + confidence = 0 + lastAction = "—" + decisionNumber = 0 + reply = nil + errorMessage = nil + } + + func pause() { + generation += 1 + loopTask?.cancel() + loopTask = nil + inFlight = false + queuedAction = .stay + isRunning = false + } + + func toggle() { + if isRunning { + pause() + return + } + guard canPlay else { return } + if game.isOver || game.distance == 0 { reset() } + isRunning = true + let run = generation + loopTask = Task { [weak self] in + while let self, self.isRunning, self.generation == run, !Task.isCancelled { + self.requestDecision(run: run) + try? await Task.sleep(for: .milliseconds(self.rowMs)) + guard self.isRunning, self.generation == run else { return } + self.advanceRow() + } + } + } + + func queue(_ action: LaneRunner.Action) { + guard control == .manual, isRunning else { return } + queuedAction = action + } + + /// Applies one row: a reply that arrived for this row, else the runner stays in its lane. + func advanceRow() { + guard isRunning else { return } + let action: LaneRunner.Action + switch control { + case .heuristic: + action = game.heuristicAction + lastAction = action.rawValue + case .manual: + action = queuedAction + queuedAction = .stay + lastAction = action.rawValue + case .model: + if let reply, reply.row == game.distance { + action = reply.decision.action + lastAction = action.rawValue + } else { + action = .stay + lateRows += 1 + lastAction = "late → stay" + } + reply = nil + } + if !game.isSafe(action) && game.legalActions.contains(where: game.isSafe) { unsafeChoices += 1 } + game.step(action) + if game.isOver { pause() } + } + + private func requestDecision(run: Int) { + guard !inFlight, let selected = control.model, let policy = policies[selected] else { return } + inFlight = true + let snapshot = game + let rotation = decisionNumber + decisionNumber += 1 + Task { [weak self] in + do { + let decision = try await policy.decide(game: snapshot, rotation: rotation) + guard let self, self.generation == run else { return } + self.inFlight = false + self.reply = (snapshot.distance, decision) + self.calls += 1 + self.modelMs = decision.milliseconds + self.confidence = decision.confidence + } catch { + guard let self, self.generation == run else { return } + self.pause() + self.errorMessage = error.localizedDescription + } + } + } +} diff --git a/Sources/LaneRunnerDemo/LaneRunnerView.swift b/Sources/LaneRunnerDemo/LaneRunnerView.swift new file mode 100644 index 0000000..3a63282 --- /dev/null +++ b/Sources/LaneRunnerDemo/LaneRunnerView.swift @@ -0,0 +1,165 @@ +import LaneRunner +import SwiftUI + +struct LaneRunnerView: View { + @EnvironmentObject private var model: LaneRunnerModel + + var body: some View { + HStack(alignment: .top, spacing: 28) { + VStack(alignment: .leading, spacing: 12) { + Text("RUNNER / LOCAL").font(.caption.monospaced()).foregroundStyle(.orange) + Text("Three lanes. Five moves.").font(.largeTitle.bold()) + board + Text("Jump low bars, slide under high bars, change lanes around trains.") + .font(.caption).foregroundStyle(.secondary) + } + VStack(alignment: .leading, spacing: 16) { + Text("Who’s running?").font(.title2.bold()) + Picker("Controller", selection: $model.control) { + ForEach(LaneRunnerModel.Control.allCases) { Text($0.title).tag($0) } + } + .labelsHidden() + .disabled(model.isRunning || model.isLoading) + .onChange(of: model.control) { _, _ in model.reset() } + if model.usesModel { + Button(model.isLoading ? "Loading…" : (model.canPlay ? "Model ready" : "Load model")) { + model.loadModel() + } + .disabled(model.isLoading || model.canPlay) + } + HStack { + Button(model.isRunning ? "Pause" : (model.game.isOver ? "Try again" : "Run")) { model.toggle() } + .buttonStyle(.borderedProminent).tint(.orange).disabled(!model.canPlay) + Button("Reset") { model.reset() } + } + if model.control == .manual { + HStack { + Button("←") { model.queue(.left) }.keyboardShortcut(.leftArrow, modifiers: []) + Button("↑ jump") { model.queue(.jump) }.keyboardShortcut(.upArrow, modifiers: []) + Button("↓ slide") { model.queue(.slide) }.keyboardShortcut(.downArrow, modifiers: []) + Button("→") { model.queue(.right) }.keyboardShortcut(.rightArrow, modifiers: []) + } + .disabled(!model.isRunning) + } + HStack { + Text("Track seed") + TextField("Seed", value: $model.seed, format: .number) + .frame(width: 90).disabled(model.isRunning) + .onChange(of: model.seed) { _, _ in model.reset() } + } + Text(String(format: "Row every %.0f ms", model.rowMs)).font(.subheadline) + Slider(value: $model.rowMs, in: 150...800, step: 50) + Divider() + HStack { + metric("DISTANCE", "\(model.game.distance)") + metric("COINS", "\(model.game.coins)") + } + HStack { + metric("MODEL CALL", model.calls == 0 ? "—" : String(format: "%.1f ms", model.modelMs)) + metric("CONFIDENCE", model.calls == 0 ? "—" : String(format: "%.0f%%", model.confidence * 100)) + } + Text("\(model.calls) replies · \(model.lateRows) late rows · \(model.unsafeChoices) unsafe picks") + .font(.caption.monospaced()).foregroundStyle(.secondary) + Text(model.lastAction.uppercased()).font(.title3.bold().monospaced()) + Divider() + Text("WHAT THE MODEL READS").font(.caption.monospaced()).foregroundStyle(.secondary) + Text(model.game.observation).font(.caption.monospaced()).textSelection(.enabled) + ForEach(model.game.legalActions, id: \.self) { action in + Text(model.game.label(for: action)).font(.caption.monospaced()) + .foregroundStyle(model.game.isSafe(action) ? Color.primary : Color.red) + } + Text("Option order rotates each row. A reply that misses its row counts as late, and the runner stays.") + .font(.caption).foregroundStyle(.secondary) + if let crash = model.game.crash { + Text("Crashed: \(crash)").font(.caption.bold()).foregroundStyle(.red) + } + if let error = model.errorMessage { + Text(error).font(.caption).foregroundStyle(.red).textSelection(.enabled) + } + } + .frame(width: 330) + .padding(.top, 6) + } + .padding(24) + .onDisappear { model.pause() } + } + + private func metric(_ title: String, _ value: String) -> some View { + VStack(alignment: .leading, spacing: 5) { + Text(title).font(.system(size: 10, weight: .semibold, design: .monospaced)).foregroundStyle(.secondary) + Text(value).font(.system(size: 24, weight: .semibold, design: .rounded)).monospacedDigit() + }.frame(maxWidth: .infinity, alignment: .leading) + } + + private var board: some View { + Canvas { context, size in + let laneWidth = size.width / CGFloat(LaneRunner.lanes) + let rowHeight = size.height / 7 + context.fill( + Path(CGRect(origin: .zero, size: size)), with: .color(Color(red: 0.10, green: 0.09, blue: 0.14))) + for lane in 1.. LaneRunnerPolicy { + let policy = LaneRunnerPolicy(policy: try await DecisionPolicy.load(model)) + _ = try await policy.decide(game: LaneRunner(seed: 1), rotation: 0) + return policy + } + + /// `rotation` cycles the option order so a fixed position preference cannot look like skill. + public func decide(game: LaneRunner, rotation: Int) async throws -> Decision { + let legal = game.legalActions + let shift = rotation % legal.count + let actions = Array(legal[shift...] + legal[.. Date: Wed, 23 Sep 2026 01:29:17 -0400 Subject: [PATCH 2/9] Fix LaneRunnerDemo freezing while a model loads Model loading (asset SHA-256 checks over hundreds of MB, then Core ML compilation) ran on the main actor, so the window stopped responding while "Loading..." showed. Load in a detached task instead. Launched from a terminal the unbundled app also needs a regular activation policy to take focus. LANE_RUNNER_MODEL / LANE_RUNNER_SEED / LANE_RUNNER_ROW_MS preselect a run that loads and starts without clicks, for demos. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../LaneRunnerDemo/LaneRunnerDemoApp.swift | 8 ++++++ Sources/LaneRunnerDemo/LaneRunnerModel.swift | 26 ++++++++++++++++++- Sources/LaneRunnerDemo/README.md | 8 ++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/Sources/LaneRunnerDemo/LaneRunnerDemoApp.swift b/Sources/LaneRunnerDemo/LaneRunnerDemoApp.swift index 355dadf..885b12d 100644 --- a/Sources/LaneRunnerDemo/LaneRunnerDemoApp.swift +++ b/Sources/LaneRunnerDemo/LaneRunnerDemoApp.swift @@ -1,13 +1,21 @@ +import AppKit import SwiftUI @main struct LaneRunnerDemoApp: App { @StateObject private var model = LaneRunnerModel() + init() { + // Launched from a terminal without a bundle: become a regular, focusable foreground app. + NSApplication.shared.setActivationPolicy(.regular) + NSApplication.shared.activate(ignoringOtherApps: true) + } + var body: some Scene { WindowGroup("Lane Runner · Local model lab") { LaneRunnerView().environmentObject(model) .frame(minWidth: 800, minHeight: 700) + .onAppear { model.applyLaunchEnvironment() } } .defaultSize(width: 820, height: 720) } diff --git a/Sources/LaneRunnerDemo/LaneRunnerModel.swift b/Sources/LaneRunnerDemo/LaneRunnerModel.swift index d4b7cfc..5a96670 100644 --- a/Sources/LaneRunnerDemo/LaneRunnerModel.swift +++ b/Sources/LaneRunnerDemo/LaneRunnerModel.swift @@ -48,6 +48,7 @@ final class LaneRunnerModel: ObservableObject { private var reply: (row: Int, decision: LaneRunnerPolicy.Decision)? private var queuedAction: LaneRunner.Action = .stay private var decisionNumber = 0 + private var autostart = false var usesModel: Bool { control.model != nil } var canPlay: Bool { control.model.map { loadedModels.contains($0) } ?? true } @@ -59,14 +60,37 @@ final class LaneRunnerModel: ObservableObject { Task { defer { isLoading = false } do { - policies[selected] = try await LaneRunnerPolicy.load(selected) + // Checksums and Core ML compilation must not run on the main actor. + let started = Date() + policies[selected] = try await Task.detached { try await LaneRunnerPolicy.load(selected) }.value loadedModels.insert(selected) + FileHandle.standardError.write( + Data(String(format: "Loaded %@ in %.1f s\n", selected.title, -started.timeIntervalSinceNow).utf8)) + if autostart { toggle() } } catch { errorMessage = error.localizedDescription } } } + /// `LANE_RUNNER_MODEL`, `LANE_RUNNER_SEED`, and `LANE_RUNNER_ROW_MS` preselect a run; the model then + /// loads and runs without any clicks. + func applyLaunchEnvironment() { + let environment = ProcessInfo.processInfo.environment + if let seed = environment["LANE_RUNNER_SEED"].flatMap(UInt64.init) { self.seed = seed } + if let rowMs = environment["LANE_RUNNER_ROW_MS"].flatMap(Double.init) { self.rowMs = rowMs } + game = LaneRunner(seed: seed) + guard let name = environment["LANE_RUNNER_MODEL"] else { return } + if name == "heuristic" { + control = .heuristic + toggle() + } else if let model = DecisionModel(rawValue: name) { + control = .model(model) + autostart = true + loadModel() + } + } + func reset() { pause() game = LaneRunner(seed: seed) diff --git a/Sources/LaneRunnerDemo/README.md b/Sources/LaneRunnerDemo/README.md index 2caaa08..a150052 100644 --- a/Sources/LaneRunnerDemo/README.md +++ b/Sources/LaneRunnerDemo/README.md @@ -5,6 +5,14 @@ swift run -c release LaneRunnerDemo swift run -c release LaneRunnerCheck gliner2Base --seeds=1,2,3,4 ``` +To start a demo with no clicks, set the model and seed, for example the 122-row GLiNER multilingual run: + +```bash +LANE_RUNNER_MODEL=gliner2Multilingual LANE_RUNNER_SEED=2 swift run -c release LaneRunnerDemo +``` + +`LANE_RUNNER_ROW_MS` sets the row interval. The first load checks and compiles the model, which takes about 20 s. + This is a Subway Surfers-style endless runner with three lanes. Each step enters the next row, and the runner picks one of five moves: **left**, **right**, **jump** (clears a low bar), **slide** (passes under a high bar), or **stay**. Trains block a lane, and coins are a bonus. Obstacle rows alternate with open rows, and each obstacle row leaves one lane open, so every track can be survived. The runner chooses once per row, not once per frame, and each option states its consequence. The first Flappy Bird trial showed that frame-by-frame control does not suit these models, so this setup follows the Tetris harness pattern. The model reads a short state (`Lane 2 of 3. Next row: train, open, low bar. Then: …`) plus one label per legal move, such as `jump: crash, hit a train`, `left: safe, coin`, or `stay: safe, then trapped`. The labels and the heuristic both look only at the three visible rows. Option order rotates every row, so a fixed position preference does not look like skill. From 1e2b4d73d62f3fed475f15fa28d91da665bf5836 Mon Sep 17 00:00:00 2001 From: Alex-Wengg Date: Wed, 23 Sep 2026 01:42:13 -0400 Subject: [PATCH 3/9] Reskin the lane runner in 3D with Kenney CC0 models Replaces the flat Canvas board with a third-person SceneKit view: subway trains and rail track from Kenney's Train Kit; character, gold coins, low fences, overhead beam, and trees from the Platformer Kit (both CC0; license files bundled under Resources/Kenney, ~500 KB of OBJ/MTL/colormap). Rows slide toward the camera over each row interval; the runner eases between lanes, jumps, slides, and falls on a crash. Game rules, model inputs, and results are unchanged. Also delays the heuristic autostart so the controller picker's reset cannot cancel it, and widens the window for the 3D view. Co-Authored-By: Claude Opus 5.5 (1M context) --- Package.swift | 2 +- .../LaneRunnerDemo/LaneRunnerDemoApp.swift | 4 +- Sources/LaneRunnerDemo/LaneRunnerModel.swift | 11 +- Sources/LaneRunnerDemo/LaneRunnerView.swift | 86 +- Sources/LaneRunnerDemo/README.md | 2 +- .../Resources/Kenney/platformer/License.txt | 28 + .../Kenney/platformer/Textures/colormap.png | Bin 0 -> 11140 bytes .../Kenney/platformer/character-oobi.mtl | 6 + .../Kenney/platformer/character-oobi.obj | 2452 +++++++++++ .../Resources/Kenney/platformer/coin-gold.mtl | 6 + .../Resources/Kenney/platformer/coin-gold.obj | 415 ++ .../Kenney/platformer/fence-low-straight.mtl | 6 + .../Kenney/platformer/fence-low-straight.obj | 236 ++ .../Resources/Kenney/platformer/platform.mtl | 6 + .../Resources/Kenney/platformer/platform.obj | 257 ++ .../Resources/Kenney/platformer/poles.mtl | 6 + .../Resources/Kenney/platformer/poles.obj | 736 ++++ .../Resources/Kenney/platformer/tree-pine.mtl | 6 + .../Resources/Kenney/platformer/tree-pine.obj | 686 +++ .../Resources/Kenney/platformer/tree.mtl | 6 + .../Resources/Kenney/platformer/tree.obj | 1300 ++++++ .../Resources/Kenney/train/License.txt | 29 + .../Kenney/train/Textures/colormap.png | Bin 0 -> 12684 bytes .../Resources/Kenney/train/track.mtl | 6 + .../Resources/Kenney/train/track.obj | 231 + .../Kenney/train/train-electric-subway-a.mtl | 6 + .../Kenney/train/train-electric-subway-a.obj | 3718 +++++++++++++++++ .../Kenney/train/train-electric-subway-b.mtl | 6 + .../Kenney/train/train-electric-subway-b.obj | 2999 +++++++++++++ Sources/LaneRunnerDemo/RunnerScene.swift | 207 + 30 files changed, 13386 insertions(+), 73 deletions(-) create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/License.txt create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/Textures/colormap.png create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/character-oobi.mtl create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/character-oobi.obj create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/coin-gold.mtl create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/coin-gold.obj create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/fence-low-straight.mtl create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/fence-low-straight.obj create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/platform.mtl create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/platform.obj create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/poles.mtl create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/poles.obj create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/tree-pine.mtl create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/tree-pine.obj create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/tree.mtl create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/tree.obj create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/train/License.txt create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/train/Textures/colormap.png create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/train/track.mtl create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/train/track.obj create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-a.mtl create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-a.obj create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-b.mtl create mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-b.obj create mode 100644 Sources/LaneRunnerDemo/RunnerScene.swift diff --git a/Package.swift b/Package.swift index 608a1cf..eb028b5 100644 --- a/Package.swift +++ b/Package.swift @@ -33,7 +33,7 @@ let package = Package( .executableTarget(name: "LaneRunnerCheck", dependencies: ["LaneRunner", "LaneRunnerPolicy", "DecisionPolicy"]), .executableTarget( name: "LaneRunnerDemo", dependencies: ["LaneRunner", "LaneRunnerPolicy", "DecisionPolicy"], - exclude: ["README.md"] + exclude: ["README.md"], resources: [.copy("Resources")] ), .testTarget(name: "LaneRunnerTests", dependencies: ["LaneRunner"]), .executableTarget( diff --git a/Sources/LaneRunnerDemo/LaneRunnerDemoApp.swift b/Sources/LaneRunnerDemo/LaneRunnerDemoApp.swift index 885b12d..2143cf8 100644 --- a/Sources/LaneRunnerDemo/LaneRunnerDemoApp.swift +++ b/Sources/LaneRunnerDemo/LaneRunnerDemoApp.swift @@ -14,9 +14,9 @@ struct LaneRunnerDemoApp: App { var body: some Scene { WindowGroup("Lane Runner · Local model lab") { LaneRunnerView().environmentObject(model) - .frame(minWidth: 800, minHeight: 700) + .frame(minWidth: 900, minHeight: 720) .onAppear { model.applyLaunchEnvironment() } } - .defaultSize(width: 820, height: 720) + .defaultSize(width: 920, height: 760) } } diff --git a/Sources/LaneRunnerDemo/LaneRunnerModel.swift b/Sources/LaneRunnerDemo/LaneRunnerModel.swift index 5a96670..50d6b3c 100644 --- a/Sources/LaneRunnerDemo/LaneRunnerModel.swift +++ b/Sources/LaneRunnerDemo/LaneRunnerModel.swift @@ -41,6 +41,7 @@ final class LaneRunnerModel: ObservableObject { @Published var seed: UInt64 = 1 @Published var rowMs = 400.0 + let runner = RunnerScene() private var policies: [DecisionModel: LaneRunnerPolicy] = [:] private var loopTask: Task? private var generation = 0 @@ -80,10 +81,15 @@ final class LaneRunnerModel: ObservableObject { if let seed = environment["LANE_RUNNER_SEED"].flatMap(UInt64.init) { self.seed = seed } if let rowMs = environment["LANE_RUNNER_ROW_MS"].flatMap(Double.init) { self.rowMs = rowMs } game = LaneRunner(seed: seed) + runner.show(game, passed: nil, action: nil, duration: 0) guard let name = environment["LANE_RUNNER_MODEL"] else { return } if name == "heuristic" { control = .heuristic - toggle() + // Let the picker's reset for the new control run first. + Task { + try? await Task.sleep(for: .milliseconds(200)) + toggle() + } } else if let model = DecisionModel(rawValue: name) { control = .model(model) autostart = true @@ -94,6 +100,7 @@ final class LaneRunnerModel: ObservableObject { func reset() { pause() game = LaneRunner(seed: seed) + runner.show(game, passed: nil, action: nil, duration: 0) calls = 0 lateRows = 0 unsafeChoices = 0 @@ -162,7 +169,9 @@ final class LaneRunnerModel: ObservableObject { reply = nil } if !game.isSafe(action) && game.legalActions.contains(where: game.isSafe) { unsafeChoices += 1 } + let passed = game.rows[0] game.step(action) + runner.show(game, passed: game.isOver ? nil : passed, action: action, duration: rowMs / 1000) if game.isOver { pause() } } diff --git a/Sources/LaneRunnerDemo/LaneRunnerView.swift b/Sources/LaneRunnerDemo/LaneRunnerView.swift index 3a63282..5231315 100644 --- a/Sources/LaneRunnerDemo/LaneRunnerView.swift +++ b/Sources/LaneRunnerDemo/LaneRunnerView.swift @@ -10,7 +10,7 @@ struct LaneRunnerView: View { Text("RUNNER / LOCAL").font(.caption.monospaced()).foregroundStyle(.orange) Text("Three lanes. Five moves.").font(.largeTitle.bold()) board - Text("Jump low bars, slide under high bars, change lanes around trains.") + Text("Jump fences, slide under beams, change lanes around trains. 3D models: Kenney (CC0).") .font(.caption).foregroundStyle(.secondary) } VStack(alignment: .leading, spacing: 16) { @@ -92,74 +92,24 @@ struct LaneRunnerView: View { } private var board: some View { - Canvas { context, size in - let laneWidth = size.width / CGFloat(LaneRunner.lanes) - let rowHeight = size.height / 7 - context.fill( - Path(CGRect(origin: .zero, size: size)), with: .color(Color(red: 0.10, green: 0.09, blue: 0.14))) - for lane in 1..-8FD zt><~x=kvaO=5HB0x66Z<2Lpiou^ro<0wC}u0YMV{XI6jR3!sF@wrzPvkH$`X{Y6e@ z)T6@UV@redZJ(Wcchv*?x14`GW6QN=J0c=eRB4l&CUj4;&L*I@cl!n<-c771q8@ZD9dGNK*iZ#PBvmWDDG*FRU>U43K=eD>SLA;w5asOM&%I(qlfcpKM# zyV&;cZT$Of{JW_B-5VHj{*6?k|6jn>d-%Tm=Yw@6rSA%z)^Da%wzq}0iLC9>lLLdo zqkY0`y5i*2kW=Lw?{qC1pSU_%YxR2-F2Xsho9NDZdQiBfX)e8^meT*oV#gk>g(u9j zy#(7kH&;tCGuAifH2UM911MJ(DD=ZMXWPpKv`_y66sJ5_#_{Yk6tNH+o*$SrZDmgR5wo><~!x~rYtl%+b3s=;hTY^LXnnm z$3|S%=#x|VI9Lm*jm2b53RUE3RhXz@@uY-$*V;cO z8s*zdh|5+|tD_3|Mr2o0wZvGQGJnp-mF2X%Bh_=oEJ;hh30VZ_Y#+I%LBP6kfmN~FudDL<49kHPy??|p2f z#Q`0(_`>h1TcYurTVgG{-}X+oq7FI!h7S(T49Xc!LNz1So0R$lB?Q5p-*#7n>Z8`! znjPmy#Ab+GA828Y_oUHB}@# zwjwPg34P;waZ~QX^?hZjnekD=2Hb;ulnAzKWFCkz%yhr zYC>Q5BPSP~;%?oZk+3Bq?MV6d_Hamn0-?2SA}UBv%t%1Ol-24$k6wVs*k*KW^hhk; z*n0HT$q$&_{C?q8A?#oiKkMp~!;|KPHKh{fBPvFDyF^^E*ePd<__>EVhO1X@amPgX zY%n^eP8JxngQy8=S@@&rGtFxsGP?!0{}paZ!aR^s`~kzIz`Bx+#mSJ1f~y~3W56eB zAx_8G`Os7O&_%K*HmkgPl6@#!tVA3bNn@3c7Q@G>Z#4%^;w_Nc_LBywvEAy<4>7y< zjs#ATPAiOM+hJF!fxNCFj3JcJt~`J1jkoT|@nJf>eZ4a(z3c_7Ta>Hu^M1E*?I=s4 zbLjmlx(DUHsLgl#L;C~&I!enwMQk|QC;lsQKli6j8Gc|ED&pr2Qg$sq%j0-4<+W+J zbb>8|<+W6ZQkI8YD`9-}hhK```5A8|c4IZl6MK<8?9gy{_!%8E5`k(pOEN+%{oSHb z6&X+0@0jaHKQU!_mMYy5KqVv6acc2=atFn<2 zo#W>+onG&oO_{FJBy{_T)=GTauBo&Z3xChF&b~r)gFR|Z^G8e<)E}Ywr8SNG^z7>% z{C>CFi44LWj!sT`oCcXC!I*h6U)+c+Blydy+#90VFjM>+UeP;r*|jXXh-AlXF^mY( z&68`FM?9Rpmt@wJ(uPiG`dB^1g;%>9&!`Jt=2V?dp0UU-?n_i{js+?Z;Z87=s! zdmQ?MPYKVXNr_Ty2{wP)Ig(`4RPyK0*Ne?kV@lxsk|Brtqv7FFw`v|*c*`7an%&6l zf1aDUIxtsjV&*(Ev8S?-4*KJi-+EUbt8!dCL)?$f39oqH`!(LpRxx9Xsl=@Y&j8Hg z7MZKCsWusS37dxcN%MV1-1~ejEoFLO?CzOTp3}0Hd8^;lE&OkTNnM!?(-I5rD~~6V zJ)-0i}s4B(+j%-js@$+fQbkv5uN{!DbQ{-IVR7DH+@e zY!CAK2Vit4pJd0GX;&jMhQm4jam`LMXG;KInb9>IXgZRLhodz8cRFZC4iji-$&N%? z@9ptML}Zn2f}|}W&Y&8!0XEJ>or}Sm9~l`g_<9bEMw@Rbau+_fH=-TrOTy{$%HfW> zthUz5M+PNO1sI@PLbNK>(OO+??MAm_jU`|Kyaxrm#!b0?RyB%T#ORo=-MX2s@$Ag) z0lVn10v%(Dr8PQm=Tj{==NUK#1ANlzO81HABF;Ntl;!qQ4#EFrEpKe zTGn5V(ZbxoPcB?73%q4vU?OL00XHx-;yBROuBa@z3(u9S?V$CvU2Q<-c=mEFEqm{u zs;Mw&63+%POHOV|OQ4sgSrNtRo6MTc*oT7LZ2r z@*k)~^8^@YJsoa$?Vv5*-b4h*rNXcszLnr|nbd6gdipf?JZ22bi_T5V7;LQ1;`ebQ zBjNL=&8fINql|+|CSiKmq&feCm~}9&)u$wPkt(CLx_>OiTtZ%tF~1CtX<0B1g@2y| zq4%6ztrcBUz1_@4Vo>z2UfLuYh{5pb4WS-}B467KE}7pkH>s)nm`F=4?fLVy_{n?m zEsK`*FUAzgC)5@BWY1Mv4gNOVvSx|-_i&|5bt!nSE?nblh%&2y9T=2DsChC{DXT%p z@aArqs!Iz3eVos95uL5Nm1&vd?(N{VO1~7Atx3g|0OXotQ3kP3dcWGiFAMUOYwcIx z5aYK{LO7RG(Ml_9xfP&xN2PE;^7E^B;r}Q(x1DMxJ2)#BOeNCA{FH=JpV)q*TFb`dQ((LY;KEC!j8dY8GyB)-<}%KP^$p0))1M zvZ5a`>Pb_o?E&tr3#Z&Bv{&eVqos#;qYUmATBn6$5RW$2H~FXiV{zIdescD1-874E z>2VYHXm(OovVLUZmr4_dw;s-HVkU@v;%RSdTP-bNbLby_n2Go(88#kRg3WV=Xj-_( z^XsG9UsqGUWo*JDhB@4@xF^NR3RRjPmr=TQ0*d(Q^bDWo&9+v}8M@HdD`)s1DxEnx z!ABT(^KSo`Pa`>W!rF+mGfA7CFe8X&!jht?WMvI>V|Y<2z`dAh;C8xk2_;hn+#DB9 z;-fODcZZx;Y=ex zdzRwM60kCR3Qpt7Z1(TNI~N+sUzac`Mf!!xNm4>3q5^MmNX>zuT+v_XqlWjQL#aO+ z7h7m4+azuYXS<=LN^znj8S=#aQ*$v)Gry0#znUI8E5gir$F@D+rm9pm5rH=B)F4+> zuAawKmxi>+-W#vljW(1dQ{!Q|du{HXs1wOhKxK))V(!D>IN)h*8}y!O3CB0m)-nT{ z_`|Y}fuuz4kzu!bOB=>PGLfidnDIqGtY*fACf^W)5zHzgncm+wWI8=Ao)M*6gjy?&o=$JMBx171Y@TJUK|F1@JnCTWeW~%ZsyMoq6F!MBD zj;=y>WFBFT&nP~|Gzq>a=0!B?AJjqDT)Pl@C8V$U=`g143RcpPjR{Upd8?9@8=ISvme1Ae zg+W?!N{D!;1nddyPVmVi(oN;#&kDUsQc3}y7-*JWjcS>5*vw-D)u2=ArA+B6eT5O3 zU#(U^9_mY>E=(`M6SRJd|=U_woL6TxPnF1P!A3K*i3koLv}RqSxq>$Jg$Xh z+Ir&Bc3DddQ;C6&x{)05aWi=!vZbwTD0*dF2I*W)MMI1^6kafJ>6WszE|kZ0f-~6C z+dXXUXpq@&?S&4$UHFd=+^Xl8Tzw&27&38cH6)>WsN?I9*;H!2WIb?^U}q|l%+sx6 zv)b`j#x?qSfML0W=dk|Nln%Gmrci~_gUQNz|1x+Eu;>$O``Sq6=N?}4!RMOdl+sZ6 z5*rsV!MM{KowbuqgZ@lvR=y?&W;2~w_n6R_w?Zd)$7|b7OCSfbp$-P(V3WZwfo61a zE=g^zU|vBNre5K&cua)Y%4Xu%nW{|oa+MT5GF+V#xfa82*eHa;T4n=0jP$@xPY@Pw z+oElKZEd*B?Ll_$NHq-1sIBNicc%Vh>=N2$!joZqTH~`;LfQelxTCfFf+naEmVBYz zP3FKR;+!;4m9*ITtd%Dw!IINdUeG3`Fing&usG+vvzSmzq}NkmKM}eV=0$cBGXVWV zXWMl5)))B`p20q7H;+hWS`oA}T??g!vT<+2S?e!CjvmWb+QH7Vg8XF)EVr1XZb5J@FAq_>x#7pR-hNY4zY|l z_(k`3bJ!;SmD*HDGG{QQQ;W>C@ZkKP+LBrPPTs5m=j@#7&DZ>G!3X=|@ag921Mk-* z3XO-G*0e@!G={4*M4!+06>KW%0+$KhN``vUDO;mfe6EVfN(9fs#ab&O*VzyDFY1rg z(xN}n(r2566F>Yp&iRX}8T|;xkLa=Rw!w>SB*Zx@1%s4`RyM+O!ZN7my)kzmTHtxf z8`9ewt3{=HdEVUXq&;d~0;>06^!49b@D6vPme_SC(sH0<>f-iV+yR09%c4J2#ag{> zQB2=OavkYBqx#s;J2%1HTCKGrW4kGlmM}|{qu`kxTB4QJot=nX2x>`zoiq!qsKY~t zG2{N1{Kfins6T`~W1c?iA9Bt5aVs~Ye*Cuf3NG0@S1J^+98M9hlg!Jih+RT_kZ(!0 zNgy{LO5Bn~ALpptyTvWKdytB)C#zw|+u4^%pCg=dB}t9gO2m)OB&9u0CDD44IwC}L z1#XYsUNO<3hCI?vW+c+f1*+I1*_eU$$pU+)NaYdw(sw#$J)PFvL@opy-te#IU^3Vo zVu_*d;kV`%32iCLuh3nv2_Si#_BkQXGneo5dTjBQC`Odcg)fEW=s9lj?GxOko+q&x z?<`t;^$m9Mf3ZtYID@no?`I`~w z9h{3i2+#E@$hNSEof=_L4KI0Ti89uK5mXAeBpC@j$;O&CL*1?LJsOYnurdqhNZBEx zXbnwVZ&xf)uE@d?cP_~atd7FCt$-$xXoAw~i=<9*z{7JWXg^hl;M>~B7fJ}6CYWHu zhit>)FzC6h+7sr(nEIuvj?Z;xE(C?%gI?TvVO?DjB8+MtMgh1VAs zk*;tU4S>`Jx>0B#@1)yOISzL2r>8(D4Ui%kqkFI>eBAvs-c;wG0v8Wy}5x*)j|hhzxoPt zdIrI@$UOBBwWcIZ&z0ZAlFKdA>fjl^IJW`ygi z<(MOnYCL124%`!3A>xS`=!8jsds%y?6`99Ty&sF)-82_z%)va`BzhF*3pl^Rui77E ze@LsF`JZzfKQS$gqv!b1dz^CkNVT#_VhpEtl_uaRnls1}c(Yg+`97rz)b+lbj*SmEkC5Gi|Aj-GRE-6yXhTDlZ}YTa&5HS8*x zB}O?D|DWRNWY~vh!{7@#wT_QmnpL`lU6iW>td8VxIxV#@hADy;EBRk)p+Bizl~&pv z!rleDOlEpEMi}?JN{e!;)A-dH_ zXWJIS^o@jL#cw);EkHkEnZSU?&R8c42{&>rfz5)RRMNqJQK5!Tp$o1qhD4^s7Xn{W z`Fczxa}zgBCFJo6jSzg0i!|>RW)UQVOc}E0CgUgAUEV8Q17jxirxyb+O=6tDovfa3 zh+$7~zxNM_Mu#q9_sRCafb9kC#!X#9uKO(;RH0*7Cg7a7M6&Jh#Nn?Lj9X$BAG%T- z!k$oV7BGs>D;lxn2%4$7*l8-QzaspnX(e=*<`&oS%doU@%cvCRkLtyBpGGs6Yhx&1 zl(JE9;BBY~?3eQV)8~f}yV!_J@syad;mG$?D}AgzMtLp}>|kL`o=Q@M;$7?~zqAs^ zRibZ46qU4Ie@;m8cgIrgie%7BFNB!IP^GiN$*E{XoU;dB_fLzlOei2bVsWxJw3k_5 z(&QiL3%3H}*z!*ww&Pd|sR(ln4vCITJfNMRefPm_n3AyF!eDUM7}GyAqA0DqLBDNU z$rO?1KrJtaM3pb>P&AXpG?OlZo$8*ebujimyn_89qdCIUhI-O9rHh82OkqhCs&{E+ zS_())SxU~X?ntI03@4>QmOdR|y$lK9UrjyxCT0vVJ8eD6&Ia2Tre|#n`R$4*$JShf zXAUx=rZM1{!h0mj0OESW_GD%VcllJl4kM@>Cm{96ygedDlSupGGrn9{^2tRx6T`f< z-1w?FR{4*juftITdF=>B&1@WRwB4}!yvfb->fY7Q9MJf0lx6!2Xtb@ur3OlBt+HnXR(vZ=Z{!pa`WZ~-W+kDUokL!j~%0tjA*UC{&zYszFtFM z3H7+)zC0EAXXj1AblQDE$gngQj#3*oQTa()Sdof2cE= zYCzu%?)l%D%K#y&z;6M<%QdN~oB3R<4%jHA1`E)ZR>yr7iMd(41L~0S@1{cu4wQnP zJQcBPTZ%HsYG04^d>}GcR;x}l^P)8sR{oKUWzJCL!v_mU>Sa}AXE%<6<3vG8ThBm| z*X{2eZv|Ftv5G#onQkg#HO;&GD9nWLJ?BUdRg2%NVO-2P$cJI@ZjR<;^ z4&Jn>&Y^E&w47W^YF`R{wH;fg^dtw&&6Ee0o(N6olexHZ6RugUf*DZ9M;uLxh9|5z zD87x?(&3HnE|Df?Vxakn5BqEv7iZ`YUIwk~T2d)HG#|gFkgyYL=td%eO;?i6uee9= zSjfxw9#>@%`;d1!U%c(diMM0GyDaE&AvjToS#B%_N~Dj6Ga@Pz-c^^=U0|M-9_aL$ zau_5#RguBr6gYuSEx=QvIfv-`k6BnsCn6y%G2F6~)nGK6I`#Yv^M_5a{ zIZ7+a_Ur}AHI?LZ3>nqoHZQ#rCz#E|Z17X?Jho4d35OH%al_3`u>TY`P=%tiQ@6a> zybX_hIv>QuLLrjCYCD2UHX+pbq^bO%6Y=Ysovsx$Pr3y)VmK-CJY9NuN#XHuFu zk8cvhJIpR&Gr=BDUi87Yu#AaZmR)gvSaBs$tr%1% zVYX`!KGm@g!IN;D;jp(SA%T~j5uz~r+lk{>Y`_xP#46Ra%10vo8_T)AOO* zl5jcSnw&-JNcN^iCCn-gyr&{RmnwVsF(FUpT=)`0FNDAuei@!W4dJw*`-Zh+JM%|n zY?JrzQA^js9xwUzm^Vp4kq6T4?T#?G-a}=3C2L9M2)h~2D3o>nNilu{(b(O@~3D>60(aCVJe z)@7n4?NHRA#-sHj_TWOss_?B7(TCv&2k8N$hk0kAGR-RaX4q@ zo^J7S8Y?**#i+G2#DkDGH^%7#?6AU=D8znD_u@bSYe){LaO$bz%-4$eyBWJ$D3*M` z8M&}>Ham!ZIhN1HBL7wQ*@ej5#kicuiH@_iK1CBcAZArW3vqj|@*kKgKcg?bEmc;g zH8H<#hx?T}+UVbr{T$$+LRu(bvAm1FkSVNJK0skKgM>5>d=`UUyJ!?k8yI$=KX*>N zkL$_)qB9R2wk@*12uoBec9-zy6$qD;g}y11X&_Z@<{tYQVE{wJ^+EWf4SKw2^vwH zDTy{O)9yNeXJ1_T1=V>>v*OV(jAa>FIMaEUD&zyn)?Uz}jyNg~b}^&GEP?Zz@BD7h zb_avKeLm?LRBWc53pW%v{p#7wXM4R1m^#DpD92}0jxBD<65Mo=)Z*!rFi%=t>+xLj z;e}2jTmH?|X;rJ~-JLPcP0waM=qeHbq%SKQChcr3=G_{LSE zb80jyIgYfRe3HVMMmm*)9ntfit5=7}3<>irlUg!^iMPnR8+Al6cT9+y%13754U2`J zoZKhv;LGDPny@d|>QDjy&+3&FhDH&~$1m-GK8YEbD+RY(M>0~S!{C**RKPB@+kmku zAGj!e3~Ve3jz#Y?&D`^TE;Qm!wF(VO!63pKvLs~rPOFWvi_JI&GFp*2gt}5DW~$Ul za5Tvw1cIff*{xBhes8~FgN*;752uH~POE8)Q_Mswli77#>7-Y7=%$inepQ_x@K#i5 zxFP<{zCqea*n3|Jpa+hFCWC9h2&r)XC)3uEgmoHXDp(SV^NZ0L+in9VX7sb~7m5~m zOicTiwbZgJjP=MH#nk(`V4@ja#uFC);@p+0@-BV_AIbjVP=Lq^_*`!tqKb5@Hhu{o zly*b?Y5MyLaE7f-eT*5$Rq{NyxHC<_Nw16=Q5@AQ1X)BK$cVJ3tF7qe0d=%>VL$l+ zKd>1>@Y+YhpM?{6!mym4dWrDHQy*AU{Wy-905@MN{Kx$UZVcmzkBC+#pK<%=NJh*AG;*5*K7;)t%hjr7P=E6Krwd848fOJUW)_Qg;r)pl#H zzJ!H1JV2FI_!L|iH4=VQttq`Q6rH7Jy7AI2IJU8ukkDE^xgPE3+isZ_u=Vi!RHDv4 W-I`SWF8u3ScG>o#Q_ch1e{K0$ZzrP9rbWcu`4HmR6zRP1J%RSbqyLnjjYx)>FF7MRLidEUFv&&?)j&wRvSl~ zA}lHOb>u@9YySayM15c1*cUS^)udp?)8Cv3bIw`wUl9`@!bg95S~pwRUhrt~J$deP zoQKZ+a97t#&TE^k_d+@EoE2{b4CY>1X5p{5>RdnEws_LiQ@?a5VzM}Vcp`#5+sN#S z7=If+GV?k0fJgQF`kA`{tjgN)#)z@_7k^6qELo3YX6n;989U2%7)0#-T;9G=5kBJX zTT|p?-kKEP^7cX)v-kd~KkwdkR^|0NeyTdN})SmN6 z+@L+!mY!xXT{#%3`+hcK{$G{e;Lnb~Q3FO#I)kd#$BUTp{{MaA!CEi|*th;E*`eo} z*xMS9noF{jVJ&+ThB`u;<>9@sot1?s8zAy~u_3hnl7uH_349_4Fc}bIeXuLdhf~7U zFkf@R49kiq^Ci?r?2k+ZEDFcO6Trkqm~<%v@@n)ES6Y`iIBFtZrpUn2qXS3dNqoSB zTcijQMxowd9MvcT;hG2FhGo@WplGECbZUfDK3$+B*dB;bq5UDIPOBtRi(zC}n`ha6 zjEAHW0;{T86B0CJtt6A23J(3}D0Jib>`D?Etr_+ZwasqKNC5ikdROep;bSNj@w!4H zrKYE+huqZQZ113>ar%#4H;vXYB5P1Xk!=`S!v%XPXZ3{w=n2l;qF_X6sgup5k4o6OittB({YS?y zi!q6OS}aO1zlbOH;qYrJ0$;^h$sXQ1h~9NS^{?xsX;3ittd%kkdZ;rVx#`YoQtVQE&(NK6*k(hrlH$s zbZD);h#Tg9_`NE=?v3%l9VUFu!>$#$QzKE8bW|<}i`j!PVdLS8y!io7J5|rf&9OXwfd%F?w5B5L9q8ecwZu z)$vo78fy5FR~Nk@0FM~XbW}y|F07-MKJ1!^)zn5%qKLGx2<;lALkS~6H5O&_1>Z8c z-5V!HKeS#Zr1myS0wOP~p=Ar#i<`08-}7u+?wk~ZnUP@^Im znja+&U=97DpGP)l&d6uNKgj1scX%*sX|*Lx^8=3&@+2jvDpmqoR`~KecOqjSD;rBe z957<4zNS4{3PkAC%uV03w&>) z5BSe8ZWx(79x(Ksd$*Z}CG{WQ^(*1U8Y&g3=$Oxfzspk+3HF_~G1-ILB~oE7PE*!Q zj1_eFwH3zqfFlUJHrVhLVyci8_WA4Rbu?WCiKK|&ukTfaKY(2tv~7NEWd$Lf0U~s3 zlRc3#+ClZBL#W4X)iQ2)0$Z0(gvrJt$=gWveR*F=Fdf95@?fAzlu>Mye;nL-y(SqR zp7>@o>X!nrGbeijPxnn>>G(M9^`7PdsH&9BdXAw<+X93gF=bmU5?v#xk_se8Kk`_|U@H28#E%o7 zsbVtaa;v`cW&wv#CvkU78T%zgALLi0?To!@7k5?)htelVAMa=vhWt8w*}L zSXD08V?b3wh>Mc=m$O_3T?3xT4Y{C(xwWqN6mdugQNdHnP_L+y#X7g(YN=&P%vs{X z@^H&w=BX7KK6bEYuA~x8?-fbwy;r?mPZUKQUss|Nz7Z8?${=A4A+pHr&6*mKJVUWZ zb=nnh5zyGSlQI%z-NCqct|5TVz>Xf?<2D%@-=4J{J~D%*z$MJQ6m=LM?LyR zyh=cXDcgrspz_9Rq87wiR#Rnv_D;r$(Vis`-Cm@?h6ftKezD=pEnC;sg& z4uOv$E|$dA=yhT2Vx2L`WSGvaIO1{$js92?sY266Apv^wzYLh%BrY)jrRNk0t^t1b ztLPbpR`E!ZtUG-89Zk_fmhX>#8uVm>6?RkMrqgV3HWhI>p@a!y|I{c2PQ11--*Buq z)(3Mb?t&!yN-~7tt_6*W6S&f|P}gc{12` zO89EXs|((k|M%LClXCeGUdy)!JHdqclI0)1`Y|I)__QQ%aB%+9&WTuM;Wey@lsD)J z-UMx0Vn_bzELSK)h3008=4}M5Bo%Q_u1o7KzjwShda%=_bMk+qoVs&6Y8N+;F42%b zs#F>n9j{Dnl~0`519D5H54g7FSq5z5D$&xw`;v>xntURjpobpjr&mQwA+_F)Sjgem zmRO6oD$_drd4iF0SP<*B@glMjy!}6nFE-L@tQao~=mo(g&hhiYhOrNV<2NUd<-E_#==01#Rj+M@-G`&cfVLk<8N0WJS_RwatM^`$AUy(EbxhRW@z2h#af6UjW9G^cyIAi;6J(XV zAQ_Bcq&FK}Flei>AgoG3qsjBa)x@PU5$zag#w!;C z4{YFPk5fI6JMT?eFsR-no2?NOdp!#@ol+(~{dE>+nH`}x=F<4YSejg)abLZAH8a-= zW1#G1UwaxFozhr(ib4T{u?_1fj_%ythUgTbgKnr8i!*kw`lPJ2r+xWJh z+l5ZPXj3T=cxWK4bn=*_nhlQ+5mhq#=_{ssU5;<3R(ts^_0)R(d?_Kz9$OV10jX5N zM&gH;8_4h4Jgak_j>h!b=0ujMSI>_)pAK4B`944UQB9^7n0?jM&;J2>HVC5oVL5>} z!{wQ?Jf`WBjN+nSvxV{AHRxHF(@=$762$jrZ~JzzT(6`=CX;prvh1*ujJvBJ|18UCf9grRfP76XS(2EN`o6W z;+ysC)}So8OW$PaK44gyq9&ZZp1d%6GjszOpT(hh7p9G(JXFb0ES&pQU>qH^>?CE8 zGmDxXl2OFyMYDmY+hnmT?Lxup+<*uB&bT`z$gG_Un=W1yatr}J1AKd$0NHBSmdWuE z0R*N5xyt7K@f_I3v0{i9{(Rt;NEUc#{$!>g_l|siKdskj`YOjFqzS;pEfNwDW$w(i zh(i$fU`g{ZfsGJRELnlTe4MNoL4%4|%VT!HYZ(fD{1_zg1WyhdT_7x^>3N8gr8h#Y zEGuL~sBYprsE|-#9vfNuR(7$>EyT^&6j2bZ9Ag&L*xdcPGpIJXptczrc+ljA5Omur8^N-9r3=FsEqeE)j&fz78N1|7(z+Li+9&RcF&2RtlINr_~ zFyRjTPF*62&~}%L00aDhiYI<)L+~~-w?9jb8bw--WGn& z$WviP;28^~ea|x1FOlm#cGe+jQ`h17i>|plx|0 z)pKM$*!+i)wsi=JTq%Hdfte-@yEY_Gw7Ws@w*C;OO~El!I>t>(bM|i-o1i=MP->6-bg7Awbz17S8_gB^wVgO z*A3qOhtQD0BrP(bhxT$Ie$`@`!uvNZ8?@rm{tEy!^{Dk%9LsoCxQsoT{i7;6UB z4cJ^5v@|CdhWUyJz(+a+HwhsO`FsoPN8}C#goxXmYH&6G(vg^5N~qsOcH@zBM8QW3 z+yupOU}24)3Dnn(NiE#eKMx6uc_YcsUpglf-lX&f9(GoM$7L5Ww*pTBc<>ZlbiP1{ z7gc$W6ieN%PihF@fq(Z!7dnxIZFwVmOoDMC=5M-^&TsDegg)`t@Ye>%lAbM-hP7lC zDdVdg&AM`}Za(r63wD%*uHQeFV%{FurHgkPDsyS3Sz%R<*^$0Jkp!Z<2wIN_%g8xx z^jh~Z_p+P%=!rhic4a{yk+nWUmP~y(0*Y(DeBQ$Y+V4=?Gs3gMV8ggU_$~+c8PwaH zcfr_q!cnJ&)Wpc#dEN*&Nf2xqSlKTFD$kX8)8^1v!lfMJzDP`65^jEa2g|lcmxHhe zuw8a`-IfgT#WuX(z~>ag%Oj7-49=5L9_)t#%AS5>g6b3xn}gr$*Q|j9FAoa^E9-;I z%Do$c+x3Ll(rz?CS$dpWCPDhsx*JlL%-|;?+Kq&6UrCIu0Y&RIp&&9PM=c$2dIi!} zQRyl>(F?%R-MF$<3VYI8G5n?12cZoMBfuk~09wc!@Zrt>z~#Mk-WavJ`l*)xE{wxj z44VH3YbJp~@X4)+mPIk&0wzIv$~*OxwlRD|YQAOXb*8i-V2ACWbGkwh@M0uB2Aa7) z$YXRuzTA)q{MYMSNNnF93i}#n_x-(U*;*Y2s}Zzg(PTf}%)Iw{p5|nH7fqF8R*gYD zXc1aLCpSkKbqV*5WaH6S}1tTW|G8BhzVUZRJJ&7`$b=0rky-TMj=f1QVLYQ{8!QRtg z_&z0fvf`I6E}zCF)))%>sqMd@cVhsquQkAyjvf_4@&~;ajH>eq738h*@M5)<%o@{G z?`U+&CT9`^gdqH)kVx602bpO}+YBCo3(pN{@?1m5ApP8sNWer_>VuiRng7Y+ZQZ-D zU*P2ib2Xh^Igbe*clR^ug@XCf;G;#x;&z&kIWk1LeQH%;c9+~u%y#1WtXuJCLi1#v z@X>uKqkjdE)PRq7cPQs25PqU>fp#VE1?~}hOO~8EZJssdCf$f!TV8bHGEZ%z2z5OR zVcrSceu|RHU2QF(>I%_~IRmn?Nvc{99LPB$6&HC8i#3rb%hC!?OV`+a*|PPjK7R9+ z9E)2+JM2gPXs!+kuQXCRLyrM%fJme-3u)QI>TISx5jT-=~CO`yJr-Yw-1=!QAeN=SKHh6%aE&(U@}EjKh$$dY>yrgH$T0 zhjh93JhA7+uJsU{&yW+o&3pcHX!v2`s|UV__>>&BMF;|Y2cZp_+o(s=1IM=^SVyNm z?W9KPgH$29&I&VIQpiyR8ffq3)g@j_BmXw@p$Vdfd+;3y)nu(2Z2I&Y*jLtj+>H8!dHy2IN4*ksk~jJjF&>Fh5+g5ibPIuAibb zA`e~N!#etgF}m&eJzXbxU~&W{LGSZPwS0oDWC*r{@9d5-xcIWjNp^8WVH;REOYXVw zg;q8q1YuZlbLZ8LVhd*X(G>v!29M+^Z2Kz$FDm5Qkr++a!)_n+JaauR@+K_E5yci9 zM5Hk%-@~tr(U2G3NAUkJx>hXdh0>ObTkI|nWXn=G`Tdda*1t!>49V=KYocs}3?-nE zKOpC}b`3!Am(83-ZCTo|tZkzuvuylmhva$Pz5v_GcnF)ko3;f{P zfa@_sJUwt}(XB|fSPA7WYBGh+I$UY=cU&gBYAtG3EN>3Z@ZW|FhcGfGHn1q6y z2U+*UbHXy286!NvDTe#_~7fn}!;z_P`$Xn6Gf z>OO|^+KZ3YLnZ;mR;3aX_xo^%%qhQlwnr4I&#DmMIxUb!j<7#ABibzby!fpeg5`eo z+W7$~^W=qmObnVwdc8vhaL2Q97&mnozbca@n>mb;2jO)Ca4<@>;vvUgrT)yhY0&uvAQ^M4CZ0>PVb%^S&BP7ny?ihDQWHdg9d zm13PqaD2PUD?4?JuIvYLKX?};YEB1ZUYadGCDuXT?Ed{S$_eL@A)*o12j>yp;U|xa z-*WBpdahP|9+fIQLUWc8((1R)^?IiBkkGuDj791PFQfZ!;*?;*4p=&Tf=fEVryeA^{w;SneG0n;5t~E9PFj(JH7d$x6MyhX zZ=|Q#3gDVP+raT)6nSaQI&9LkhD>*4L0Cx2dLMK+@<^W`d*6XFTL!^nMp=ZqL{QU$sQSkR|B3S0lvzu!}L??8Mi#ZiS9 zGaSnE>W~grr_ca6eO&Z-IxFHQPkfid7^TbM;aJJC`l1Be-~cb?efBp2oH#^wV|7e$ z-U9+{=_UfAj@IZ$`@Aw45cueFbxTPe3j1Cm3r1g?3TAJQT+M>c38XhBXz3T%VQXK; zYsqw$r6a4C(AC>(iEBw^0yA=sp-{zBc5vS;nV$CI_9_E~^l#2lki2ITzO*+xhd{T!9{e0I zv%w`Y)~~sV|HPS6;ap59@7-=m9+rGZWi0A3o)`rERUgm#?l?20xw?;gaZ*y(ufO)o z2ufRIOpc!F#h$))fa8q4sN(kE6^6H#GlG{Znek#ZKKFkf@Ym3XEhGHAsUBWO74ao~ zMcO2+>CF31hV8k-n}hN}#TNV2-|mVxHirAS5@5Xm&R?KvjaihcGV^cW;0WgL+DT+} zeEU|Yba+G*qiBGpSNd%^IXD^H_%BGy7*(by@qRZ!td>$T*Tbg2Neg+&mnppXW=|1} zRFK*W*Q@NXjEuw6wejMt1BZ*!GJV6PVR+7{L}j`G%>x>(l;}o>=HNjiPwQQPZL!AC z%hkc4lJE8W12JC|%LCDw+Kpl8kS1>7#TRUhIyXzr`Y2Io&sE{C^biFcuBl??faHVI zHpF5i3lyZVYYzxOM3@`tXJutFHo0qQ0^)ycHQfvD7^6hgP z$3}%{D`HGh3$O(dBu)UWf2>dxsm+TtcYfVic@dWLt)$r1`z5gssY0hFmjoz%*(O>i z!89;(3O~dc5qDgY6F=3)w%Bl@#4R;M+$rUtMV(`D!ag?Yzj5F!J3$pmk#KYyB}q8?mZ&z&3cg?oseS z6xJhGWTeOJ9}Y{MCNuj=W4b#g)|epj38ZCCf$52O25HT+s5VPg9+pm7q&=1m5h7cW zwbw=Epj*UdSc3ni%pktO{<_vDvEu76GL07#{k_0X6al-@%Dg9OcjJ`Ki{tWhMnOS2 zYTSmHVd3@pISGF3bjR+v|43ZzP%-A9r~qcnF1c%$S8j!!0-qNSr~N@A05yg9ujh&N zxgYGYbG;0GMA{V#tw^)Bw^9NSGWg$Ffa2aThuoW|5v+MNvn5v7(g7;~znr$yB9DHY zu9L{8g{1{yJj%%3l2e~+p=rXYyre>v9@Heey0V=pf+^Fut(utRY;Lbwf%A7^Iv0~2 z_OSZia9sGZqk#(=|93rI5f?9`qc2|GYOumihxd#h*7=G^AOBOd@&T?9KYGB8%kB-E zG^gJ0o4ff+j4rGai2|oBg2KM&wkmSti?z`g{VZZIcTcbK8C=k7XKv+{9GMF!;L>d4 zS`m9VG+UPWecNb2BR{O_fO;4Z6XO8QFIPUOd1&%4MA+`M$8N)mywR52n-yU_|09w^ z?5E-BLC|+P|L#*y0T|}=*@#iqInE}am33s<&;Y5JHXd-#TZ`nE54L#?h@xz1UM2kV z+5@WBh$=2zkW9ZD@e#|>cs=wq&;(j)f!3vdP}55rBFuK$U=q}wQ26|zNtZH(`7&%Z zr_ZE`2wbb1P<3+Lcc7cw1rIGw_Ez=Wggb_HktteP_Q1LItGYMvo4Wv>YqZoDHZQUc zYy9;2Kov*q+8yzou&Y#-2C?Wn5J(h690SY4bU#|AL*_qYLgXQY#*J4xFM7)TJB5th zf8c=Kw*i$X(wpfCO&;Q$AXQ%grZyNulS0dRG1}UU0B7Z6BG~xpvIhjm=*5d?C^UXD zcKfx7o2nHyNYg@Ibj9lNrMlw9$Mq^=NEEGf2kd)r9&9g#g{O>q^`qxOwz(EqTRXH6 z`^I>ev5E&eBZ4+q%WS~<5Z1-p;|XVy_WQ$yi~W0>jw?w*gW+iT9^m}B=bL~4n_Eog zO;jQ(uRX6FWEZx;XZ1ApwJRR{@R`$xYLq8taJ)N6M1_KzNU($6p!jBv7x*7u4NbcgVemJa`wfb)hKwgZs3RH*)42C78Am zkch=}4PM%y+Hsu>(w>V5yqw+x&b(N1a7Di}yEz-+pfpg4G|Q2C`{P@Y1ZBoY`)CLx z+_8l^iRN#EJz?x-GBk_g1g0DJV8BjKuDN?eg}M5!xs{-p4V2(mP`sG_*CY~Ej3uW9 zZEE?7Scxzfxm%$9pHx{7m9Tk=;~_4VxsjDAqk?;v^+n&PoO3~3I2Jt`a3>vB#C1DT zUI{(B06(K`q-vOiWds(9;q{g%t;rw_eV#-3F>{B@XCW1NM@f(k zeICGg=rxZ(2a$K4D;(FbFCKC}g|tfu_?i%z+SAUKZMON1^&cv2w(u78qeE7`r-BQ z47iXd4MZKhxH|D|26lmz>Xp2(GJoGOaOR}D!a9b4{8v?^JYbkqp7?xi= z%R*Skm$;(kpRVD<-l~!g829MFxV`(e8`WVUq~`xsf3joHk8v87J=eG*3Mi|)!SZbH z%`t6Ztgt5Zzi(Z?Mz-vPlF4QX1x&9%*A497Fyf3iX{pYk-^m|rlrg=cRXm=?qu#cB6}<> z@ytcUYUX2+Y@jlig+D{WDPzwmaS*|+AgZ%_I8Or+y6GvWaP%sIZCi=WU19SL72Om| zsTFD2D-2cv!?#?PRatwe@=(hK{K?|9p9Fq5$UVN}l-6%$e^ho#4BwDI!Jc<|BZGn% z`{1yf!-u(FY__gGSbmNkXLPaY3MR_%@?>A=A^7VbKB)yQp{8(+L;8(4s`28x3Z%KT z|-&O@8QKgT_{r75=2K~J?s?PEf*LeVaSG5 zjo@lAaPhr&x;1x1orvAQE`BvZUyuKYPD3YrXH@aEfl=>!Pm}RbO{h@fN0`^=qUR}Y z>S+-EfIz=ld91AZy(_+>K!(B;E+5~;kdnhnia0@sP``)Wzl68ZB?!S6$F_jghpPYm zZh_a7+mCRo{I#SoAq~+R_0_&ca(gyCBguU)qg<}91~9{Z=CRf<>d+2Ae2Zpf9?ZUr zl?tv#Eb1&z9g8OU`|(^8ijyO;Li>ce{q1@gu4aAVALjW%*cLJp2q-KoAQ zj7t=_fylXPR4nJTYTM(ff#p78#6$b?7rTtc_Mg&o0-O`PQI=R{q0u5o(o<+(qmclg68U9 z+duB3J-TDDtqbEXQrols*Kl5Tu6$EyYeZmO&w*;^7Ef(*@6+D7vn@s~L9#H}>AycV zZf{#FA(+uYl%81+525<6`^83&+5#YA|kGPP(cx?|E1veWn~fsiBTkG zEAxD>)L|}tMo6L}qGWv3&}&wVUXS9J?Z6@${qtDFs*3fIAmS!bXfgjy`p;(z(XO~}u>mv8vzej&8el(N=S2%4Q)jJwF`lM zy=yIxBv=?iNWO_JmDzRp;dbkd8 z+;l`rf*PLReo&E@xaT#cbu!^%1jrI8*og9{ zPbc?)ZFh(eShDrgWzhzL){VJVW&HBweK**o-J00pmppoTMO+>mKC0h3QLf}|1~#WV zh$728^zSHGtAjrE00mc96bzS|EP{cj4$FQoh5aCLX!y5 z&KeBC&g4;dv__(YvF#S3CD>G*rE`wxrdITozi{xNL>8RwE&g>i`y`pAU~yd;w~`rO zCqKVajNr(vbe}8?DQ7BDXpKgh3_5EO(KXLGPo$L?p;~qpv(QdKn)g^(e@p-&=r0`4 zA4_q#1(jl>QQRt1;kn~Ag#3GVzl|4fo{0Rz?dw>oXpb%9z1nv^i!7R&eRL1zOQ+gN-G_J5}&d*z|{ow)QTWW$)ZP(|?1&s=f=$OT!5DN#az` z^<@cm*TWNqM1wW_c*dy?!}eeNDbN)#m(bC3+w$enpFLt&HG1L4WR%I`Ra1ahhU}gs zz}`ea@qvMZM#6z5#AjtnG^c9TWrf@2U^3;3{cRumY7|?vVglOA-S=7#2LtzEz1!YA J*NlGd{{UB<(9Zw> literal 0 HcmV?d00001 diff --git a/Sources/LaneRunnerDemo/Resources/Kenney/train/track.mtl b/Sources/LaneRunnerDemo/Resources/Kenney/train/track.mtl new file mode 100644 index 0000000..462deb0 --- /dev/null +++ b/Sources/LaneRunnerDemo/Resources/Kenney/train/track.mtl @@ -0,0 +1,6 @@ +# Created by Kenney (www.kenney.nl) + +newmtl colormap +Kd 1 1 1 +map_Kd Textures/colormap.png + diff --git a/Sources/LaneRunnerDemo/Resources/Kenney/train/track.obj b/Sources/LaneRunnerDemo/Resources/Kenney/train/track.obj new file mode 100644 index 0000000..2f0ff2f --- /dev/null +++ b/Sources/LaneRunnerDemo/Resources/Kenney/train/track.obj @@ -0,0 +1,231 @@ +# Created by Kenney (www.kenney.nl) + +mtllib track.mtl + +g track + +v 0.5 0 0.1 1 1 1 +v -0.5 0 0.1 1 1 1 +v 0.5 0.05 0.1 1 1 1 +v -0.5 0.05 0.1 1 1 1 +v -0.5 0 -0.1 1 1 1 +v -0.5 0.05 -0.1 1 1 1 +v 0.5 0 -0.1 1 1 1 +v 0.5 0.05 -0.1 1 1 1 +v 0.5 0 -0.4 1 1 1 +v 0.5 0 -0.5 1 1 1 +v -0.5 0 -0.4 1 1 1 +v -0.5 0 -0.5 1 1 1 +v 0.5 0.05 -0.5 1 1 1 +v 0.5 0.05 -0.4 1 1 1 +v -0.5 0.05 -0.5 1 1 1 +v -0.5 0.05 -0.4 1 1 1 +v -0.5 0 0.4 1 1 1 +v -0.5 0.05 0.4 1 1 1 +v -0.5 0 0.5 1 1 1 +v -0.5 0.05 0.5 1 1 1 +v 0.5 0.05 0.4 1 1 1 +v 0.5 0 0.4 1 1 1 +v 0.5 0.05 0.5 1 1 1 +v 0.5 0 0.5 1 1 1 +v 0.25 0.05 -0.5 1 1 1 +v 0.35 0.05 -0.5 1 1 1 +v 0.25 0.15 -0.5 1 1 1 +v 0.35 0.15 -0.5 1 1 1 +v 0.35 0.05 0.5 1 1 1 +v 0.25 0.05 0.5 1 1 1 +v 0.35 0.15 0.5 1 1 1 +v 0.25 0.15 0.5 1 1 1 +v 0.25 0.15 0 1 1 1 +v 0.35 0.15 0 1 1 1 +v 0.25 0.05 0 1 1 1 +v 0.35 0.05 0 1 1 1 +v -0.35 0.05 -0.5 1 1 1 +v -0.25 0.05 -0.5 1 1 1 +v -0.35 0.15 -0.5 1 1 1 +v -0.25 0.15 -0.5 1 1 1 +v -0.25 0.05 0.5 1 1 1 +v -0.35 0.05 0.5 1 1 1 +v -0.25 0.15 0.5 1 1 1 +v -0.35 0.15 0.5 1 1 1 +v -0.35 0.15 0 1 1 1 +v -0.25 0.15 0 1 1 1 +v -0.35 0.05 0 1 1 1 +v -0.25 0.05 0 1 1 1 + +vn 0 0 1 +vn -1 0 0 +vn -0.7071068 0.7071068 0 +vn 0 -1 0 +vn 0.7071068 0.7071068 0 +vn 1 0 0 +vn 0 0 -1 + +vt 0.21875 0.275 +vt 0.21875 0.475 +vt 0.96875 0.025 +vt 0.96875 0.225 + +usemtl colormap + +f 3/2/1 2/1/1 1/1/1 +f 2/1/1 3/2/1 4/2/1 +f 2/1/2 6/2/3 5/1/2 +f 6/2/3 2/1/2 4/2/3 +f 2/1/4 7/1/4 1/1/4 +f 7/1/4 2/1/4 5/1/4 +f 6/2/3 3/2/5 8/2/5 +f 3/2/5 6/2/3 4/2/3 +f 3/2/5 7/1/6 8/2/5 +f 7/1/6 3/2/5 1/1/6 +f 6/2/7 7/1/7 5/1/7 +f 7/1/7 6/2/7 8/2/7 +f 11/1/4 10/1/4 9/1/4 +f 10/1/4 11/1/4 12/1/4 +f 15/2/3 14/2/5 13/2/5 +f 14/2/5 15/2/3 16/2/3 +f 14/2/1 11/1/1 9/1/1 +f 11/1/1 14/2/1 16/2/1 +f 11/1/2 15/2/3 12/1/2 +f 15/2/3 11/1/2 16/2/3 +f 15/2/7 10/1/7 12/1/7 +f 10/1/7 15/2/7 13/2/7 +f 14/2/5 10/1/6 13/2/5 +f 10/1/6 14/2/5 9/1/6 +f 19/1/2 18/2/3 17/1/2 +f 18/2/3 19/1/2 20/2/3 +f 23/2/5 22/1/6 21/2/5 +f 22/1/6 23/2/5 24/1/6 +f 23/2/1 19/1/1 24/1/1 +f 19/1/1 23/2/1 20/2/1 +f 18/2/3 23/2/5 21/2/5 +f 23/2/5 18/2/3 20/2/3 +f 18/2/7 22/1/7 17/1/7 +f 22/1/7 18/2/7 21/2/7 +f 19/1/4 22/1/4 24/1/4 +f 22/1/4 19/1/4 17/1/4 +f 27/4/7 26/3/7 25/3/7 +f 26/3/7 27/4/7 28/4/7 +f 31/4/1 30/3/1 29/3/1 +f 30/3/1 31/4/1 32/4/1 +f 31/4/5 33/4/3 32/4/3 +f 33/4/3 31/4/5 34/4/5 +f 34/4/5 27/4/3 33/4/3 +f 27/4/3 34/4/5 28/4/5 +f 35/3/2 27/4/3 25/3/2 +f 27/4/3 35/3/2 33/4/3 +f 30/3/2 33/4/3 35/3/2 +f 33/4/3 30/3/2 32/4/3 +f 36/3/6 31/4/5 29/3/6 +f 31/4/5 36/3/6 34/4/5 +f 26/3/6 34/4/5 36/3/6 +f 34/4/5 26/3/6 28/4/5 +f 26/3/4 35/3/4 25/3/4 +f 35/3/4 26/3/4 36/3/4 +f 36/3/4 30/3/4 35/3/4 +f 30/3/4 36/3/4 29/3/4 +f 39/4/7 38/3/7 37/3/7 +f 38/3/7 39/4/7 40/4/7 +f 43/4/1 42/3/1 41/3/1 +f 42/3/1 43/4/1 44/4/1 +f 43/4/5 45/4/3 44/4/3 +f 45/4/3 43/4/5 46/4/5 +f 46/4/5 39/4/3 45/4/3 +f 39/4/3 46/4/5 40/4/5 +f 47/3/2 39/4/3 37/3/2 +f 39/4/3 47/3/2 45/4/3 +f 42/3/2 45/4/3 47/3/2 +f 45/4/3 42/3/2 44/4/3 +f 48/3/6 43/4/5 41/3/6 +f 43/4/5 48/3/6 46/4/5 +f 38/3/6 46/4/5 48/3/6 +f 46/4/5 38/3/6 40/4/5 +f 38/3/4 47/3/4 37/3/4 +f 47/3/4 38/3/4 48/3/4 +f 48/3/4 42/3/4 47/3/4 +f 42/3/4 48/3/4 41/3/4 + +g track + + + + +usemtl colormap + +f 3/2/1 2/1/1 1/1/1 +f 2/1/1 3/2/1 4/2/1 +f 2/1/2 6/2/3 5/1/2 +f 6/2/3 2/1/2 4/2/3 +f 2/1/4 7/1/4 1/1/4 +f 7/1/4 2/1/4 5/1/4 +f 6/2/3 3/2/5 8/2/5 +f 3/2/5 6/2/3 4/2/3 +f 3/2/5 7/1/6 8/2/5 +f 7/1/6 3/2/5 1/1/6 +f 6/2/7 7/1/7 5/1/7 +f 7/1/7 6/2/7 8/2/7 +f 11/1/4 10/1/4 9/1/4 +f 10/1/4 11/1/4 12/1/4 +f 15/2/3 14/2/5 13/2/5 +f 14/2/5 15/2/3 16/2/3 +f 14/2/1 11/1/1 9/1/1 +f 11/1/1 14/2/1 16/2/1 +f 11/1/2 15/2/3 12/1/2 +f 15/2/3 11/1/2 16/2/3 +f 15/2/7 10/1/7 12/1/7 +f 10/1/7 15/2/7 13/2/7 +f 14/2/5 10/1/6 13/2/5 +f 10/1/6 14/2/5 9/1/6 +f 19/1/2 18/2/3 17/1/2 +f 18/2/3 19/1/2 20/2/3 +f 23/2/5 22/1/6 21/2/5 +f 22/1/6 23/2/5 24/1/6 +f 23/2/1 19/1/1 24/1/1 +f 19/1/1 23/2/1 20/2/1 +f 18/2/3 23/2/5 21/2/5 +f 23/2/5 18/2/3 20/2/3 +f 18/2/7 22/1/7 17/1/7 +f 22/1/7 18/2/7 21/2/7 +f 19/1/4 22/1/4 24/1/4 +f 22/1/4 19/1/4 17/1/4 +f 27/4/7 26/3/7 25/3/7 +f 26/3/7 27/4/7 28/4/7 +f 31/4/1 30/3/1 29/3/1 +f 30/3/1 31/4/1 32/4/1 +f 31/4/5 33/4/3 32/4/3 +f 33/4/3 31/4/5 34/4/5 +f 34/4/5 27/4/3 33/4/3 +f 27/4/3 34/4/5 28/4/5 +f 35/3/2 27/4/3 25/3/2 +f 27/4/3 35/3/2 33/4/3 +f 30/3/2 33/4/3 35/3/2 +f 33/4/3 30/3/2 32/4/3 +f 36/3/6 31/4/5 29/3/6 +f 31/4/5 36/3/6 34/4/5 +f 26/3/6 34/4/5 36/3/6 +f 34/4/5 26/3/6 28/4/5 +f 26/3/4 35/3/4 25/3/4 +f 35/3/4 26/3/4 36/3/4 +f 36/3/4 30/3/4 35/3/4 +f 30/3/4 36/3/4 29/3/4 +f 39/4/7 38/3/7 37/3/7 +f 38/3/7 39/4/7 40/4/7 +f 43/4/1 42/3/1 41/3/1 +f 42/3/1 43/4/1 44/4/1 +f 43/4/5 45/4/3 44/4/3 +f 45/4/3 43/4/5 46/4/5 +f 46/4/5 39/4/3 45/4/3 +f 39/4/3 46/4/5 40/4/5 +f 47/3/2 39/4/3 37/3/2 +f 39/4/3 47/3/2 45/4/3 +f 42/3/2 45/4/3 47/3/2 +f 45/4/3 42/3/2 44/4/3 +f 48/3/6 43/4/5 41/3/6 +f 43/4/5 48/3/6 46/4/5 +f 38/3/6 46/4/5 48/3/6 +f 46/4/5 38/3/6 40/4/5 +f 38/3/4 47/3/4 37/3/4 +f 47/3/4 38/3/4 48/3/4 +f 48/3/4 42/3/4 47/3/4 +f 42/3/4 48/3/4 41/3/4 + diff --git a/Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-a.mtl b/Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-a.mtl new file mode 100644 index 0000000..462deb0 --- /dev/null +++ b/Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-a.mtl @@ -0,0 +1,6 @@ +# Created by Kenney (www.kenney.nl) + +newmtl colormap +Kd 1 1 1 +map_Kd Textures/colormap.png + diff --git a/Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-a.obj b/Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-a.obj new file mode 100644 index 0000000..abd110d --- /dev/null +++ b/Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-a.obj @@ -0,0 +1,3718 @@ +# Created by Kenney (www.kenney.nl) + +mtllib train-electric-subway-a.mtl + +g train-electric-subway-a + +v 0.4125 1.359392 0.8 1 1 1 +v 0.4125 0.462577 0.8 1 1 1 +v 0.4125 1.29666 0.9254644 1 1 1 +v 0.4125 0.537577 1.1 1 1 1 +v 0.4125 0.9475888 1.1 1 1 1 +v -0.5875 0.462577 0.8 1 1 1 +v -0.5875 1.359392 0.8 1 1 1 +v -0.5875 0.537577 1.1 1 1 1 +v -0.5875 1.29666 0.9254644 1 1 1 +v -0.5875 0.9475888 1.1 1 1 1 +v 0.3125 1.471196 0.8 1 1 1 +v 0.3125 1.371196 1 1 1 1 +v -0.4875 1.471196 0.8 1 1 1 +v -0.4875 1.371196 1 1 1 1 +v -0.4875 0.4594994 1.2 1 1 1 +v -0.4875 0.9711957 1.2 1 1 1 +v 0.3125 0.4594994 1.2 1 1 1 +v 0.3125 0.9711957 1.2 1 1 1 +v 0.3125 0.3594994 0.8 1 1 1 +v -0.4875 0.3594994 0.8 1 1 1 +v -0.1125 0.9711957 1.088197 1 1 1 +v -0.1125 1.015917 1.177639 1 1 1 +v -0.4374999 0.9711957 1.088197 1 1 1 +v -0.4374999 1.015917 1.177639 1 1 1 +v -0.1125 1.281753 0.932918 1 1 1 +v -0.1125 1.326474 1.022361 1 1 1 +v -0.4374999 1.326474 1.022361 1 1 1 +v -0.4374999 1.281753 0.932918 1 1 1 +v 0.2625 1.326474 1.022361 1 1 1 +v 0.2625 1.281753 0.932918 1 1 1 +v -0.06249994 1.326474 1.022361 1 1 1 +v -0.06249994 1.281753 0.932918 1 1 1 +v -0.06249994 0.9711957 1.088197 1 1 1 +v -0.06249994 1.015917 1.177639 1 1 1 +v 0.2625 0.9711957 1.088197 1 1 1 +v 0.2625 1.015917 1.177639 1 1 1 +v -0.4875 1.471196 -1.2 1 1 1 +v -0.5582107 1.438449 -1.2 1 1 1 +v 0.3125 1.471196 -1.2 1 1 1 +v 0.3832107 1.438449 -1.2 1 1 1 +v -0.5875 1.359392 -1.2 1 1 1 +v 0.4125 1.359392 -1.2 1 1 1 +v 0.2125 1.271196 -1.2 1 1 1 +v -0.3875 1.271196 -1.2 1 1 1 +v -0.3875 0.5594994 -1.2 1 1 1 +v 0.2125 0.5594994 -1.2 1 1 1 +v -0.5875 0.462577 -1.2 1 1 1 +v 0.4125 0.462577 -1.2 1 1 1 +v -0.5582107 0.3896901 -1.2 1 1 1 +v 0.3832107 0.3896901 -1.2 1 1 1 +v 0.3125 0.3594994 -1.2 1 1 1 +v -0.4875 0.3594994 -1.2 1 1 1 +v 0.3832107 0.3896901 0.8 1 1 1 +v -0.5582107 0.3896901 0.8 1 1 1 +v 0.4875 0.6709303 0.2 1 1 1 +v 0.4875 0.6209303 0.2 1 1 1 +v 0.5375 0.6709303 0.2 1 1 1 +v 0.5375 0.6209303 0.2 1 1 1 +v 0.5375 1.101039 0.2 1 1 1 +v 0.5375 1.051039 0.2 1 1 1 +v 0.4875 1.051039 0.2 1 1 1 +v 0.4875 1.101039 0.2 1 1 1 +v 0.5728553 1.086394 0.2 1 1 1 +v 0.5728553 0.6355749 0.2 1 1 1 +v 0.5875 1.051039 0.2 1 1 1 +v 0.5875 0.6709303 0.2 1 1 1 +v 0.5875 1.051039 0.25 1 1 1 +v 0.5728553 1.086394 0.25 1 1 1 +v 0.4875 1.051039 0.25 1 1 1 +v 0.5375 1.051039 0.25 1 1 1 +v 0.4875 0.6209303 0.25 1 1 1 +v 0.5375 0.6209303 0.25 1 1 1 +v 0.5375 1.101039 0.25 1 1 1 +v 0.5875 0.6709303 0.25 1 1 1 +v 0.4875 1.101039 0.25 1 1 1 +v 0.5375 0.6709303 0.25 1 1 1 +v 0.4875 0.6709303 0.25 1 1 1 +v 0.5728553 0.6355749 0.25 1 1 1 +v 0.45 0.6609847 -0.6099456 1 1 1 +v 0.45 0.6709303 -0.6 1 1 1 +v 0.45 0.6609847 -0.8900544 1 1 1 +v 0.45 0.6709303 -0.9 1 1 1 +v 0.45 1.151039 -0.9 1 1 1 +v 0.45 1.151039 -0.6 1 1 1 +v 0.45 1.160985 -0.8900544 1 1 1 +v 0.45 1.160985 -0.6099456 1 1 1 +v 0.45 0.6609847 0.5400544 1 1 1 +v 0.45 0.6709303 0.55 1 1 1 +v 0.45 0.6609847 0.2599456 1 1 1 +v 0.45 0.6709303 0.25 1 1 1 +v 0.45 1.151039 0.25 1 1 1 +v 0.45 1.151039 0.55 1 1 1 +v 0.45 1.160985 0.2599456 1 1 1 +v 0.45 1.160985 0.5400544 1 1 1 +v 0.5875 0.5722058 0.4900544 1 1 1 +v 0.5875 0.5722058 0.3099456 1 1 1 +v 0.5875 0.6109846 0.4900544 1 1 1 +v 0.5875 0.6109846 0.3099456 1 1 1 +v 0.5375 0.6109846 0.2599456 1 1 1 +v 0.5375 0.5722058 0.2599456 1 1 1 +v 0.4875 0.6109846 0.2599456 1 1 1 +v 0.4875 0.5722058 0.2599456 1 1 1 +v 0.5375 0.6109846 0.5400544 1 1 1 +v 0.4875 0.6109846 0.5400544 1 1 1 +v 0.5375 0.5722058 0.5400544 1 1 1 +v 0.4875 0.5722058 0.5400544 1 1 1 +v 0.575 0.5722058 0.2724456 1 1 1 +v 0.5749999 0.5722058 0.5275544 1 1 1 +v 0.575 0.6109846 0.2724456 1 1 1 +v 0.5749999 0.6109846 0.5275544 1 1 1 +v 0.4875 0.6609846 0.55 1 1 1 +v 0.4875 0.6109846 0.55 1 1 1 +v 0.5375 0.6609846 0.55 1 1 1 +v 0.5375 0.6109846 0.55 1 1 1 +v 0.5375 1.091093 0.55 1 1 1 +v 0.5375 1.041093 0.55 1 1 1 +v 0.4875 1.041093 0.55 1 1 1 +v 0.4875 1.091093 0.55 1 1 1 +v 0.5728553 1.076449 0.55 1 1 1 +v 0.5728553 0.6256293 0.55 1 1 1 +v 0.5875 1.041093 0.55 1 1 1 +v 0.5875 0.6609846 0.55 1 1 1 +v 0.5875 1.041093 0.6 1 1 1 +v 0.5728553 1.076449 0.6 1 1 1 +v 0.4875 1.041093 0.6 1 1 1 +v 0.5375 1.041093 0.6 1 1 1 +v 0.4875 0.6109846 0.6 1 1 1 +v 0.5375 0.6109846 0.6 1 1 1 +v 0.5375 1.091093 0.6 1 1 1 +v 0.5875 0.6609846 0.6 1 1 1 +v 0.4875 1.091093 0.6 1 1 1 +v 0.5375 0.6609846 0.6 1 1 1 +v 0.4875 0.6609846 0.6 1 1 1 +v 0.5728553 0.6256293 0.6 1 1 1 +v -0.6625 0.6609846 0.55 1 1 1 +v -0.6625 0.6109846 0.55 1 1 1 +v -0.7125 0.6609846 0.55 1 1 1 +v -0.7125 0.6109846 0.55 1 1 1 +v -0.7125 1.091093 0.55 1 1 1 +v -0.7125 1.041093 0.55 1 1 1 +v -0.6625 1.041093 0.55 1 1 1 +v -0.6625 1.091093 0.55 1 1 1 +v -0.7478554 1.076449 0.55 1 1 1 +v -0.7478554 0.6256293 0.55 1 1 1 +v -0.7625 1.041093 0.55 1 1 1 +v -0.7625 0.6609846 0.55 1 1 1 +v -0.7625 1.041093 0.6 1 1 1 +v -0.7478554 1.076449 0.6 1 1 1 +v -0.6625 1.041093 0.6 1 1 1 +v -0.7125 1.041093 0.6 1 1 1 +v -0.6625 0.6109846 0.6 1 1 1 +v -0.7125 0.6109846 0.6 1 1 1 +v -0.7125 1.091093 0.6 1 1 1 +v -0.7625 0.6609846 0.6 1 1 1 +v -0.6625 1.091093 0.6 1 1 1 +v -0.7125 0.6609846 0.6 1 1 1 +v -0.6625 0.6609846 0.6 1 1 1 +v -0.7478554 0.6256293 0.6 1 1 1 +v -0.7625 0.5722058 0.4900544 1 1 1 +v -0.7625 0.5722058 0.3099456 1 1 1 +v -0.7625 0.6109846 0.4900544 1 1 1 +v -0.7625 0.6109846 0.3099456 1 1 1 +v -0.7125 0.6109846 0.2599456 1 1 1 +v -0.7125 0.5722058 0.2599456 1 1 1 +v -0.6625 0.6109846 0.2599456 1 1 1 +v -0.6625 0.5722058 0.2599456 1 1 1 +v -0.7125 0.6109846 0.5400544 1 1 1 +v -0.6625 0.6109846 0.5400544 1 1 1 +v -0.7125 0.5722058 0.5400544 1 1 1 +v -0.6625 0.5722058 0.5400544 1 1 1 +v -0.7500001 0.5722058 0.2724456 1 1 1 +v -0.75 0.5722058 0.5275544 1 1 1 +v -0.7500001 0.6109846 0.2724456 1 1 1 +v -0.75 0.6109846 0.5275544 1 1 1 +v -0.625 0.6609847 0.5400544 1 1 1 +v -0.625 0.6709303 0.55 1 1 1 +v -0.625 0.6609847 0.2599456 1 1 1 +v -0.625 0.6709303 0.25 1 1 1 +v -0.625 1.151039 0.25 1 1 1 +v -0.625 1.151039 0.55 1 1 1 +v -0.625 1.160985 0.2599456 1 1 1 +v -0.625 1.160985 0.5400544 1 1 1 +v -0.625 0.6609847 -0.6099456 1 1 1 +v -0.625 0.6709303 -0.6 1 1 1 +v -0.625 0.6609847 -0.8900544 1 1 1 +v -0.625 0.6709303 -0.9 1 1 1 +v -0.625 1.151039 -0.9 1 1 1 +v -0.625 1.151039 -0.6 1 1 1 +v -0.625 1.160985 -0.8900544 1 1 1 +v -0.625 1.160985 -0.6099456 1 1 1 +v -0.6625 0.6709303 0.2 1 1 1 +v -0.6625 0.6209303 0.2 1 1 1 +v -0.7125 0.6709303 0.2 1 1 1 +v -0.7125 0.6209303 0.2 1 1 1 +v -0.7125 1.101039 0.2 1 1 1 +v -0.7125 1.051039 0.2 1 1 1 +v -0.6625 1.051039 0.2 1 1 1 +v -0.6625 1.101039 0.2 1 1 1 +v -0.7478554 1.086394 0.2 1 1 1 +v -0.7478554 0.6355749 0.2 1 1 1 +v -0.7625 1.051039 0.2 1 1 1 +v -0.7625 0.6709303 0.2 1 1 1 +v -0.7625 1.051039 0.25 1 1 1 +v -0.7478554 1.086394 0.25 1 1 1 +v -0.6625 1.051039 0.25 1 1 1 +v -0.7125 1.051039 0.25 1 1 1 +v -0.6625 0.6209303 0.25 1 1 1 +v -0.7125 0.6209303 0.25 1 1 1 +v -0.7125 1.101039 0.25 1 1 1 +v -0.7625 0.6709303 0.25 1 1 1 +v -0.6625 1.101039 0.25 1 1 1 +v -0.7125 0.6709303 0.25 1 1 1 +v -0.6625 0.6709303 0.25 1 1 1 +v -0.7478554 0.6355749 0.25 1 1 1 +v 0.1959935 0.4008009 1.25 1 1 1 +v 0.1314336 0.3740593 1.25 1 1 1 +v 0.1959935 0.3613752 1.1625 1 1 1 +v 0.1593117 0.3461812 1.1625 1 1 1 +v 0.2478694 0.3094994 1.1625 1 1 1 +v 0.2326753 0.2728176 1.1625 1 1 1 +v 0.287295 0.3094994 1.25 1 1 1 +v 0.2605534 0.2449394 1.25 1 1 1 +v 0.2605534 0.3740593 1.25 1 1 1 +v 0.2326753 0.3461812 1.1625 1 1 1 +v 0.1441177 0.3094994 1.1625 1 1 1 +v 0.104692 0.3094994 1.25 1 1 1 +v 0.1959935 0.2181978 1.25 1 1 1 +v 0.1959935 0.2576235 1.1625 1 1 1 +v 0.1314336 0.2449394 1.25 1 1 1 +v 0.1593117 0.2728176 1.1625 1 1 1 +v -0.3191176 0.3094994 1.1625 1 1 1 +v -0.3343117 0.2728176 1.1625 1 1 1 +v -0.279692 0.3094994 1.25 1 1 1 +v -0.3064336 0.2449394 1.25 1 1 1 +v -0.4076753 0.3461812 1.1625 1 1 1 +v -0.4355535 0.3740593 1.25 1 1 1 +v -0.4228694 0.3094994 1.1625 1 1 1 +v -0.4622951 0.3094994 1.25 1 1 1 +v -0.4076753 0.2728176 1.1625 1 1 1 +v -0.4355535 0.2449394 1.25 1 1 1 +v -0.3709935 0.2181978 1.25 1 1 1 +v -0.3709935 0.2576235 1.1625 1 1 1 +v -0.3064336 0.3740593 1.25 1 1 1 +v -0.3709935 0.4008009 1.25 1 1 1 +v -0.3343117 0.3461812 1.1625 1 1 1 +v -0.3709935 0.3613752 1.1625 1 1 1 +v -0.3709935 0.3508009 -1.25 1 1 1 +v -0.3064336 0.3240593 -1.25 1 1 1 +v -0.3709935 0.3113752 -1.1625 1 1 1 +v -0.3343117 0.2961811 -1.1625 1 1 1 +v -0.4228694 0.2594994 -1.1625 1 1 1 +v -0.4076753 0.2228176 -1.1625 1 1 1 +v -0.4622951 0.2594994 -1.25 1 1 1 +v -0.4355535 0.1949394 -1.25 1 1 1 +v -0.4355535 0.3240593 -1.25 1 1 1 +v -0.4076753 0.2961811 -1.1625 1 1 1 +v -0.3191176 0.2594994 -1.1625 1 1 1 +v -0.279692 0.2594994 -1.25 1 1 1 +v -0.3709935 0.1681978 -1.25 1 1 1 +v -0.3709935 0.2076235 -1.1625 1 1 1 +v -0.3064336 0.1949394 -1.25 1 1 1 +v -0.3343117 0.2228176 -1.1625 1 1 1 +v 0.1441177 0.2594994 -1.1625 1 1 1 +v 0.1593117 0.2228176 -1.1625 1 1 1 +v 0.104692 0.2594994 -1.25 1 1 1 +v 0.1314336 0.1949394 -1.25 1 1 1 +v 0.2326753 0.2961811 -1.1625 1 1 1 +v 0.2605534 0.3240593 -1.25 1 1 1 +v 0.2478694 0.2594994 -1.1625 1 1 1 +v 0.287295 0.2594994 -1.25 1 1 1 +v 0.2326753 0.2228176 -1.1625 1 1 1 +v 0.2605534 0.1949394 -1.25 1 1 1 +v 0.1959935 0.1681978 -1.25 1 1 1 +v 0.1959935 0.2076235 -1.1625 1 1 1 +v 0.1314336 0.3240593 -1.25 1 1 1 +v 0.1959935 0.3508009 -1.25 1 1 1 +v 0.1593117 0.2961811 -1.1625 1 1 1 +v 0.1959935 0.3113752 -1.1625 1 1 1 +v -0.5582107 1.349365 0.978169 1 1 1 +v -0.5582107 0.9642814 1.170711 1 1 1 +v -0.5582107 0.4823678 1.170711 1 1 1 +v 0.3832107 1.349365 0.978169 1 1 1 +v 0.3832107 0.9642814 1.170711 1 1 1 +v 0.3832107 0.4823678 1.170711 1 1 1 +v 0.3832107 1.438449 0.8 1 1 1 +v -0.5582107 1.438449 0.8 1 1 1 +v 0.4875 0.6609847 -0.8900544 1 1 1 +v 0.4875 0.6709303 -0.9 1 1 1 +v 0.4875 0.6609847 -0.6099456 1 1 1 +v 0.4875 0.6709303 -0.6 1 1 1 +v 0.4875 1.160985 -0.8900544 1 1 1 +v 0.4875 1.151039 -0.9 1 1 1 +v 0.4875 0.5609847 -0.5900544 1 1 1 +v 0.4875 0.587361 -0.5263763 1 1 1 +v 0.4875 0.5609847 -0.9099456 1 1 1 +v 0.4875 0.587361 -0.9736237 1 1 1 +v 0.4875 0.6510391 -0.5 1 1 1 +v 0.4875 0.6510391 -1 1 1 1 +v 0.4875 1.17093 -1 1 1 1 +v 0.4875 1.17093 -0.5 1 1 1 +v 0.4875 1.151039 -0.6 1 1 1 +v 0.4875 1.160985 -0.6099456 1 1 1 +v 0.4875 1.234608 -0.5263763 1 1 1 +v 0.4875 1.234608 -0.9736237 1 1 1 +v 0.4875 1.260985 -0.9099456 1 1 1 +v 0.4875 1.260985 -0.5900544 1 1 1 +v 0.4125 0.587361 -0.9736237 1 1 1 +v 0.4125 0.6510391 -1 1 1 1 +v 0.4125 0.5609847 -0.9099456 1 1 1 +v 0.4125 0.5609847 -0.5900544 1 1 1 +v 0.4125 0.587361 -0.5263763 1 1 1 +v 0.4125 0.6510391 -0.5 1 1 1 +v 0.4125 1.17093 -0.5 1 1 1 +v 0.4125 1.234608 -0.5263763 1 1 1 +v 0.4125 1.260985 -0.5900544 1 1 1 +v 0.4125 1.260985 -0.9099456 1 1 1 +v 0.4125 1.234608 -0.9736237 1 1 1 +v 0.4125 1.17093 -1 1 1 1 +v 0.4875 0.6609847 0.2599456 1 1 1 +v 0.4875 0.6709303 0.25 1 1 1 +v 0.4875 0.6609847 0.5400544 1 1 1 +v 0.4875 0.6709303 0.55 1 1 1 +v 0.4875 1.160985 0.2599456 1 1 1 +v 0.4875 1.151039 0.25 1 1 1 +v 0.4875 0.5609847 0.5599456 1 1 1 +v 0.4875 0.587361 0.6236237 1 1 1 +v 0.4875 0.5609847 0.2400544 1 1 1 +v 0.4875 0.587361 0.1763763 1 1 1 +v 0.4875 0.6510391 0.65 1 1 1 +v 0.4875 0.6510391 0.15 1 1 1 +v 0.4875 1.17093 0.15 1 1 1 +v 0.4875 1.17093 0.65 1 1 1 +v 0.4875 1.151039 0.55 1 1 1 +v 0.4875 1.160985 0.5400544 1 1 1 +v 0.4875 1.234608 0.6236237 1 1 1 +v 0.4875 1.234608 0.1763763 1 1 1 +v 0.4875 1.260985 0.2400544 1 1 1 +v 0.4875 1.260985 0.5599456 1 1 1 +v 0.4125 0.587361 0.1763763 1 1 1 +v 0.4125 0.6510391 0.15 1 1 1 +v 0.4125 0.5609847 0.2400544 1 1 1 +v 0.4125 0.5609847 0.5599456 1 1 1 +v 0.4125 0.587361 0.6236237 1 1 1 +v 0.4125 0.6510391 0.65 1 1 1 +v 0.4125 1.17093 0.65 1 1 1 +v 0.4125 1.234608 0.6236237 1 1 1 +v 0.4125 1.260985 0.5599456 1 1 1 +v 0.4125 1.260985 0.2400544 1 1 1 +v 0.4125 1.234608 0.1763763 1 1 1 +v 0.4125 1.17093 0.15 1 1 1 +v 0.3125 0.7711957 1.2 1 1 1 +v 0.3125 0.7711957 1.25 1 1 1 +v 0.1125 0.7711957 1.2 1 1 1 +v 0.1125 0.7711957 1.25 1 1 1 +v 0.3125 0.6461957 1.2 1 1 1 +v 0.1125 0.6461957 1.2 1 1 1 +v 0.3125 0.6461957 1.25 1 1 1 +v 0.1125 0.6461957 1.25 1 1 1 +v -0.4875 0.7711957 1.2 1 1 1 +v -0.4875 0.7711957 1.25 1 1 1 +v -0.4875 0.6461957 1.2 1 1 1 +v -0.4875 0.6461957 1.25 1 1 1 +v -0.2875 0.7711957 1.2 1 1 1 +v -0.2875 0.7711957 1.25 1 1 1 +v -0.2875 0.6461957 1.2 1 1 1 +v -0.2875 0.6461957 1.25 1 1 1 +v 0.1625 1.471196 0.4 1 1 1 +v 0.1625 1.471196 0.6 1 1 1 +v 0.1125 1.571196 0.45 1 1 1 +v 0.1125 1.571196 0.55 1 1 1 +v -0.3375 1.471196 0.4 1 1 1 +v -0.2875 1.571196 0.45 1 1 1 +v -0.3375 1.471196 0.6 1 1 1 +v -0.2875 1.571196 0.55 1 1 1 +v -0.3875 0.5594994 -1.2 1 1 1 +v 0.2125 0.5594994 -1.2 1 1 1 +v -0.3875 1.271196 -1.2 1 1 1 +v 0.2125 1.271196 -1.2 1 1 1 +v 0.1625 1.471196 -1 1 1 1 +v 0.1625 1.471196 -0.8 1 1 1 +v 0.1125 1.571196 -0.95 1 1 1 +v 0.1125 1.571196 -0.85 1 1 1 +v -0.3375 1.471196 -1 1 1 1 +v -0.2875 1.571196 -0.95 1 1 1 +v -0.3375 1.471196 -0.8 1 1 1 +v -0.2875 1.571196 -0.85 1 1 1 +v -0.6625 0.6609847 0.2599456 1 1 1 +v -0.6625 0.6709303 0.25 1 1 1 +v -0.6625 0.6609847 0.5400544 1 1 1 +v -0.6625 0.6709303 0.55 1 1 1 +v -0.6625 1.160985 0.2599456 1 1 1 +v -0.6625 1.151039 0.25 1 1 1 +v -0.6625 0.5609847 0.5599456 1 1 1 +v -0.6625 0.587361 0.6236237 1 1 1 +v -0.6625 0.5609847 0.2400544 1 1 1 +v -0.6625 0.587361 0.1763763 1 1 1 +v -0.6625 0.6510391 0.65 1 1 1 +v -0.6625 0.6510391 0.15 1 1 1 +v -0.6625 1.17093 0.15 1 1 1 +v -0.6625 1.17093 0.65 1 1 1 +v -0.6625 1.151039 0.55 1 1 1 +v -0.6625 1.160985 0.5400544 1 1 1 +v -0.6625 1.234608 0.6236237 1 1 1 +v -0.6625 1.234608 0.1763763 1 1 1 +v -0.6625 1.260985 0.2400544 1 1 1 +v -0.6625 1.260985 0.5599456 1 1 1 +v -0.5875 0.587361 0.1763763 1 1 1 +v -0.5875 0.6510391 0.15 1 1 1 +v -0.5875 0.5609847 0.2400544 1 1 1 +v -0.5875 0.5609847 0.5599456 1 1 1 +v -0.5875 0.587361 0.6236237 1 1 1 +v -0.5875 0.6510391 0.65 1 1 1 +v -0.5875 1.17093 0.65 1 1 1 +v -0.5875 1.234608 0.6236237 1 1 1 +v -0.5875 1.260985 0.5599456 1 1 1 +v -0.5875 1.260985 0.2400544 1 1 1 +v -0.5875 1.234608 0.1763763 1 1 1 +v -0.5875 1.17093 0.15 1 1 1 +v -0.6625 0.6609847 -0.8900544 1 1 1 +v -0.6625 0.6709303 -0.9 1 1 1 +v -0.6625 0.6609847 -0.6099456 1 1 1 +v -0.6625 0.6709303 -0.6 1 1 1 +v -0.6625 1.160985 -0.8900544 1 1 1 +v -0.6625 1.151039 -0.9 1 1 1 +v -0.6625 0.5609847 -0.5900544 1 1 1 +v -0.6625 0.587361 -0.5263763 1 1 1 +v -0.6625 0.5609847 -0.9099456 1 1 1 +v -0.6625 0.587361 -0.9736237 1 1 1 +v -0.6625 0.6510391 -0.5 1 1 1 +v -0.6625 0.6510391 -1 1 1 1 +v -0.6625 1.17093 -1 1 1 1 +v -0.6625 1.17093 -0.5 1 1 1 +v -0.6625 1.151039 -0.6 1 1 1 +v -0.6625 1.160985 -0.6099456 1 1 1 +v -0.6625 1.234608 -0.5263763 1 1 1 +v -0.6625 1.234608 -0.9736237 1 1 1 +v -0.6625 1.260985 -0.9099456 1 1 1 +v -0.6625 1.260985 -0.5900544 1 1 1 +v -0.5875 0.587361 -0.9736237 1 1 1 +v -0.5875 0.6510391 -1 1 1 1 +v -0.5875 0.5609847 -0.9099456 1 1 1 +v -0.5875 0.5609847 -0.5900544 1 1 1 +v -0.5875 0.587361 -0.5263763 1 1 1 +v -0.5875 0.6510391 -0.5 1 1 1 +v -0.5875 1.17093 -0.5 1 1 1 +v -0.5875 1.234608 -0.5263763 1 1 1 +v -0.5875 1.260985 -0.5900544 1 1 1 +v -0.5875 1.260985 -0.9099456 1 1 1 +v -0.5875 1.234608 -0.9736237 1 1 1 +v -0.5875 1.17093 -1 1 1 1 +v 0.1625 0.2594994 -0.15 1 1 1 +v 0.1625 0.2594994 -0.3 1 1 1 +v -0.3375 0.2594994 -0.15 1 1 1 +v 0.1125 0.2594994 -0.35 1 1 1 +v -0.2875 0.2594994 -0.35 1 1 1 +v -0.3375 0.2594994 -0.3 1 1 1 +v 0.3125 0.3594994 -0.15 1 1 1 +v 0.2125 0.1594994 -0.15 1 1 1 +v 0.3125 0.3594994 0.15 1 1 1 +v 0.2125 0.1594994 0.15 1 1 1 +v -0.3375 0.3594994 -0.15 1 1 1 +v -0.4875 0.3594994 -0.15 1 1 1 +v -0.3875 0.1594994 -0.15 1 1 1 +v 0.1625 0.3594994 -0.15 1 1 1 +v -0.3375 0.2594994 0.15 1 1 1 +v -0.3375 0.3594994 0.15 1 1 1 +v -0.3375 0.2594994 0.3 1 1 1 +v -0.3375 0.3594994 0.3 1 1 1 +v 0.1625 0.2594994 0.3 1 1 1 +v 0.1625 0.2594994 0.15 1 1 1 +v 0.1125 0.2594994 0.35 1 1 1 +v -0.2875 0.2594994 0.35 1 1 1 +v -0.3375 0.3594994 -0.3 1 1 1 +v -0.2875 0.3594994 0.35 1 1 1 +v 0.1125 0.3594994 -0.35 1 1 1 +v 0.1625 0.3594994 -0.3 1 1 1 +v -0.3875 0.1594994 0.15 1 1 1 +v -0.4875 0.3594994 0.15 1 1 1 +v 0.1625 0.3594994 0.15 1 1 1 +v 0.1625 0.3594994 0.3 1 1 1 +v -0.2875 0.3594994 -0.35 1 1 1 +v 0.1125 0.3594994 0.35 1 1 1 +v 0.287295 0.3094994 1.3 1 1 1 +v 0.2605534 0.2449394 1.3 1 1 1 +v 0.1959935 0.2181978 1.3 1 1 1 +v 0.1314336 0.2449394 1.3 1 1 1 +v 0.104692 0.3094994 1.3 1 1 1 +v 0.2605534 0.3740593 1.3 1 1 1 +v 0.1314336 0.3740593 1.3 1 1 1 +v 0.1959935 0.4008009 1.3 1 1 1 +v -0.3709935 0.2181978 1.3 1 1 1 +v -0.4355535 0.2449394 1.3 1 1 1 +v -0.3064336 0.2449394 1.3 1 1 1 +v -0.279692 0.3094994 1.3 1 1 1 +v -0.4622951 0.3094994 1.3 1 1 1 +v -0.3064336 0.3740593 1.3 1 1 1 +v -0.4355535 0.3740593 1.3 1 1 1 +v -0.3709935 0.4008009 1.3 1 1 1 +v 0.3191987 0.4094994 0.9633973 1 1 1 +v 0.3191987 0.2094994 0.9633973 1 1 1 +v 0.3908494 0.4094994 1.0875 1 1 1 +v 0.3908494 0.2094994 1.0875 1 1 1 +v 0.1959936 0.2094994 1.2 1 1 1 +v -0.3709936 0.2094994 1.2 1 1 1 +v 0.1959936 0.4094994 1.2 1 1 1 +v -0.3709936 0.4094994 1.2 1 1 1 +v 0.1691987 0.2094994 1.05 1 1 1 +v -0.3441987 0.2094994 1.05 1 1 1 +v -0.4941987 0.2094994 0.9633973 1 1 1 +v -0.5658494 0.2094994 1.0875 1 1 1 +v -0.3441987 0.4094994 1.05 1 1 1 +v -0.4941987 0.4094994 0.9633973 1 1 1 +v -0.5658494 0.4094994 1.0875 1 1 1 +v 0.1691987 0.4094994 1.05 1 1 1 +v -0.1582107 0.1887887 -1.2 1 1 1 +v -0.0875 0.1594994 -1.2 1 1 1 +v -0.1461899 0.2008095 -1.3 1 1 1 +v -0.0875 0.1764994 -1.3 1 1 1 +v -0.1582107 0.33021 -1.2 1 1 1 +v -0.1461899 0.3181892 -1.3 1 1 1 +v -0.0875 0.3594994 -1.2 1 1 1 +v -0.0875 0.3424994 -1.3 1 1 1 +v -0.01678932 0.33021 -1.2 1 1 1 +v -0.02881014 0.3181892 -1.3 1 1 1 +v 0.0125 0.2594994 -1.2 1 1 1 +v -0.004499994 0.2594994 -1.3 1 1 1 +v -0.02881014 0.2008095 -1.3 1 1 1 +v -0.1705 0.2594994 -1.3 1 1 1 +v -0.01678932 0.1887887 -1.2 1 1 1 +v -0.1875 0.2594994 -1.2 1 1 1 +v -0.4622951 0.2594994 -1.3 1 1 1 +v -0.4355535 0.1949394 -1.3 1 1 1 +v -0.3709935 0.1681978 -1.3 1 1 1 +v -0.3064336 0.1949394 -1.3 1 1 1 +v -0.279692 0.2594994 -1.3 1 1 1 +v -0.4355535 0.3240593 -1.3 1 1 1 +v -0.3064336 0.3240593 -1.3 1 1 1 +v -0.3709935 0.3508009 -1.3 1 1 1 +v 0.1959935 0.1681978 -1.3 1 1 1 +v 0.2605534 0.1949394 -1.3 1 1 1 +v 0.1314336 0.1949394 -1.3 1 1 1 +v 0.104692 0.2594994 -1.3 1 1 1 +v 0.287295 0.2594994 -1.3 1 1 1 +v 0.1314336 0.3240593 -1.3 1 1 1 +v 0.2605534 0.3240593 -1.3 1 1 1 +v 0.1959935 0.3508009 -1.3 1 1 1 +v -0.4941987 0.3594994 -0.9633974 1 1 1 +v -0.4941987 0.1594994 -0.9633974 1 1 1 +v -0.5658494 0.3594994 -1.0875 1 1 1 +v -0.5658494 0.1594994 -1.0875 1 1 1 +v -0.3709936 0.1594994 -1.2 1 1 1 +v 0.1959936 0.1594994 -1.2 1 1 1 +v -0.3709936 0.3594994 -1.2 1 1 1 +v 0.1959936 0.3594994 -1.2 1 1 1 +v -0.3441987 0.1594994 -1.05 1 1 1 +v 0.1691987 0.1594994 -1.05 1 1 1 +v 0.3191987 0.1594994 -0.9633974 1 1 1 +v 0.3908494 0.1594994 -1.0875 1 1 1 +v 0.1691987 0.3594994 -1.05 1 1 1 +v 0.3191987 0.3594994 -0.9633974 1 1 1 +v 0.3908494 0.3594994 -1.0875 1 1 1 +v -0.3441987 0.3594994 -1.05 1 1 1 + +vn 1 0 0 +vn -1 0 0 +vn 0 0.8944272 0.4472136 +vn 0 0 1 +vn 0 -0.9701425 0.2425356 +vn -0.7071068 0.6324555 -0.3162278 +vn 0.7071068 0.6324555 -0.3162278 +vn -0.7071068 -0.6324555 0.3162278 +vn 0.7071068 -0.6324555 0.3162278 +vn 0 0.4472136 0.8944272 +vn 0 0 -1 +vn 0.9818057 -0.1898884 0 +vn 0.7146441 -0.6994882 0 +vn 0.3926682 -0.9196803 0 +vn 0 -1 0 +vn -0.3926682 -0.9196803 0 +vn -0.7146441 -0.6994882 0 +vn -0.9818057 -0.1898884 0 +vn 0 1 0 +vn 1.192093E-07 0 -1 +vn 0.9807854 0.1950903 1.169187E-07 +vn 0.7071068 0.7071068 8.42937E-08 +vn 0.1950904 -0.9807853 2.325658E-08 +vn 0.1950904 0.9807853 2.325658E-08 +vn 0.9807854 -0.1950903 1.169187E-07 +vn -1.192093E-07 0 1 +vn -1 0 -1.192093E-07 +vn 0.7071068 -0.7071068 8.42937E-08 +vn 1 0 1.192093E-07 +vn 0.9870876 0 0.1601824 +vn 0.9870876 0 -0.1601821 +vn 0.1601824 0 -0.9870876 +vn 0.1601821 0 0.9870876 +vn 0.7071069 0 -0.7071068 +vn 0.7071068 0 0.7071069 +vn -1.192093E-07 0 -1 +vn -0.9807854 0.1950903 1.169187E-07 +vn -0.7071068 0.7071068 8.42937E-08 +vn -0.1950904 -0.9807853 2.325658E-08 +vn -0.1950904 0.9807853 2.325658E-08 +vn -0.9807854 -0.1950903 1.169187E-07 +vn 1.192093E-07 0 1 +vn 1 0 -1.192093E-07 +vn -0.7071068 -0.7071068 8.42937E-08 +vn -0.9870876 0 0.1601824 +vn -0.9870876 0 -0.1601821 +vn -0.1601824 0 -0.9870876 +vn -0.1601821 0 0.9870876 +vn -0.7071069 0 -0.7071068 +vn -0.7071068 0 0.7071069 +vn -1 0 1.192093E-07 +vn 0 0.9117239 -0.4108036 +vn -0.6446861 0.6446861 -0.4108036 +vn 0.9117239 0 -0.4108036 +vn 0.6446861 -0.6446861 -0.4108036 +vn 0.6446861 0.6446861 -0.4108036 +vn -0.9117239 0 -0.4108036 +vn 0 -0.9117239 -0.4108036 +vn -0.6446861 -0.6446861 -0.4108036 +vn 6.777402E-14 0.9117239 0.4108036 +vn 0.6446861 0.6446861 0.4108036 +vn -0.9117239 0 0.4108036 +vn -0.6446861 -0.6446861 0.4108036 +vn -0.6446861 0.6446861 0.4108036 +vn 0.9117239 0 0.4108036 +vn 6.777402E-14 -0.9117239 0.4108036 +vn 0.6446861 -0.6446861 0.4108036 +vn -0.9307197 0.2586125 0.2586125 +vn -0.6833401 0.5162589 0.5162589 +vn -0.9274713 0.08590329 0.3638922 +vn -0.6868126 0.1669923 0.7073909 +vn -0.4651911 -0.5447692 0.6977276 +vn -0.6950661 -0.442448 0.5666769 +vn -0.3916072 0.2114031 0.895518 +vn 0.9307197 0.2586125 0.2586125 +vn 0.9274713 0.08590329 0.3638922 +vn 0.6833401 0.5162589 0.5162589 +vn 0.6868126 0.1669923 0.7073909 +vn 0.4651911 -0.5447692 0.6977276 +vn 0.3916072 0.2114031 0.895518 +vn 0.6950661 -0.442448 0.5666769 +vn 0.6417322 0.6859621 0.342981 +vn 0.9238795 0.3422825 0.1711412 +vn -0.9506181 -0.1910011 0.2446297 +vn 0.9506181 -0.1910011 0.2446297 +vn -0.9238795 0.3422825 0.1711412 +vn -0.6417322 0.6859621 0.342981 +vn -0.4001414 0.6480304 0.6480304 +vn -0.3826834 0.8263429 0.4131715 +vn 0.3826834 0.8263429 0.4131715 +vn 0.4001414 0.6480304 0.6480304 +vn 0.6750739 -0.7157227 0.1789307 +vn 0.3826835 -0.8962948 0.2240737 +vn -0.9238795 -0.3712575 0.09281436 +vn -0.6750739 -0.7157227 0.1789307 +vn -0.3826835 -0.8962948 0.2240737 +vn 0.9238795 -0.3712575 0.09281436 +vn -0.937714 0.3474079 0 +vn -0.7344423 0.6786711 0 +vn -0.4202296 0.9074178 0 +vn 0.7344423 0.6786711 0 +vn 0.4202296 0.9074178 0 +vn 0.937714 0.3474079 0 +vn -4.561942E-08 0.9238795 0.3826835 +vn -1.10135E-07 0.3826834 0.9238796 +vn 4.561942E-08 0.9238795 -0.3826835 +vn 1.10135E-07 0.3826834 -0.9238796 +vn -4.561942E-08 -0.9238795 0.3826835 +vn -1.10135E-07 -0.3826834 0.9238796 +vn 8.42937E-08 -0.7071068 -0.7071068 +vn 1.169187E-07 -0.1950903 -0.9807854 +vn 2.325658E-08 -0.9807853 -0.1950904 +vn -2.325658E-08 -0.9807853 0.1950904 +vn -8.42937E-08 -0.7071068 0.7071068 +vn -1.169187E-07 -0.1950903 0.9807854 +vn -1.169187E-07 0.1950903 0.9807854 +vn -8.42937E-08 0.7071068 0.7071068 +vn -2.325658E-08 0.9807853 0.1950904 +vn 2.325658E-08 0.9807853 -0.1950904 +vn 8.42937E-08 0.7071068 -0.7071068 +vn 1.169187E-07 0.1950903 -0.9807854 +vn 4.561942E-08 -0.9238795 -0.3826835 +vn 1.10135E-07 -0.3826834 -0.9238796 +vn 0.8944272 0.4472136 0 +vn 0.5862389 0.8101382 0 +vn 0 0.4472136 -0.8944272 +vn -0.8944272 0.4472136 0 +vn -0.5862389 0.8101382 0 +vn 4.561942E-08 0.9238795 0.3826835 +vn 1.10135E-07 0.3826834 0.9238796 +vn -4.561942E-08 0.9238795 -0.3826835 +vn -1.10135E-07 0.3826834 -0.9238796 +vn 4.561942E-08 -0.9238795 0.3826835 +vn 1.10135E-07 -0.3826834 0.9238796 +vn -8.42937E-08 -0.7071068 -0.7071068 +vn -1.169187E-07 -0.1950903 -0.9807854 +vn -2.325658E-08 -0.9807853 -0.1950904 +vn 2.325658E-08 -0.9807853 0.1950904 +vn 8.42937E-08 -0.7071068 0.7071068 +vn 1.169187E-07 -0.1950903 0.9807854 +vn 1.169187E-07 0.1950903 0.9807854 +vn 8.42937E-08 0.7071068 0.7071068 +vn 2.325658E-08 0.9807853 0.1950904 +vn -2.325658E-08 0.9807853 -0.1950904 +vn -8.42937E-08 0.7071068 -0.7071068 +vn -1.169187E-07 0.1950903 -0.9807854 +vn -4.561942E-08 -0.9238795 -0.3826835 +vn -1.10135E-07 -0.3826834 -0.9238796 +vn 0.8944272 -0.4472136 0 +vn 0.5257311 -0.8506508 0 +vn -0.9238795 0 0.3826834 +vn -0.9238795 0 -0.3826834 +vn -0.3826834 0 0.9238795 +vn 0.3826834 0 -0.9238795 +vn 0.9238795 0 -0.3826834 +vn -0.5257311 -0.8506508 0 +vn -0.8944272 -0.4472136 0 +vn 0.9238795 0 0.3826834 +vn -0.3826834 0 -0.9238795 +vn 0.3826834 0 0.9238795 +vn 0.7071068 -0.7071068 0 +vn -0.7071068 0.7071068 0 +vn -0.7071068 -0.7071068 0 +vn 0.7071068 0.7071068 0 +vn 0.8660254 0 -0.5 +vn 0.258819 0 0.9659258 +vn -0.258819 0 0.9659258 +vn 0.5 0 0.8660254 +vn 0.258819 0 -0.9659258 +vn 0.5 0 -0.8660254 +vn -0.5 0 0.8660254 +vn -0.8660254 0 -0.5 +vn -0.258819 0 -0.9659258 +vn -0.5 0 -0.8660254 +vn -0.6971054 -0.6971054 -0.1675955 +vn -2.764976E-14 -0.9858559 -0.1675955 +vn -0.6971054 0.6971054 -0.1675955 +vn -2.764976E-14 0.9858559 -0.1675955 +vn 0.6971054 0.6971054 -0.1675955 +vn 0.9858559 0 -0.1675955 +vn -1.649791E-13 0 -1 +vn 0.6971054 -0.6971054 -0.1675955 +vn -0.9858559 0 -0.1675955 +vn -1 0 1.649791E-13 +vn -0.7071068 -0.7071068 1.166579E-13 +vn 0.7071068 0.7071068 -1.166579E-13 +vn 1 0 -1.649791E-13 +vn 0.7071068 -0.7071068 -1.166579E-13 +vn -0.7071068 0.7071068 1.166579E-13 +vn -0.8660254 0 0.5 +vn 0.8660254 0 0.5 + +vt 0.96875 0.204886 +vt 0.96875 0.04354421 +vt 0.96875 0.1936001 +vt 0.96875 0.0570371 +vt 0.96875 0.1308004 +vt 0.96875 0.225 +vt 0.96875 0.2070095 +vt 0.96875 0.04299053 +vt 0.96875 0.1350474 +vt 0.96875 0.025 +vt 0.96875 0.143093 +vt 0.96875 0.1909183 +vt 0.96875 0.1989639 +vt 0.96875 0.2191087 +vt 0.96875 0.1890189 +vt 0.96875 0.06098105 +vt 0.96875 0.03043147 +vt 0.96875 0.04582861 +vt 0.96875 0.2041714 +vt 0.96875 0.2188994 +vt 0.96875 0.03110056 +vt 0.96875 0.05357143 +vt 0.96875 0.05641303 +vt 0.96875 0.193587 +vt 0.96875 0.1964286 +vt 0.96875 0.1957107 +vt 0.96875 0.1818182 +vt 0.96875 0.1651765 +vt 0.96875 0.125 +vt 0.96875 0.08482347 +vt 0.96875 0.05428932 +vt 0.96875 0.06818181 +vt 0.34375 0.1936001 +vt 0.34375 0.203082 +vt 0.34375 0.1308004 +vt 0.34375 0.1338035 +vt 0.34375 0.04299053 +vt 0.34375 0.04710467 +vt 0.34375 0.1350474 +vt 0.34375 0.2191087 +vt 0.34375 0.204886 +vt 0.34375 0.0570371 +vt 0.34375 0.2070095 +vt 0.34375 0.225 +vt 0.34375 0.03043147 +vt 0.34375 0.025 +vt 0.34375 0.04354421 +vt 0.09375 0.1350474 +vt 0.09375 0.1909183 +vt 0.71875 0.05357143 +vt 0.71875 0.05641303 +vt 0.71875 0.1964286 +vt 0.71875 0.193587 +vt 0.71875 0.025 +vt 0.71875 0.03253609 +vt 0.71875 0.05072982 +vt 0.71875 0.1992702 +vt 0.71875 0.2174639 +vt 0.71875 0.225 +vt 0.71875 0.125 +vt 0.71875 0.05428932 +vt 0.71875 0.1957107 +vt 0.71875 0.06631013 +vt 0.71875 0.042 +vt 0.71875 0.1836898 +vt 0.71875 0.208 +vt 0.84375 0.275 +vt 0.84375 0.475 + +usemtl colormap + +f 3/3/1 2/2/1 1/1/1 +f 2/2/1 3/3/1 4/4/1 +f 4/4/1 3/3/1 5/5/1 +f 8/4/2 7/1/2 6/2/2 +f 7/1/2 8/4/2 9/3/2 +f 9/3/2 8/4/2 10/5/2 +f 13/6/3 12/7/3 11/6/3 +f 12/7/3 13/6/3 14/7/3 +f 17/8/4 16/9/4 15/8/4 +f 16/9/4 17/8/4 18/9/4 +f 17/8/5 20/10/5 19/10/5 +f 20/10/5 17/8/5 15/8/5 +f 23/9/7 22/11/6 21/9/6 +f 22/11/6 23/9/7 24/11/7 +f 21/9/6 26/13/8 25/12/8 +f 26/13/8 21/9/6 22/11/6 +f 27/13/9 25/12/8 26/13/8 +f 25/12/8 27/13/9 28/12/9 +f 27/13/9 23/9/7 28/12/9 +f 23/9/7 27/13/9 24/11/7 +f 31/13/9 30/12/8 29/13/8 +f 30/12/8 31/13/9 32/12/9 +f 31/13/9 33/9/7 32/12/9 +f 33/9/7 31/13/9 34/11/7 +f 33/9/7 36/11/6 35/9/6 +f 36/11/6 33/9/7 34/11/7 +f 35/9/6 29/13/8 30/12/8 +f 29/13/8 35/9/6 36/11/6 +f 16/9/10 24/11/10 14/7/10 +f 24/11/10 16/9/10 18/9/10 +f 14/7/10 24/11/10 27/13/10 +f 14/7/10 27/13/10 26/13/10 +f 26/13/10 12/7/10 14/7/10 +f 18/9/10 34/11/10 24/11/10 +f 24/11/10 34/11/10 22/11/10 +f 34/11/10 26/13/10 22/11/10 +f 34/11/10 18/9/10 36/11/10 +f 36/11/10 18/9/10 12/7/10 +f 26/13/10 34/11/10 31/13/10 +f 31/13/10 12/7/10 26/13/10 +f 36/11/10 12/7/10 29/13/10 +f 29/13/10 12/7/10 31/13/10 +f 39/6/11 38/14/11 37/6/11 +f 40/14/11 38/14/11 39/6/11 +f 40/14/11 41/1/11 38/14/11 +f 42/1/11 41/1/11 40/14/11 +f 43/15/11 41/1/11 42/1/11 +f 44/15/11 41/1/11 43/15/11 +f 45/16/11 41/1/11 44/15/11 +f 42/1/11 46/16/11 43/15/11 +f 41/1/11 45/16/11 47/2/11 +f 46/16/11 47/2/11 45/16/11 +f 48/2/11 46/16/11 42/1/11 +f 48/2/11 47/2/11 46/16/11 +f 48/2/11 49/17/11 47/2/11 +f 50/17/11 49/17/11 48/2/11 +f 51/10/11 49/17/11 50/17/11 +f 49/17/11 51/10/11 52/10/11 +f 1/1/1 48/2/12 42/1/1 +f 48/2/12 1/1/1 2/2/12 +f 2/2/12 50/17/13 48/2/12 +f 50/17/13 2/2/12 53/17/13 +f 53/17/13 51/10/14 50/17/13 +f 51/10/14 53/17/13 19/10/14 +f 19/10/15 52/10/15 51/10/15 +f 52/10/15 19/10/15 20/10/15 +f 20/10/16 49/17/17 52/10/16 +f 49/17/17 20/10/16 54/17/17 +f 49/17/17 6/2/18 47/2/18 +f 6/2/18 49/17/17 54/17/17 +f 6/2/18 41/1/2 47/2/18 +f 41/1/2 6/2/18 7/1/2 +f 37/6/19 11/6/19 39/6/19 +f 11/6/19 37/6/19 13/6/19 +f 57/18/20 56/10/20 55/18/20 +f 56/10/20 57/18/20 58/10/20 +f 59/6/20 58/10/20 57/18/20 +f 59/6/20 57/18/20 60/19/20 +f 59/6/20 60/19/20 61/19/20 +f 59/6/20 61/19/20 62/6/20 +f 63/20/20 58/10/20 59/6/20 +f 63/20/20 64/21/20 58/10/20 +f 65/19/20 64/21/20 63/20/20 +f 64/21/20 65/19/20 66/18/20 +f 65/19/21 68/20/22 67/19/21 +f 68/20/22 65/19/21 63/20/22 +f 61/19/15 70/19/15 69/19/15 +f 70/19/15 61/19/15 60/19/15 +f 56/10/15 72/10/23 71/10/15 +f 72/10/23 56/10/15 58/10/23 +f 63/20/22 73/6/24 68/20/22 +f 73/6/24 63/20/22 59/6/24 +f 65/19/21 74/18/25 66/18/25 +f 74/18/25 65/19/21 67/19/21 +f 59/6/24 75/6/19 73/6/24 +f 75/6/19 59/6/24 62/6/19 +f 57/18/19 77/18/19 76/18/19 +f 77/18/19 57/18/19 55/18/19 +f 70/19/26 75/6/26 69/19/26 +f 75/6/26 70/19/26 73/6/26 +f 72/10/26 73/6/26 70/19/26 +f 72/10/26 70/19/26 76/18/26 +f 72/10/26 76/18/26 77/18/26 +f 72/10/26 77/18/26 71/10/26 +f 72/10/26 68/20/26 73/6/26 +f 78/21/26 68/20/26 72/10/26 +f 78/21/26 67/19/26 68/20/26 +f 67/19/26 78/21/26 74/18/26 +f 70/19/27 57/18/27 76/18/27 +f 57/18/27 70/19/27 60/19/27 +f 66/18/25 78/21/28 64/21/28 +f 78/21/28 66/18/25 74/18/25 +f 58/10/23 78/21/28 72/10/23 +f 78/21/28 58/10/23 64/21/28 +f 81/22/29 80/23/29 79/22/29 +f 80/23/29 81/22/29 82/23/29 +f 80/23/29 82/23/29 83/24/29 +f 80/23/29 83/24/29 84/24/29 +f 84/24/29 83/24/29 85/25/29 +f 84/24/29 85/25/29 86/25/29 +f 89/22/29 88/23/29 87/22/29 +f 88/23/29 89/22/29 90/23/29 +f 88/23/29 90/23/29 91/24/29 +f 88/23/29 91/24/29 92/24/29 +f 92/24/29 91/24/29 93/25/29 +f 92/24/29 93/25/29 94/25/29 +f 110/6/35 108/10/35 97/6/30 +f 95/10/30 97/6/30 108/10/35 +f 103/6/33 105/10/33 110/6/35 +f 108/10/35 110/6/35 105/10/33 +f 100/10/32 99/6/32 107/10/34 +f 109/6/34 107/10/34 99/6/32 +f 109/6/34 98/6/31 107/10/34 +f 96/10/31 107/10/34 98/6/31 +f 103/6/19 110/6/19 104/6/19 +f 110/6/19 97/6/19 104/6/19 +f 97/6/19 98/6/19 104/6/19 +f 98/6/19 109/6/19 104/6/19 +f 109/6/19 99/6/19 104/6/19 +f 101/6/19 104/6/19 99/6/19 +f 105/10/15 106/10/15 108/10/15 +f 108/10/15 106/10/15 95/10/15 +f 95/10/15 106/10/15 96/10/15 +f 96/10/15 106/10/15 107/10/15 +f 107/10/15 106/10/15 100/10/15 +f 102/10/15 100/10/15 106/10/15 +f 106/10/26 105/10/33 104/6/26 +f 103/6/33 104/6/26 105/10/33 +f 102/10/20 101/6/20 100/10/32 +f 99/6/32 100/10/32 101/6/20 +f 98/6/31 97/6/30 96/10/31 +f 95/10/30 96/10/31 97/6/30 +f 113/18/20 112/10/20 111/18/20 +f 112/10/20 113/18/20 114/10/20 +f 115/6/20 114/10/20 113/18/20 +f 115/6/20 113/18/20 116/19/20 +f 115/6/20 116/19/20 117/19/20 +f 115/6/20 117/19/20 118/6/20 +f 119/20/20 114/10/20 115/6/20 +f 119/20/20 120/21/20 114/10/20 +f 121/19/20 120/21/20 119/20/20 +f 120/21/20 121/19/20 122/18/20 +f 121/19/21 124/20/22 123/19/21 +f 124/20/22 121/19/21 119/20/22 +f 117/19/15 126/19/15 125/19/15 +f 126/19/15 117/19/15 116/19/15 +f 112/10/15 128/10/23 127/10/15 +f 128/10/23 112/10/15 114/10/23 +f 119/20/22 129/6/24 124/20/22 +f 129/6/24 119/20/22 115/6/24 +f 121/19/21 130/18/25 122/18/25 +f 130/18/25 121/19/21 123/19/21 +f 115/6/24 131/6/19 129/6/24 +f 131/6/19 115/6/24 118/6/19 +f 113/18/19 133/18/19 132/18/19 +f 133/18/19 113/18/19 111/18/19 +f 126/19/26 131/6/26 125/19/26 +f 131/6/26 126/19/26 129/6/26 +f 128/10/26 129/6/26 126/19/26 +f 128/10/26 126/19/26 132/18/26 +f 128/10/26 132/18/26 133/18/26 +f 128/10/26 133/18/26 127/10/26 +f 128/10/26 124/20/26 129/6/26 +f 134/21/26 124/20/26 128/10/26 +f 134/21/26 123/19/26 124/20/26 +f 123/19/26 134/21/26 130/18/26 +f 126/19/27 113/18/27 132/18/27 +f 113/18/27 126/19/27 116/19/27 +f 122/18/25 134/21/28 120/21/28 +f 134/21/28 122/18/25 130/18/25 +f 114/10/23 134/21/28 128/10/23 +f 134/21/28 114/10/23 120/21/28 +f 144/21/44 138/10/39 158/21/44 +f 152/10/39 158/21/44 138/10/39 +f 154/18/41 146/18/41 158/21/44 +f 144/21/44 158/21/44 146/18/41 +f 140/19/43 150/19/43 137/18/43 +f 156/18/43 137/18/43 150/19/43 +f 154/18/42 158/21/42 147/19/42 +f 148/20/42 147/19/42 158/21/42 +f 152/10/42 148/20/42 158/21/42 +f 153/6/42 148/20/42 152/10/42 +f 151/10/42 157/18/42 152/10/42 +f 157/18/42 156/18/42 152/10/42 +f 156/18/42 150/19/42 152/10/42 +f 150/19/42 153/6/42 152/10/42 +f 153/6/42 150/19/42 155/6/42 +f 149/19/42 155/6/42 150/19/42 +f 135/18/19 137/18/19 157/18/19 +f 156/18/19 157/18/19 137/18/19 +f 142/6/19 139/6/40 155/6/19 +f 153/6/40 155/6/19 139/6/40 +f 147/19/37 145/19/37 154/18/41 +f 146/18/41 154/18/41 145/19/37 +f 139/6/40 143/20/38 153/6/40 +f 148/20/38 153/6/40 143/20/38 +f 138/10/39 136/10/15 152/10/39 +f 151/10/15 152/10/39 136/10/15 +f 140/19/15 141/19/15 150/19/15 +f 149/19/15 150/19/15 141/19/15 +f 143/20/38 145/19/37 148/20/38 +f 147/19/37 148/20/38 145/19/37 +f 146/18/36 145/19/36 144/21/36 +f 143/20/36 144/21/36 145/19/36 +f 138/10/36 144/21/36 143/20/36 +f 139/6/36 138/10/36 143/20/36 +f 142/6/36 141/19/36 139/6/36 +f 141/19/36 140/19/36 139/6/36 +f 140/19/36 137/18/36 139/6/36 +f 137/18/36 138/10/36 139/6/36 +f 138/10/36 137/18/36 136/10/36 +f 135/18/36 136/10/36 137/18/36 +f 161/6/45 160/10/46 159/10/45 +f 160/10/46 161/6/45 162/6/46 +f 165/6/36 164/10/47 163/6/47 +f 164/10/47 165/6/36 166/10/36 +f 169/10/48 168/6/42 167/6/48 +f 168/6/42 169/10/48 170/10/42 +f 170/10/15 164/10/15 166/10/15 +f 164/10/15 170/10/15 171/10/15 +f 171/10/15 170/10/15 160/10/15 +f 160/10/15 170/10/15 159/10/15 +f 159/10/15 170/10/15 172/10/15 +f 172/10/15 170/10/15 169/10/15 +f 163/6/19 168/6/19 165/6/19 +f 168/6/19 163/6/19 173/6/19 +f 168/6/19 173/6/19 162/6/19 +f 168/6/19 162/6/19 161/6/19 +f 168/6/19 161/6/19 174/6/19 +f 168/6/19 174/6/19 167/6/19 +f 162/6/46 171/10/49 160/10/46 +f 171/10/49 162/6/46 173/6/49 +f 163/6/47 171/10/49 173/6/49 +f 171/10/49 163/6/47 164/10/47 +f 169/10/48 174/6/50 172/10/50 +f 174/6/50 169/10/48 167/6/48 +f 172/10/50 161/6/45 159/10/45 +f 161/6/45 172/10/50 174/6/50 +f 182/25/51 181/25/51 180/24/51 +f 181/25/51 179/24/51 180/24/51 +f 180/24/51 179/24/51 176/23/51 +f 179/24/51 178/23/51 176/23/51 +f 178/23/51 177/22/51 176/23/51 +f 175/22/51 176/23/51 177/22/51 +f 190/25/51 189/25/51 188/24/51 +f 189/25/51 187/24/51 188/24/51 +f 188/24/51 187/24/51 184/23/51 +f 187/24/51 186/23/51 184/23/51 +f 186/23/51 185/22/51 184/23/51 +f 183/22/51 184/23/51 185/22/51 +f 200/21/44 194/10/39 214/21/44 +f 208/10/39 214/21/44 194/10/39 +f 210/18/41 202/18/41 214/21/44 +f 200/21/44 214/21/44 202/18/41 +f 196/19/43 206/19/43 193/18/43 +f 212/18/43 193/18/43 206/19/43 +f 210/18/42 214/21/42 203/19/42 +f 204/20/42 203/19/42 214/21/42 +f 208/10/42 204/20/42 214/21/42 +f 209/6/42 204/20/42 208/10/42 +f 207/10/42 213/18/42 208/10/42 +f 213/18/42 212/18/42 208/10/42 +f 212/18/42 206/19/42 208/10/42 +f 206/19/42 209/6/42 208/10/42 +f 209/6/42 206/19/42 211/6/42 +f 205/19/42 211/6/42 206/19/42 +f 191/18/19 193/18/19 213/18/19 +f 212/18/19 213/18/19 193/18/19 +f 198/6/19 195/6/40 211/6/19 +f 209/6/40 211/6/19 195/6/40 +f 203/19/37 201/19/37 210/18/41 +f 202/18/41 210/18/41 201/19/37 +f 195/6/40 199/20/38 209/6/40 +f 204/20/38 209/6/40 199/20/38 +f 194/10/39 192/10/15 208/10/39 +f 207/10/15 208/10/39 192/10/15 +f 196/19/15 197/19/15 206/19/15 +f 205/19/15 206/19/15 197/19/15 +f 199/20/38 201/19/37 204/20/38 +f 203/19/37 204/20/38 201/19/37 +f 202/18/36 201/19/36 200/21/36 +f 199/20/36 200/21/36 201/19/36 +f 194/10/36 200/21/36 199/20/36 +f 195/6/36 194/10/36 199/20/36 +f 198/6/36 197/19/36 195/6/36 +f 197/19/36 196/19/36 195/6/36 +f 196/19/36 193/18/36 195/6/36 +f 193/18/36 194/10/36 195/6/36 +f 194/10/36 193/18/36 192/10/36 +f 191/18/36 192/10/36 193/18/36 +f 217/27/52 216/26/53 215/6/52 +f 216/26/53 217/27/52 218/28/53 +f 221/29/54 220/30/55 219/29/54 +f 220/30/55 221/29/54 222/31/55 +f 224/28/56 215/6/52 223/26/56 +f 215/6/52 224/28/56 217/27/52 +f 225/29/57 216/26/53 218/28/53 +f 216/26/53 225/29/57 226/29/57 +f 224/28/56 221/29/54 219/29/54 +f 221/29/54 224/28/56 223/26/56 +f 227/10/58 220/30/55 222/31/55 +f 220/30/55 227/10/58 228/32/58 +f 229/31/59 228/32/58 227/10/58 +f 228/32/58 229/31/59 230/30/59 +f 229/31/59 225/29/57 230/30/59 +f 225/29/57 229/31/59 226/29/57 +f 233/29/54 232/30/55 231/29/54 +f 232/30/55 233/29/54 234/31/55 +f 237/29/57 236/26/53 235/28/53 +f 236/26/53 237/29/57 238/29/57 +f 240/31/59 237/29/57 239/30/59 +f 237/29/57 240/31/59 238/29/57 +f 241/10/58 232/30/55 234/31/55 +f 232/30/55 241/10/58 242/32/58 +f 245/28/56 244/6/52 243/26/56 +f 244/6/52 245/28/56 246/27/52 +f 246/27/52 236/26/53 244/6/52 +f 236/26/53 246/27/52 235/28/53 +f 240/31/59 242/32/58 241/10/58 +f 242/32/58 240/31/59 239/30/59 +f 245/28/56 233/29/54 231/29/54 +f 233/29/54 245/28/56 243/26/56 +f 249/27/60 248/26/61 247/6/60 +f 248/26/61 249/27/60 250/28/61 +f 253/29/62 252/30/63 251/29/62 +f 252/30/63 253/29/62 254/31/63 +f 256/28/64 247/6/60 255/26/64 +f 247/6/60 256/28/64 249/27/60 +f 257/29/65 248/26/61 250/28/61 +f 248/26/61 257/29/65 258/29/65 +f 256/28/64 253/29/62 251/29/62 +f 253/29/62 256/28/64 255/26/64 +f 259/10/66 252/30/63 254/31/63 +f 252/30/63 259/10/66 260/32/66 +f 261/31/67 260/32/66 259/10/66 +f 260/32/66 261/31/67 262/30/67 +f 261/31/67 257/29/65 262/30/67 +f 257/29/65 261/31/67 258/29/65 +f 265/29/62 264/30/63 263/29/62 +f 264/30/63 265/29/62 266/31/63 +f 269/29/65 268/26/61 267/28/61 +f 268/26/61 269/29/65 270/29/65 +f 272/31/67 269/29/65 271/30/67 +f 269/29/65 272/31/67 270/29/65 +f 273/10/66 264/30/63 266/31/63 +f 264/30/63 273/10/66 274/32/66 +f 277/28/64 276/6/60 275/26/64 +f 276/6/60 277/28/64 278/27/60 +f 278/27/60 268/26/61 276/6/60 +f 268/26/61 278/27/60 267/28/61 +f 272/31/67 274/32/66 273/10/66 +f 274/32/66 272/31/67 271/30/67 +f 277/28/64 265/29/62 263/29/62 +f 265/29/62 277/28/64 275/26/64 +f 10/35/70 279/34/69 9/33/68 +f 279/34/69 10/35/70 280/36/71 +f 16/39/74 281/38/73 15/37/72 +f 281/38/73 16/39/74 280/36/71 +f 282/34/77 5/35/76 3/33/75 +f 5/35/76 282/34/77 283/36/78 +f 284/38/81 18/39/80 17/37/79 +f 18/39/80 284/38/81 283/36/78 +f 282/34/77 1/41/83 285/40/82 +f 1/41/83 282/34/77 3/33/75 +f 281/38/73 10/35/70 8/42/84 +f 10/35/70 281/38/73 280/36/71 +f 283/36/78 4/42/85 5/35/76 +f 4/42/85 283/36/78 284/38/81 +f 9/33/68 286/40/87 7/41/86 +f 286/40/87 9/33/68 279/34/69 +f 16/39/74 279/34/69 280/36/71 +f 279/34/69 16/39/74 14/43/88 +f 286/40/87 14/43/88 13/44/89 +f 14/43/88 286/40/87 279/34/69 +f 11/44/90 282/34/77 285/40/82 +f 282/34/77 11/44/90 12/43/91 +f 282/34/77 18/39/80 283/36/78 +f 18/39/80 282/34/77 12/43/91 +f 284/38/81 19/46/93 53/45/92 +f 19/46/93 284/38/81 17/37/79 +f 54/45/95 8/42/84 6/47/94 +f 8/42/84 54/45/95 281/38/73 +f 15/37/72 54/45/95 20/46/96 +f 54/45/95 15/37/72 281/38/73 +f 4/42/85 53/45/92 2/47/97 +f 53/45/92 4/42/85 284/38/81 +f 7/41/98 38/40/99 41/41/98 +f 38/40/99 7/41/98 286/40/99 +f 38/40/99 13/44/100 37/44/100 +f 13/44/100 38/40/99 286/40/99 +f 39/44/102 285/40/101 40/40/101 +f 285/40/101 39/44/102 11/44/102 +f 285/40/101 42/41/103 40/40/101 +f 42/41/103 285/40/101 1/41/103 +f 21/48/10 28/49/10 23/48/10 +f 28/49/10 21/48/10 25/49/10 +f 35/48/10 32/49/10 33/48/10 +f 32/49/10 35/48/10 30/49/10 +f 287/50/104 82/51/105 81/50/104 +f 82/51/105 287/50/104 288/51/105 +f 289/50/106 81/50/104 79/50/106 +f 81/50/104 289/50/106 287/50/104 +f 79/50/106 290/51/107 289/50/106 +f 290/51/107 79/50/106 80/51/107 +f 83/53/109 291/52/108 85/52/108 +f 291/52/108 83/53/109 292/53/109 +f 83/53/109 288/51/105 292/53/109 +f 288/51/105 83/53/109 82/51/105 +f 295/54/29 294/55/29 293/54/29 +f 294/55/29 295/54/29 296/55/29 +f 294/55/29 296/55/29 297/56/29 +f 297/56/29 296/55/29 298/56/29 +f 297/56/29 298/56/29 287/50/29 +f 287/50/29 298/56/29 288/51/29 +f 297/56/29 287/50/29 289/50/29 +f 290/51/29 297/56/29 289/50/29 +f 288/51/29 298/56/29 299/57/29 +f 297/56/29 290/51/29 300/57/29 +f 288/51/29 299/57/29 292/53/29 +f 300/57/29 290/51/29 301/53/29 +f 292/53/29 299/57/29 291/52/29 +f 300/57/29 301/53/29 302/52/29 +f 291/52/29 299/57/29 302/52/29 +f 302/52/29 299/57/29 300/57/29 +f 300/57/29 299/57/29 303/58/29 +f 303/58/29 299/57/29 304/58/29 +f 303/58/29 304/58/29 305/59/29 +f 303/58/29 305/59/29 306/59/29 +f 307/55/110 298/56/111 296/55/110 +f 298/56/111 307/55/110 308/56/111 +f 307/55/110 295/54/112 309/54/112 +f 295/54/112 307/55/110 296/55/110 +f 309/54/112 293/54/113 310/54/113 +f 293/54/113 309/54/112 295/54/112 +f 310/54/113 294/55/114 311/55/114 +f 294/55/114 310/54/113 293/54/113 +f 312/56/115 294/55/114 297/56/115 +f 294/55/114 312/56/115 311/55/114 +f 313/57/116 297/56/115 300/57/116 +f 297/56/115 313/57/116 312/56/115 +f 314/58/117 300/57/116 303/58/117 +f 300/57/116 314/58/117 313/57/116 +f 306/59/118 314/58/117 303/58/117 +f 314/58/117 306/59/118 315/59/118 +f 305/59/119 315/59/118 306/59/118 +f 315/59/118 305/59/119 316/59/119 +f 304/58/120 316/59/119 305/59/119 +f 316/59/119 304/58/120 317/58/120 +f 318/57/121 304/58/120 299/57/121 +f 304/58/120 318/57/121 317/58/120 +f 298/56/111 318/57/121 299/57/121 +f 318/57/121 298/56/111 308/56/111 +f 85/52/108 302/52/122 86/52/122 +f 302/52/122 85/52/108 291/52/108 +f 84/53/123 302/52/122 301/53/123 +f 302/52/122 84/53/123 86/52/122 +f 290/51/107 84/53/123 301/53/123 +f 84/53/123 290/51/107 80/51/107 +f 319/50/104 90/51/105 89/50/104 +f 90/51/105 319/50/104 320/51/105 +f 321/50/106 89/50/104 87/50/106 +f 89/50/104 321/50/106 319/50/104 +f 87/50/106 322/51/107 321/50/106 +f 322/51/107 87/50/106 88/51/107 +f 91/53/109 323/52/108 93/52/108 +f 323/52/108 91/53/109 324/53/109 +f 91/53/109 320/51/105 324/53/109 +f 320/51/105 91/53/109 90/51/105 +f 327/54/29 326/55/29 325/54/29 +f 326/55/29 327/54/29 328/55/29 +f 326/55/29 328/55/29 329/56/29 +f 329/56/29 328/55/29 330/56/29 +f 329/56/29 330/56/29 319/50/29 +f 319/50/29 330/56/29 320/51/29 +f 329/56/29 319/50/29 321/50/29 +f 322/51/29 329/56/29 321/50/29 +f 320/51/29 330/56/29 331/57/29 +f 329/56/29 322/51/29 332/57/29 +f 320/51/29 331/57/29 324/53/29 +f 332/57/29 322/51/29 333/53/29 +f 324/53/29 331/57/29 323/52/29 +f 332/57/29 333/53/29 334/52/29 +f 323/52/29 331/57/29 334/52/29 +f 334/52/29 331/57/29 332/57/29 +f 332/57/29 331/57/29 335/58/29 +f 335/58/29 331/57/29 336/58/29 +f 335/58/29 336/58/29 337/59/29 +f 335/58/29 337/59/29 338/59/29 +f 339/55/110 330/56/111 328/55/110 +f 330/56/111 339/55/110 340/56/111 +f 339/55/110 327/54/112 341/54/112 +f 327/54/112 339/55/110 328/55/110 +f 341/54/112 325/54/113 342/54/113 +f 325/54/113 341/54/112 327/54/112 +f 342/54/113 326/55/114 343/55/114 +f 326/55/114 342/54/113 325/54/113 +f 344/56/115 326/55/114 329/56/115 +f 326/55/114 344/56/115 343/55/114 +f 345/57/116 329/56/115 332/57/116 +f 329/56/115 345/57/116 344/56/115 +f 346/58/117 332/57/116 335/58/117 +f 332/57/116 346/58/117 345/57/116 +f 338/59/118 346/58/117 335/58/117 +f 346/58/117 338/59/118 347/59/118 +f 337/59/119 347/59/118 338/59/118 +f 347/59/118 337/59/119 348/59/119 +f 336/58/120 348/59/119 337/59/119 +f 348/59/119 336/58/120 349/58/120 +f 350/57/121 336/58/120 331/57/121 +f 336/58/120 350/57/121 349/58/120 +f 330/56/111 350/57/121 331/57/121 +f 350/57/121 330/56/111 340/56/111 +f 93/52/108 334/52/122 94/52/122 +f 334/52/122 93/52/108 323/52/108 +f 92/53/123 334/52/122 333/53/123 +f 334/52/122 92/53/123 94/52/122 +f 322/51/107 92/53/123 333/53/123 +f 92/53/123 322/51/107 88/51/107 +f 353/59/19 352/59/19 351/59/19 +f 352/59/19 353/59/19 354/59/19 +f 357/54/15 356/54/15 355/54/15 +f 356/54/15 357/54/15 358/54/15 +f 352/59/1 355/54/1 351/59/1 +f 355/54/1 352/59/1 357/54/1 +f 356/54/2 354/59/2 353/59/2 +f 354/59/2 356/54/2 358/54/2 +f 361/54/2 360/59/2 359/59/2 +f 360/59/2 361/54/2 362/54/2 +f 359/59/19 364/59/19 363/59/19 +f 364/59/19 359/59/19 360/59/19 +f 364/59/1 365/54/1 363/59/1 +f 365/54/1 364/59/1 366/54/1 +f 366/54/15 361/54/15 365/54/15 +f 361/54/15 366/54/15 362/54/15 +f 369/59/125 368/54/124 367/54/124 +f 368/54/124 369/59/125 370/59/125 +f 371/54/126 369/59/126 367/54/126 +f 369/59/126 371/54/126 372/59/126 +f 370/59/10 373/54/10 368/54/10 +f 373/54/10 370/59/10 374/59/10 +f 373/54/127 372/59/128 371/54/127 +f 372/59/128 373/54/127 374/59/128 +f 369/59/125 374/59/128 370/59/125 +f 374/59/128 369/59/125 372/59/128 +f 377/59/11 376/54/11 375/54/11 +f 376/54/11 377/59/11 378/59/11 +f 381/59/125 380/54/124 379/54/124 +f 380/54/124 381/59/125 382/59/125 +f 383/54/126 381/59/126 379/54/126 +f 381/59/126 383/54/126 384/59/126 +f 382/59/10 385/54/10 380/54/10 +f 385/54/10 382/59/10 386/59/10 +f 385/54/127 384/59/128 383/54/127 +f 384/59/128 385/54/127 386/59/128 +f 381/59/125 386/59/128 382/59/125 +f 386/59/128 381/59/125 384/59/128 +f 176/51/132 390/51/132 180/53/148 +f 401/53/148 180/53/148 390/51/132 +f 182/52/147 180/53/148 402/52/147 +f 401/53/148 402/52/147 180/53/148 +f 391/52/133 181/52/133 402/52/147 +f 182/52/147 402/52/147 181/52/133 +f 408/56/136 398/56/136 418/57/146 +f 399/57/146 418/57/146 398/56/136 +f 417/58/145 418/57/146 404/58/145 +f 399/57/146 404/58/145 418/57/146 +f 417/58/145 404/58/145 416/59/144 +f 405/59/144 416/59/144 404/58/145 +f 416/59/144 405/59/144 415/59/143 +f 406/59/143 415/59/143 405/59/144 +f 415/59/143 406/59/143 414/58/142 +f 403/58/142 414/58/142 406/59/143 +f 413/57/141 414/58/142 400/57/141 +f 403/58/142 400/57/141 414/58/142 +f 412/56/140 413/57/141 397/56/140 +f 400/57/141 397/56/140 413/57/141 +f 411/55/139 412/56/140 394/55/139 +f 397/56/140 394/55/139 412/56/140 +f 393/54/138 410/54/138 394/55/139 +f 411/55/139 394/55/139 410/54/138 +f 395/54/137 409/54/137 393/54/138 +f 410/54/138 393/54/138 409/54/137 +f 396/55/135 407/55/135 395/54/137 +f 409/54/137 395/54/137 407/55/135 +f 408/56/136 407/55/135 398/56/136 +f 396/55/135 398/56/136 407/55/135 +f 406/59/51 405/59/51 403/58/51 +f 405/59/51 404/58/51 403/58/51 +f 404/58/51 399/57/51 403/58/51 +f 403/58/51 399/57/51 400/57/51 +f 400/57/51 399/57/51 402/52/51 +f 402/52/51 399/57/51 391/52/51 +f 402/52/51 401/53/51 400/57/51 +f 391/52/51 399/57/51 392/53/51 +f 401/53/51 390/51/51 400/57/51 +f 392/53/51 399/57/51 388/51/51 +f 400/57/51 390/51/51 397/56/51 +f 399/57/51 398/56/51 388/51/51 +f 389/50/51 397/56/51 390/51/51 +f 389/50/51 387/50/51 397/56/51 +f 388/51/51 398/56/51 387/50/51 +f 387/50/51 398/56/51 397/56/51 +f 398/56/51 396/55/51 397/56/51 +f 397/56/51 396/55/51 394/55/51 +f 396/55/51 395/54/51 394/55/51 +f 393/54/51 394/55/51 395/54/51 +f 178/51/130 179/53/134 388/51/130 +f 392/53/134 388/51/130 179/53/134 +f 392/53/134 179/53/134 391/52/133 +f 181/52/133 391/52/133 179/53/134 +f 176/51/132 175/50/131 390/51/132 +f 389/50/131 390/51/132 175/50/131 +f 387/50/129 389/50/131 177/50/129 +f 175/50/131 177/50/129 389/50/131 +f 388/51/130 387/50/129 178/51/130 +f 177/50/129 178/51/130 387/50/129 +f 184/51/132 422/51/132 188/53/148 +f 433/53/148 188/53/148 422/51/132 +f 190/52/147 188/53/148 434/52/147 +f 433/53/148 434/52/147 188/53/148 +f 423/52/133 189/52/133 434/52/147 +f 190/52/147 434/52/147 189/52/133 +f 440/56/136 430/56/136 450/57/146 +f 431/57/146 450/57/146 430/56/136 +f 449/58/145 450/57/146 436/58/145 +f 431/57/146 436/58/145 450/57/146 +f 449/58/145 436/58/145 448/59/144 +f 437/59/144 448/59/144 436/58/145 +f 448/59/144 437/59/144 447/59/143 +f 438/59/143 447/59/143 437/59/144 +f 447/59/143 438/59/143 446/58/142 +f 435/58/142 446/58/142 438/59/143 +f 445/57/141 446/58/142 432/57/141 +f 435/58/142 432/57/141 446/58/142 +f 444/56/140 445/57/141 429/56/140 +f 432/57/141 429/56/140 445/57/141 +f 443/55/139 444/56/140 426/55/139 +f 429/56/140 426/55/139 444/56/140 +f 425/54/138 442/54/138 426/55/139 +f 443/55/139 426/55/139 442/54/138 +f 427/54/137 441/54/137 425/54/138 +f 442/54/138 425/54/138 441/54/137 +f 428/55/135 439/55/135 427/54/137 +f 441/54/137 427/54/137 439/55/135 +f 440/56/136 439/55/135 430/56/136 +f 428/55/135 430/56/136 439/55/135 +f 438/59/51 437/59/51 435/58/51 +f 437/59/51 436/58/51 435/58/51 +f 436/58/51 431/57/51 435/58/51 +f 435/58/51 431/57/51 432/57/51 +f 432/57/51 431/57/51 434/52/51 +f 434/52/51 431/57/51 423/52/51 +f 434/52/51 433/53/51 432/57/51 +f 423/52/51 431/57/51 424/53/51 +f 433/53/51 422/51/51 432/57/51 +f 424/53/51 431/57/51 420/51/51 +f 432/57/51 422/51/51 429/56/51 +f 431/57/51 430/56/51 420/51/51 +f 421/50/51 429/56/51 422/51/51 +f 421/50/51 419/50/51 429/56/51 +f 420/51/51 430/56/51 419/50/51 +f 419/50/51 430/56/51 429/56/51 +f 430/56/51 428/55/51 429/56/51 +f 429/56/51 428/55/51 426/55/51 +f 428/55/51 427/54/51 426/55/51 +f 425/54/51 426/55/51 427/54/51 +f 186/51/130 187/53/134 420/51/130 +f 424/53/134 420/51/130 187/53/134 +f 424/53/134 187/53/134 423/52/133 +f 189/52/133 423/52/133 187/53/134 +f 184/51/132 183/50/131 422/51/132 +f 421/50/131 422/51/132 183/50/131 +f 419/50/129 421/50/131 185/50/129 +f 183/50/131 185/50/129 421/50/131 +f 420/51/130 419/50/129 186/51/130 +f 185/50/129 186/51/130 419/50/129 +f 453/54/15 452/54/15 451/54/15 +f 452/54/15 453/54/15 454/54/15 +f 454/54/15 453/54/15 455/54/15 +f 455/54/15 453/54/15 456/54/15 +f 459/59/149 458/54/150 457/59/149 +f 458/54/150 459/59/149 460/54/150 +f 453/54/11 462/59/11 461/59/11 +f 453/54/11 463/54/11 462/59/11 +f 463/54/11 453/54/11 458/54/11 +f 451/54/11 458/54/11 453/54/11 +f 458/54/11 451/54/11 457/59/11 +f 457/59/11 451/54/11 464/59/11 +f 467/54/151 466/59/2 465/54/2 +f 466/59/2 467/54/151 468/59/151 +f 471/54/15 470/54/15 469/54/15 +f 470/54/15 471/54/15 465/54/15 +f 465/54/15 471/54/15 472/54/15 +f 465/54/15 472/54/15 467/54/15 +f 453/54/2 473/59/152 456/54/152 +f 473/59/152 453/54/2 461/59/2 +f 474/59/153 467/54/151 472/54/153 +f 467/54/151 474/59/153 468/59/151 +f 475/59/154 452/54/155 454/54/154 +f 452/54/155 475/59/154 476/59/155 +f 477/54/156 462/59/157 463/54/156 +f 462/59/157 477/54/156 478/59/157 +f 480/59/158 470/54/1 479/59/1 +f 470/54/1 480/59/158 469/54/158 +f 464/59/1 452/54/155 476/59/155 +f 452/54/155 464/59/1 451/54/1 +f 456/54/152 481/59/159 455/54/159 +f 481/59/159 456/54/152 473/59/152 +f 477/54/156 458/54/150 460/54/150 +f 458/54/150 477/54/156 463/54/156 +f 482/59/160 472/54/153 471/54/160 +f 472/54/153 482/59/160 474/59/153 +f 481/59/159 454/54/154 455/54/159 +f 454/54/154 481/59/159 475/59/154 +f 482/59/160 469/54/158 480/59/158 +f 469/54/158 482/59/160 471/54/160 +f 470/54/4 459/59/4 479/59/4 +f 470/54/4 460/54/4 459/59/4 +f 460/54/4 470/54/4 477/54/4 +f 465/54/4 477/54/4 470/54/4 +f 477/54/4 465/54/4 478/59/4 +f 478/59/4 465/54/4 466/59/4 +f 483/60/1 222/61/161 221/60/1 +f 222/61/161 483/60/1 484/61/161 +f 484/61/4 486/61/4 485/54/4 +f 486/61/4 484/61/4 483/60/4 +f 486/61/4 483/60/4 487/60/4 +f 487/60/4 483/60/4 488/62/4 +f 487/60/4 488/62/4 489/62/4 +f 489/62/4 488/62/4 490/59/4 +f 226/60/2 489/62/162 216/62/162 +f 489/62/162 226/60/2 487/60/2 +f 485/54/15 222/61/161 484/61/161 +f 222/61/161 485/54/15 227/54/15 +f 486/61/163 226/60/2 229/61/163 +f 226/60/2 486/61/163 487/60/2 +f 486/61/163 227/54/15 485/54/15 +f 227/54/15 486/61/163 229/61/163 +f 215/59/19 489/62/162 490/59/19 +f 489/62/162 215/59/19 216/62/162 +f 223/62/164 483/60/1 221/60/1 +f 483/60/1 223/62/164 488/62/164 +f 223/62/164 490/59/19 488/62/164 +f 490/59/19 223/62/164 215/59/19 +f 492/61/163 241/54/15 491/54/15 +f 241/54/15 492/61/163 240/61/163 +f 493/61/4 492/61/4 491/54/4 +f 492/61/4 493/61/4 494/60/4 +f 492/61/4 494/60/4 495/60/4 +f 495/60/4 494/60/4 496/62/4 +f 495/60/4 496/62/4 497/62/4 +f 497/62/4 496/62/4 498/59/4 +f 243/62/164 498/59/19 496/62/164 +f 498/59/19 243/62/164 244/59/19 +f 494/60/1 234/61/161 233/60/1 +f 234/61/161 494/60/1 493/61/161 +f 491/54/15 234/61/161 493/61/161 +f 234/61/161 491/54/15 241/54/15 +f 238/60/2 497/62/162 236/62/162 +f 497/62/162 238/60/2 495/60/2 +f 243/62/164 494/60/1 233/60/1 +f 494/60/1 243/62/164 496/62/164 +f 244/59/19 497/62/162 498/59/19 +f 497/62/162 244/59/19 236/62/162 +f 492/61/163 238/60/2 240/61/163 +f 238/60/2 492/61/163 495/60/2 +f 501/59/165 500/54/165 499/59/165 +f 500/54/165 501/59/165 502/54/165 +f 505/59/166 504/54/167 503/54/166 +f 504/54/167 505/59/166 506/59/167 +f 503/54/15 500/54/15 502/54/15 +f 500/54/15 503/54/15 507/54/15 +f 507/54/15 503/54/15 504/54/15 +f 507/54/15 504/54/15 508/54/15 +f 508/54/15 504/54/15 509/54/15 +f 509/54/15 504/54/15 510/54/15 +f 502/54/168 505/59/166 503/54/166 +f 505/59/166 502/54/168 501/59/168 +f 509/54/170 511/59/169 508/54/169 +f 511/59/169 509/54/170 512/59/170 +f 506/59/167 510/54/171 504/54/167 +f 510/54/171 506/59/167 513/59/171 +f 509/54/172 513/59/172 512/59/172 +f 513/59/172 509/54/172 510/54/172 +f 514/59/173 500/54/174 507/54/173 +f 500/54/174 514/59/173 499/59/174 +f 499/59/19 505/59/19 501/59/19 +f 505/59/19 499/59/19 514/59/19 +f 505/59/19 514/59/19 506/59/19 +f 506/59/19 514/59/19 511/59/19 +f 506/59/19 511/59/19 512/59/19 +f 506/59/19 512/59/19 513/59/19 +f 511/59/169 507/54/173 508/54/169 +f 507/54/173 511/59/169 514/59/173 +f 517/63/175 516/54/176 515/61/175 +f 516/54/176 517/63/175 518/64/176 +f 521/59/178 520/65/177 519/62/177 +f 520/65/177 521/59/178 522/66/178 +f 525/60/180 524/65/179 523/62/179 +f 524/65/179 525/60/180 526/60/180 +f 517/63/181 527/63/181 518/64/181 +f 527/63/181 517/63/181 528/60/181 +f 527/63/181 528/60/181 526/60/181 +f 526/60/181 528/60/181 520/65/181 +f 526/60/181 520/65/181 524/65/181 +f 524/65/181 520/65/181 522/66/181 +f 527/63/182 525/60/180 529/61/182 +f 525/60/180 527/63/182 526/60/180 +f 527/63/182 516/54/176 518/64/176 +f 516/54/176 527/63/182 529/61/182 +f 521/59/178 524/65/179 522/66/178 +f 524/65/179 521/59/178 523/62/179 +f 519/62/177 528/60/183 530/60/183 +f 528/60/183 519/62/177 520/65/177 +f 528/60/183 515/61/175 530/60/183 +f 515/61/175 528/60/183 517/63/175 +f 531/60/184 254/61/185 253/60/184 +f 254/61/185 531/60/184 532/61/185 +f 532/61/181 534/61/181 533/54/181 +f 534/61/181 532/61/181 531/60/181 +f 534/61/181 531/60/181 535/60/181 +f 535/60/181 531/60/181 536/62/181 +f 535/60/181 536/62/181 537/62/181 +f 537/62/181 536/62/181 538/59/181 +f 258/60/187 537/62/186 248/62/186 +f 537/62/186 258/60/187 535/60/187 +f 533/54/15 254/61/185 532/61/185 +f 254/61/185 533/54/15 259/54/15 +f 534/61/188 258/60/187 261/61/188 +f 258/60/187 534/61/188 535/60/187 +f 534/61/188 259/54/15 533/54/15 +f 259/54/15 534/61/188 261/61/188 +f 247/59/19 537/62/186 538/59/19 +f 537/62/186 247/59/19 248/62/186 +f 255/62/189 531/60/184 253/60/184 +f 531/60/184 255/62/189 536/62/189 +f 255/62/189 538/59/19 536/62/189 +f 538/59/19 255/62/189 247/59/19 +f 540/61/188 273/54/15 539/54/15 +f 273/54/15 540/61/188 272/61/188 +f 541/61/181 540/61/181 539/54/181 +f 540/61/181 541/61/181 542/60/181 +f 540/61/181 542/60/181 543/60/181 +f 543/60/181 542/60/181 544/62/181 +f 543/60/181 544/62/181 545/62/181 +f 545/62/181 544/62/181 546/59/181 +f 275/62/189 546/59/19 544/62/189 +f 546/59/19 275/62/189 276/59/19 +f 542/60/184 266/61/185 265/60/184 +f 266/61/185 542/60/184 541/61/185 +f 539/54/15 266/61/185 541/61/185 +f 266/61/185 539/54/15 273/54/15 +f 270/60/187 545/62/186 268/62/186 +f 545/62/186 270/60/187 543/60/187 +f 275/62/189 542/60/184 265/60/184 +f 542/60/184 275/62/189 544/62/189 +f 276/59/19 545/62/186 546/59/19 +f 545/62/186 276/59/19 268/62/186 +f 540/61/188 270/60/187 272/61/188 +f 270/60/187 540/61/188 543/60/187 +f 549/59/190 548/54/190 547/59/190 +f 548/54/190 549/59/190 550/54/190 +f 553/59/173 552/54/169 551/54/173 +f 552/54/169 553/59/173 554/59/169 +f 551/54/15 548/54/15 550/54/15 +f 548/54/15 551/54/15 555/54/15 +f 555/54/15 551/54/15 552/54/15 +f 555/54/15 552/54/15 556/54/15 +f 556/54/15 552/54/15 557/54/15 +f 557/54/15 552/54/15 558/54/15 +f 550/54/174 553/59/173 551/54/173 +f 553/59/173 550/54/174 549/59/174 +f 557/54/171 559/59/167 556/54/167 +f 559/59/167 557/54/171 560/59/171 +f 554/59/169 558/54/170 552/54/169 +f 558/54/170 554/59/169 561/59/170 +f 557/54/191 561/59/191 560/59/191 +f 561/59/191 557/54/191 558/54/191 +f 562/59/166 548/54/168 555/54/166 +f 548/54/168 562/59/166 547/59/168 +f 547/59/19 553/59/19 549/59/19 +f 553/59/19 547/59/19 562/59/19 +f 553/59/19 562/59/19 554/59/19 +f 554/59/19 562/59/19 559/59/19 +f 554/59/19 559/59/19 560/59/19 +f 554/59/19 560/59/19 561/59/19 +f 559/59/167 555/54/166 556/54/167 +f 555/54/166 559/59/167 562/59/166 +f 352/68/4 358/67/4 357/67/4 +f 358/67/4 352/68/4 354/68/4 +f 364/68/4 362/67/4 366/67/4 +f 362/67/4 364/68/4 360/68/4 + +g train-electric-subway-a + + + + +usemtl colormap + +f 3/3/1 2/2/1 1/1/1 +f 2/2/1 3/3/1 4/4/1 +f 4/4/1 3/3/1 5/5/1 +f 8/4/2 7/1/2 6/2/2 +f 7/1/2 8/4/2 9/3/2 +f 9/3/2 8/4/2 10/5/2 +f 13/6/3 12/7/3 11/6/3 +f 12/7/3 13/6/3 14/7/3 +f 17/8/4 16/9/4 15/8/4 +f 16/9/4 17/8/4 18/9/4 +f 17/8/5 20/10/5 19/10/5 +f 20/10/5 17/8/5 15/8/5 +f 23/9/7 22/11/6 21/9/6 +f 22/11/6 23/9/7 24/11/7 +f 21/9/6 26/13/8 25/12/8 +f 26/13/8 21/9/6 22/11/6 +f 27/13/9 25/12/8 26/13/8 +f 25/12/8 27/13/9 28/12/9 +f 27/13/9 23/9/7 28/12/9 +f 23/9/7 27/13/9 24/11/7 +f 31/13/9 30/12/8 29/13/8 +f 30/12/8 31/13/9 32/12/9 +f 31/13/9 33/9/7 32/12/9 +f 33/9/7 31/13/9 34/11/7 +f 33/9/7 36/11/6 35/9/6 +f 36/11/6 33/9/7 34/11/7 +f 35/9/6 29/13/8 30/12/8 +f 29/13/8 35/9/6 36/11/6 +f 16/9/10 24/11/10 14/7/10 +f 24/11/10 16/9/10 18/9/10 +f 14/7/10 24/11/10 27/13/10 +f 14/7/10 27/13/10 26/13/10 +f 26/13/10 12/7/10 14/7/10 +f 18/9/10 34/11/10 24/11/10 +f 24/11/10 34/11/10 22/11/10 +f 34/11/10 26/13/10 22/11/10 +f 34/11/10 18/9/10 36/11/10 +f 36/11/10 18/9/10 12/7/10 +f 26/13/10 34/11/10 31/13/10 +f 31/13/10 12/7/10 26/13/10 +f 36/11/10 12/7/10 29/13/10 +f 29/13/10 12/7/10 31/13/10 +f 39/6/11 38/14/11 37/6/11 +f 40/14/11 38/14/11 39/6/11 +f 40/14/11 41/1/11 38/14/11 +f 42/1/11 41/1/11 40/14/11 +f 43/15/11 41/1/11 42/1/11 +f 44/15/11 41/1/11 43/15/11 +f 45/16/11 41/1/11 44/15/11 +f 42/1/11 46/16/11 43/15/11 +f 41/1/11 45/16/11 47/2/11 +f 46/16/11 47/2/11 45/16/11 +f 48/2/11 46/16/11 42/1/11 +f 48/2/11 47/2/11 46/16/11 +f 48/2/11 49/17/11 47/2/11 +f 50/17/11 49/17/11 48/2/11 +f 51/10/11 49/17/11 50/17/11 +f 49/17/11 51/10/11 52/10/11 +f 1/1/1 48/2/12 42/1/1 +f 48/2/12 1/1/1 2/2/12 +f 2/2/12 50/17/13 48/2/12 +f 50/17/13 2/2/12 53/17/13 +f 53/17/13 51/10/14 50/17/13 +f 51/10/14 53/17/13 19/10/14 +f 19/10/15 52/10/15 51/10/15 +f 52/10/15 19/10/15 20/10/15 +f 20/10/16 49/17/17 52/10/16 +f 49/17/17 20/10/16 54/17/17 +f 49/17/17 6/2/18 47/2/18 +f 6/2/18 49/17/17 54/17/17 +f 6/2/18 41/1/2 47/2/18 +f 41/1/2 6/2/18 7/1/2 +f 37/6/19 11/6/19 39/6/19 +f 11/6/19 37/6/19 13/6/19 +f 57/18/20 56/10/20 55/18/20 +f 56/10/20 57/18/20 58/10/20 +f 59/6/20 58/10/20 57/18/20 +f 59/6/20 57/18/20 60/19/20 +f 59/6/20 60/19/20 61/19/20 +f 59/6/20 61/19/20 62/6/20 +f 63/20/20 58/10/20 59/6/20 +f 63/20/20 64/21/20 58/10/20 +f 65/19/20 64/21/20 63/20/20 +f 64/21/20 65/19/20 66/18/20 +f 65/19/21 68/20/22 67/19/21 +f 68/20/22 65/19/21 63/20/22 +f 61/19/15 70/19/15 69/19/15 +f 70/19/15 61/19/15 60/19/15 +f 56/10/15 72/10/23 71/10/15 +f 72/10/23 56/10/15 58/10/23 +f 63/20/22 73/6/24 68/20/22 +f 73/6/24 63/20/22 59/6/24 +f 65/19/21 74/18/25 66/18/25 +f 74/18/25 65/19/21 67/19/21 +f 59/6/24 75/6/19 73/6/24 +f 75/6/19 59/6/24 62/6/19 +f 57/18/19 77/18/19 76/18/19 +f 77/18/19 57/18/19 55/18/19 +f 70/19/26 75/6/26 69/19/26 +f 75/6/26 70/19/26 73/6/26 +f 72/10/26 73/6/26 70/19/26 +f 72/10/26 70/19/26 76/18/26 +f 72/10/26 76/18/26 77/18/26 +f 72/10/26 77/18/26 71/10/26 +f 72/10/26 68/20/26 73/6/26 +f 78/21/26 68/20/26 72/10/26 +f 78/21/26 67/19/26 68/20/26 +f 67/19/26 78/21/26 74/18/26 +f 70/19/27 57/18/27 76/18/27 +f 57/18/27 70/19/27 60/19/27 +f 66/18/25 78/21/28 64/21/28 +f 78/21/28 66/18/25 74/18/25 +f 58/10/23 78/21/28 72/10/23 +f 78/21/28 58/10/23 64/21/28 +f 81/22/29 80/23/29 79/22/29 +f 80/23/29 81/22/29 82/23/29 +f 80/23/29 82/23/29 83/24/29 +f 80/23/29 83/24/29 84/24/29 +f 84/24/29 83/24/29 85/25/29 +f 84/24/29 85/25/29 86/25/29 +f 89/22/29 88/23/29 87/22/29 +f 88/23/29 89/22/29 90/23/29 +f 88/23/29 90/23/29 91/24/29 +f 88/23/29 91/24/29 92/24/29 +f 92/24/29 91/24/29 93/25/29 +f 92/24/29 93/25/29 94/25/29 +f 110/6/35 108/10/35 97/6/30 +f 95/10/30 97/6/30 108/10/35 +f 103/6/33 105/10/33 110/6/35 +f 108/10/35 110/6/35 105/10/33 +f 100/10/32 99/6/32 107/10/34 +f 109/6/34 107/10/34 99/6/32 +f 109/6/34 98/6/31 107/10/34 +f 96/10/31 107/10/34 98/6/31 +f 103/6/19 110/6/19 104/6/19 +f 110/6/19 97/6/19 104/6/19 +f 97/6/19 98/6/19 104/6/19 +f 98/6/19 109/6/19 104/6/19 +f 109/6/19 99/6/19 104/6/19 +f 101/6/19 104/6/19 99/6/19 +f 105/10/15 106/10/15 108/10/15 +f 108/10/15 106/10/15 95/10/15 +f 95/10/15 106/10/15 96/10/15 +f 96/10/15 106/10/15 107/10/15 +f 107/10/15 106/10/15 100/10/15 +f 102/10/15 100/10/15 106/10/15 +f 106/10/26 105/10/33 104/6/26 +f 103/6/33 104/6/26 105/10/33 +f 102/10/20 101/6/20 100/10/32 +f 99/6/32 100/10/32 101/6/20 +f 98/6/31 97/6/30 96/10/31 +f 95/10/30 96/10/31 97/6/30 +f 113/18/20 112/10/20 111/18/20 +f 112/10/20 113/18/20 114/10/20 +f 115/6/20 114/10/20 113/18/20 +f 115/6/20 113/18/20 116/19/20 +f 115/6/20 116/19/20 117/19/20 +f 115/6/20 117/19/20 118/6/20 +f 119/20/20 114/10/20 115/6/20 +f 119/20/20 120/21/20 114/10/20 +f 121/19/20 120/21/20 119/20/20 +f 120/21/20 121/19/20 122/18/20 +f 121/19/21 124/20/22 123/19/21 +f 124/20/22 121/19/21 119/20/22 +f 117/19/15 126/19/15 125/19/15 +f 126/19/15 117/19/15 116/19/15 +f 112/10/15 128/10/23 127/10/15 +f 128/10/23 112/10/15 114/10/23 +f 119/20/22 129/6/24 124/20/22 +f 129/6/24 119/20/22 115/6/24 +f 121/19/21 130/18/25 122/18/25 +f 130/18/25 121/19/21 123/19/21 +f 115/6/24 131/6/19 129/6/24 +f 131/6/19 115/6/24 118/6/19 +f 113/18/19 133/18/19 132/18/19 +f 133/18/19 113/18/19 111/18/19 +f 126/19/26 131/6/26 125/19/26 +f 131/6/26 126/19/26 129/6/26 +f 128/10/26 129/6/26 126/19/26 +f 128/10/26 126/19/26 132/18/26 +f 128/10/26 132/18/26 133/18/26 +f 128/10/26 133/18/26 127/10/26 +f 128/10/26 124/20/26 129/6/26 +f 134/21/26 124/20/26 128/10/26 +f 134/21/26 123/19/26 124/20/26 +f 123/19/26 134/21/26 130/18/26 +f 126/19/27 113/18/27 132/18/27 +f 113/18/27 126/19/27 116/19/27 +f 122/18/25 134/21/28 120/21/28 +f 134/21/28 122/18/25 130/18/25 +f 114/10/23 134/21/28 128/10/23 +f 134/21/28 114/10/23 120/21/28 +f 144/21/44 138/10/39 158/21/44 +f 152/10/39 158/21/44 138/10/39 +f 154/18/41 146/18/41 158/21/44 +f 144/21/44 158/21/44 146/18/41 +f 140/19/43 150/19/43 137/18/43 +f 156/18/43 137/18/43 150/19/43 +f 154/18/42 158/21/42 147/19/42 +f 148/20/42 147/19/42 158/21/42 +f 152/10/42 148/20/42 158/21/42 +f 153/6/42 148/20/42 152/10/42 +f 151/10/42 157/18/42 152/10/42 +f 157/18/42 156/18/42 152/10/42 +f 156/18/42 150/19/42 152/10/42 +f 150/19/42 153/6/42 152/10/42 +f 153/6/42 150/19/42 155/6/42 +f 149/19/42 155/6/42 150/19/42 +f 135/18/19 137/18/19 157/18/19 +f 156/18/19 157/18/19 137/18/19 +f 142/6/19 139/6/40 155/6/19 +f 153/6/40 155/6/19 139/6/40 +f 147/19/37 145/19/37 154/18/41 +f 146/18/41 154/18/41 145/19/37 +f 139/6/40 143/20/38 153/6/40 +f 148/20/38 153/6/40 143/20/38 +f 138/10/39 136/10/15 152/10/39 +f 151/10/15 152/10/39 136/10/15 +f 140/19/15 141/19/15 150/19/15 +f 149/19/15 150/19/15 141/19/15 +f 143/20/38 145/19/37 148/20/38 +f 147/19/37 148/20/38 145/19/37 +f 146/18/36 145/19/36 144/21/36 +f 143/20/36 144/21/36 145/19/36 +f 138/10/36 144/21/36 143/20/36 +f 139/6/36 138/10/36 143/20/36 +f 142/6/36 141/19/36 139/6/36 +f 141/19/36 140/19/36 139/6/36 +f 140/19/36 137/18/36 139/6/36 +f 137/18/36 138/10/36 139/6/36 +f 138/10/36 137/18/36 136/10/36 +f 135/18/36 136/10/36 137/18/36 +f 161/6/45 160/10/46 159/10/45 +f 160/10/46 161/6/45 162/6/46 +f 165/6/36 164/10/47 163/6/47 +f 164/10/47 165/6/36 166/10/36 +f 169/10/48 168/6/42 167/6/48 +f 168/6/42 169/10/48 170/10/42 +f 170/10/15 164/10/15 166/10/15 +f 164/10/15 170/10/15 171/10/15 +f 171/10/15 170/10/15 160/10/15 +f 160/10/15 170/10/15 159/10/15 +f 159/10/15 170/10/15 172/10/15 +f 172/10/15 170/10/15 169/10/15 +f 163/6/19 168/6/19 165/6/19 +f 168/6/19 163/6/19 173/6/19 +f 168/6/19 173/6/19 162/6/19 +f 168/6/19 162/6/19 161/6/19 +f 168/6/19 161/6/19 174/6/19 +f 168/6/19 174/6/19 167/6/19 +f 162/6/46 171/10/49 160/10/46 +f 171/10/49 162/6/46 173/6/49 +f 163/6/47 171/10/49 173/6/49 +f 171/10/49 163/6/47 164/10/47 +f 169/10/48 174/6/50 172/10/50 +f 174/6/50 169/10/48 167/6/48 +f 172/10/50 161/6/45 159/10/45 +f 161/6/45 172/10/50 174/6/50 +f 182/25/51 181/25/51 180/24/51 +f 181/25/51 179/24/51 180/24/51 +f 180/24/51 179/24/51 176/23/51 +f 179/24/51 178/23/51 176/23/51 +f 178/23/51 177/22/51 176/23/51 +f 175/22/51 176/23/51 177/22/51 +f 190/25/51 189/25/51 188/24/51 +f 189/25/51 187/24/51 188/24/51 +f 188/24/51 187/24/51 184/23/51 +f 187/24/51 186/23/51 184/23/51 +f 186/23/51 185/22/51 184/23/51 +f 183/22/51 184/23/51 185/22/51 +f 200/21/44 194/10/39 214/21/44 +f 208/10/39 214/21/44 194/10/39 +f 210/18/41 202/18/41 214/21/44 +f 200/21/44 214/21/44 202/18/41 +f 196/19/43 206/19/43 193/18/43 +f 212/18/43 193/18/43 206/19/43 +f 210/18/42 214/21/42 203/19/42 +f 204/20/42 203/19/42 214/21/42 +f 208/10/42 204/20/42 214/21/42 +f 209/6/42 204/20/42 208/10/42 +f 207/10/42 213/18/42 208/10/42 +f 213/18/42 212/18/42 208/10/42 +f 212/18/42 206/19/42 208/10/42 +f 206/19/42 209/6/42 208/10/42 +f 209/6/42 206/19/42 211/6/42 +f 205/19/42 211/6/42 206/19/42 +f 191/18/19 193/18/19 213/18/19 +f 212/18/19 213/18/19 193/18/19 +f 198/6/19 195/6/40 211/6/19 +f 209/6/40 211/6/19 195/6/40 +f 203/19/37 201/19/37 210/18/41 +f 202/18/41 210/18/41 201/19/37 +f 195/6/40 199/20/38 209/6/40 +f 204/20/38 209/6/40 199/20/38 +f 194/10/39 192/10/15 208/10/39 +f 207/10/15 208/10/39 192/10/15 +f 196/19/15 197/19/15 206/19/15 +f 205/19/15 206/19/15 197/19/15 +f 199/20/38 201/19/37 204/20/38 +f 203/19/37 204/20/38 201/19/37 +f 202/18/36 201/19/36 200/21/36 +f 199/20/36 200/21/36 201/19/36 +f 194/10/36 200/21/36 199/20/36 +f 195/6/36 194/10/36 199/20/36 +f 198/6/36 197/19/36 195/6/36 +f 197/19/36 196/19/36 195/6/36 +f 196/19/36 193/18/36 195/6/36 +f 193/18/36 194/10/36 195/6/36 +f 194/10/36 193/18/36 192/10/36 +f 191/18/36 192/10/36 193/18/36 +f 217/27/52 216/26/53 215/6/52 +f 216/26/53 217/27/52 218/28/53 +f 221/29/54 220/30/55 219/29/54 +f 220/30/55 221/29/54 222/31/55 +f 224/28/56 215/6/52 223/26/56 +f 215/6/52 224/28/56 217/27/52 +f 225/29/57 216/26/53 218/28/53 +f 216/26/53 225/29/57 226/29/57 +f 224/28/56 221/29/54 219/29/54 +f 221/29/54 224/28/56 223/26/56 +f 227/10/58 220/30/55 222/31/55 +f 220/30/55 227/10/58 228/32/58 +f 229/31/59 228/32/58 227/10/58 +f 228/32/58 229/31/59 230/30/59 +f 229/31/59 225/29/57 230/30/59 +f 225/29/57 229/31/59 226/29/57 +f 233/29/54 232/30/55 231/29/54 +f 232/30/55 233/29/54 234/31/55 +f 237/29/57 236/26/53 235/28/53 +f 236/26/53 237/29/57 238/29/57 +f 240/31/59 237/29/57 239/30/59 +f 237/29/57 240/31/59 238/29/57 +f 241/10/58 232/30/55 234/31/55 +f 232/30/55 241/10/58 242/32/58 +f 245/28/56 244/6/52 243/26/56 +f 244/6/52 245/28/56 246/27/52 +f 246/27/52 236/26/53 244/6/52 +f 236/26/53 246/27/52 235/28/53 +f 240/31/59 242/32/58 241/10/58 +f 242/32/58 240/31/59 239/30/59 +f 245/28/56 233/29/54 231/29/54 +f 233/29/54 245/28/56 243/26/56 +f 249/27/60 248/26/61 247/6/60 +f 248/26/61 249/27/60 250/28/61 +f 253/29/62 252/30/63 251/29/62 +f 252/30/63 253/29/62 254/31/63 +f 256/28/64 247/6/60 255/26/64 +f 247/6/60 256/28/64 249/27/60 +f 257/29/65 248/26/61 250/28/61 +f 248/26/61 257/29/65 258/29/65 +f 256/28/64 253/29/62 251/29/62 +f 253/29/62 256/28/64 255/26/64 +f 259/10/66 252/30/63 254/31/63 +f 252/30/63 259/10/66 260/32/66 +f 261/31/67 260/32/66 259/10/66 +f 260/32/66 261/31/67 262/30/67 +f 261/31/67 257/29/65 262/30/67 +f 257/29/65 261/31/67 258/29/65 +f 265/29/62 264/30/63 263/29/62 +f 264/30/63 265/29/62 266/31/63 +f 269/29/65 268/26/61 267/28/61 +f 268/26/61 269/29/65 270/29/65 +f 272/31/67 269/29/65 271/30/67 +f 269/29/65 272/31/67 270/29/65 +f 273/10/66 264/30/63 266/31/63 +f 264/30/63 273/10/66 274/32/66 +f 277/28/64 276/6/60 275/26/64 +f 276/6/60 277/28/64 278/27/60 +f 278/27/60 268/26/61 276/6/60 +f 268/26/61 278/27/60 267/28/61 +f 272/31/67 274/32/66 273/10/66 +f 274/32/66 272/31/67 271/30/67 +f 277/28/64 265/29/62 263/29/62 +f 265/29/62 277/28/64 275/26/64 +f 10/35/70 279/34/69 9/33/68 +f 279/34/69 10/35/70 280/36/71 +f 16/39/74 281/38/73 15/37/72 +f 281/38/73 16/39/74 280/36/71 +f 282/34/77 5/35/76 3/33/75 +f 5/35/76 282/34/77 283/36/78 +f 284/38/81 18/39/80 17/37/79 +f 18/39/80 284/38/81 283/36/78 +f 282/34/77 1/41/83 285/40/82 +f 1/41/83 282/34/77 3/33/75 +f 281/38/73 10/35/70 8/42/84 +f 10/35/70 281/38/73 280/36/71 +f 283/36/78 4/42/85 5/35/76 +f 4/42/85 283/36/78 284/38/81 +f 9/33/68 286/40/87 7/41/86 +f 286/40/87 9/33/68 279/34/69 +f 16/39/74 279/34/69 280/36/71 +f 279/34/69 16/39/74 14/43/88 +f 286/40/87 14/43/88 13/44/89 +f 14/43/88 286/40/87 279/34/69 +f 11/44/90 282/34/77 285/40/82 +f 282/34/77 11/44/90 12/43/91 +f 282/34/77 18/39/80 283/36/78 +f 18/39/80 282/34/77 12/43/91 +f 284/38/81 19/46/93 53/45/92 +f 19/46/93 284/38/81 17/37/79 +f 54/45/95 8/42/84 6/47/94 +f 8/42/84 54/45/95 281/38/73 +f 15/37/72 54/45/95 20/46/96 +f 54/45/95 15/37/72 281/38/73 +f 4/42/85 53/45/92 2/47/97 +f 53/45/92 4/42/85 284/38/81 +f 7/41/98 38/40/99 41/41/98 +f 38/40/99 7/41/98 286/40/99 +f 38/40/99 13/44/100 37/44/100 +f 13/44/100 38/40/99 286/40/99 +f 39/44/102 285/40/101 40/40/101 +f 285/40/101 39/44/102 11/44/102 +f 285/40/101 42/41/103 40/40/101 +f 42/41/103 285/40/101 1/41/103 +f 21/48/10 28/49/10 23/48/10 +f 28/49/10 21/48/10 25/49/10 +f 35/48/10 32/49/10 33/48/10 +f 32/49/10 35/48/10 30/49/10 +f 287/50/104 82/51/105 81/50/104 +f 82/51/105 287/50/104 288/51/105 +f 289/50/106 81/50/104 79/50/106 +f 81/50/104 289/50/106 287/50/104 +f 79/50/106 290/51/107 289/50/106 +f 290/51/107 79/50/106 80/51/107 +f 83/53/109 291/52/108 85/52/108 +f 291/52/108 83/53/109 292/53/109 +f 83/53/109 288/51/105 292/53/109 +f 288/51/105 83/53/109 82/51/105 +f 295/54/29 294/55/29 293/54/29 +f 294/55/29 295/54/29 296/55/29 +f 294/55/29 296/55/29 297/56/29 +f 297/56/29 296/55/29 298/56/29 +f 297/56/29 298/56/29 287/50/29 +f 287/50/29 298/56/29 288/51/29 +f 297/56/29 287/50/29 289/50/29 +f 290/51/29 297/56/29 289/50/29 +f 288/51/29 298/56/29 299/57/29 +f 297/56/29 290/51/29 300/57/29 +f 288/51/29 299/57/29 292/53/29 +f 300/57/29 290/51/29 301/53/29 +f 292/53/29 299/57/29 291/52/29 +f 300/57/29 301/53/29 302/52/29 +f 291/52/29 299/57/29 302/52/29 +f 302/52/29 299/57/29 300/57/29 +f 300/57/29 299/57/29 303/58/29 +f 303/58/29 299/57/29 304/58/29 +f 303/58/29 304/58/29 305/59/29 +f 303/58/29 305/59/29 306/59/29 +f 307/55/110 298/56/111 296/55/110 +f 298/56/111 307/55/110 308/56/111 +f 307/55/110 295/54/112 309/54/112 +f 295/54/112 307/55/110 296/55/110 +f 309/54/112 293/54/113 310/54/113 +f 293/54/113 309/54/112 295/54/112 +f 310/54/113 294/55/114 311/55/114 +f 294/55/114 310/54/113 293/54/113 +f 312/56/115 294/55/114 297/56/115 +f 294/55/114 312/56/115 311/55/114 +f 313/57/116 297/56/115 300/57/116 +f 297/56/115 313/57/116 312/56/115 +f 314/58/117 300/57/116 303/58/117 +f 300/57/116 314/58/117 313/57/116 +f 306/59/118 314/58/117 303/58/117 +f 314/58/117 306/59/118 315/59/118 +f 305/59/119 315/59/118 306/59/118 +f 315/59/118 305/59/119 316/59/119 +f 304/58/120 316/59/119 305/59/119 +f 316/59/119 304/58/120 317/58/120 +f 318/57/121 304/58/120 299/57/121 +f 304/58/120 318/57/121 317/58/120 +f 298/56/111 318/57/121 299/57/121 +f 318/57/121 298/56/111 308/56/111 +f 85/52/108 302/52/122 86/52/122 +f 302/52/122 85/52/108 291/52/108 +f 84/53/123 302/52/122 301/53/123 +f 302/52/122 84/53/123 86/52/122 +f 290/51/107 84/53/123 301/53/123 +f 84/53/123 290/51/107 80/51/107 +f 319/50/104 90/51/105 89/50/104 +f 90/51/105 319/50/104 320/51/105 +f 321/50/106 89/50/104 87/50/106 +f 89/50/104 321/50/106 319/50/104 +f 87/50/106 322/51/107 321/50/106 +f 322/51/107 87/50/106 88/51/107 +f 91/53/109 323/52/108 93/52/108 +f 323/52/108 91/53/109 324/53/109 +f 91/53/109 320/51/105 324/53/109 +f 320/51/105 91/53/109 90/51/105 +f 327/54/29 326/55/29 325/54/29 +f 326/55/29 327/54/29 328/55/29 +f 326/55/29 328/55/29 329/56/29 +f 329/56/29 328/55/29 330/56/29 +f 329/56/29 330/56/29 319/50/29 +f 319/50/29 330/56/29 320/51/29 +f 329/56/29 319/50/29 321/50/29 +f 322/51/29 329/56/29 321/50/29 +f 320/51/29 330/56/29 331/57/29 +f 329/56/29 322/51/29 332/57/29 +f 320/51/29 331/57/29 324/53/29 +f 332/57/29 322/51/29 333/53/29 +f 324/53/29 331/57/29 323/52/29 +f 332/57/29 333/53/29 334/52/29 +f 323/52/29 331/57/29 334/52/29 +f 334/52/29 331/57/29 332/57/29 +f 332/57/29 331/57/29 335/58/29 +f 335/58/29 331/57/29 336/58/29 +f 335/58/29 336/58/29 337/59/29 +f 335/58/29 337/59/29 338/59/29 +f 339/55/110 330/56/111 328/55/110 +f 330/56/111 339/55/110 340/56/111 +f 339/55/110 327/54/112 341/54/112 +f 327/54/112 339/55/110 328/55/110 +f 341/54/112 325/54/113 342/54/113 +f 325/54/113 341/54/112 327/54/112 +f 342/54/113 326/55/114 343/55/114 +f 326/55/114 342/54/113 325/54/113 +f 344/56/115 326/55/114 329/56/115 +f 326/55/114 344/56/115 343/55/114 +f 345/57/116 329/56/115 332/57/116 +f 329/56/115 345/57/116 344/56/115 +f 346/58/117 332/57/116 335/58/117 +f 332/57/116 346/58/117 345/57/116 +f 338/59/118 346/58/117 335/58/117 +f 346/58/117 338/59/118 347/59/118 +f 337/59/119 347/59/118 338/59/118 +f 347/59/118 337/59/119 348/59/119 +f 336/58/120 348/59/119 337/59/119 +f 348/59/119 336/58/120 349/58/120 +f 350/57/121 336/58/120 331/57/121 +f 336/58/120 350/57/121 349/58/120 +f 330/56/111 350/57/121 331/57/121 +f 350/57/121 330/56/111 340/56/111 +f 93/52/108 334/52/122 94/52/122 +f 334/52/122 93/52/108 323/52/108 +f 92/53/123 334/52/122 333/53/123 +f 334/52/122 92/53/123 94/52/122 +f 322/51/107 92/53/123 333/53/123 +f 92/53/123 322/51/107 88/51/107 +f 353/59/19 352/59/19 351/59/19 +f 352/59/19 353/59/19 354/59/19 +f 357/54/15 356/54/15 355/54/15 +f 356/54/15 357/54/15 358/54/15 +f 352/59/1 355/54/1 351/59/1 +f 355/54/1 352/59/1 357/54/1 +f 356/54/2 354/59/2 353/59/2 +f 354/59/2 356/54/2 358/54/2 +f 361/54/2 360/59/2 359/59/2 +f 360/59/2 361/54/2 362/54/2 +f 359/59/19 364/59/19 363/59/19 +f 364/59/19 359/59/19 360/59/19 +f 364/59/1 365/54/1 363/59/1 +f 365/54/1 364/59/1 366/54/1 +f 366/54/15 361/54/15 365/54/15 +f 361/54/15 366/54/15 362/54/15 +f 369/59/125 368/54/124 367/54/124 +f 368/54/124 369/59/125 370/59/125 +f 371/54/126 369/59/126 367/54/126 +f 369/59/126 371/54/126 372/59/126 +f 370/59/10 373/54/10 368/54/10 +f 373/54/10 370/59/10 374/59/10 +f 373/54/127 372/59/128 371/54/127 +f 372/59/128 373/54/127 374/59/128 +f 369/59/125 374/59/128 370/59/125 +f 374/59/128 369/59/125 372/59/128 +f 377/59/11 376/54/11 375/54/11 +f 376/54/11 377/59/11 378/59/11 +f 381/59/125 380/54/124 379/54/124 +f 380/54/124 381/59/125 382/59/125 +f 383/54/126 381/59/126 379/54/126 +f 381/59/126 383/54/126 384/59/126 +f 382/59/10 385/54/10 380/54/10 +f 385/54/10 382/59/10 386/59/10 +f 385/54/127 384/59/128 383/54/127 +f 384/59/128 385/54/127 386/59/128 +f 381/59/125 386/59/128 382/59/125 +f 386/59/128 381/59/125 384/59/128 +f 176/51/132 390/51/132 180/53/148 +f 401/53/148 180/53/148 390/51/132 +f 182/52/147 180/53/148 402/52/147 +f 401/53/148 402/52/147 180/53/148 +f 391/52/133 181/52/133 402/52/147 +f 182/52/147 402/52/147 181/52/133 +f 408/56/136 398/56/136 418/57/146 +f 399/57/146 418/57/146 398/56/136 +f 417/58/145 418/57/146 404/58/145 +f 399/57/146 404/58/145 418/57/146 +f 417/58/145 404/58/145 416/59/144 +f 405/59/144 416/59/144 404/58/145 +f 416/59/144 405/59/144 415/59/143 +f 406/59/143 415/59/143 405/59/144 +f 415/59/143 406/59/143 414/58/142 +f 403/58/142 414/58/142 406/59/143 +f 413/57/141 414/58/142 400/57/141 +f 403/58/142 400/57/141 414/58/142 +f 412/56/140 413/57/141 397/56/140 +f 400/57/141 397/56/140 413/57/141 +f 411/55/139 412/56/140 394/55/139 +f 397/56/140 394/55/139 412/56/140 +f 393/54/138 410/54/138 394/55/139 +f 411/55/139 394/55/139 410/54/138 +f 395/54/137 409/54/137 393/54/138 +f 410/54/138 393/54/138 409/54/137 +f 396/55/135 407/55/135 395/54/137 +f 409/54/137 395/54/137 407/55/135 +f 408/56/136 407/55/135 398/56/136 +f 396/55/135 398/56/136 407/55/135 +f 406/59/51 405/59/51 403/58/51 +f 405/59/51 404/58/51 403/58/51 +f 404/58/51 399/57/51 403/58/51 +f 403/58/51 399/57/51 400/57/51 +f 400/57/51 399/57/51 402/52/51 +f 402/52/51 399/57/51 391/52/51 +f 402/52/51 401/53/51 400/57/51 +f 391/52/51 399/57/51 392/53/51 +f 401/53/51 390/51/51 400/57/51 +f 392/53/51 399/57/51 388/51/51 +f 400/57/51 390/51/51 397/56/51 +f 399/57/51 398/56/51 388/51/51 +f 389/50/51 397/56/51 390/51/51 +f 389/50/51 387/50/51 397/56/51 +f 388/51/51 398/56/51 387/50/51 +f 387/50/51 398/56/51 397/56/51 +f 398/56/51 396/55/51 397/56/51 +f 397/56/51 396/55/51 394/55/51 +f 396/55/51 395/54/51 394/55/51 +f 393/54/51 394/55/51 395/54/51 +f 178/51/130 179/53/134 388/51/130 +f 392/53/134 388/51/130 179/53/134 +f 392/53/134 179/53/134 391/52/133 +f 181/52/133 391/52/133 179/53/134 +f 176/51/132 175/50/131 390/51/132 +f 389/50/131 390/51/132 175/50/131 +f 387/50/129 389/50/131 177/50/129 +f 175/50/131 177/50/129 389/50/131 +f 388/51/130 387/50/129 178/51/130 +f 177/50/129 178/51/130 387/50/129 +f 184/51/132 422/51/132 188/53/148 +f 433/53/148 188/53/148 422/51/132 +f 190/52/147 188/53/148 434/52/147 +f 433/53/148 434/52/147 188/53/148 +f 423/52/133 189/52/133 434/52/147 +f 190/52/147 434/52/147 189/52/133 +f 440/56/136 430/56/136 450/57/146 +f 431/57/146 450/57/146 430/56/136 +f 449/58/145 450/57/146 436/58/145 +f 431/57/146 436/58/145 450/57/146 +f 449/58/145 436/58/145 448/59/144 +f 437/59/144 448/59/144 436/58/145 +f 448/59/144 437/59/144 447/59/143 +f 438/59/143 447/59/143 437/59/144 +f 447/59/143 438/59/143 446/58/142 +f 435/58/142 446/58/142 438/59/143 +f 445/57/141 446/58/142 432/57/141 +f 435/58/142 432/57/141 446/58/142 +f 444/56/140 445/57/141 429/56/140 +f 432/57/141 429/56/140 445/57/141 +f 443/55/139 444/56/140 426/55/139 +f 429/56/140 426/55/139 444/56/140 +f 425/54/138 442/54/138 426/55/139 +f 443/55/139 426/55/139 442/54/138 +f 427/54/137 441/54/137 425/54/138 +f 442/54/138 425/54/138 441/54/137 +f 428/55/135 439/55/135 427/54/137 +f 441/54/137 427/54/137 439/55/135 +f 440/56/136 439/55/135 430/56/136 +f 428/55/135 430/56/136 439/55/135 +f 438/59/51 437/59/51 435/58/51 +f 437/59/51 436/58/51 435/58/51 +f 436/58/51 431/57/51 435/58/51 +f 435/58/51 431/57/51 432/57/51 +f 432/57/51 431/57/51 434/52/51 +f 434/52/51 431/57/51 423/52/51 +f 434/52/51 433/53/51 432/57/51 +f 423/52/51 431/57/51 424/53/51 +f 433/53/51 422/51/51 432/57/51 +f 424/53/51 431/57/51 420/51/51 +f 432/57/51 422/51/51 429/56/51 +f 431/57/51 430/56/51 420/51/51 +f 421/50/51 429/56/51 422/51/51 +f 421/50/51 419/50/51 429/56/51 +f 420/51/51 430/56/51 419/50/51 +f 419/50/51 430/56/51 429/56/51 +f 430/56/51 428/55/51 429/56/51 +f 429/56/51 428/55/51 426/55/51 +f 428/55/51 427/54/51 426/55/51 +f 425/54/51 426/55/51 427/54/51 +f 186/51/130 187/53/134 420/51/130 +f 424/53/134 420/51/130 187/53/134 +f 424/53/134 187/53/134 423/52/133 +f 189/52/133 423/52/133 187/53/134 +f 184/51/132 183/50/131 422/51/132 +f 421/50/131 422/51/132 183/50/131 +f 419/50/129 421/50/131 185/50/129 +f 183/50/131 185/50/129 421/50/131 +f 420/51/130 419/50/129 186/51/130 +f 185/50/129 186/51/130 419/50/129 +f 453/54/15 452/54/15 451/54/15 +f 452/54/15 453/54/15 454/54/15 +f 454/54/15 453/54/15 455/54/15 +f 455/54/15 453/54/15 456/54/15 +f 459/59/149 458/54/150 457/59/149 +f 458/54/150 459/59/149 460/54/150 +f 453/54/11 462/59/11 461/59/11 +f 453/54/11 463/54/11 462/59/11 +f 463/54/11 453/54/11 458/54/11 +f 451/54/11 458/54/11 453/54/11 +f 458/54/11 451/54/11 457/59/11 +f 457/59/11 451/54/11 464/59/11 +f 467/54/151 466/59/2 465/54/2 +f 466/59/2 467/54/151 468/59/151 +f 471/54/15 470/54/15 469/54/15 +f 470/54/15 471/54/15 465/54/15 +f 465/54/15 471/54/15 472/54/15 +f 465/54/15 472/54/15 467/54/15 +f 453/54/2 473/59/152 456/54/152 +f 473/59/152 453/54/2 461/59/2 +f 474/59/153 467/54/151 472/54/153 +f 467/54/151 474/59/153 468/59/151 +f 475/59/154 452/54/155 454/54/154 +f 452/54/155 475/59/154 476/59/155 +f 477/54/156 462/59/157 463/54/156 +f 462/59/157 477/54/156 478/59/157 +f 480/59/158 470/54/1 479/59/1 +f 470/54/1 480/59/158 469/54/158 +f 464/59/1 452/54/155 476/59/155 +f 452/54/155 464/59/1 451/54/1 +f 456/54/152 481/59/159 455/54/159 +f 481/59/159 456/54/152 473/59/152 +f 477/54/156 458/54/150 460/54/150 +f 458/54/150 477/54/156 463/54/156 +f 482/59/160 472/54/153 471/54/160 +f 472/54/153 482/59/160 474/59/153 +f 481/59/159 454/54/154 455/54/159 +f 454/54/154 481/59/159 475/59/154 +f 482/59/160 469/54/158 480/59/158 +f 469/54/158 482/59/160 471/54/160 +f 470/54/4 459/59/4 479/59/4 +f 470/54/4 460/54/4 459/59/4 +f 460/54/4 470/54/4 477/54/4 +f 465/54/4 477/54/4 470/54/4 +f 477/54/4 465/54/4 478/59/4 +f 478/59/4 465/54/4 466/59/4 +f 483/60/1 222/61/161 221/60/1 +f 222/61/161 483/60/1 484/61/161 +f 484/61/4 486/61/4 485/54/4 +f 486/61/4 484/61/4 483/60/4 +f 486/61/4 483/60/4 487/60/4 +f 487/60/4 483/60/4 488/62/4 +f 487/60/4 488/62/4 489/62/4 +f 489/62/4 488/62/4 490/59/4 +f 226/60/2 489/62/162 216/62/162 +f 489/62/162 226/60/2 487/60/2 +f 485/54/15 222/61/161 484/61/161 +f 222/61/161 485/54/15 227/54/15 +f 486/61/163 226/60/2 229/61/163 +f 226/60/2 486/61/163 487/60/2 +f 486/61/163 227/54/15 485/54/15 +f 227/54/15 486/61/163 229/61/163 +f 215/59/19 489/62/162 490/59/19 +f 489/62/162 215/59/19 216/62/162 +f 223/62/164 483/60/1 221/60/1 +f 483/60/1 223/62/164 488/62/164 +f 223/62/164 490/59/19 488/62/164 +f 490/59/19 223/62/164 215/59/19 +f 492/61/163 241/54/15 491/54/15 +f 241/54/15 492/61/163 240/61/163 +f 493/61/4 492/61/4 491/54/4 +f 492/61/4 493/61/4 494/60/4 +f 492/61/4 494/60/4 495/60/4 +f 495/60/4 494/60/4 496/62/4 +f 495/60/4 496/62/4 497/62/4 +f 497/62/4 496/62/4 498/59/4 +f 243/62/164 498/59/19 496/62/164 +f 498/59/19 243/62/164 244/59/19 +f 494/60/1 234/61/161 233/60/1 +f 234/61/161 494/60/1 493/61/161 +f 491/54/15 234/61/161 493/61/161 +f 234/61/161 491/54/15 241/54/15 +f 238/60/2 497/62/162 236/62/162 +f 497/62/162 238/60/2 495/60/2 +f 243/62/164 494/60/1 233/60/1 +f 494/60/1 243/62/164 496/62/164 +f 244/59/19 497/62/162 498/59/19 +f 497/62/162 244/59/19 236/62/162 +f 492/61/163 238/60/2 240/61/163 +f 238/60/2 492/61/163 495/60/2 +f 501/59/165 500/54/165 499/59/165 +f 500/54/165 501/59/165 502/54/165 +f 505/59/166 504/54/167 503/54/166 +f 504/54/167 505/59/166 506/59/167 +f 503/54/15 500/54/15 502/54/15 +f 500/54/15 503/54/15 507/54/15 +f 507/54/15 503/54/15 504/54/15 +f 507/54/15 504/54/15 508/54/15 +f 508/54/15 504/54/15 509/54/15 +f 509/54/15 504/54/15 510/54/15 +f 502/54/168 505/59/166 503/54/166 +f 505/59/166 502/54/168 501/59/168 +f 509/54/170 511/59/169 508/54/169 +f 511/59/169 509/54/170 512/59/170 +f 506/59/167 510/54/171 504/54/167 +f 510/54/171 506/59/167 513/59/171 +f 509/54/172 513/59/172 512/59/172 +f 513/59/172 509/54/172 510/54/172 +f 514/59/173 500/54/174 507/54/173 +f 500/54/174 514/59/173 499/59/174 +f 499/59/19 505/59/19 501/59/19 +f 505/59/19 499/59/19 514/59/19 +f 505/59/19 514/59/19 506/59/19 +f 506/59/19 514/59/19 511/59/19 +f 506/59/19 511/59/19 512/59/19 +f 506/59/19 512/59/19 513/59/19 +f 511/59/169 507/54/173 508/54/169 +f 507/54/173 511/59/169 514/59/173 +f 517/63/175 516/54/176 515/61/175 +f 516/54/176 517/63/175 518/64/176 +f 521/59/178 520/65/177 519/62/177 +f 520/65/177 521/59/178 522/66/178 +f 525/60/180 524/65/179 523/62/179 +f 524/65/179 525/60/180 526/60/180 +f 517/63/181 527/63/181 518/64/181 +f 527/63/181 517/63/181 528/60/181 +f 527/63/181 528/60/181 526/60/181 +f 526/60/181 528/60/181 520/65/181 +f 526/60/181 520/65/181 524/65/181 +f 524/65/181 520/65/181 522/66/181 +f 527/63/182 525/60/180 529/61/182 +f 525/60/180 527/63/182 526/60/180 +f 527/63/182 516/54/176 518/64/176 +f 516/54/176 527/63/182 529/61/182 +f 521/59/178 524/65/179 522/66/178 +f 524/65/179 521/59/178 523/62/179 +f 519/62/177 528/60/183 530/60/183 +f 528/60/183 519/62/177 520/65/177 +f 528/60/183 515/61/175 530/60/183 +f 515/61/175 528/60/183 517/63/175 +f 531/60/184 254/61/185 253/60/184 +f 254/61/185 531/60/184 532/61/185 +f 532/61/181 534/61/181 533/54/181 +f 534/61/181 532/61/181 531/60/181 +f 534/61/181 531/60/181 535/60/181 +f 535/60/181 531/60/181 536/62/181 +f 535/60/181 536/62/181 537/62/181 +f 537/62/181 536/62/181 538/59/181 +f 258/60/187 537/62/186 248/62/186 +f 537/62/186 258/60/187 535/60/187 +f 533/54/15 254/61/185 532/61/185 +f 254/61/185 533/54/15 259/54/15 +f 534/61/188 258/60/187 261/61/188 +f 258/60/187 534/61/188 535/60/187 +f 534/61/188 259/54/15 533/54/15 +f 259/54/15 534/61/188 261/61/188 +f 247/59/19 537/62/186 538/59/19 +f 537/62/186 247/59/19 248/62/186 +f 255/62/189 531/60/184 253/60/184 +f 531/60/184 255/62/189 536/62/189 +f 255/62/189 538/59/19 536/62/189 +f 538/59/19 255/62/189 247/59/19 +f 540/61/188 273/54/15 539/54/15 +f 273/54/15 540/61/188 272/61/188 +f 541/61/181 540/61/181 539/54/181 +f 540/61/181 541/61/181 542/60/181 +f 540/61/181 542/60/181 543/60/181 +f 543/60/181 542/60/181 544/62/181 +f 543/60/181 544/62/181 545/62/181 +f 545/62/181 544/62/181 546/59/181 +f 275/62/189 546/59/19 544/62/189 +f 546/59/19 275/62/189 276/59/19 +f 542/60/184 266/61/185 265/60/184 +f 266/61/185 542/60/184 541/61/185 +f 539/54/15 266/61/185 541/61/185 +f 266/61/185 539/54/15 273/54/15 +f 270/60/187 545/62/186 268/62/186 +f 545/62/186 270/60/187 543/60/187 +f 275/62/189 542/60/184 265/60/184 +f 542/60/184 275/62/189 544/62/189 +f 276/59/19 545/62/186 546/59/19 +f 545/62/186 276/59/19 268/62/186 +f 540/61/188 270/60/187 272/61/188 +f 270/60/187 540/61/188 543/60/187 +f 549/59/190 548/54/190 547/59/190 +f 548/54/190 549/59/190 550/54/190 +f 553/59/173 552/54/169 551/54/173 +f 552/54/169 553/59/173 554/59/169 +f 551/54/15 548/54/15 550/54/15 +f 548/54/15 551/54/15 555/54/15 +f 555/54/15 551/54/15 552/54/15 +f 555/54/15 552/54/15 556/54/15 +f 556/54/15 552/54/15 557/54/15 +f 557/54/15 552/54/15 558/54/15 +f 550/54/174 553/59/173 551/54/173 +f 553/59/173 550/54/174 549/59/174 +f 557/54/171 559/59/167 556/54/167 +f 559/59/167 557/54/171 560/59/171 +f 554/59/169 558/54/170 552/54/169 +f 558/54/170 554/59/169 561/59/170 +f 557/54/191 561/59/191 560/59/191 +f 561/59/191 557/54/191 558/54/191 +f 562/59/166 548/54/168 555/54/166 +f 548/54/168 562/59/166 547/59/168 +f 547/59/19 553/59/19 549/59/19 +f 553/59/19 547/59/19 562/59/19 +f 553/59/19 562/59/19 554/59/19 +f 554/59/19 562/59/19 559/59/19 +f 554/59/19 559/59/19 560/59/19 +f 554/59/19 560/59/19 561/59/19 +f 559/59/167 555/54/166 556/54/167 +f 555/54/166 559/59/167 562/59/166 +f 352/68/4 358/67/4 357/67/4 +f 358/67/4 352/68/4 354/68/4 +f 364/68/4 362/67/4 366/67/4 +f 362/67/4 364/68/4 360/68/4 + +g wheels-front + +v 0.3124999 0.3594994 0.4168082 1 1 1 +v 0.2124999 0.3594994 0.4168082 1 1 1 +v 0.3124999 0.3594994 0.2999998 1 1 1 +v 0.2124999 0.3594994 0.2999998 1 1 1 +v 0.3124999 0 0.2999998 1 1 1 +v 0.3124999 0.06865826 0.2054998 1 1 1 +v 0.2124999 0 0.2999998 1 1 1 +v 0.2124999 0.06865826 0.2054998 1 1 1 +v 0.3124999 0 0.4168082 1 1 1 +v 0.2124999 0 0.4168082 1 1 1 +v 0.3124999 0.06865826 0.5113082 1 1 1 +v 0.2124999 0.06865826 0.5113082 1 1 1 +v 0.3124999 0.2908411 0.5113082 1 1 1 +v 0.2124999 0.2908411 0.5113082 1 1 1 +v 0.2124999 0.1797497 0.169404 1 1 1 +v 0.3124999 0.1797497 0.169404 1 1 1 +v 0.2124999 0.2908411 0.2054998 1 1 1 +v 0.3124999 0.2908411 0.2054998 1 1 1 +v 0.2124999 0.1797497 0.547404 1 1 1 +v 0.3124999 0.1797497 0.547404 1 1 1 +v 0.3124999 0.2908411 0.8945003 1 1 1 +v 0.2124999 0.2908411 0.8945003 1 1 1 +v 0.3124999 0.3594994 0.8000003 1 1 1 +v 0.2124999 0.3594994 0.8000003 1 1 1 +v 0.2124999 0.06865826 0.5886918 1 1 1 +v 0.3124999 0.06865826 0.5886918 1 1 1 +v 0.2124999 0.1797497 0.552596 1 1 1 +v 0.3124999 0.1797497 0.552596 1 1 1 +v 0.3124999 0.3594994 0.6831918 1 1 1 +v 0.2124999 0.3594994 0.6831918 1 1 1 +v 0.3124999 0.2908411 0.5886918 1 1 1 +v 0.2124999 0.2908411 0.5886918 1 1 1 +v 0.2124999 0.06865826 0.8945003 1 1 1 +v 0.2124999 0.1797497 0.9305961 1 1 1 +v 0.3124999 0.06865826 0.8945003 1 1 1 +v 0.3124999 0.1797497 0.9305961 1 1 1 +v 0.3124999 0 0.8000003 1 1 1 +v 0.2124999 0 0.8000003 1 1 1 +v 0.3124999 0 0.6831918 1 1 1 +v 0.2124999 0 0.6831918 1 1 1 +v -0.5475 0.1161986 0.7448664 1 1 1 +v -0.5475 0.1830202 0.6780448 1 1 1 +v -0.5789999 0.1324952 0.7444575 1 1 1 +v -0.5789999 0.1826113 0.6943414 1 1 1 +v -0.5789999 0.2302747 0.7420047 1 1 1 +v -0.5475 0.2465713 0.7415959 1 1 1 +v -0.5789999 0.1801585 0.7921209 1 1 1 +v -0.5475 0.1797497 0.8084174 1 1 1 +v -0.4874998 0.1797497 0.8354713 1 1 1 +v -0.5474998 0.1797497 0.8354713 1 1 1 +v -0.4874998 0.2364541 0.817047 1 1 1 +v -0.5474998 0.2364541 0.817047 1 1 1 +v -0.4874998 0.2714994 0.4435 1 1 1 +v -0.4874998 0.3594994 0.4435 1 1 1 +v -0.5474998 0.2714994 0.4435 1 1 1 +v -0.5474998 0.3594994 0.4435 1 1 1 +v -0.4874998 0.2714994 0.3311887 1 1 1 +v -0.5474998 0.2714994 0.3311887 1 1 1 +v -0.4874998 0.1230453 0.817047 1 1 1 +v -0.5474998 0.1230453 0.817047 1 1 1 +v -0.4874998 0.088 0.3311887 1 1 1 +v -0.5474998 0.088 0.3311887 1 1 1 +v -0.4874998 0.088 0.4194042 1 1 1 +v -0.5474998 0.088 0.4194042 1 1 1 +v -0.4874998 0.088 0.7688113 1 1 1 +v -0.5474998 0.088 0.7688113 1 1 1 +v -0.4874998 0.3594994 0.6565 1 1 1 +v -0.4874998 0.2714994 0.6565 1 1 1 +v -0.4874998 0.2714994 0.7688113 1 1 1 +v -0.4874998 0.1230453 0.2829531 1 1 1 +v -0.4874998 0.2364541 0.2829531 1 1 1 +v -0.4874998 0.1797497 0.2645287 1 1 1 +v -0.5474998 0.2714994 0.7688113 1 1 1 +v -0.5474998 0.2714994 0.6565 1 1 1 +v -0.5474998 0.3594994 0.6565 1 1 1 +v -0.5474998 0.2364541 0.2829531 1 1 1 +v -0.5474998 0.1230453 0.2829531 1 1 1 +v -0.5474998 0.1797497 0.2645287 1 1 1 +v -0.4874999 0.1797497 0.552596 1 1 1 +v -0.3874999 0.1797497 0.552596 1 1 1 +v -0.4874999 0.2908411 0.5886918 1 1 1 +v -0.3874999 0.2908411 0.5886918 1 1 1 +v -0.3874999 0 0.8000003 1 1 1 +v -0.3874999 0 0.6831918 1 1 1 +v -0.4874999 0 0.8000003 1 1 1 +v -0.4874999 0 0.6831918 1 1 1 +v -0.4874999 0.06865826 0.8945003 1 1 1 +v -0.4874999 0.1797497 0.9305961 1 1 1 +v -0.3874999 0.06865826 0.8945003 1 1 1 +v -0.3874999 0.1797497 0.9305961 1 1 1 +v -0.4874999 0.2908411 0.8945003 1 1 1 +v -0.3874999 0.2908411 0.8945003 1 1 1 +v -0.3874999 0.3594994 0.8000003 1 1 1 +v -0.4874999 0.3594994 0.8000003 1 1 1 +v -0.3874999 0.3594994 0.6831918 1 1 1 +v -0.4874999 0.3594994 0.6831918 1 1 1 +v -0.4874999 0.06865826 0.5886918 1 1 1 +v -0.3874999 0.06865826 0.5886918 1 1 1 +v -0.3874999 0 0.2999998 1 1 1 +v -0.3874999 0.06865826 0.2054998 1 1 1 +v -0.4874999 0 0.2999998 1 1 1 +v -0.4874999 0.06865826 0.2054998 1 1 1 +v -0.3874999 0.06865826 0.5113082 1 1 1 +v -0.3874999 0 0.4168082 1 1 1 +v -0.4874999 0.06865826 0.5113082 1 1 1 +v -0.4874999 0 0.4168082 1 1 1 +v -0.3874999 0.3594994 0.4168082 1 1 1 +v -0.4874999 0.3594994 0.4168082 1 1 1 +v -0.3874999 0.3594994 0.2999998 1 1 1 +v -0.4874999 0.3594994 0.2999998 1 1 1 +v -0.4874999 0.1797497 0.169404 1 1 1 +v -0.3874999 0.1797497 0.169404 1 1 1 +v -0.4874999 0.2908411 0.2054998 1 1 1 +v -0.3874999 0.2908411 0.2054998 1 1 1 +v -0.4874999 0.1797497 0.547404 1 1 1 +v -0.4874999 0.2908411 0.5113082 1 1 1 +v -0.3874999 0.1797497 0.547404 1 1 1 +v -0.3874999 0.2908411 0.5113082 1 1 1 +v -0.5475 0.1129281 0.3616748 1 1 1 +v -0.5475 0.1797497 0.2948532 1 1 1 +v -0.5789999 0.1292247 0.361266 1 1 1 +v -0.5789999 0.1793409 0.3111498 1 1 1 +v -0.5789999 0.2270042 0.3588131 1 1 1 +v -0.5789999 0.176888 0.4089293 1 1 1 +v -0.5475 0.1764792 0.4252259 1 1 1 +v -0.5475 0.2433008 0.3584043 1 1 1 +v 0.404 0.1826113 0.4056587 1 1 1 +v 0.3725 0.1830202 0.4219553 1 1 1 +v 0.404 0.2302747 0.3579953 1 1 1 +v 0.3725 0.2465713 0.3584042 1 1 1 +v 0.3725 0.1161986 0.3551337 1 1 1 +v 0.404 0.1324952 0.3555425 1 1 1 +v 0.3725 0.1797497 0.2915826 1 1 1 +v 0.404 0.1801585 0.3078791 1 1 1 +v 0.3725 0.1764792 0.6747742 1 1 1 +v 0.404 0.176888 0.6910707 1 1 1 +v 0.3725 0.2433008 0.7415957 1 1 1 +v 0.404 0.2270042 0.7411869 1 1 1 +v 0.404 0.1793409 0.7888502 1 1 1 +v 0.3725 0.1797497 0.8051468 1 1 1 +v 0.404 0.1292247 0.7387341 1 1 1 +v 0.3725 0.1129281 0.7383252 1 1 1 +v 0.3724998 0.088 0.7688113 1 1 1 +v 0.3724998 0.088 0.6805958 1 1 1 +v 0.3124998 0.088 0.7688113 1 1 1 +v 0.3124998 0.088 0.6805958 1 1 1 +v 0.3724998 0.088 0.3311887 1 1 1 +v 0.3124998 0.088 0.3311887 1 1 1 +v 0.3724998 0.1230453 0.817047 1 1 1 +v 0.3124998 0.1230453 0.817047 1 1 1 +v 0.3724998 0.2714994 0.7688113 1 1 1 +v 0.3124998 0.2714994 0.7688113 1 1 1 +v 0.3724998 0.2714994 0.6565 1 1 1 +v 0.3124998 0.2714994 0.6565 1 1 1 +v 0.3124998 0.1230453 0.2829531 1 1 1 +v 0.3724998 0.1230453 0.2829531 1 1 1 +v 0.3124998 0.1797497 0.2645287 1 1 1 +v 0.3724998 0.1797497 0.2645287 1 1 1 +v 0.3724998 0.2364541 0.817047 1 1 1 +v 0.3124998 0.2364541 0.817047 1 1 1 +v 0.3724998 0.2714994 0.4435 1 1 1 +v 0.3124998 0.2714994 0.4435 1 1 1 +v 0.3724998 0.2714994 0.3311887 1 1 1 +v 0.3124998 0.2714994 0.3311887 1 1 1 +v 0.3124998 0.2364541 0.2829531 1 1 1 +v 0.3724998 0.2364541 0.2829531 1 1 1 +v 0.3724998 0.3594994 0.6565 1 1 1 +v 0.3124998 0.3594994 0.6565 1 1 1 +v 0.3724998 0.3594994 0.4435 1 1 1 +v 0.3124998 0.3594994 0.4435 1 1 1 +v 0.3124998 0.1797497 0.8354713 1 1 1 +v 0.3724998 0.1797497 0.8354713 1 1 1 +v 0.2125 0.1686583 0.8 1 1 1 +v 0.2125 0.06865829 0.7 1 1 1 +v -0.3875 0.1686583 0.8 1 1 1 +v -0.3875 0.06865829 0.7 1 1 1 +v 0.2125 0.06865829 0.4 1 1 1 +v -0.3875 0.06865829 0.4 1 1 1 +v 0.2125 0.1686583 0.3 1 1 1 +v -0.3875 0.1686583 0.3 1 1 1 +v -0.3875 0.3594994 0.3 1 1 1 +v -0.3875 0.3594994 0.8 1 1 1 +v 0.2125 0.3594994 0.3 1 1 1 +v 0.2125 0.3594994 0.8 1 1 1 + +vn 0 0.9510565 0.309017 +vn 0 0.9510565 -0.309017 +vn 0 -0.9510565 -0.309017 +vn 0 -0.5877852 -0.809017 +vn 0 -0.9510565 0.309017 +vn 0 -0.5877852 0.809017 +vn 0 0.5877852 0.809017 +vn 0 0.5877852 -0.809017 +vn -0.3359215 -0.6660168 -0.6660168 +vn -0.3511235 0.6620847 -0.6620847 +vn -0.3359215 0.6660168 0.6660168 +vn -0.3511235 -0.6620847 0.6620847 +vn 0.3511235 0.6620847 0.6620847 +vn 0.3511235 -0.6620847 -0.6620847 +vn 0.3359215 0.6660168 -0.6660168 +vn 0.3359215 -0.6660168 0.6660168 +vn 0 -0.3826834 0.9238795 +vn 0 -0.9238795 0.3826834 +vn 0 -0.9238795 -0.3826834 +vn 0 -0.3826834 -0.9238795 + +vt 0.71875 0.0631966 +vt 0.71875 0.1868034 +vt 0.71875 0.1275086 +vt 0.71875 0.05 +vt 0.71875 0.1268814 +vt 0.71875 0.2 +vt 0.71875 0.1231186 +vt 0.71875 0.1224914 +vt 0.71875 0.0925874 +vt 0.71875 0.1343587 +vt 0.71875 0.1601748 +vt 0.71875 0.05081609 +vt 0.96875 0.1868034 +vt 0.96875 0.0631966 +vt 0.59375 0.09376608 +vt 0.59375 0.025 +vt 0.59375 0.225 + +usemtl colormap + +f 565/59/193 564/59/192 563/59/192 +f 564/59/192 565/59/193 566/59/193 +f 569/54/194 568/69/195 567/54/194 +f 568/69/195 569/54/194 570/69/195 +f 572/54/196 567/54/194 571/54/196 +f 567/54/194 572/54/196 569/54/194 +f 574/69/197 571/54/196 573/69/197 +f 571/54/196 574/69/197 572/54/196 +f 563/59/192 576/70/198 575/70/198 +f 576/70/198 563/59/192 564/59/192 +f 579/70/199 578/60/11 577/60/11 +f 578/60/11 579/70/199 580/70/199 +f 582/60/4 576/70/198 581/60/4 +f 576/70/198 582/60/4 575/70/198 +f 573/69/197 581/60/4 574/69/197 +f 581/60/4 573/69/197 582/60/4 +f 577/60/11 568/69/195 570/69/195 +f 568/69/195 577/60/11 578/60/11 +f 580/70/199 566/59/193 565/59/193 +f 566/59/193 580/70/199 579/70/199 +f 585/59/192 584/70/198 583/70/198 +f 584/70/198 585/59/192 586/59/192 +f 589/60/11 588/69/195 587/69/195 +f 588/69/195 589/60/11 590/60/11 +f 593/70/199 592/59/193 591/59/193 +f 592/59/193 593/70/199 594/70/199 +f 597/69/197 596/60/4 595/69/197 +f 596/60/4 597/69/197 598/60/4 +f 595/69/197 599/54/196 597/69/197 +f 599/54/196 595/69/197 600/54/196 +f 598/60/4 584/70/198 596/60/4 +f 584/70/198 598/60/4 583/70/198 +f 602/54/194 588/69/195 601/54/194 +f 588/69/195 602/54/194 587/69/195 +f 600/54/196 601/54/194 599/54/196 +f 601/54/194 600/54/196 602/54/194 +f 594/70/199 590/60/11 589/60/11 +f 590/60/11 594/70/199 593/70/199 +f 591/59/193 586/59/192 585/59/192 +f 586/59/192 591/59/193 592/59/193 +f 605/72/200 604/71/200 603/54/200 +f 604/71/200 605/72/200 606/73/200 +f 607/74/201 604/71/201 606/73/201 +f 604/71/201 607/74/201 608/59/201 +f 605/72/2 607/74/2 606/73/2 +f 607/74/2 605/72/2 609/75/2 +f 607/74/202 610/76/202 608/59/202 +f 610/76/202 607/74/202 609/75/202 +f 610/76/203 605/72/203 603/54/203 +f 605/72/203 610/76/203 609/75/203 +f 613/78/198 612/77/4 611/77/4 +f 612/77/4 613/78/198 614/78/198 +f 617/79/11 616/59/11 615/79/11 +f 616/59/11 617/79/11 618/59/11 +f 620/79/193 615/79/19 619/79/193 +f 615/79/19 620/79/193 617/79/19 +f 611/77/4 622/80/197 621/80/197 +f 622/80/197 611/77/4 612/77/4 +f 625/54/15 624/54/194 623/54/194 +f 624/54/194 625/54/15 626/54/15 +f 627/54/196 626/54/15 625/54/15 +f 626/54/15 627/54/196 628/54/196 +f 629/59/1 615/79/1 616/59/1 +f 630/79/1 615/79/1 629/59/1 +f 627/54/1 615/79/1 630/79/1 +f 627/54/1 630/79/1 631/79/1 +f 627/54/1 631/79/1 613/78/1 +f 627/54/1 613/78/1 621/80/1 +f 621/80/1 613/78/1 611/77/1 +f 625/54/1 615/79/1 627/54/1 +f 623/54/1 615/79/1 625/54/1 +f 623/54/1 619/79/1 615/79/1 +f 632/80/1 619/79/1 623/54/1 +f 632/80/1 633/78/1 619/79/1 +f 633/78/1 632/80/1 634/77/1 +f 635/79/192 613/78/198 631/79/192 +f 613/78/198 635/79/192 614/78/198 +f 629/59/4 636/79/4 630/79/4 +f 636/79/4 629/59/4 637/59/4 +f 636/79/19 631/79/192 630/79/19 +f 631/79/192 636/79/19 635/79/192 +f 618/59/19 629/59/19 616/59/19 +f 629/59/19 618/59/19 637/59/19 +f 638/78/199 619/79/193 633/78/199 +f 619/79/193 638/78/199 620/79/193 +f 621/80/197 628/54/196 627/54/196 +f 628/54/196 621/80/197 622/80/197 +f 623/54/194 639/80/195 632/80/195 +f 639/80/195 623/54/194 624/54/194 +f 640/77/11 633/78/199 634/77/11 +f 633/78/199 640/77/11 638/78/199 +f 637/59/2 618/59/2 636/79/2 +f 618/59/2 628/54/2 636/79/2 +f 636/79/2 628/54/2 635/79/2 +f 617/79/2 628/54/2 618/59/2 +f 635/79/2 628/54/2 622/80/2 +f 635/79/2 622/80/2 614/78/2 +f 614/78/2 622/80/2 612/77/2 +f 617/79/2 626/54/2 628/54/2 +f 617/79/2 624/54/2 626/54/2 +f 620/79/2 624/54/2 617/79/2 +f 638/78/2 624/54/2 620/79/2 +f 638/78/2 639/80/2 624/54/2 +f 639/80/2 638/78/2 640/77/2 +f 639/80/195 634/77/11 632/80/195 +f 634/77/11 639/80/195 640/77/11 +f 643/70/199 642/60/11 641/60/11 +f 642/60/11 643/70/199 644/70/199 +f 647/54/196 646/54/194 645/54/196 +f 646/54/194 647/54/196 648/54/194 +f 651/69/197 650/60/4 649/69/197 +f 650/60/4 651/69/197 652/60/4 +f 652/60/4 653/70/198 650/60/4 +f 653/70/198 652/60/4 654/70/198 +f 657/59/193 656/59/192 655/59/192 +f 656/59/192 657/59/193 658/59/193 +f 655/59/192 653/70/198 654/70/198 +f 653/70/198 655/59/192 656/59/192 +f 641/60/11 660/69/195 659/69/195 +f 660/69/195 641/60/11 642/60/11 +f 644/70/199 658/59/193 657/59/193 +f 658/59/193 644/70/199 643/70/199 +f 648/54/194 660/69/195 646/54/194 +f 660/69/195 648/54/194 659/69/195 +f 649/69/197 645/54/196 651/69/197 +f 645/54/196 649/69/197 647/54/196 +f 663/54/194 662/69/195 661/54/194 +f 662/69/195 663/54/194 664/69/195 +f 667/69/197 666/54/196 665/69/197 +f 666/54/196 667/69/197 668/54/196 +f 671/59/193 670/59/192 669/59/192 +f 670/59/192 671/59/193 672/59/193 +f 668/54/196 661/54/194 666/54/196 +f 661/54/194 668/54/196 663/54/194 +f 675/70/199 674/60/11 673/60/11 +f 674/60/11 675/70/199 676/70/199 +f 679/60/4 678/70/198 677/60/4 +f 678/70/198 679/60/4 680/70/198 +f 665/69/197 677/60/4 667/69/197 +f 677/60/4 665/69/197 679/60/4 +f 669/59/192 678/70/198 680/70/198 +f 678/70/198 669/59/192 670/59/192 +f 673/60/11 662/69/195 664/69/195 +f 662/69/195 673/60/11 674/60/11 +f 676/70/199 672/59/193 671/59/193 +f 672/59/193 676/70/199 675/70/199 +f 683/72/200 682/71/200 681/54/200 +f 682/71/200 683/72/200 684/73/200 +f 683/72/2 685/74/2 684/73/2 +f 685/74/2 683/72/2 686/75/2 +f 687/76/203 683/72/203 681/54/203 +f 683/72/203 687/76/203 686/75/203 +f 685/74/201 682/71/201 684/73/201 +f 682/71/201 685/74/201 688/59/201 +f 685/74/202 687/76/202 688/59/202 +f 687/76/202 685/74/202 686/75/202 +f 691/74/204 690/71/204 689/73/204 +f 690/71/204 691/74/204 692/59/204 +f 695/76/205 694/72/205 693/54/205 +f 694/72/205 695/76/205 696/75/205 +f 691/74/1 694/72/1 696/75/1 +f 694/72/1 691/74/1 689/73/1 +f 692/59/206 696/75/206 695/76/206 +f 696/75/206 692/59/206 691/74/206 +f 690/71/207 694/72/207 689/73/207 +f 694/72/207 690/71/207 693/54/207 +f 699/59/206 698/75/206 697/76/206 +f 698/75/206 699/59/206 700/74/206 +f 700/74/204 702/71/204 701/73/204 +f 702/71/204 700/74/204 699/59/204 +f 702/71/207 703/72/207 701/73/207 +f 703/72/207 702/71/207 704/54/207 +f 697/76/205 703/72/205 704/54/205 +f 703/72/205 697/76/205 698/75/205 +f 700/74/1 703/72/1 698/75/1 +f 703/72/1 700/74/1 701/73/1 +f 707/54/196 706/54/15 705/54/196 +f 706/54/15 707/54/196 708/54/15 +f 708/54/15 709/54/194 706/54/15 +f 709/54/194 708/54/15 710/54/194 +f 712/80/197 705/54/196 711/80/197 +f 705/54/196 712/80/197 707/54/196 +f 715/79/19 714/79/192 713/79/192 +f 714/79/192 715/79/19 716/79/19 +f 719/77/11 718/80/195 717/80/195 +f 718/80/195 719/77/11 720/77/11 +f 713/79/192 722/78/198 721/78/198 +f 722/78/198 713/79/192 714/79/192 +f 725/79/193 724/79/19 723/79/19 +f 724/79/19 725/79/193 726/79/193 +f 727/78/199 720/77/11 719/77/11 +f 720/77/11 727/78/199 728/78/199 +f 731/59/19 730/59/19 729/59/19 +f 730/59/19 731/59/19 732/59/19 +f 734/77/4 722/78/198 733/77/4 +f 722/78/198 734/77/4 721/78/198 +f 729/59/1 723/79/1 731/59/1 +f 715/79/1 723/79/1 729/59/1 +f 706/54/1 723/79/1 715/79/1 +f 706/54/1 715/79/1 713/79/1 +f 709/54/1 723/79/1 706/54/1 +f 706/54/1 713/79/1 705/54/1 +f 709/54/1 725/79/1 723/79/1 +f 705/54/1 713/79/1 711/80/1 +f 711/80/1 713/79/1 721/78/1 +f 711/80/1 721/78/1 734/77/1 +f 718/80/1 725/79/1 709/54/1 +f 718/80/1 728/78/1 725/79/1 +f 728/78/1 718/80/1 720/77/1 +f 717/80/2 727/78/2 719/77/2 +f 727/78/2 717/80/2 710/54/2 +f 727/78/2 710/54/2 726/79/2 +f 726/79/2 710/54/2 708/54/2 +f 726/79/2 708/54/2 724/79/2 +f 724/79/2 708/54/2 732/59/2 +f 732/59/2 708/54/2 716/79/2 +f 730/59/2 732/59/2 716/79/2 +f 716/79/2 708/54/2 714/79/2 +f 714/79/2 708/54/2 707/54/2 +f 714/79/2 707/54/2 712/80/2 +f 714/79/2 712/80/2 722/78/2 +f 722/78/2 712/80/2 733/77/2 +f 715/79/4 730/59/4 716/79/4 +f 730/59/4 715/79/4 729/59/4 +f 728/78/199 726/79/193 725/79/193 +f 726/79/193 728/78/199 727/78/199 +f 711/80/197 733/77/4 712/80/197 +f 733/77/4 711/80/197 734/77/4 +f 732/59/11 723/79/11 724/79/11 +f 723/79/11 732/59/11 731/59/11 +f 710/54/194 718/80/195 709/54/194 +f 718/80/195 710/54/194 717/80/195 +f 570/82/2 579/81/2 577/29/2 +f 579/81/2 570/82/2 569/10/2 +f 579/81/2 569/10/2 566/6/2 +f 566/6/2 569/10/2 572/10/2 +f 566/6/2 572/10/2 564/6/2 +f 564/6/2 572/10/2 574/82/2 +f 564/6/2 574/82/2 576/81/2 +f 576/81/2 574/82/2 581/29/2 +f 580/81/1 568/82/1 578/29/1 +f 568/82/1 580/81/1 565/6/1 +f 568/82/1 565/6/1 567/10/1 +f 567/10/1 565/6/1 563/6/1 +f 567/10/1 563/6/1 571/10/1 +f 571/10/1 563/6/1 575/81/1 +f 571/10/1 575/81/1 573/82/1 +f 573/82/1 575/81/1 582/29/1 +f 593/81/1 588/82/1 590/29/1 +f 588/82/1 593/81/1 591/6/1 +f 588/82/1 591/6/1 601/10/1 +f 601/10/1 591/6/1 585/6/1 +f 601/10/1 585/6/1 599/10/1 +f 599/10/1 585/6/1 583/81/1 +f 599/10/1 583/81/1 597/82/1 +f 597/82/1 583/81/1 598/29/1 +f 587/82/2 594/81/2 589/29/2 +f 594/81/2 587/82/2 602/10/2 +f 594/81/2 602/10/2 592/6/2 +f 592/6/2 602/10/2 600/10/2 +f 592/6/2 600/10/2 586/6/2 +f 586/6/2 600/10/2 595/82/2 +f 586/6/2 595/82/2 584/81/2 +f 584/81/2 595/82/2 596/29/2 +f 659/82/2 643/81/2 641/29/2 +f 643/81/2 659/82/2 648/10/2 +f 643/81/2 648/10/2 658/6/2 +f 658/6/2 648/10/2 647/10/2 +f 658/6/2 647/10/2 656/6/2 +f 656/6/2 647/10/2 649/82/2 +f 656/6/2 649/82/2 653/81/2 +f 653/81/2 649/82/2 650/29/2 +f 644/81/1 660/82/1 642/29/1 +f 660/82/1 644/81/1 657/6/1 +f 660/82/1 657/6/1 646/10/1 +f 646/10/1 657/6/1 655/6/1 +f 646/10/1 655/6/1 645/10/1 +f 645/10/1 655/6/1 654/81/1 +f 645/10/1 654/81/1 651/82/1 +f 651/82/1 654/81/1 652/29/1 +f 676/81/1 662/82/1 674/29/1 +f 662/82/1 676/81/1 671/6/1 +f 662/82/1 671/6/1 661/10/1 +f 661/10/1 671/6/1 669/6/1 +f 661/10/1 669/6/1 666/10/1 +f 666/10/1 669/6/1 680/81/1 +f 666/10/1 680/81/1 665/82/1 +f 665/82/1 680/81/1 679/29/1 +f 664/82/2 675/81/2 673/29/2 +f 675/81/2 664/82/2 663/10/2 +f 675/81/2 663/10/2 672/6/2 +f 672/6/2 663/10/2 668/10/2 +f 672/6/2 668/10/2 670/6/2 +f 670/6/2 668/10/2 667/82/2 +f 670/6/2 667/82/2 678/81/2 +f 678/81/2 667/82/2 677/29/2 +f 737/83/208 736/84/209 735/83/208 +f 736/84/209 737/83/208 738/84/209 +f 736/84/209 740/84/210 739/84/210 +f 740/84/210 736/84/209 738/84/209 +f 740/84/210 741/83/211 739/84/210 +f 741/83/211 740/84/210 742/83/211 +f 740/84/2 743/85/2 742/83/2 +f 743/85/2 740/84/2 744/85/2 +f 744/85/2 740/84/2 738/84/2 +f 744/85/2 738/84/2 737/83/2 +f 746/85/1 741/83/1 745/85/1 +f 741/83/1 746/85/1 739/84/1 +f 739/84/1 746/85/1 736/84/1 +f 736/84/1 746/85/1 735/83/1 +f 743/85/11 741/83/211 742/83/211 +f 741/83/211 743/85/11 745/85/11 +f 746/85/4 737/83/208 735/83/208 +f 737/83/208 746/85/4 744/85/4 +f 745/85/19 744/85/19 746/85/19 +f 744/85/19 745/85/19 743/85/19 + +g wheels-back + +v 0.3124999 0.3594994 -0.6831918 1 1 1 +v 0.2124999 0.3594994 -0.6831918 1 1 1 +v 0.3124999 0.3594994 -0.8000003 1 1 1 +v 0.2124999 0.3594994 -0.8000003 1 1 1 +v 0.3124999 0 -0.8000003 1 1 1 +v 0.3124999 0.06865826 -0.8945003 1 1 1 +v 0.2124999 0 -0.8000003 1 1 1 +v 0.2124999 0.06865826 -0.8945003 1 1 1 +v 0.3124999 0 -0.6831918 1 1 1 +v 0.2124999 0 -0.6831918 1 1 1 +v 0.3124999 0.06865826 -0.5886918 1 1 1 +v 0.2124999 0.06865826 -0.5886918 1 1 1 +v 0.3124999 0.2908411 -0.5886918 1 1 1 +v 0.2124999 0.2908411 -0.5886918 1 1 1 +v 0.2124999 0.1797497 -0.9305961 1 1 1 +v 0.3124999 0.1797497 -0.9305961 1 1 1 +v 0.2124999 0.2908411 -0.8945003 1 1 1 +v 0.3124999 0.2908411 -0.8945003 1 1 1 +v 0.2124999 0.1797497 -0.552596 1 1 1 +v 0.3124999 0.1797497 -0.552596 1 1 1 +v 0.3124999 0.2908411 -0.2054998 1 1 1 +v 0.2124999 0.2908411 -0.2054998 1 1 1 +v 0.3124999 0.3594994 -0.2999998 1 1 1 +v 0.2124999 0.3594994 -0.2999998 1 1 1 +v 0.2124999 0.06865826 -0.5113082 1 1 1 +v 0.3124999 0.06865826 -0.5113082 1 1 1 +v 0.2124999 0.1797497 -0.547404 1 1 1 +v 0.3124999 0.1797497 -0.547404 1 1 1 +v 0.3124999 0.3594994 -0.4168082 1 1 1 +v 0.2124999 0.3594994 -0.4168082 1 1 1 +v 0.3124999 0.2908411 -0.5113082 1 1 1 +v 0.2124999 0.2908411 -0.5113082 1 1 1 +v 0.2124999 0.06865826 -0.2054998 1 1 1 +v 0.2124999 0.1797497 -0.169404 1 1 1 +v 0.3124999 0.06865826 -0.2054998 1 1 1 +v 0.3124999 0.1797497 -0.169404 1 1 1 +v 0.3124999 0 -0.2999998 1 1 1 +v 0.2124999 0 -0.2999998 1 1 1 +v 0.3124999 0 -0.4168082 1 1 1 +v 0.2124999 0 -0.4168082 1 1 1 +v -0.5475 0.1161986 -0.3551337 1 1 1 +v -0.5475 0.1830202 -0.4219553 1 1 1 +v -0.5789999 0.1324952 -0.3555425 1 1 1 +v -0.5789999 0.1826113 -0.4056587 1 1 1 +v -0.5789999 0.2302747 -0.3579953 1 1 1 +v -0.5475 0.2465713 -0.3584042 1 1 1 +v -0.5789999 0.1801585 -0.3078791 1 1 1 +v -0.5475 0.1797497 -0.2915826 1 1 1 +v -0.4874998 0.1797497 -0.2645287 1 1 1 +v -0.5474998 0.1797497 -0.2645287 1 1 1 +v -0.4874998 0.2364541 -0.2829531 1 1 1 +v -0.5474998 0.2364541 -0.2829531 1 1 1 +v -0.4874998 0.2714994 -0.6565 1 1 1 +v -0.4874998 0.3594994 -0.6565 1 1 1 +v -0.5474998 0.2714994 -0.6565 1 1 1 +v -0.5474998 0.3594994 -0.6565 1 1 1 +v -0.4874998 0.2714994 -0.7688113 1 1 1 +v -0.5474998 0.2714994 -0.7688113 1 1 1 +v -0.4874998 0.1230453 -0.2829531 1 1 1 +v -0.5474998 0.1230453 -0.2829531 1 1 1 +v -0.4874998 0.088 -0.7688113 1 1 1 +v -0.5474998 0.088 -0.7688113 1 1 1 +v -0.4874998 0.088 -0.6805958 1 1 1 +v -0.5474998 0.088 -0.6805958 1 1 1 +v -0.4874998 0.088 -0.3311887 1 1 1 +v -0.5474998 0.088 -0.3311887 1 1 1 +v -0.4874998 0.3594994 -0.4435 1 1 1 +v -0.4874998 0.2714994 -0.4435 1 1 1 +v -0.4874998 0.2714994 -0.3311887 1 1 1 +v -0.4874998 0.1230453 -0.817047 1 1 1 +v -0.4874998 0.2364541 -0.817047 1 1 1 +v -0.4874998 0.1797497 -0.8354713 1 1 1 +v -0.5474998 0.2714994 -0.3311887 1 1 1 +v -0.5474998 0.2714994 -0.4435 1 1 1 +v -0.5474998 0.3594994 -0.4435 1 1 1 +v -0.5474998 0.2364541 -0.817047 1 1 1 +v -0.5474998 0.1230453 -0.817047 1 1 1 +v -0.5474998 0.1797497 -0.8354713 1 1 1 +v -0.4874999 0.1797497 -0.547404 1 1 1 +v -0.3874999 0.1797497 -0.547404 1 1 1 +v -0.4874999 0.2908411 -0.5113082 1 1 1 +v -0.3874999 0.2908411 -0.5113082 1 1 1 +v -0.3874999 0 -0.2999998 1 1 1 +v -0.3874999 0 -0.4168082 1 1 1 +v -0.4874999 0 -0.2999998 1 1 1 +v -0.4874999 0 -0.4168082 1 1 1 +v -0.4874999 0.06865826 -0.2054998 1 1 1 +v -0.4874999 0.1797497 -0.169404 1 1 1 +v -0.3874999 0.06865826 -0.2054998 1 1 1 +v -0.3874999 0.1797497 -0.169404 1 1 1 +v -0.4874999 0.2908411 -0.2054998 1 1 1 +v -0.3874999 0.2908411 -0.2054998 1 1 1 +v -0.3874999 0.3594994 -0.2999998 1 1 1 +v -0.4874999 0.3594994 -0.2999998 1 1 1 +v -0.3874999 0.3594994 -0.4168082 1 1 1 +v -0.4874999 0.3594994 -0.4168082 1 1 1 +v -0.4874999 0.06865826 -0.5113082 1 1 1 +v -0.3874999 0.06865826 -0.5113082 1 1 1 +v -0.3874999 0 -0.8000003 1 1 1 +v -0.3874999 0.06865826 -0.8945003 1 1 1 +v -0.4874999 0 -0.8000003 1 1 1 +v -0.4874999 0.06865826 -0.8945003 1 1 1 +v -0.3874999 0.06865826 -0.5886918 1 1 1 +v -0.3874999 0 -0.6831918 1 1 1 +v -0.4874999 0.06865826 -0.5886918 1 1 1 +v -0.4874999 0 -0.6831918 1 1 1 +v -0.3874999 0.3594994 -0.6831918 1 1 1 +v -0.4874999 0.3594994 -0.6831918 1 1 1 +v -0.3874999 0.3594994 -0.8000003 1 1 1 +v -0.4874999 0.3594994 -0.8000003 1 1 1 +v -0.4874999 0.1797497 -0.9305961 1 1 1 +v -0.3874999 0.1797497 -0.9305961 1 1 1 +v -0.4874999 0.2908411 -0.8945003 1 1 1 +v -0.3874999 0.2908411 -0.8945003 1 1 1 +v -0.4874999 0.1797497 -0.552596 1 1 1 +v -0.4874999 0.2908411 -0.5886918 1 1 1 +v -0.3874999 0.1797497 -0.552596 1 1 1 +v -0.3874999 0.2908411 -0.5886918 1 1 1 +v -0.5475 0.1129281 -0.7383252 1 1 1 +v -0.5475 0.1797497 -0.8051468 1 1 1 +v -0.5789999 0.1292247 -0.7387341 1 1 1 +v -0.5789999 0.1793409 -0.7888502 1 1 1 +v -0.5789999 0.2270042 -0.7411869 1 1 1 +v -0.5789999 0.176888 -0.6910707 1 1 1 +v -0.5475 0.1764792 -0.6747742 1 1 1 +v -0.5475 0.2433008 -0.7415957 1 1 1 +v 0.404 0.1826113 -0.6943414 1 1 1 +v 0.3725 0.1830202 -0.6780448 1 1 1 +v 0.404 0.2302747 -0.7420047 1 1 1 +v 0.3725 0.2465713 -0.7415959 1 1 1 +v 0.3725 0.1161986 -0.7448664 1 1 1 +v 0.404 0.1324952 -0.7444575 1 1 1 +v 0.3725 0.1797497 -0.8084174 1 1 1 +v 0.404 0.1801585 -0.7921209 1 1 1 +v 0.3725 0.1764792 -0.4252259 1 1 1 +v 0.404 0.176888 -0.4089293 1 1 1 +v 0.3725 0.2433008 -0.3584043 1 1 1 +v 0.404 0.2270042 -0.3588131 1 1 1 +v 0.404 0.1793409 -0.3111498 1 1 1 +v 0.3725 0.1797497 -0.2948532 1 1 1 +v 0.404 0.1292247 -0.361266 1 1 1 +v 0.3725 0.1129281 -0.3616748 1 1 1 +v 0.3724998 0.088 -0.3311887 1 1 1 +v 0.3724998 0.088 -0.4194042 1 1 1 +v 0.3124998 0.088 -0.3311887 1 1 1 +v 0.3124998 0.088 -0.4194042 1 1 1 +v 0.3724998 0.088 -0.7688113 1 1 1 +v 0.3124998 0.088 -0.7688113 1 1 1 +v 0.3724998 0.1230453 -0.2829531 1 1 1 +v 0.3124998 0.1230453 -0.2829531 1 1 1 +v 0.3724998 0.2714994 -0.3311887 1 1 1 +v 0.3124998 0.2714994 -0.3311887 1 1 1 +v 0.3724998 0.2714994 -0.4435 1 1 1 +v 0.3124998 0.2714994 -0.4435 1 1 1 +v 0.3124998 0.1230453 -0.817047 1 1 1 +v 0.3724998 0.1230453 -0.817047 1 1 1 +v 0.3124998 0.1797497 -0.8354713 1 1 1 +v 0.3724998 0.1797497 -0.8354713 1 1 1 +v 0.3724998 0.2364541 -0.2829531 1 1 1 +v 0.3124998 0.2364541 -0.2829531 1 1 1 +v 0.3724998 0.2714994 -0.6565 1 1 1 +v 0.3124998 0.2714994 -0.6565 1 1 1 +v 0.3724998 0.2714994 -0.7688113 1 1 1 +v 0.3124998 0.2714994 -0.7688113 1 1 1 +v 0.3124998 0.2364541 -0.817047 1 1 1 +v 0.3724998 0.2364541 -0.817047 1 1 1 +v 0.3724998 0.3594994 -0.4435 1 1 1 +v 0.3124998 0.3594994 -0.4435 1 1 1 +v 0.3724998 0.3594994 -0.6565 1 1 1 +v 0.3124998 0.3594994 -0.6565 1 1 1 +v 0.3124998 0.1797497 -0.2645287 1 1 1 +v 0.3724998 0.1797497 -0.2645287 1 1 1 +v 0.2125 0.1686583 -0.3 1 1 1 +v 0.2125 0.06865829 -0.4 1 1 1 +v -0.3875 0.1686583 -0.3 1 1 1 +v -0.3875 0.06865829 -0.4 1 1 1 +v 0.2125 0.06865829 -0.7 1 1 1 +v -0.3875 0.06865829 -0.7 1 1 1 +v 0.2125 0.1686583 -0.8 1 1 1 +v -0.3875 0.1686583 -0.8 1 1 1 +v -0.3875 0.3594994 -0.8 1 1 1 +v -0.3875 0.3594994 -0.3 1 1 1 +v 0.2125 0.3594994 -0.8 1 1 1 +v 0.2125 0.3594994 -0.3 1 1 1 + + + +usemtl colormap + +f 749/59/193 748/59/192 747/59/192 +f 748/59/192 749/59/193 750/59/193 +f 753/54/194 752/69/195 751/54/194 +f 752/69/195 753/54/194 754/69/195 +f 756/54/196 751/54/194 755/54/196 +f 751/54/194 756/54/196 753/54/194 +f 758/69/197 755/54/196 757/69/197 +f 755/54/196 758/69/197 756/54/196 +f 747/59/192 760/70/198 759/70/198 +f 760/70/198 747/59/192 748/59/192 +f 763/70/199 762/60/11 761/60/11 +f 762/60/11 763/70/199 764/70/199 +f 766/60/4 760/70/198 765/60/4 +f 760/70/198 766/60/4 759/70/198 +f 757/69/197 765/60/4 758/69/197 +f 765/60/4 757/69/197 766/60/4 +f 761/60/11 752/69/195 754/69/195 +f 752/69/195 761/60/11 762/60/11 +f 764/70/199 750/59/193 749/59/193 +f 750/59/193 764/70/199 763/70/199 +f 769/59/192 768/70/198 767/70/198 +f 768/70/198 769/59/192 770/59/192 +f 773/60/11 772/69/195 771/69/195 +f 772/69/195 773/60/11 774/60/11 +f 777/70/199 776/59/193 775/59/193 +f 776/59/193 777/70/199 778/70/199 +f 781/69/197 780/60/4 779/69/197 +f 780/60/4 781/69/197 782/60/4 +f 779/69/197 783/54/196 781/69/197 +f 783/54/196 779/69/197 784/54/196 +f 782/60/4 768/70/198 780/60/4 +f 768/70/198 782/60/4 767/70/198 +f 786/54/194 772/69/195 785/54/194 +f 772/69/195 786/54/194 771/69/195 +f 784/54/196 785/54/194 783/54/196 +f 785/54/194 784/54/196 786/54/194 +f 778/70/199 774/60/11 773/60/11 +f 774/60/11 778/70/199 777/70/199 +f 775/59/193 770/59/192 769/59/192 +f 770/59/192 775/59/193 776/59/193 +f 789/72/200 788/71/200 787/54/200 +f 788/71/200 789/72/200 790/73/200 +f 791/74/201 788/71/201 790/73/201 +f 788/71/201 791/74/201 792/59/201 +f 789/72/2 791/74/2 790/73/2 +f 791/74/2 789/72/2 793/75/2 +f 791/74/202 794/76/202 792/59/202 +f 794/76/202 791/74/202 793/75/202 +f 794/76/203 789/72/203 787/54/203 +f 789/72/203 794/76/203 793/75/203 +f 797/78/198 796/77/4 795/77/4 +f 796/77/4 797/78/198 798/78/198 +f 801/79/11 800/59/11 799/79/11 +f 800/59/11 801/79/11 802/59/11 +f 804/79/193 799/79/19 803/79/193 +f 799/79/19 804/79/193 801/79/19 +f 795/77/4 806/80/197 805/80/197 +f 806/80/197 795/77/4 796/77/4 +f 809/54/15 808/54/194 807/54/194 +f 808/54/194 809/54/15 810/54/15 +f 811/54/196 810/54/15 809/54/15 +f 810/54/15 811/54/196 812/54/196 +f 813/59/1 799/79/1 800/59/1 +f 814/79/1 799/79/1 813/59/1 +f 811/54/1 799/79/1 814/79/1 +f 811/54/1 814/79/1 815/79/1 +f 811/54/1 815/79/1 797/78/1 +f 811/54/1 797/78/1 805/80/1 +f 805/80/1 797/78/1 795/77/1 +f 809/54/1 799/79/1 811/54/1 +f 807/54/1 799/79/1 809/54/1 +f 807/54/1 803/79/1 799/79/1 +f 816/80/1 803/79/1 807/54/1 +f 816/80/1 817/78/1 803/79/1 +f 817/78/1 816/80/1 818/77/1 +f 819/79/192 797/78/198 815/79/192 +f 797/78/198 819/79/192 798/78/198 +f 813/59/4 820/79/4 814/79/4 +f 820/79/4 813/59/4 821/59/4 +f 820/79/19 815/79/192 814/79/19 +f 815/79/192 820/79/19 819/79/192 +f 802/59/19 813/59/19 800/59/19 +f 813/59/19 802/59/19 821/59/19 +f 822/78/199 803/79/193 817/78/199 +f 803/79/193 822/78/199 804/79/193 +f 805/80/197 812/54/196 811/54/196 +f 812/54/196 805/80/197 806/80/197 +f 807/54/194 823/80/195 816/80/195 +f 823/80/195 807/54/194 808/54/194 +f 824/77/11 817/78/199 818/77/11 +f 817/78/199 824/77/11 822/78/199 +f 821/59/2 802/59/2 820/79/2 +f 802/59/2 812/54/2 820/79/2 +f 820/79/2 812/54/2 819/79/2 +f 801/79/2 812/54/2 802/59/2 +f 819/79/2 812/54/2 806/80/2 +f 819/79/2 806/80/2 798/78/2 +f 798/78/2 806/80/2 796/77/2 +f 801/79/2 810/54/2 812/54/2 +f 801/79/2 808/54/2 810/54/2 +f 804/79/2 808/54/2 801/79/2 +f 822/78/2 808/54/2 804/79/2 +f 822/78/2 823/80/2 808/54/2 +f 823/80/2 822/78/2 824/77/2 +f 823/80/195 818/77/11 816/80/195 +f 818/77/11 823/80/195 824/77/11 +f 827/70/199 826/60/11 825/60/11 +f 826/60/11 827/70/199 828/70/199 +f 831/54/196 830/54/194 829/54/196 +f 830/54/194 831/54/196 832/54/194 +f 835/69/197 834/60/4 833/69/197 +f 834/60/4 835/69/197 836/60/4 +f 836/60/4 837/70/198 834/60/4 +f 837/70/198 836/60/4 838/70/198 +f 841/59/193 840/59/192 839/59/192 +f 840/59/192 841/59/193 842/59/193 +f 839/59/192 837/70/198 838/70/198 +f 837/70/198 839/59/192 840/59/192 +f 825/60/11 844/69/195 843/69/195 +f 844/69/195 825/60/11 826/60/11 +f 828/70/199 842/59/193 841/59/193 +f 842/59/193 828/70/199 827/70/199 +f 832/54/194 844/69/195 830/54/194 +f 844/69/195 832/54/194 843/69/195 +f 833/69/197 829/54/196 835/69/197 +f 829/54/196 833/69/197 831/54/196 +f 847/54/194 846/69/195 845/54/194 +f 846/69/195 847/54/194 848/69/195 +f 851/69/197 850/54/196 849/69/197 +f 850/54/196 851/69/197 852/54/196 +f 855/59/193 854/59/192 853/59/192 +f 854/59/192 855/59/193 856/59/193 +f 852/54/196 845/54/194 850/54/196 +f 845/54/194 852/54/196 847/54/194 +f 859/70/199 858/60/11 857/60/11 +f 858/60/11 859/70/199 860/70/199 +f 863/60/4 862/70/198 861/60/4 +f 862/70/198 863/60/4 864/70/198 +f 849/69/197 861/60/4 851/69/197 +f 861/60/4 849/69/197 863/60/4 +f 853/59/192 862/70/198 864/70/198 +f 862/70/198 853/59/192 854/59/192 +f 857/60/11 846/69/195 848/69/195 +f 846/69/195 857/60/11 858/60/11 +f 860/70/199 856/59/193 855/59/193 +f 856/59/193 860/70/199 859/70/199 +f 867/72/200 866/71/200 865/54/200 +f 866/71/200 867/72/200 868/73/200 +f 867/72/2 869/74/2 868/73/2 +f 869/74/2 867/72/2 870/75/2 +f 871/76/203 867/72/203 865/54/203 +f 867/72/203 871/76/203 870/75/203 +f 869/74/201 866/71/201 868/73/201 +f 866/71/201 869/74/201 872/59/201 +f 869/74/202 871/76/202 872/59/202 +f 871/76/202 869/74/202 870/75/202 +f 875/74/204 874/71/204 873/73/204 +f 874/71/204 875/74/204 876/59/204 +f 879/76/205 878/72/205 877/54/205 +f 878/72/205 879/76/205 880/75/205 +f 875/74/1 878/72/1 880/75/1 +f 878/72/1 875/74/1 873/73/1 +f 876/59/206 880/75/206 879/76/206 +f 880/75/206 876/59/206 875/74/206 +f 874/71/207 878/72/207 873/73/207 +f 878/72/207 874/71/207 877/54/207 +f 883/59/206 882/75/206 881/76/206 +f 882/75/206 883/59/206 884/74/206 +f 884/74/204 886/71/204 885/73/204 +f 886/71/204 884/74/204 883/59/204 +f 886/71/207 887/72/207 885/73/207 +f 887/72/207 886/71/207 888/54/207 +f 881/76/205 887/72/205 888/54/205 +f 887/72/205 881/76/205 882/75/205 +f 884/74/1 887/72/1 882/75/1 +f 887/72/1 884/74/1 885/73/1 +f 891/54/196 890/54/15 889/54/196 +f 890/54/15 891/54/196 892/54/15 +f 892/54/15 893/54/194 890/54/15 +f 893/54/194 892/54/15 894/54/194 +f 896/80/197 889/54/196 895/80/197 +f 889/54/196 896/80/197 891/54/196 +f 899/79/19 898/79/192 897/79/192 +f 898/79/192 899/79/19 900/79/19 +f 903/77/11 902/80/195 901/80/195 +f 902/80/195 903/77/11 904/77/11 +f 897/79/192 906/78/198 905/78/198 +f 906/78/198 897/79/192 898/79/192 +f 909/79/193 908/79/19 907/79/19 +f 908/79/19 909/79/193 910/79/193 +f 911/78/199 904/77/11 903/77/11 +f 904/77/11 911/78/199 912/78/199 +f 915/59/19 914/59/19 913/59/19 +f 914/59/19 915/59/19 916/59/19 +f 918/77/4 906/78/198 917/77/4 +f 906/78/198 918/77/4 905/78/198 +f 913/59/1 907/79/1 915/59/1 +f 899/79/1 907/79/1 913/59/1 +f 890/54/1 907/79/1 899/79/1 +f 890/54/1 899/79/1 897/79/1 +f 893/54/1 907/79/1 890/54/1 +f 890/54/1 897/79/1 889/54/1 +f 893/54/1 909/79/1 907/79/1 +f 889/54/1 897/79/1 895/80/1 +f 895/80/1 897/79/1 905/78/1 +f 895/80/1 905/78/1 918/77/1 +f 902/80/1 909/79/1 893/54/1 +f 902/80/1 912/78/1 909/79/1 +f 912/78/1 902/80/1 904/77/1 +f 901/80/2 911/78/2 903/77/2 +f 911/78/2 901/80/2 894/54/2 +f 911/78/2 894/54/2 910/79/2 +f 910/79/2 894/54/2 892/54/2 +f 910/79/2 892/54/2 908/79/2 +f 908/79/2 892/54/2 916/59/2 +f 916/59/2 892/54/2 900/79/2 +f 914/59/2 916/59/2 900/79/2 +f 900/79/2 892/54/2 898/79/2 +f 898/79/2 892/54/2 891/54/2 +f 898/79/2 891/54/2 896/80/2 +f 898/79/2 896/80/2 906/78/2 +f 906/78/2 896/80/2 917/77/2 +f 899/79/4 914/59/4 900/79/4 +f 914/59/4 899/79/4 913/59/4 +f 912/78/199 910/79/193 909/79/193 +f 910/79/193 912/78/199 911/78/199 +f 895/80/197 917/77/4 896/80/197 +f 917/77/4 895/80/197 918/77/4 +f 916/59/11 907/79/11 908/79/11 +f 907/79/11 916/59/11 915/59/11 +f 894/54/194 902/80/195 893/54/194 +f 902/80/195 894/54/194 901/80/195 +f 754/82/2 763/81/2 761/29/2 +f 763/81/2 754/82/2 753/10/2 +f 763/81/2 753/10/2 750/6/2 +f 750/6/2 753/10/2 756/10/2 +f 750/6/2 756/10/2 748/6/2 +f 748/6/2 756/10/2 758/82/2 +f 748/6/2 758/82/2 760/81/2 +f 760/81/2 758/82/2 765/29/2 +f 764/81/1 752/82/1 762/29/1 +f 752/82/1 764/81/1 749/6/1 +f 752/82/1 749/6/1 751/10/1 +f 751/10/1 749/6/1 747/6/1 +f 751/10/1 747/6/1 755/10/1 +f 755/10/1 747/6/1 759/81/1 +f 755/10/1 759/81/1 757/82/1 +f 757/82/1 759/81/1 766/29/1 +f 777/81/1 772/82/1 774/29/1 +f 772/82/1 777/81/1 775/6/1 +f 772/82/1 775/6/1 785/10/1 +f 785/10/1 775/6/1 769/6/1 +f 785/10/1 769/6/1 783/10/1 +f 783/10/1 769/6/1 767/81/1 +f 783/10/1 767/81/1 781/82/1 +f 781/82/1 767/81/1 782/29/1 +f 771/82/2 778/81/2 773/29/2 +f 778/81/2 771/82/2 786/10/2 +f 778/81/2 786/10/2 776/6/2 +f 776/6/2 786/10/2 784/10/2 +f 776/6/2 784/10/2 770/6/2 +f 770/6/2 784/10/2 779/82/2 +f 770/6/2 779/82/2 768/81/2 +f 768/81/2 779/82/2 780/29/2 +f 843/82/2 827/81/2 825/29/2 +f 827/81/2 843/82/2 832/10/2 +f 827/81/2 832/10/2 842/6/2 +f 842/6/2 832/10/2 831/10/2 +f 842/6/2 831/10/2 840/6/2 +f 840/6/2 831/10/2 833/82/2 +f 840/6/2 833/82/2 837/81/2 +f 837/81/2 833/82/2 834/29/2 +f 828/81/1 844/82/1 826/29/1 +f 844/82/1 828/81/1 841/6/1 +f 844/82/1 841/6/1 830/10/1 +f 830/10/1 841/6/1 839/6/1 +f 830/10/1 839/6/1 829/10/1 +f 829/10/1 839/6/1 838/81/1 +f 829/10/1 838/81/1 835/82/1 +f 835/82/1 838/81/1 836/29/1 +f 860/81/1 846/82/1 858/29/1 +f 846/82/1 860/81/1 855/6/1 +f 846/82/1 855/6/1 845/10/1 +f 845/10/1 855/6/1 853/6/1 +f 845/10/1 853/6/1 850/10/1 +f 850/10/1 853/6/1 864/81/1 +f 850/10/1 864/81/1 849/82/1 +f 849/82/1 864/81/1 863/29/1 +f 848/82/2 859/81/2 857/29/2 +f 859/81/2 848/82/2 847/10/2 +f 859/81/2 847/10/2 856/6/2 +f 856/6/2 847/10/2 852/10/2 +f 856/6/2 852/10/2 854/6/2 +f 854/6/2 852/10/2 851/82/2 +f 854/6/2 851/82/2 862/81/2 +f 862/81/2 851/82/2 861/29/2 +f 921/83/208 920/84/209 919/83/208 +f 920/84/209 921/83/208 922/84/209 +f 920/84/209 924/84/210 923/84/210 +f 924/84/210 920/84/209 922/84/209 +f 924/84/210 925/83/211 923/84/210 +f 925/83/211 924/84/210 926/83/211 +f 924/84/2 927/85/2 926/83/2 +f 927/85/2 924/84/2 928/85/2 +f 928/85/2 924/84/2 922/84/2 +f 928/85/2 922/84/2 921/83/2 +f 930/85/1 925/83/1 929/85/1 +f 925/83/1 930/85/1 923/84/1 +f 923/84/1 930/85/1 920/84/1 +f 920/84/1 930/85/1 919/83/1 +f 927/85/11 925/83/211 926/83/211 +f 925/83/211 927/85/11 929/85/11 +f 930/85/4 921/83/208 919/83/208 +f 921/83/208 930/85/4 928/85/4 +f 929/85/19 928/85/19 930/85/19 +f 928/85/19 929/85/19 927/85/19 + diff --git a/Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-b.mtl b/Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-b.mtl new file mode 100644 index 0000000..462deb0 --- /dev/null +++ b/Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-b.mtl @@ -0,0 +1,6 @@ +# Created by Kenney (www.kenney.nl) + +newmtl colormap +Kd 1 1 1 +map_Kd Textures/colormap.png + diff --git a/Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-b.obj b/Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-b.obj new file mode 100644 index 0000000..bf1030d --- /dev/null +++ b/Sources/LaneRunnerDemo/Resources/Kenney/train/train-electric-subway-b.obj @@ -0,0 +1,2999 @@ +# Created by Kenney (www.kenney.nl) + +mtllib train-electric-subway-b.mtl + +g train-electric-subway-b + +v 0.25 1.471196 0.8 1 1 1 +v 0.25 1.471196 1 1 1 1 +v 0.2 1.571196 0.85 1 1 1 +v 0.2 1.571196 0.95 1 1 1 +v -0.25 1.471196 0.8 1 1 1 +v -0.2 1.571196 0.85 1 1 1 +v -0.25 1.471196 1 1 1 1 +v -0.2 1.571196 0.95 1 1 1 +v -0.25 1.471196 -1 1 1 1 +v -0.25 1.471196 -0.8 1 1 1 +v -0.2 1.571196 -0.95 1 1 1 +v -0.2 1.571196 -0.85 1 1 1 +v 0.25 1.471196 -1 1 1 1 +v 0.2 1.571196 -0.95 1 1 1 +v 0.25 1.471196 -0.8 1 1 1 +v 0.2 1.571196 -0.85 1 1 1 +v 0.3 0.5594994 1.2 1 1 1 +v -0.3 0.5594994 1.2 1 1 1 +v 0.3 1.271196 1.2 1 1 1 +v -0.3 1.271196 1.2 1 1 1 +v -0.3 0.5594994 -1.2 1 1 1 +v 0.3 0.5594994 -1.2 1 1 1 +v -0.3 1.271196 -1.2 1 1 1 +v 0.3 1.271196 -1.2 1 1 1 +v 0.25 0.2594994 -0.15 1 1 1 +v 0.25 0.2594994 -0.3 1 1 1 +v -0.25 0.2594994 -0.15 1 1 1 +v 0.2 0.2594994 -0.35 1 1 1 +v -0.2 0.2594994 -0.35 1 1 1 +v -0.25 0.2594994 -0.3 1 1 1 +v 0.4 0.3594994 -0.15 1 1 1 +v 0.3 0.1594994 -0.15 1 1 1 +v 0.4 0.3594994 0.15 1 1 1 +v 0.3 0.1594994 0.15 1 1 1 +v -0.25 0.3594994 -0.15 1 1 1 +v -0.4 0.3594994 -0.15 1 1 1 +v -0.3 0.1594994 -0.15 1 1 1 +v 0.25 0.3594994 -0.15 1 1 1 +v -0.25 0.2594994 0.15 1 1 1 +v -0.25 0.3594994 0.15 1 1 1 +v -0.25 0.2594994 0.3 1 1 1 +v -0.25 0.3594994 0.3 1 1 1 +v 0.25 0.2594994 0.3 1 1 1 +v 0.25 0.2594994 0.15 1 1 1 +v 0.2 0.2594994 0.35 1 1 1 +v -0.2 0.2594994 0.35 1 1 1 +v -0.25 0.3594994 -0.3 1 1 1 +v -0.2 0.3594994 0.35 1 1 1 +v 0.2 0.3594994 -0.35 1 1 1 +v 0.25 0.3594994 -0.3 1 1 1 +v -0.3 0.1594994 0.15 1 1 1 +v -0.4 0.3594994 0.15 1 1 1 +v 0.25 0.3594994 0.15 1 1 1 +v 0.25 0.3594994 0.3 1 1 1 +v -0.2 0.3594994 -0.35 1 1 1 +v 0.2 0.3594994 0.35 1 1 1 +v 0.07071068 0.1887887 1.2 1 1 1 +v 8.662937E-14 0.1594994 1.2 1 1 1 +v 0.05868986 0.2008095 1.3 1 1 1 +v 1.068429E-13 0.1764994 1.3 1 1 1 +v 0.07071068 0.33021 1.2 1 1 1 +v 0.05868986 0.3181892 1.3 1 1 1 +v 8.662937E-14 0.3594994 1.2 1 1 1 +v 1.068429E-13 0.3424994 1.3 1 1 1 +v -0.07071068 0.33021 1.2 1 1 1 +v -0.05868986 0.3181892 1.3 1 1 1 +v -0.1 0.2594994 1.2 1 1 1 +v -0.083 0.2594994 1.3 1 1 1 +v -0.05868986 0.2008095 1.3 1 1 1 +v 0.083 0.2594994 1.3 1 1 1 +v -0.07071068 0.1887887 1.2 1 1 1 +v 0.1 0.2594994 1.2 1 1 1 +v 0.374795 0.2594994 1.25 1 1 1 +v 0.3480535 0.1949394 1.25 1 1 1 +v 0.374795 0.2594994 1.3 1 1 1 +v 0.3480535 0.1949394 1.3 1 1 1 +v 0.2834935 0.1681978 1.3 1 1 1 +v 0.2189336 0.1949394 1.3 1 1 1 +v 0.192192 0.2594994 1.3 1 1 1 +v 0.3480535 0.3240593 1.3 1 1 1 +v 0.2189336 0.3240593 1.3 1 1 1 +v 0.2834935 0.3508009 1.3 1 1 1 +v 0.2189336 0.3240593 1.25 1 1 1 +v 0.192192 0.2594994 1.25 1 1 1 +v 0.2834935 0.1681978 1.25 1 1 1 +v 0.2189336 0.1949394 1.25 1 1 1 +v 0.2834935 0.3508009 1.25 1 1 1 +v 0.3480535 0.3240593 1.25 1 1 1 +v -0.2834935 0.1681978 1.3 1 1 1 +v -0.2834935 0.1681978 1.25 1 1 1 +v -0.3480535 0.1949394 1.3 1 1 1 +v -0.3480535 0.1949394 1.25 1 1 1 +v -0.2189336 0.1949394 1.3 1 1 1 +v -0.192192 0.2594994 1.3 1 1 1 +v -0.374795 0.2594994 1.3 1 1 1 +v -0.2189336 0.3240593 1.3 1 1 1 +v -0.3480535 0.3240593 1.3 1 1 1 +v -0.2834935 0.3508009 1.3 1 1 1 +v -0.2189336 0.3240593 1.25 1 1 1 +v -0.2834935 0.3508009 1.25 1 1 1 +v -0.192192 0.2594994 1.25 1 1 1 +v -0.2189336 0.1949394 1.25 1 1 1 +v -0.3480535 0.3240593 1.25 1 1 1 +v -0.374795 0.2594994 1.25 1 1 1 +v 0.4066987 0.3594994 0.9633974 1 1 1 +v 0.4066987 0.1594994 0.9633974 1 1 1 +v 0.4783494 0.3594994 1.0875 1 1 1 +v 0.4783494 0.1594994 1.0875 1 1 1 +v 0.2834936 0.1594994 1.2 1 1 1 +v -0.2834936 0.1594994 1.2 1 1 1 +v 0.2834936 0.3594994 1.2 1 1 1 +v -0.2834936 0.3594994 1.2 1 1 1 +v 0.2566987 0.1594994 1.05 1 1 1 +v -0.2566987 0.1594994 1.05 1 1 1 +v -0.4066987 0.1594994 0.9633974 1 1 1 +v -0.4783494 0.1594994 1.0875 1 1 1 +v -0.2566987 0.3594994 1.05 1 1 1 +v -0.4066987 0.3594994 0.9633974 1 1 1 +v -0.4783494 0.3594994 1.0875 1 1 1 +v 0.2566987 0.3594994 1.05 1 1 1 +v -0.07071068 0.1887887 -1.2 1 1 1 +v 1.887268E-13 0.1594994 -1.2 1 1 1 +v -0.05868986 0.2008095 -1.3 1 1 1 +v 1.520154E-13 0.1764994 -1.3 1 1 1 +v -0.07071068 0.33021 -1.2 1 1 1 +v -0.05868986 0.3181892 -1.3 1 1 1 +v 1.887268E-13 0.3594994 -1.2 1 1 1 +v 1.520154E-13 0.3424994 -1.3 1 1 1 +v 0.07071068 0.33021 -1.2 1 1 1 +v 0.05868986 0.3181892 -1.3 1 1 1 +v 0.1 0.2594994 -1.2 1 1 1 +v 0.083 0.2594994 -1.3 1 1 1 +v 0.05868986 0.2008095 -1.3 1 1 1 +v -0.083 0.2594994 -1.3 1 1 1 +v 0.07071068 0.1887887 -1.2 1 1 1 +v -0.1 0.2594994 -1.2 1 1 1 +v -0.374795 0.2594994 -1.25 1 1 1 +v -0.3480535 0.1949394 -1.25 1 1 1 +v -0.374795 0.2594994 -1.3 1 1 1 +v -0.3480535 0.1949394 -1.3 1 1 1 +v -0.2834935 0.1681978 -1.3 1 1 1 +v -0.2189336 0.1949394 -1.3 1 1 1 +v -0.192192 0.2594994 -1.3 1 1 1 +v -0.3480535 0.3240593 -1.3 1 1 1 +v -0.2189336 0.3240593 -1.3 1 1 1 +v -0.2834935 0.3508009 -1.3 1 1 1 +v -0.2189336 0.3240593 -1.25 1 1 1 +v -0.192192 0.2594994 -1.25 1 1 1 +v -0.2834935 0.1681978 -1.25 1 1 1 +v -0.2189336 0.1949394 -1.25 1 1 1 +v -0.2834935 0.3508009 -1.25 1 1 1 +v -0.3480535 0.3240593 -1.25 1 1 1 +v 0.2834935 0.1681978 -1.3 1 1 1 +v 0.2834935 0.1681978 -1.25 1 1 1 +v 0.3480535 0.1949394 -1.3 1 1 1 +v 0.3480535 0.1949394 -1.25 1 1 1 +v 0.2189336 0.1949394 -1.3 1 1 1 +v 0.192192 0.2594994 -1.3 1 1 1 +v 0.374795 0.2594994 -1.3 1 1 1 +v 0.2189336 0.3240593 -1.3 1 1 1 +v 0.3480535 0.3240593 -1.3 1 1 1 +v 0.2834935 0.3508009 -1.3 1 1 1 +v 0.2189336 0.3240593 -1.25 1 1 1 +v 0.2834935 0.3508009 -1.25 1 1 1 +v 0.192192 0.2594994 -1.25 1 1 1 +v 0.2189336 0.1949394 -1.25 1 1 1 +v 0.3480535 0.3240593 -1.25 1 1 1 +v 0.374795 0.2594994 -1.25 1 1 1 +v -0.4066987 0.3594994 -0.9633974 1 1 1 +v -0.4066987 0.1594994 -0.9633974 1 1 1 +v -0.4783494 0.3594994 -1.0875 1 1 1 +v -0.4783494 0.1594994 -1.0875 1 1 1 +v -0.2834936 0.1594994 -1.2 1 1 1 +v 0.2834936 0.1594994 -1.2 1 1 1 +v -0.2834936 0.3594994 -1.2 1 1 1 +v 0.2834936 0.3594994 -1.2 1 1 1 +v -0.2566987 0.1594994 -1.05 1 1 1 +v 0.2566987 0.1594994 -1.05 1 1 1 +v 0.4066987 0.1594994 -0.9633974 1 1 1 +v 0.4783494 0.1594994 -1.0875 1 1 1 +v 0.2566987 0.3594994 -1.05 1 1 1 +v 0.4066987 0.3594994 -0.9633974 1 1 1 +v 0.4783494 0.3594994 -1.0875 1 1 1 +v -0.2566987 0.3594994 -1.05 1 1 1 +v 0.55 0.6873609 0.9736236 1 1 1 +v 0.55 0.6609846 0.9099456 1 1 1 +v 0.5 0.6873609 0.9736236 1 1 1 +v 0.5 0.6609846 0.9099456 1 1 1 +v 0.55 0.6609846 0.4900544 1 1 1 +v 0.5 0.6609846 0.4900544 1 1 1 +v 0.55 0.7609847 0.9 1 1 1 +v 0.55 1.060985 0.9 1 1 1 +v 0.51 0.7609847 0.9 1 1 1 +v 0.51 1.060985 0.9 1 1 1 +v 0.55 1.07093 0.4 1 1 1 +v 0.55 0.751039 0.4 1 1 1 +v 0.55 1.134608 0.4263763 1 1 1 +v 0.55 0.6873609 0.4263763 1 1 1 +v 0.55 1.160985 0.4900544 1 1 1 +v 0.55 0.7609847 0.5 1 1 1 +v 0.55 1.060985 0.5 1 1 1 +v 0.55 1.160985 0.9099456 1 1 1 +v 0.55 1.134608 0.9736236 1 1 1 +v 0.55 1.07093 1 1 1 1 +v 0.55 0.751039 1 1 1 1 +v 0.5 0.751039 1 1 1 1 +v 0.51 0.7609847 0.5 1 1 1 +v 0.5 1.160985 0.4900544 1 1 1 +v 0.5 1.134608 0.4263763 1 1 1 +v 0.5 0.6873609 0.4263763 1 1 1 +v 0.5 0.751039 0.4 1 1 1 +v 0.5 1.07093 0.4 1 1 1 +v 0.51 1.060985 0.5 1 1 1 +v 0.5 1.134608 0.9736236 1 1 1 +v 0.5 1.160985 0.9099456 1 1 1 +v 0.5 1.07093 1 1 1 1 +v 0.55 0.751039 -0.4 1 1 1 +v 0.5 0.751039 -0.4 1 1 1 +v 0.55 1.07093 -0.4 1 1 1 +v 0.5 1.07093 -0.4 1 1 1 +v 0.55 0.7609847 -0.9 1 1 1 +v 0.51 0.7609847 -0.9 1 1 1 +v 0.55 1.060985 -0.9 1 1 1 +v 0.51 1.060985 -0.9 1 1 1 +v 0.55 0.6873609 -0.4263763 1 1 1 +v 0.5 0.6873609 -0.4263763 1 1 1 +v 0.55 1.134608 -0.4263763 1 1 1 +v 0.5 1.134608 -0.4263763 1 1 1 +v 0.55 0.6609846 -0.4900544 1 1 1 +v 0.55 0.6609846 -0.9099456 1 1 1 +v 0.5 0.6609846 -0.4900544 1 1 1 +v 0.5 0.6609846 -0.9099456 1 1 1 +v 0.55 0.6873609 -0.9736236 1 1 1 +v 0.5 0.6873609 -0.9736236 1 1 1 +v 0.55 1.07093 -1 1 1 1 +v 0.55 0.751039 -1 1 1 1 +v 0.55 1.134608 -0.9736236 1 1 1 +v 0.55 1.160985 -0.9099456 1 1 1 +v 0.55 1.160985 -0.4900544 1 1 1 +v 0.55 1.060985 -0.5 1 1 1 +v 0.55 0.7609847 -0.5 1 1 1 +v 0.5 1.07093 -1 1 1 1 +v 0.5 1.134608 -0.9736236 1 1 1 +v 0.5 1.160985 -0.4900544 1 1 1 +v 0.5 0.751039 -1 1 1 1 +v 0.51 0.7609847 -0.5 1 1 1 +v 0.5 1.160985 -0.9099456 1 1 1 +v 0.51 1.060985 -0.5 1 1 1 +v 0.55 0.6873609 0.2736237 1 1 1 +v 0.55 0.6609846 0.2099456 1 1 1 +v 0.5 0.6873609 0.2736237 1 1 1 +v 0.5 0.6609846 0.2099456 1 1 1 +v 0.55 0.6609846 -0.2099456 1 1 1 +v 0.5 0.6609846 -0.2099456 1 1 1 +v 0.55 0.7609847 0.2 1 1 1 +v 0.55 1.060985 0.2 1 1 1 +v 0.51 0.7609847 0.2 1 1 1 +v 0.51 1.060985 0.2 1 1 1 +v 0.55 1.07093 -0.3 1 1 1 +v 0.55 0.751039 -0.3 1 1 1 +v 0.55 1.134608 -0.2736237 1 1 1 +v 0.55 0.6873609 -0.2736237 1 1 1 +v 0.55 1.160985 -0.2099456 1 1 1 +v 0.55 0.7609847 -0.2 1 1 1 +v 0.55 1.060985 -0.2 1 1 1 +v 0.55 1.160985 0.2099456 1 1 1 +v 0.55 1.134608 0.2736237 1 1 1 +v 0.55 1.07093 0.3 1 1 1 +v 0.55 0.751039 0.3 1 1 1 +v 0.5 0.751039 0.3 1 1 1 +v 0.51 0.7609847 -0.2 1 1 1 +v 0.5 1.160985 -0.2099456 1 1 1 +v 0.5 1.134608 -0.2736237 1 1 1 +v 0.5 0.6873609 -0.2736237 1 1 1 +v 0.5 0.751039 -0.3 1 1 1 +v 0.5 1.07093 -0.3 1 1 1 +v 0.51 1.060985 -0.2 1 1 1 +v 0.5 1.134608 0.2736237 1 1 1 +v 0.5 1.160985 0.2099456 1 1 1 +v 0.5 1.07093 0.3 1 1 1 +v -0.55 0.751039 -0.4 1 1 1 +v -0.5 0.751039 -0.4 1 1 1 +v -0.55 1.07093 -0.4 1 1 1 +v -0.5 1.07093 -0.4 1 1 1 +v -0.55 0.7609847 -0.9 1 1 1 +v -0.51 0.7609847 -0.9 1 1 1 +v -0.55 1.060985 -0.9 1 1 1 +v -0.51 1.060985 -0.9 1 1 1 +v -0.55 0.6873609 -0.4263763 1 1 1 +v -0.5 0.6873609 -0.4263763 1 1 1 +v -0.55 1.134608 -0.4263763 1 1 1 +v -0.5 1.134608 -0.4263763 1 1 1 +v -0.55 0.6609846 -0.4900544 1 1 1 +v -0.55 0.6609846 -0.9099456 1 1 1 +v -0.5 0.6609846 -0.4900544 1 1 1 +v -0.5 0.6609846 -0.9099456 1 1 1 +v -0.55 0.6873609 -0.9736236 1 1 1 +v -0.5 0.6873609 -0.9736236 1 1 1 +v -0.55 1.07093 -1 1 1 1 +v -0.55 0.751039 -1 1 1 1 +v -0.55 1.134608 -0.9736236 1 1 1 +v -0.55 1.160985 -0.9099456 1 1 1 +v -0.55 1.160985 -0.4900544 1 1 1 +v -0.55 1.060985 -0.5 1 1 1 +v -0.55 0.7609847 -0.5 1 1 1 +v -0.5 1.07093 -1 1 1 1 +v -0.5 1.134608 -0.9736236 1 1 1 +v -0.5 1.160985 -0.4900544 1 1 1 +v -0.5 0.751039 -1 1 1 1 +v -0.51 0.7609847 -0.5 1 1 1 +v -0.5 1.160985 -0.9099456 1 1 1 +v -0.51 1.060985 -0.5 1 1 1 +v -0.55 0.6873609 0.9736236 1 1 1 +v -0.55 0.6609846 0.9099456 1 1 1 +v -0.5 0.6873609 0.9736236 1 1 1 +v -0.5 0.6609846 0.9099456 1 1 1 +v -0.55 0.6609846 0.4900544 1 1 1 +v -0.5 0.6609846 0.4900544 1 1 1 +v -0.55 0.7609847 0.9 1 1 1 +v -0.55 1.060985 0.9 1 1 1 +v -0.51 0.7609847 0.9 1 1 1 +v -0.51 1.060985 0.9 1 1 1 +v -0.55 1.07093 0.4 1 1 1 +v -0.55 0.751039 0.4 1 1 1 +v -0.55 1.134608 0.4263763 1 1 1 +v -0.55 0.6873609 0.4263763 1 1 1 +v -0.55 1.160985 0.4900544 1 1 1 +v -0.55 0.7609847 0.5 1 1 1 +v -0.55 1.060985 0.5 1 1 1 +v -0.55 1.160985 0.9099456 1 1 1 +v -0.55 1.134608 0.9736236 1 1 1 +v -0.55 1.07093 1 1 1 1 +v -0.55 0.751039 1 1 1 1 +v -0.5 0.751039 1 1 1 1 +v -0.51 0.7609847 0.5 1 1 1 +v -0.5 1.160985 0.4900544 1 1 1 +v -0.5 1.134608 0.4263763 1 1 1 +v -0.5 0.6873609 0.4263763 1 1 1 +v -0.5 0.751039 0.4 1 1 1 +v -0.5 1.07093 0.4 1 1 1 +v -0.51 1.060985 0.5 1 1 1 +v -0.5 1.134608 0.9736236 1 1 1 +v -0.5 1.160985 0.9099456 1 1 1 +v -0.5 1.07093 1 1 1 1 +v -0.55 0.6873609 0.2736237 1 1 1 +v -0.55 0.6609846 0.2099456 1 1 1 +v -0.5 0.6873609 0.2736237 1 1 1 +v -0.5 0.6609846 0.2099456 1 1 1 +v -0.55 0.6609846 -0.2099456 1 1 1 +v -0.5 0.6609846 -0.2099456 1 1 1 +v -0.55 0.7609847 0.2 1 1 1 +v -0.55 1.060985 0.2 1 1 1 +v -0.51 0.7609847 0.2 1 1 1 +v -0.51 1.060985 0.2 1 1 1 +v -0.55 1.07093 -0.3 1 1 1 +v -0.55 0.751039 -0.3 1 1 1 +v -0.55 1.134608 -0.2736237 1 1 1 +v -0.55 0.6873609 -0.2736237 1 1 1 +v -0.55 1.160985 -0.2099456 1 1 1 +v -0.55 0.7609847 -0.2 1 1 1 +v -0.55 1.060985 -0.2 1 1 1 +v -0.55 1.160985 0.2099456 1 1 1 +v -0.55 1.134608 0.2736237 1 1 1 +v -0.55 1.07093 0.3 1 1 1 +v -0.55 0.751039 0.3 1 1 1 +v -0.5 0.751039 0.3 1 1 1 +v -0.51 0.7609847 -0.2 1 1 1 +v -0.5 1.160985 -0.2099456 1 1 1 +v -0.5 1.134608 -0.2736237 1 1 1 +v -0.5 0.6873609 -0.2736237 1 1 1 +v -0.5 0.751039 -0.3 1 1 1 +v -0.5 1.07093 -0.3 1 1 1 +v -0.51 1.060985 -0.2 1 1 1 +v -0.5 1.134608 0.2736237 1 1 1 +v -0.5 1.160985 0.2099456 1 1 1 +v -0.5 1.07093 0.3 1 1 1 +v -0.4 1.471196 -1.2 1 1 1 +v -0.4707107 1.438449 -1.2 1 1 1 +v 0.4 1.471196 -1.2 1 1 1 +v 0.4707107 1.438449 -1.2 1 1 1 +v -0.5 1.359392 -1.2 1 1 1 +v 0.5 1.359392 -1.2 1 1 1 +v -0.5 0.462577 -1.2 1 1 1 +v 0.5 0.462577 -1.2 1 1 1 +v -0.4707107 0.3896901 -1.2 1 1 1 +v 0.4707107 0.3896901 -1.2 1 1 1 +v 0.4 0.3594994 -1.2 1 1 1 +v -0.4 0.3594994 -1.2 1 1 1 +v 0.5 1.359392 1.2 1 1 1 +v 0.5 0.462577 1.2 1 1 1 +v 0.4707107 0.3896901 1.2 1 1 1 +v 0.4 0.3594994 1.2 1 1 1 +v -0.4 0.3594994 1.2 1 1 1 +v -0.4707107 0.3896901 1.2 1 1 1 +v -0.5 0.462577 1.2 1 1 1 +v -0.5 1.359392 1.2 1 1 1 +v 0.4 1.471196 1.2 1 1 1 +v -0.4 1.471196 1.2 1 1 1 +v 0.4707107 1.438449 1.2 1 1 1 +v -0.4707107 1.438449 1.2 1 1 1 +v 0.2834935 0.3113752 1.1625 1 1 1 +v 0.2468117 0.2961811 1.1625 1 1 1 +v 0.3353694 0.2594994 1.1625 1 1 1 +v 0.3201753 0.2228176 1.1625 1 1 1 +v 0.3201753 0.2961811 1.1625 1 1 1 +v 0.2316176 0.2594994 1.1625 1 1 1 +v 0.2834935 0.2076235 1.1625 1 1 1 +v 0.2468117 0.2228176 1.1625 1 1 1 +v -0.2316176 0.2594994 1.1625 1 1 1 +v -0.2468117 0.2228176 1.1625 1 1 1 +v -0.3201753 0.2961811 1.1625 1 1 1 +v -0.3353694 0.2594994 1.1625 1 1 1 +v -0.3201753 0.2228176 1.1625 1 1 1 +v -0.2834935 0.2076235 1.1625 1 1 1 +v -0.2468117 0.2961811 1.1625 1 1 1 +v -0.2834935 0.3113752 1.1625 1 1 1 +v -0.2834935 0.3113752 -1.1625 1 1 1 +v -0.2468117 0.2961811 -1.1625 1 1 1 +v -0.3353694 0.2594994 -1.1625 1 1 1 +v -0.3201753 0.2228176 -1.1625 1 1 1 +v -0.3201753 0.2961811 -1.1625 1 1 1 +v -0.2316176 0.2594994 -1.1625 1 1 1 +v -0.2834935 0.2076235 -1.1625 1 1 1 +v -0.2468117 0.2228176 -1.1625 1 1 1 +v 0.2316176 0.2594994 -1.1625 1 1 1 +v 0.2468117 0.2228176 -1.1625 1 1 1 +v 0.3201753 0.2961811 -1.1625 1 1 1 +v 0.3353694 0.2594994 -1.1625 1 1 1 +v 0.3201753 0.2228176 -1.1625 1 1 1 +v 0.2834935 0.2076235 -1.1625 1 1 1 +v 0.2468117 0.2961811 -1.1625 1 1 1 +v 0.2834935 0.3113752 -1.1625 1 1 1 + +vn 0.8944272 0.4472136 0 +vn 0.5862389 0.8101382 0 +vn 0 0.4472136 -0.8944272 +vn 0 0.4472136 0.8944272 +vn -0.8944272 0.4472136 0 +vn -0.5862389 0.8101382 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0.8944272 -0.4472136 0 +vn 0.5257311 -0.8506508 0 +vn -1 0 0 +vn -0.9238795 0 0.3826834 +vn -0.9238795 0 -0.3826834 +vn -0.3826834 0 0.9238795 +vn 0.3826834 0 -0.9238795 +vn 0.9238795 0 -0.3826834 +vn -0.5257311 -0.8506508 0 +vn -0.8944272 -0.4472136 0 +vn 1 0 0 +vn 0.9238795 0 0.3826834 +vn -0.3826834 0 -0.9238795 +vn 0.3826834 0 0.9238795 +vn 0.6971054 -0.6971054 0.1675955 +vn 0 -0.9858559 0.1675955 +vn 0.6971054 0.6971054 0.1675955 +vn 0 0.9858559 0.1675955 +vn -0.6971054 0.6971054 0.1675955 +vn -0.9858559 0 0.1675955 +vn -0.6971054 -0.6971054 0.1675955 +vn 0.9858559 0 0.1675955 +vn 0.7071068 -0.7071068 0 +vn -0.7071068 0.7071068 0 +vn -0.7071068 -0.7071068 0 +vn 0 1 0 +vn 0.7071068 0.7071068 0 +vn 0.8660254 0 -0.5 +vn 0.258819 0 0.9659258 +vn -0.258819 0 0.9659258 +vn 0.5 0 0.8660254 +vn 0.258819 0 -0.9659258 +vn 0.5 0 -0.8660254 +vn -0.5 0 0.8660254 +vn -0.8660254 0 -0.5 +vn -0.258819 0 -0.9659258 +vn -0.5 0 -0.8660254 +vn -0.6971054 -0.6971054 -0.1675955 +vn -2.764976E-14 -0.9858559 -0.1675955 +vn -0.6971054 0.6971054 -0.1675955 +vn -2.764976E-14 0.9858559 -0.1675955 +vn 0.6971054 0.6971054 -0.1675955 +vn 0.9858559 0 -0.1675955 +vn -1.649791E-13 0 -1 +vn 0.6971054 -0.6971054 -0.1675955 +vn -0.9858559 0 -0.1675955 +vn -1 0 1.649791E-13 +vn -0.7071068 -0.7071068 1.166579E-13 +vn 0.7071068 0.7071068 -1.166579E-13 +vn 1 0 -1.649791E-13 +vn 0.7071068 -0.7071068 -1.166579E-13 +vn -0.7071068 0.7071068 1.166579E-13 +vn -0.8660254 0 0.5 +vn 0.8660254 0 0.5 +vn 0 -0.7071068 0.7071068 +vn 0 -0.9807853 0.1950903 +vn 0 -0.9807853 -0.1950903 +vn 0 -0.1950903 0.9807853 +vn 0 0.9807853 -0.1950903 +vn 0 0.7071068 -0.7071068 +vn 0 -0.7071068 -0.7071068 +vn 0 -0.1950903 -0.9807853 +vn 0 0.1950903 -0.9807853 +vn 0 0.7071068 0.7071068 +vn 0 0.9807853 0.1950903 +vn 0 0.1950903 0.9807853 +vn 0.9818057 -0.1898884 0 +vn 0.7146441 -0.6994882 0 +vn 0.3926682 -0.9196803 0 +vn -0.3926682 -0.9196803 0 +vn -0.7146441 -0.6994882 0 +vn -0.9818057 -0.1898884 0 +vn 0 0.9117239 -0.4108036 +vn -0.6446861 0.6446861 -0.4108036 +vn 0.9117239 0 -0.4108036 +vn 0.6446861 -0.6446861 -0.4108036 +vn 0.6446861 0.6446861 -0.4108036 +vn -0.9117239 0 -0.4108036 +vn 0 -0.9117239 -0.4108036 +vn -0.6446861 -0.6446861 -0.4108036 +vn 6.777402E-14 0.9117239 0.4108036 +vn 0.6446861 0.6446861 0.4108036 +vn -0.9117239 0 0.4108036 +vn -0.6446861 -0.6446861 0.4108036 +vn -0.6446861 0.6446861 0.4108036 +vn 0.9117239 0 0.4108036 +vn 6.777402E-14 -0.9117239 0.4108036 +vn 0.6446861 -0.6446861 0.4108036 +vn -0.937714 0.3474079 0 +vn -0.7344423 0.6786711 0 +vn -0.4202296 0.9074178 0 +vn 0.7344423 0.6786711 0 +vn 0.4202296 0.9074178 0 +vn 0.937714 0.3474079 0 + +vt 0.71875 0.025 +vt 0.71875 0.225 +vt 0.71875 0.05428932 +vt 0.71875 0.06631013 +vt 0.71875 0.042 +vt 0.71875 0.1957107 +vt 0.71875 0.1836898 +vt 0.71875 0.208 +vt 0.71875 0.125 +vt 0.96875 0.03555053 +vt 0.96875 0.025 +vt 0.96875 0.065 +vt 0.96875 0.185 +vt 0.96875 0.1889782 +vt 0.96875 0.06102175 +vt 0.96875 0.2144495 +vt 0.96875 0.225 +vt 0.96875 0.2191087 +vt 0.96875 0.204886 +vt 0.96875 0.1890189 +vt 0.96875 0.06098105 +vt 0.96875 0.04354421 +vt 0.96875 0.03043147 +vt 0.96875 0.1957107 +vt 0.96875 0.1818182 +vt 0.96875 0.1651765 +vt 0.96875 0.125 +vt 0.96875 0.08482347 +vt 0.96875 0.05428932 +vt 0.96875 0.06818181 +vt 0.09375 0.185 +vt 0.09375 0.065 +vt 0.34375 0.204886 +vt 0.34375 0.2191087 +vt 0.34375 0.225 + +usemtl colormap + +f 3/2/2 2/1/1 1/1/1 +f 2/1/1 3/2/2 4/2/2 +f 5/1/3 3/2/3 1/1/3 +f 3/2/3 5/1/3 6/2/3 +f 4/2/4 7/1/4 2/1/4 +f 7/1/4 4/2/4 8/2/4 +f 7/1/5 6/2/6 5/1/5 +f 6/2/6 7/1/5 8/2/6 +f 3/2/2 8/2/6 4/2/2 +f 8/2/6 3/2/2 6/2/6 +f 14/2/2 11/2/6 16/2/2 +f 12/2/6 16/2/2 11/2/6 +f 16/2/2 15/1/1 14/2/2 +f 13/1/1 14/2/2 15/1/1 +f 16/2/4 12/2/4 15/1/4 +f 10/1/4 15/1/4 12/2/4 +f 14/2/3 13/1/3 11/2/3 +f 9/1/3 11/2/3 13/1/3 +f 12/2/6 11/2/6 10/1/5 +f 9/1/5 10/1/5 11/2/6 +f 19/2/7 18/1/7 17/1/7 +f 18/1/7 19/2/7 20/2/7 +f 23/2/8 22/1/8 21/1/8 +f 22/1/8 23/2/8 24/2/8 +f 27/1/9 26/1/9 25/1/9 +f 26/1/9 27/1/9 28/1/9 +f 28/1/9 27/1/9 29/1/9 +f 29/1/9 27/1/9 30/1/9 +f 33/2/10 32/1/11 31/2/10 +f 32/1/11 33/2/10 34/1/11 +f 27/1/8 36/2/8 35/2/8 +f 27/1/8 37/1/8 36/2/8 +f 37/1/8 27/1/8 32/1/8 +f 25/1/8 32/1/8 27/1/8 +f 32/1/8 25/1/8 31/2/8 +f 31/2/8 25/1/8 38/2/8 +f 41/1/13 40/2/12 39/1/12 +f 40/2/12 41/1/13 42/2/13 +f 45/1/9 44/1/9 43/1/9 +f 44/1/9 45/1/9 39/1/9 +f 39/1/9 45/1/9 46/1/9 +f 39/1/9 46/1/9 41/1/9 +f 27/1/12 47/2/14 30/1/14 +f 47/2/14 27/1/12 35/2/12 +f 48/2/15 41/1/13 46/1/15 +f 41/1/13 48/2/15 42/2/13 +f 49/2/16 26/1/17 28/1/16 +f 26/1/17 49/2/16 50/2/17 +f 51/1/18 36/2/19 37/1/18 +f 36/2/19 51/1/18 52/2/19 +f 54/2/21 44/1/20 53/2/20 +f 44/1/20 54/2/21 43/1/21 +f 38/2/20 26/1/17 50/2/17 +f 26/1/17 38/2/20 25/1/20 +f 30/1/14 55/2/22 29/1/22 +f 55/2/22 30/1/14 47/2/14 +f 51/1/18 32/1/11 34/1/11 +f 32/1/11 51/1/18 37/1/18 +f 56/2/23 46/1/15 45/1/23 +f 46/1/15 56/2/23 48/2/15 +f 55/2/22 28/1/16 29/1/22 +f 28/1/16 55/2/22 49/2/16 +f 56/2/23 43/1/21 54/2/21 +f 43/1/21 56/2/23 45/1/23 +f 44/1/7 33/2/7 53/2/7 +f 44/1/7 34/1/7 33/2/7 +f 34/1/7 44/1/7 51/1/7 +f 39/1/7 51/1/7 44/1/7 +f 51/1/7 39/1/7 52/2/7 +f 52/2/7 39/1/7 40/2/7 +f 59/4/24 58/1/25 57/3/24 +f 58/1/25 59/4/24 60/5/25 +f 63/2/27 62/7/26 61/6/26 +f 62/7/26 63/2/27 64/8/27 +f 67/9/29 66/7/28 65/6/28 +f 66/7/28 67/9/29 68/9/29 +f 59/4/7 69/4/7 60/5/7 +f 69/4/7 59/4/7 70/9/7 +f 69/4/7 70/9/7 68/9/7 +f 68/9/7 70/9/7 62/7/7 +f 68/9/7 62/7/7 66/7/7 +f 66/7/7 62/7/7 64/8/7 +f 69/4/30 67/9/29 71/3/30 +f 67/9/29 69/4/30 68/9/29 +f 69/4/30 58/1/25 60/5/25 +f 58/1/25 69/4/30 71/3/30 +f 63/2/27 66/7/28 64/8/27 +f 66/7/28 63/2/27 65/6/28 +f 61/6/26 70/9/31 72/9/31 +f 70/9/31 61/6/26 62/7/26 +f 70/9/31 57/3/24 72/9/31 +f 57/3/24 70/9/31 59/4/24 +f 75/9/20 74/3/32 73/9/20 +f 74/3/32 75/9/20 76/3/32 +f 76/3/7 78/3/7 77/1/7 +f 78/3/7 76/3/7 75/9/7 +f 78/3/7 75/9/7 79/9/7 +f 79/9/7 75/9/7 80/6/7 +f 79/9/7 80/6/7 81/6/7 +f 81/6/7 80/6/7 82/2/7 +f 84/9/12 81/6/33 83/6/33 +f 81/6/33 84/9/12 79/9/12 +f 77/1/9 74/3/32 76/3/32 +f 74/3/32 77/1/9 85/1/9 +f 78/3/34 84/9/12 86/3/34 +f 84/9/12 78/3/34 79/9/12 +f 78/3/34 85/1/9 77/1/9 +f 85/1/9 78/3/34 86/3/34 +f 87/2/35 81/6/33 82/2/35 +f 81/6/33 87/2/35 83/6/33 +f 88/6/36 75/9/20 73/9/20 +f 75/9/20 88/6/36 80/6/36 +f 88/6/36 82/2/35 80/6/36 +f 82/2/35 88/6/36 87/2/35 +f 91/3/34 90/1/9 89/1/9 +f 90/1/9 91/3/34 92/3/34 +f 93/3/7 91/3/7 89/1/7 +f 91/3/7 93/3/7 94/9/7 +f 91/3/7 94/9/7 95/9/7 +f 95/9/7 94/9/7 96/6/7 +f 95/9/7 96/6/7 97/6/7 +f 97/6/7 96/6/7 98/2/7 +f 99/6/36 98/2/35 96/6/36 +f 98/2/35 99/6/36 100/2/35 +f 94/9/20 102/3/32 101/9/20 +f 102/3/32 94/9/20 93/3/32 +f 89/1/9 102/3/32 93/3/32 +f 102/3/32 89/1/9 90/1/9 +f 104/9/12 97/6/33 103/6/33 +f 97/6/33 104/9/12 95/9/12 +f 99/6/36 94/9/20 101/9/20 +f 94/9/20 99/6/36 96/6/36 +f 100/2/35 97/6/33 98/2/35 +f 97/6/33 100/2/35 103/6/33 +f 91/3/34 104/9/12 92/3/34 +f 104/9/12 91/3/34 95/9/12 +f 107/2/37 106/1/37 105/2/37 +f 106/1/37 107/2/37 108/1/37 +f 111/2/38 110/1/39 109/1/38 +f 110/1/39 111/2/38 112/2/39 +f 109/1/9 106/1/9 108/1/9 +f 106/1/9 109/1/9 113/1/9 +f 113/1/9 109/1/9 110/1/9 +f 113/1/9 110/1/9 114/1/9 +f 114/1/9 110/1/9 115/1/9 +f 115/1/9 110/1/9 116/1/9 +f 108/1/40 111/2/38 109/1/38 +f 111/2/38 108/1/40 107/2/40 +f 115/1/42 117/2/41 114/1/41 +f 117/2/41 115/1/42 118/2/42 +f 112/2/39 116/1/43 110/1/39 +f 116/1/43 112/2/39 119/2/43 +f 115/1/44 119/2/44 118/2/44 +f 119/2/44 115/1/44 116/1/44 +f 120/2/45 106/1/46 113/1/45 +f 106/1/46 120/2/45 105/2/46 +f 105/2/35 111/2/35 107/2/35 +f 111/2/35 105/2/35 120/2/35 +f 111/2/35 120/2/35 112/2/35 +f 112/2/35 120/2/35 117/2/35 +f 112/2/35 117/2/35 118/2/35 +f 112/2/35 118/2/35 119/2/35 +f 117/2/41 113/1/45 114/1/41 +f 113/1/45 117/2/41 120/2/45 +f 123/4/47 122/1/48 121/3/47 +f 122/1/48 123/4/47 124/5/48 +f 127/2/50 126/7/49 125/6/49 +f 126/7/49 127/2/50 128/8/50 +f 131/9/52 130/7/51 129/6/51 +f 130/7/51 131/9/52 132/9/52 +f 123/4/53 133/4/53 124/5/53 +f 133/4/53 123/4/53 134/9/53 +f 133/4/53 134/9/53 132/9/53 +f 132/9/53 134/9/53 126/7/53 +f 132/9/53 126/7/53 130/7/53 +f 130/7/53 126/7/53 128/8/53 +f 133/4/54 131/9/52 135/3/54 +f 131/9/52 133/4/54 132/9/52 +f 133/4/54 122/1/48 124/5/48 +f 122/1/48 133/4/54 135/3/54 +f 127/2/50 130/7/51 128/8/50 +f 130/7/51 127/2/50 129/6/51 +f 125/6/49 134/9/55 136/9/55 +f 134/9/55 125/6/49 126/7/49 +f 134/9/55 121/3/47 136/9/55 +f 121/3/47 134/9/55 123/4/47 +f 139/9/56 138/3/57 137/9/56 +f 138/3/57 139/9/56 140/3/57 +f 140/3/53 142/3/53 141/1/53 +f 142/3/53 140/3/53 139/9/53 +f 142/3/53 139/9/53 143/9/53 +f 143/9/53 139/9/53 144/6/53 +f 143/9/53 144/6/53 145/6/53 +f 145/6/53 144/6/53 146/2/53 +f 148/9/59 145/6/58 147/6/58 +f 145/6/58 148/9/59 143/9/59 +f 141/1/9 138/3/57 140/3/57 +f 138/3/57 141/1/9 149/1/9 +f 142/3/60 148/9/59 150/3/60 +f 148/9/59 142/3/60 143/9/59 +f 142/3/60 149/1/9 141/1/9 +f 149/1/9 142/3/60 150/3/60 +f 151/2/35 145/6/58 146/2/35 +f 145/6/58 151/2/35 147/6/58 +f 152/6/61 139/9/56 137/9/56 +f 139/9/56 152/6/61 144/6/61 +f 152/6/61 146/2/35 144/6/61 +f 146/2/35 152/6/61 151/2/35 +f 155/3/60 154/1/9 153/1/9 +f 154/1/9 155/3/60 156/3/60 +f 157/3/53 155/3/53 153/1/53 +f 155/3/53 157/3/53 158/9/53 +f 155/3/53 158/9/53 159/9/53 +f 159/9/53 158/9/53 160/6/53 +f 159/9/53 160/6/53 161/6/53 +f 161/6/53 160/6/53 162/2/53 +f 163/6/61 162/2/35 160/6/61 +f 162/2/35 163/6/61 164/2/35 +f 158/9/56 166/3/57 165/9/56 +f 166/3/57 158/9/56 157/3/57 +f 153/1/9 166/3/57 157/3/57 +f 166/3/57 153/1/9 154/1/9 +f 168/9/59 161/6/58 167/6/58 +f 161/6/58 168/9/59 159/9/59 +f 163/6/61 158/9/56 165/9/56 +f 158/9/56 163/6/61 160/6/61 +f 164/2/35 161/6/58 162/2/35 +f 161/6/58 164/2/35 167/6/58 +f 155/3/60 168/9/59 156/3/60 +f 168/9/59 155/3/60 159/9/59 +f 171/2/62 170/1/62 169/2/62 +f 170/1/62 171/2/62 172/1/62 +f 175/2/45 174/1/41 173/1/45 +f 174/1/41 175/2/45 176/2/41 +f 173/1/9 170/1/9 172/1/9 +f 170/1/9 173/1/9 177/1/9 +f 177/1/9 173/1/9 174/1/9 +f 177/1/9 174/1/9 178/1/9 +f 178/1/9 174/1/9 179/1/9 +f 179/1/9 174/1/9 180/1/9 +f 172/1/46 175/2/45 173/1/45 +f 175/2/45 172/1/46 171/2/46 +f 179/1/43 181/2/39 178/1/39 +f 181/2/39 179/1/43 182/2/43 +f 176/2/41 180/1/42 174/1/41 +f 180/1/42 176/2/41 183/2/42 +f 179/1/63 183/2/63 182/2/63 +f 183/2/63 179/1/63 180/1/63 +f 184/2/38 170/1/40 177/1/38 +f 170/1/40 184/2/38 169/2/40 +f 169/2/35 175/2/35 171/2/35 +f 175/2/35 169/2/35 184/2/35 +f 175/2/35 184/2/35 176/2/35 +f 176/2/35 184/2/35 181/2/35 +f 176/2/35 181/2/35 182/2/35 +f 176/2/35 182/2/35 183/2/35 +f 181/2/39 177/1/38 178/1/39 +f 177/1/38 181/2/39 184/2/38 +f 187/10/64 186/11/65 185/10/64 +f 186/11/65 187/10/64 188/11/65 +f 188/11/65 189/11/66 186/11/65 +f 189/11/66 188/11/65 190/11/66 +f 193/12/8 192/13/8 191/12/8 +f 192/13/8 193/12/8 194/13/8 +f 197/16/20 196/15/20 195/14/20 +f 196/15/20 197/16/20 198/10/20 +f 198/10/20 197/16/20 199/17/20 +f 198/10/20 199/17/20 189/11/20 +f 189/11/20 199/17/20 200/12/20 +f 189/11/20 200/12/20 186/11/20 +f 200/12/20 199/17/20 201/13/20 +f 202/17/20 201/13/20 199/17/20 +f 201/13/20 202/17/20 192/13/20 +f 192/13/20 202/17/20 191/12/20 +f 186/11/20 200/12/20 191/12/20 +f 186/11/20 191/12/20 202/17/20 +f 186/11/20 202/17/20 203/16/20 +f 186/11/20 203/16/20 185/10/20 +f 185/10/20 203/16/20 204/14/20 +f 185/10/20 204/14/20 205/15/20 +f 205/15/67 187/10/64 185/10/64 +f 187/10/64 205/15/67 206/15/67 +f 200/12/35 193/12/35 191/12/35 +f 193/12/35 200/12/35 207/12/35 +f 197/16/69 208/17/68 199/17/68 +f 208/17/68 197/16/69 209/16/69 +f 210/10/70 196/15/71 198/10/70 +f 196/15/71 210/10/70 211/15/71 +f 190/11/66 198/10/70 189/11/66 +f 198/10/70 190/11/66 210/10/70 +f 212/14/72 197/16/69 195/14/72 +f 197/16/69 212/14/72 209/16/69 +f 194/13/9 201/13/9 192/13/9 +f 201/13/9 194/13/9 213/13/9 +f 202/17/74 214/16/73 203/16/73 +f 214/16/73 202/17/74 215/17/74 +f 211/15/71 195/14/72 196/15/71 +f 195/14/72 211/15/71 212/14/72 +f 204/14/75 206/15/67 205/15/67 +f 206/15/67 204/14/75 216/14/75 +f 201/13/7 207/12/7 200/12/7 +f 207/12/7 201/13/7 213/13/7 +f 199/17/68 215/17/74 202/17/74 +f 215/17/74 199/17/68 208/17/68 +f 203/16/73 216/14/75 204/14/75 +f 216/14/75 203/16/73 214/16/73 +f 219/14/75 218/15/67 217/15/67 +f 218/15/67 219/14/75 220/14/75 +f 223/13/7 222/12/7 221/12/7 +f 222/12/7 223/13/7 224/13/7 +f 217/15/67 226/10/64 225/10/64 +f 226/10/64 217/15/67 218/15/67 +f 227/16/73 220/14/75 219/14/75 +f 220/14/75 227/16/73 228/16/73 +f 231/11/65 230/11/66 229/11/65 +f 230/11/66 231/11/65 232/11/66 +f 232/11/66 233/10/70 230/11/66 +f 233/10/70 232/11/66 234/10/70 +f 237/16/20 236/15/20 235/14/20 +f 236/15/20 237/16/20 233/10/20 +f 233/10/20 237/16/20 238/17/20 +f 233/10/20 238/17/20 230/11/20 +f 230/11/20 238/17/20 223/13/20 +f 223/13/20 238/17/20 239/17/20 +f 221/12/20 230/11/20 223/13/20 +f 223/13/20 239/17/20 240/13/20 +f 230/11/20 221/12/20 229/11/20 +f 240/13/20 239/17/20 241/12/20 +f 229/11/20 221/12/20 241/12/20 +f 229/11/20 241/12/20 239/17/20 +f 229/11/20 239/17/20 227/16/20 +f 229/11/20 227/16/20 225/10/20 +f 225/10/20 227/16/20 219/14/20 +f 225/10/20 219/14/20 217/15/20 +f 242/14/72 237/16/69 235/14/72 +f 237/16/69 242/14/72 243/16/69 +f 239/17/74 228/16/73 227/16/73 +f 228/16/73 239/17/74 244/17/74 +f 234/10/70 236/15/71 233/10/70 +f 236/15/71 234/10/70 245/15/71 +f 221/12/35 246/12/35 241/12/35 +f 246/12/35 221/12/35 222/12/35 +f 238/17/68 244/17/74 239/17/74 +f 244/17/74 238/17/68 247/17/68 +f 226/10/64 229/11/65 225/10/64 +f 229/11/65 226/10/64 231/11/65 +f 245/15/71 235/14/72 236/15/71 +f 235/14/72 245/15/71 242/14/72 +f 246/12/8 240/13/8 241/12/8 +f 240/13/8 246/12/8 248/13/8 +f 248/13/9 223/13/9 240/13/9 +f 223/13/9 248/13/9 224/13/9 +f 237/16/69 247/17/68 238/17/68 +f 247/17/68 237/16/69 243/16/69 +f 251/10/64 250/11/65 249/10/64 +f 250/11/65 251/10/64 252/11/65 +f 252/11/65 253/11/66 250/11/65 +f 253/11/66 252/11/65 254/11/66 +f 257/12/8 256/13/8 255/12/8 +f 256/13/8 257/12/8 258/13/8 +f 261/16/20 260/15/20 259/14/20 +f 260/15/20 261/16/20 262/10/20 +f 262/10/20 261/16/20 263/17/20 +f 262/10/20 263/17/20 253/11/20 +f 253/11/20 263/17/20 264/12/20 +f 253/11/20 264/12/20 250/11/20 +f 264/12/20 263/17/20 265/13/20 +f 266/17/20 265/13/20 263/17/20 +f 265/13/20 266/17/20 256/13/20 +f 256/13/20 266/17/20 255/12/20 +f 250/11/20 264/12/20 255/12/20 +f 250/11/20 255/12/20 266/17/20 +f 250/11/20 266/17/20 267/16/20 +f 250/11/20 267/16/20 249/10/20 +f 249/10/20 267/16/20 268/14/20 +f 249/10/20 268/14/20 269/15/20 +f 269/15/67 251/10/64 249/10/64 +f 251/10/64 269/15/67 270/15/67 +f 264/12/35 257/12/35 255/12/35 +f 257/12/35 264/12/35 271/12/35 +f 261/16/69 272/17/68 263/17/68 +f 272/17/68 261/16/69 273/16/69 +f 274/10/70 260/15/71 262/10/70 +f 260/15/71 274/10/70 275/15/71 +f 254/11/66 262/10/70 253/11/66 +f 262/10/70 254/11/66 274/10/70 +f 276/14/72 261/16/69 259/14/72 +f 261/16/69 276/14/72 273/16/69 +f 258/13/9 265/13/9 256/13/9 +f 265/13/9 258/13/9 277/13/9 +f 266/17/74 278/16/73 267/16/73 +f 278/16/73 266/17/74 279/17/74 +f 275/15/71 259/14/72 260/15/71 +f 259/14/72 275/15/71 276/14/72 +f 268/14/75 270/15/67 269/15/67 +f 270/15/67 268/14/75 280/14/75 +f 265/13/7 271/12/7 264/12/7 +f 271/12/7 265/13/7 277/13/7 +f 263/17/68 279/17/74 266/17/74 +f 279/17/74 263/17/68 272/17/68 +f 267/16/73 280/14/75 268/14/75 +f 280/14/75 267/16/73 278/16/73 +f 307/16/69 301/16/69 311/17/68 +f 302/17/68 311/17/68 301/16/69 +f 288/13/9 312/13/9 287/13/9 +f 304/13/9 287/13/9 312/13/9 +f 312/13/8 310/12/8 304/13/8 +f 305/12/8 304/13/8 310/12/8 +f 306/14/72 309/15/71 299/14/72 +f 300/15/71 299/14/72 309/15/71 +f 295/11/65 290/10/64 293/11/65 +f 289/10/64 293/11/65 290/10/64 +f 311/17/68 302/17/68 308/17/74 +f 303/17/74 308/17/74 302/17/68 +f 286/12/35 285/12/35 310/12/35 +f 305/12/35 310/12/35 285/12/35 +f 309/15/71 298/10/70 300/15/71 +f 297/10/70 300/15/71 298/10/70 +f 308/17/74 303/17/74 292/16/73 +f 291/16/73 292/16/73 303/17/74 +f 307/16/69 306/14/72 301/16/69 +f 299/14/72 301/16/69 306/14/72 +f 281/15/12 283/14/12 289/10/12 +f 283/14/12 291/16/12 289/10/12 +f 289/10/12 291/16/12 293/11/12 +f 291/16/12 303/17/12 293/11/12 +f 303/17/12 305/12/12 293/11/12 +f 305/12/12 285/12/12 293/11/12 +f 305/12/12 303/17/12 304/13/12 +f 293/11/12 285/12/12 294/11/12 +f 304/13/12 303/17/12 287/13/12 +f 287/13/12 294/11/12 285/12/12 +f 303/17/12 302/17/12 287/13/12 +f 287/13/12 302/17/12 294/11/12 +f 294/11/12 302/17/12 297/10/12 +f 302/17/12 301/16/12 297/10/12 +f 297/10/12 301/16/12 300/15/12 +f 299/14/12 300/15/12 301/16/12 +f 298/10/70 296/11/66 297/10/70 +f 294/11/66 297/10/70 296/11/66 +f 296/11/66 295/11/65 294/11/66 +f 293/11/65 294/11/66 295/11/65 +f 292/16/73 291/16/73 284/14/75 +f 283/14/75 284/14/75 291/16/73 +f 282/15/67 281/15/67 290/10/64 +f 289/10/64 290/10/64 281/15/67 +f 288/13/7 287/13/7 286/12/7 +f 285/12/7 286/12/7 287/13/7 +f 284/14/75 283/14/75 282/15/67 +f 281/15/67 282/15/67 283/14/75 +f 342/16/73 331/16/73 344/14/75 +f 332/14/75 344/14/75 331/16/73 +f 336/17/68 327/17/68 343/17/74 +f 330/17/74 343/17/74 327/17/68 +f 341/13/7 329/13/7 335/12/7 +f 328/12/7 335/12/7 329/13/7 +f 344/14/75 332/14/75 334/15/67 +f 333/15/67 334/15/67 332/14/75 +f 340/14/72 339/15/71 323/14/72 +f 324/15/71 323/14/72 339/15/71 +f 343/17/74 330/17/74 342/16/73 +f 331/16/73 342/16/73 330/17/74 +f 341/13/9 322/13/9 329/13/9 +f 320/13/9 329/13/9 322/13/9 +f 337/16/69 340/14/72 325/16/69 +f 323/14/72 325/16/69 340/14/72 +f 338/10/70 318/11/66 326/10/70 +f 317/11/66 326/10/70 318/11/66 +f 339/15/71 338/10/70 324/15/71 +f 326/10/70 324/15/71 338/10/70 +f 337/16/69 325/16/69 336/17/68 +f 327/17/68 336/17/68 325/16/69 +f 335/12/35 328/12/35 321/12/35 +f 319/12/35 321/12/35 328/12/35 +f 334/15/67 333/15/67 315/10/64 +f 313/10/64 315/10/64 333/15/67 +f 333/15/12 332/14/12 313/10/12 +f 332/14/12 331/16/12 313/10/12 +f 313/10/12 331/16/12 314/11/12 +f 331/16/12 330/17/12 314/11/12 +f 330/17/12 319/12/12 314/11/12 +f 319/12/12 328/12/12 314/11/12 +f 319/12/12 330/17/12 320/13/12 +f 320/13/12 330/17/12 329/13/12 +f 327/17/12 329/13/12 330/17/12 +f 329/13/12 327/17/12 328/12/12 +f 314/11/12 328/12/12 317/11/12 +f 328/12/12 327/17/12 317/11/12 +f 317/11/12 327/17/12 326/10/12 +f 327/17/12 325/16/12 326/10/12 +f 326/10/12 325/16/12 324/15/12 +f 323/14/12 324/15/12 325/16/12 +f 322/13/8 321/12/8 320/13/8 +f 319/12/8 320/13/8 321/12/8 +f 318/11/66 316/11/65 317/11/66 +f 314/11/65 317/11/66 316/11/65 +f 316/11/65 315/10/64 314/11/65 +f 313/10/64 314/11/65 315/10/64 +f 374/16/73 363/16/73 376/14/75 +f 364/14/75 376/14/75 363/16/73 +f 368/17/68 359/17/68 375/17/74 +f 362/17/74 375/17/74 359/17/68 +f 373/13/7 361/13/7 367/12/7 +f 360/12/7 367/12/7 361/13/7 +f 376/14/75 364/14/75 366/15/67 +f 365/15/67 366/15/67 364/14/75 +f 372/14/72 371/15/71 355/14/72 +f 356/15/71 355/14/72 371/15/71 +f 375/17/74 362/17/74 374/16/73 +f 363/16/73 374/16/73 362/17/74 +f 373/13/9 354/13/9 361/13/9 +f 352/13/9 361/13/9 354/13/9 +f 369/16/69 372/14/72 357/16/69 +f 355/14/72 357/16/69 372/14/72 +f 370/10/70 350/11/66 358/10/70 +f 349/11/66 358/10/70 350/11/66 +f 371/15/71 370/10/70 356/15/71 +f 358/10/70 356/15/71 370/10/70 +f 369/16/69 357/16/69 368/17/68 +f 359/17/68 368/17/68 357/16/69 +f 367/12/35 360/12/35 353/12/35 +f 351/12/35 353/12/35 360/12/35 +f 366/15/67 365/15/67 347/10/64 +f 345/10/64 347/10/64 365/15/67 +f 365/15/12 364/14/12 345/10/12 +f 364/14/12 363/16/12 345/10/12 +f 345/10/12 363/16/12 346/11/12 +f 363/16/12 362/17/12 346/11/12 +f 362/17/12 351/12/12 346/11/12 +f 351/12/12 360/12/12 346/11/12 +f 351/12/12 362/17/12 352/13/12 +f 352/13/12 362/17/12 361/13/12 +f 359/17/12 361/13/12 362/17/12 +f 361/13/12 359/17/12 360/12/12 +f 346/11/12 360/12/12 349/11/12 +f 360/12/12 359/17/12 349/11/12 +f 349/11/12 359/17/12 358/10/12 +f 359/17/12 357/16/12 358/10/12 +f 358/10/12 357/16/12 356/15/12 +f 355/14/12 356/15/12 357/16/12 +f 354/13/8 353/12/8 352/13/8 +f 351/12/8 352/13/8 353/12/8 +f 350/11/66 348/11/65 349/11/66 +f 346/11/65 349/11/66 348/11/65 +f 348/11/65 347/10/64 346/11/65 +f 345/10/64 346/11/65 347/10/64 +f 379/17/8 378/18/8 377/17/8 +f 380/18/8 378/18/8 379/17/8 +f 380/18/8 381/19/8 378/18/8 +f 382/19/8 381/19/8 380/18/8 +f 24/20/8 381/19/8 382/19/8 +f 23/20/8 381/19/8 24/20/8 +f 21/21/8 381/19/8 23/20/8 +f 382/19/8 22/21/8 24/20/8 +f 381/19/8 21/21/8 383/22/8 +f 22/21/8 383/22/8 21/21/8 +f 384/22/8 22/21/8 382/19/8 +f 384/22/8 383/22/8 22/21/8 +f 384/22/8 385/23/8 383/22/8 +f 386/23/8 385/23/8 384/22/8 +f 387/11/8 385/23/8 386/23/8 +f 385/23/8 387/11/8 388/11/8 +f 389/19/20 384/22/76 382/19/20 +f 384/22/76 389/19/20 390/22/76 +f 390/22/76 386/23/77 384/22/76 +f 386/23/77 390/22/76 391/23/77 +f 391/23/77 387/11/78 386/23/77 +f 387/11/78 391/23/77 392/11/78 +f 392/11/9 388/11/9 387/11/9 +f 388/11/9 392/11/9 393/11/9 +f 393/11/79 385/23/80 388/11/79 +f 385/23/80 393/11/79 394/23/80 +f 385/23/80 395/22/81 383/22/81 +f 395/22/81 385/23/80 394/23/80 +f 395/22/81 381/19/12 383/22/81 +f 381/19/12 395/22/81 396/19/12 +f 377/17/35 397/17/35 379/17/35 +f 397/17/35 377/17/35 398/17/35 +f 392/11/7 394/23/7 393/11/7 +f 394/23/7 392/11/7 391/23/7 +f 394/23/7 391/23/7 390/22/7 +f 394/23/7 390/22/7 395/22/7 +f 395/22/7 390/22/7 17/21/7 +f 17/21/7 390/22/7 389/19/7 +f 18/21/7 395/22/7 17/21/7 +f 17/21/7 389/19/7 19/20/7 +f 395/22/7 18/21/7 396/19/7 +f 19/20/7 389/19/7 20/20/7 +f 396/19/7 18/21/7 20/20/7 +f 396/19/7 20/20/7 389/19/7 +f 396/19/7 389/19/7 399/18/7 +f 396/19/7 399/18/7 400/18/7 +f 400/18/7 399/18/7 397/17/7 +f 400/18/7 397/17/7 398/17/7 +f 401/25/82 83/24/83 87/17/82 +f 83/24/83 401/25/82 402/26/83 +f 73/27/84 404/28/85 403/27/84 +f 404/28/85 73/27/84 74/29/85 +f 405/26/86 87/17/82 88/24/86 +f 87/17/82 405/26/86 401/25/82 +f 406/27/87 83/24/83 402/26/83 +f 83/24/83 406/27/87 84/27/87 +f 405/26/86 73/27/84 403/27/84 +f 73/27/84 405/26/86 88/24/86 +f 85/11/88 404/28/85 74/29/85 +f 404/28/85 85/11/88 407/30/88 +f 86/29/89 407/30/88 85/11/88 +f 407/30/88 86/29/89 408/28/89 +f 86/29/89 406/27/87 408/28/89 +f 406/27/87 86/29/89 84/27/87 +f 101/27/84 410/28/85 409/27/84 +f 410/28/85 101/27/84 102/29/85 +f 412/27/87 103/24/83 411/26/83 +f 103/24/83 412/27/87 104/27/87 +f 92/29/89 412/27/87 413/28/89 +f 412/27/87 92/29/89 104/27/87 +f 90/11/88 410/28/85 102/29/85 +f 410/28/85 90/11/88 414/30/88 +f 415/26/86 100/17/82 99/24/86 +f 100/17/82 415/26/86 416/25/82 +f 416/25/82 103/24/83 100/17/82 +f 103/24/83 416/25/82 411/26/83 +f 92/29/89 414/30/88 90/11/88 +f 414/30/88 92/29/89 413/28/89 +f 415/26/86 101/27/84 409/27/84 +f 101/27/84 415/26/86 99/24/86 +f 417/25/90 147/24/91 151/17/90 +f 147/24/91 417/25/90 418/26/91 +f 137/27/92 420/28/93 419/27/92 +f 420/28/93 137/27/92 138/29/93 +f 421/26/94 151/17/90 152/24/94 +f 151/17/90 421/26/94 417/25/90 +f 422/27/95 147/24/91 418/26/91 +f 147/24/91 422/27/95 148/27/95 +f 421/26/94 137/27/92 419/27/92 +f 137/27/92 421/26/94 152/24/94 +f 149/11/96 420/28/93 138/29/93 +f 420/28/93 149/11/96 423/30/96 +f 150/29/97 423/30/96 149/11/96 +f 423/30/96 150/29/97 424/28/97 +f 150/29/97 422/27/95 424/28/97 +f 422/27/95 150/29/97 148/27/95 +f 165/27/92 426/28/93 425/27/92 +f 426/28/93 165/27/92 166/29/93 +f 428/27/95 167/24/91 427/26/91 +f 167/24/91 428/27/95 168/27/95 +f 156/29/97 428/27/95 429/28/97 +f 428/27/95 156/29/97 168/27/95 +f 154/11/96 426/28/93 166/29/93 +f 426/28/93 154/11/96 430/30/96 +f 431/26/94 164/17/90 163/24/94 +f 164/17/90 431/26/94 432/25/90 +f 432/25/90 167/24/91 164/17/90 +f 167/24/91 432/25/90 427/26/91 +f 156/29/97 430/30/96 154/11/96 +f 430/30/96 156/29/97 429/28/97 +f 431/26/94 165/27/92 425/27/92 +f 165/27/92 431/26/94 163/24/94 +f 194/31/20 207/32/20 213/31/20 +f 207/32/20 194/31/20 193/32/20 +f 248/31/20 222/32/20 224/31/20 +f 222/32/20 248/31/20 246/32/20 +f 258/31/20 271/32/20 277/31/20 +f 271/32/20 258/31/20 257/32/20 +f 310/32/12 312/31/12 286/32/12 +f 288/31/12 286/32/12 312/31/12 +f 321/32/12 322/31/12 335/32/12 +f 341/31/12 335/32/12 322/31/12 +f 353/32/12 354/31/12 367/32/12 +f 373/31/12 367/32/12 354/31/12 +f 396/33/98 378/34/99 381/33/98 +f 378/34/99 396/33/98 400/34/99 +f 378/34/99 398/35/100 377/35/100 +f 398/35/100 378/34/99 400/34/99 +f 379/35/102 399/34/101 380/34/101 +f 399/34/101 379/35/102 397/35/102 +f 399/34/101 382/33/103 380/34/101 +f 382/33/103 399/34/101 389/33/103 + +g train-electric-subway-b + + + + +usemtl colormap + +f 3/2/2 2/1/1 1/1/1 +f 2/1/1 3/2/2 4/2/2 +f 5/1/3 3/2/3 1/1/3 +f 3/2/3 5/1/3 6/2/3 +f 4/2/4 7/1/4 2/1/4 +f 7/1/4 4/2/4 8/2/4 +f 7/1/5 6/2/6 5/1/5 +f 6/2/6 7/1/5 8/2/6 +f 3/2/2 8/2/6 4/2/2 +f 8/2/6 3/2/2 6/2/6 +f 14/2/2 11/2/6 16/2/2 +f 12/2/6 16/2/2 11/2/6 +f 16/2/2 15/1/1 14/2/2 +f 13/1/1 14/2/2 15/1/1 +f 16/2/4 12/2/4 15/1/4 +f 10/1/4 15/1/4 12/2/4 +f 14/2/3 13/1/3 11/2/3 +f 9/1/3 11/2/3 13/1/3 +f 12/2/6 11/2/6 10/1/5 +f 9/1/5 10/1/5 11/2/6 +f 19/2/7 18/1/7 17/1/7 +f 18/1/7 19/2/7 20/2/7 +f 23/2/8 22/1/8 21/1/8 +f 22/1/8 23/2/8 24/2/8 +f 27/1/9 26/1/9 25/1/9 +f 26/1/9 27/1/9 28/1/9 +f 28/1/9 27/1/9 29/1/9 +f 29/1/9 27/1/9 30/1/9 +f 33/2/10 32/1/11 31/2/10 +f 32/1/11 33/2/10 34/1/11 +f 27/1/8 36/2/8 35/2/8 +f 27/1/8 37/1/8 36/2/8 +f 37/1/8 27/1/8 32/1/8 +f 25/1/8 32/1/8 27/1/8 +f 32/1/8 25/1/8 31/2/8 +f 31/2/8 25/1/8 38/2/8 +f 41/1/13 40/2/12 39/1/12 +f 40/2/12 41/1/13 42/2/13 +f 45/1/9 44/1/9 43/1/9 +f 44/1/9 45/1/9 39/1/9 +f 39/1/9 45/1/9 46/1/9 +f 39/1/9 46/1/9 41/1/9 +f 27/1/12 47/2/14 30/1/14 +f 47/2/14 27/1/12 35/2/12 +f 48/2/15 41/1/13 46/1/15 +f 41/1/13 48/2/15 42/2/13 +f 49/2/16 26/1/17 28/1/16 +f 26/1/17 49/2/16 50/2/17 +f 51/1/18 36/2/19 37/1/18 +f 36/2/19 51/1/18 52/2/19 +f 54/2/21 44/1/20 53/2/20 +f 44/1/20 54/2/21 43/1/21 +f 38/2/20 26/1/17 50/2/17 +f 26/1/17 38/2/20 25/1/20 +f 30/1/14 55/2/22 29/1/22 +f 55/2/22 30/1/14 47/2/14 +f 51/1/18 32/1/11 34/1/11 +f 32/1/11 51/1/18 37/1/18 +f 56/2/23 46/1/15 45/1/23 +f 46/1/15 56/2/23 48/2/15 +f 55/2/22 28/1/16 29/1/22 +f 28/1/16 55/2/22 49/2/16 +f 56/2/23 43/1/21 54/2/21 +f 43/1/21 56/2/23 45/1/23 +f 44/1/7 33/2/7 53/2/7 +f 44/1/7 34/1/7 33/2/7 +f 34/1/7 44/1/7 51/1/7 +f 39/1/7 51/1/7 44/1/7 +f 51/1/7 39/1/7 52/2/7 +f 52/2/7 39/1/7 40/2/7 +f 59/4/24 58/1/25 57/3/24 +f 58/1/25 59/4/24 60/5/25 +f 63/2/27 62/7/26 61/6/26 +f 62/7/26 63/2/27 64/8/27 +f 67/9/29 66/7/28 65/6/28 +f 66/7/28 67/9/29 68/9/29 +f 59/4/7 69/4/7 60/5/7 +f 69/4/7 59/4/7 70/9/7 +f 69/4/7 70/9/7 68/9/7 +f 68/9/7 70/9/7 62/7/7 +f 68/9/7 62/7/7 66/7/7 +f 66/7/7 62/7/7 64/8/7 +f 69/4/30 67/9/29 71/3/30 +f 67/9/29 69/4/30 68/9/29 +f 69/4/30 58/1/25 60/5/25 +f 58/1/25 69/4/30 71/3/30 +f 63/2/27 66/7/28 64/8/27 +f 66/7/28 63/2/27 65/6/28 +f 61/6/26 70/9/31 72/9/31 +f 70/9/31 61/6/26 62/7/26 +f 70/9/31 57/3/24 72/9/31 +f 57/3/24 70/9/31 59/4/24 +f 75/9/20 74/3/32 73/9/20 +f 74/3/32 75/9/20 76/3/32 +f 76/3/7 78/3/7 77/1/7 +f 78/3/7 76/3/7 75/9/7 +f 78/3/7 75/9/7 79/9/7 +f 79/9/7 75/9/7 80/6/7 +f 79/9/7 80/6/7 81/6/7 +f 81/6/7 80/6/7 82/2/7 +f 84/9/12 81/6/33 83/6/33 +f 81/6/33 84/9/12 79/9/12 +f 77/1/9 74/3/32 76/3/32 +f 74/3/32 77/1/9 85/1/9 +f 78/3/34 84/9/12 86/3/34 +f 84/9/12 78/3/34 79/9/12 +f 78/3/34 85/1/9 77/1/9 +f 85/1/9 78/3/34 86/3/34 +f 87/2/35 81/6/33 82/2/35 +f 81/6/33 87/2/35 83/6/33 +f 88/6/36 75/9/20 73/9/20 +f 75/9/20 88/6/36 80/6/36 +f 88/6/36 82/2/35 80/6/36 +f 82/2/35 88/6/36 87/2/35 +f 91/3/34 90/1/9 89/1/9 +f 90/1/9 91/3/34 92/3/34 +f 93/3/7 91/3/7 89/1/7 +f 91/3/7 93/3/7 94/9/7 +f 91/3/7 94/9/7 95/9/7 +f 95/9/7 94/9/7 96/6/7 +f 95/9/7 96/6/7 97/6/7 +f 97/6/7 96/6/7 98/2/7 +f 99/6/36 98/2/35 96/6/36 +f 98/2/35 99/6/36 100/2/35 +f 94/9/20 102/3/32 101/9/20 +f 102/3/32 94/9/20 93/3/32 +f 89/1/9 102/3/32 93/3/32 +f 102/3/32 89/1/9 90/1/9 +f 104/9/12 97/6/33 103/6/33 +f 97/6/33 104/9/12 95/9/12 +f 99/6/36 94/9/20 101/9/20 +f 94/9/20 99/6/36 96/6/36 +f 100/2/35 97/6/33 98/2/35 +f 97/6/33 100/2/35 103/6/33 +f 91/3/34 104/9/12 92/3/34 +f 104/9/12 91/3/34 95/9/12 +f 107/2/37 106/1/37 105/2/37 +f 106/1/37 107/2/37 108/1/37 +f 111/2/38 110/1/39 109/1/38 +f 110/1/39 111/2/38 112/2/39 +f 109/1/9 106/1/9 108/1/9 +f 106/1/9 109/1/9 113/1/9 +f 113/1/9 109/1/9 110/1/9 +f 113/1/9 110/1/9 114/1/9 +f 114/1/9 110/1/9 115/1/9 +f 115/1/9 110/1/9 116/1/9 +f 108/1/40 111/2/38 109/1/38 +f 111/2/38 108/1/40 107/2/40 +f 115/1/42 117/2/41 114/1/41 +f 117/2/41 115/1/42 118/2/42 +f 112/2/39 116/1/43 110/1/39 +f 116/1/43 112/2/39 119/2/43 +f 115/1/44 119/2/44 118/2/44 +f 119/2/44 115/1/44 116/1/44 +f 120/2/45 106/1/46 113/1/45 +f 106/1/46 120/2/45 105/2/46 +f 105/2/35 111/2/35 107/2/35 +f 111/2/35 105/2/35 120/2/35 +f 111/2/35 120/2/35 112/2/35 +f 112/2/35 120/2/35 117/2/35 +f 112/2/35 117/2/35 118/2/35 +f 112/2/35 118/2/35 119/2/35 +f 117/2/41 113/1/45 114/1/41 +f 113/1/45 117/2/41 120/2/45 +f 123/4/47 122/1/48 121/3/47 +f 122/1/48 123/4/47 124/5/48 +f 127/2/50 126/7/49 125/6/49 +f 126/7/49 127/2/50 128/8/50 +f 131/9/52 130/7/51 129/6/51 +f 130/7/51 131/9/52 132/9/52 +f 123/4/53 133/4/53 124/5/53 +f 133/4/53 123/4/53 134/9/53 +f 133/4/53 134/9/53 132/9/53 +f 132/9/53 134/9/53 126/7/53 +f 132/9/53 126/7/53 130/7/53 +f 130/7/53 126/7/53 128/8/53 +f 133/4/54 131/9/52 135/3/54 +f 131/9/52 133/4/54 132/9/52 +f 133/4/54 122/1/48 124/5/48 +f 122/1/48 133/4/54 135/3/54 +f 127/2/50 130/7/51 128/8/50 +f 130/7/51 127/2/50 129/6/51 +f 125/6/49 134/9/55 136/9/55 +f 134/9/55 125/6/49 126/7/49 +f 134/9/55 121/3/47 136/9/55 +f 121/3/47 134/9/55 123/4/47 +f 139/9/56 138/3/57 137/9/56 +f 138/3/57 139/9/56 140/3/57 +f 140/3/53 142/3/53 141/1/53 +f 142/3/53 140/3/53 139/9/53 +f 142/3/53 139/9/53 143/9/53 +f 143/9/53 139/9/53 144/6/53 +f 143/9/53 144/6/53 145/6/53 +f 145/6/53 144/6/53 146/2/53 +f 148/9/59 145/6/58 147/6/58 +f 145/6/58 148/9/59 143/9/59 +f 141/1/9 138/3/57 140/3/57 +f 138/3/57 141/1/9 149/1/9 +f 142/3/60 148/9/59 150/3/60 +f 148/9/59 142/3/60 143/9/59 +f 142/3/60 149/1/9 141/1/9 +f 149/1/9 142/3/60 150/3/60 +f 151/2/35 145/6/58 146/2/35 +f 145/6/58 151/2/35 147/6/58 +f 152/6/61 139/9/56 137/9/56 +f 139/9/56 152/6/61 144/6/61 +f 152/6/61 146/2/35 144/6/61 +f 146/2/35 152/6/61 151/2/35 +f 155/3/60 154/1/9 153/1/9 +f 154/1/9 155/3/60 156/3/60 +f 157/3/53 155/3/53 153/1/53 +f 155/3/53 157/3/53 158/9/53 +f 155/3/53 158/9/53 159/9/53 +f 159/9/53 158/9/53 160/6/53 +f 159/9/53 160/6/53 161/6/53 +f 161/6/53 160/6/53 162/2/53 +f 163/6/61 162/2/35 160/6/61 +f 162/2/35 163/6/61 164/2/35 +f 158/9/56 166/3/57 165/9/56 +f 166/3/57 158/9/56 157/3/57 +f 153/1/9 166/3/57 157/3/57 +f 166/3/57 153/1/9 154/1/9 +f 168/9/59 161/6/58 167/6/58 +f 161/6/58 168/9/59 159/9/59 +f 163/6/61 158/9/56 165/9/56 +f 158/9/56 163/6/61 160/6/61 +f 164/2/35 161/6/58 162/2/35 +f 161/6/58 164/2/35 167/6/58 +f 155/3/60 168/9/59 156/3/60 +f 168/9/59 155/3/60 159/9/59 +f 171/2/62 170/1/62 169/2/62 +f 170/1/62 171/2/62 172/1/62 +f 175/2/45 174/1/41 173/1/45 +f 174/1/41 175/2/45 176/2/41 +f 173/1/9 170/1/9 172/1/9 +f 170/1/9 173/1/9 177/1/9 +f 177/1/9 173/1/9 174/1/9 +f 177/1/9 174/1/9 178/1/9 +f 178/1/9 174/1/9 179/1/9 +f 179/1/9 174/1/9 180/1/9 +f 172/1/46 175/2/45 173/1/45 +f 175/2/45 172/1/46 171/2/46 +f 179/1/43 181/2/39 178/1/39 +f 181/2/39 179/1/43 182/2/43 +f 176/2/41 180/1/42 174/1/41 +f 180/1/42 176/2/41 183/2/42 +f 179/1/63 183/2/63 182/2/63 +f 183/2/63 179/1/63 180/1/63 +f 184/2/38 170/1/40 177/1/38 +f 170/1/40 184/2/38 169/2/40 +f 169/2/35 175/2/35 171/2/35 +f 175/2/35 169/2/35 184/2/35 +f 175/2/35 184/2/35 176/2/35 +f 176/2/35 184/2/35 181/2/35 +f 176/2/35 181/2/35 182/2/35 +f 176/2/35 182/2/35 183/2/35 +f 181/2/39 177/1/38 178/1/39 +f 177/1/38 181/2/39 184/2/38 +f 187/10/64 186/11/65 185/10/64 +f 186/11/65 187/10/64 188/11/65 +f 188/11/65 189/11/66 186/11/65 +f 189/11/66 188/11/65 190/11/66 +f 193/12/8 192/13/8 191/12/8 +f 192/13/8 193/12/8 194/13/8 +f 197/16/20 196/15/20 195/14/20 +f 196/15/20 197/16/20 198/10/20 +f 198/10/20 197/16/20 199/17/20 +f 198/10/20 199/17/20 189/11/20 +f 189/11/20 199/17/20 200/12/20 +f 189/11/20 200/12/20 186/11/20 +f 200/12/20 199/17/20 201/13/20 +f 202/17/20 201/13/20 199/17/20 +f 201/13/20 202/17/20 192/13/20 +f 192/13/20 202/17/20 191/12/20 +f 186/11/20 200/12/20 191/12/20 +f 186/11/20 191/12/20 202/17/20 +f 186/11/20 202/17/20 203/16/20 +f 186/11/20 203/16/20 185/10/20 +f 185/10/20 203/16/20 204/14/20 +f 185/10/20 204/14/20 205/15/20 +f 205/15/67 187/10/64 185/10/64 +f 187/10/64 205/15/67 206/15/67 +f 200/12/35 193/12/35 191/12/35 +f 193/12/35 200/12/35 207/12/35 +f 197/16/69 208/17/68 199/17/68 +f 208/17/68 197/16/69 209/16/69 +f 210/10/70 196/15/71 198/10/70 +f 196/15/71 210/10/70 211/15/71 +f 190/11/66 198/10/70 189/11/66 +f 198/10/70 190/11/66 210/10/70 +f 212/14/72 197/16/69 195/14/72 +f 197/16/69 212/14/72 209/16/69 +f 194/13/9 201/13/9 192/13/9 +f 201/13/9 194/13/9 213/13/9 +f 202/17/74 214/16/73 203/16/73 +f 214/16/73 202/17/74 215/17/74 +f 211/15/71 195/14/72 196/15/71 +f 195/14/72 211/15/71 212/14/72 +f 204/14/75 206/15/67 205/15/67 +f 206/15/67 204/14/75 216/14/75 +f 201/13/7 207/12/7 200/12/7 +f 207/12/7 201/13/7 213/13/7 +f 199/17/68 215/17/74 202/17/74 +f 215/17/74 199/17/68 208/17/68 +f 203/16/73 216/14/75 204/14/75 +f 216/14/75 203/16/73 214/16/73 +f 219/14/75 218/15/67 217/15/67 +f 218/15/67 219/14/75 220/14/75 +f 223/13/7 222/12/7 221/12/7 +f 222/12/7 223/13/7 224/13/7 +f 217/15/67 226/10/64 225/10/64 +f 226/10/64 217/15/67 218/15/67 +f 227/16/73 220/14/75 219/14/75 +f 220/14/75 227/16/73 228/16/73 +f 231/11/65 230/11/66 229/11/65 +f 230/11/66 231/11/65 232/11/66 +f 232/11/66 233/10/70 230/11/66 +f 233/10/70 232/11/66 234/10/70 +f 237/16/20 236/15/20 235/14/20 +f 236/15/20 237/16/20 233/10/20 +f 233/10/20 237/16/20 238/17/20 +f 233/10/20 238/17/20 230/11/20 +f 230/11/20 238/17/20 223/13/20 +f 223/13/20 238/17/20 239/17/20 +f 221/12/20 230/11/20 223/13/20 +f 223/13/20 239/17/20 240/13/20 +f 230/11/20 221/12/20 229/11/20 +f 240/13/20 239/17/20 241/12/20 +f 229/11/20 221/12/20 241/12/20 +f 229/11/20 241/12/20 239/17/20 +f 229/11/20 239/17/20 227/16/20 +f 229/11/20 227/16/20 225/10/20 +f 225/10/20 227/16/20 219/14/20 +f 225/10/20 219/14/20 217/15/20 +f 242/14/72 237/16/69 235/14/72 +f 237/16/69 242/14/72 243/16/69 +f 239/17/74 228/16/73 227/16/73 +f 228/16/73 239/17/74 244/17/74 +f 234/10/70 236/15/71 233/10/70 +f 236/15/71 234/10/70 245/15/71 +f 221/12/35 246/12/35 241/12/35 +f 246/12/35 221/12/35 222/12/35 +f 238/17/68 244/17/74 239/17/74 +f 244/17/74 238/17/68 247/17/68 +f 226/10/64 229/11/65 225/10/64 +f 229/11/65 226/10/64 231/11/65 +f 245/15/71 235/14/72 236/15/71 +f 235/14/72 245/15/71 242/14/72 +f 246/12/8 240/13/8 241/12/8 +f 240/13/8 246/12/8 248/13/8 +f 248/13/9 223/13/9 240/13/9 +f 223/13/9 248/13/9 224/13/9 +f 237/16/69 247/17/68 238/17/68 +f 247/17/68 237/16/69 243/16/69 +f 251/10/64 250/11/65 249/10/64 +f 250/11/65 251/10/64 252/11/65 +f 252/11/65 253/11/66 250/11/65 +f 253/11/66 252/11/65 254/11/66 +f 257/12/8 256/13/8 255/12/8 +f 256/13/8 257/12/8 258/13/8 +f 261/16/20 260/15/20 259/14/20 +f 260/15/20 261/16/20 262/10/20 +f 262/10/20 261/16/20 263/17/20 +f 262/10/20 263/17/20 253/11/20 +f 253/11/20 263/17/20 264/12/20 +f 253/11/20 264/12/20 250/11/20 +f 264/12/20 263/17/20 265/13/20 +f 266/17/20 265/13/20 263/17/20 +f 265/13/20 266/17/20 256/13/20 +f 256/13/20 266/17/20 255/12/20 +f 250/11/20 264/12/20 255/12/20 +f 250/11/20 255/12/20 266/17/20 +f 250/11/20 266/17/20 267/16/20 +f 250/11/20 267/16/20 249/10/20 +f 249/10/20 267/16/20 268/14/20 +f 249/10/20 268/14/20 269/15/20 +f 269/15/67 251/10/64 249/10/64 +f 251/10/64 269/15/67 270/15/67 +f 264/12/35 257/12/35 255/12/35 +f 257/12/35 264/12/35 271/12/35 +f 261/16/69 272/17/68 263/17/68 +f 272/17/68 261/16/69 273/16/69 +f 274/10/70 260/15/71 262/10/70 +f 260/15/71 274/10/70 275/15/71 +f 254/11/66 262/10/70 253/11/66 +f 262/10/70 254/11/66 274/10/70 +f 276/14/72 261/16/69 259/14/72 +f 261/16/69 276/14/72 273/16/69 +f 258/13/9 265/13/9 256/13/9 +f 265/13/9 258/13/9 277/13/9 +f 266/17/74 278/16/73 267/16/73 +f 278/16/73 266/17/74 279/17/74 +f 275/15/71 259/14/72 260/15/71 +f 259/14/72 275/15/71 276/14/72 +f 268/14/75 270/15/67 269/15/67 +f 270/15/67 268/14/75 280/14/75 +f 265/13/7 271/12/7 264/12/7 +f 271/12/7 265/13/7 277/13/7 +f 263/17/68 279/17/74 266/17/74 +f 279/17/74 263/17/68 272/17/68 +f 267/16/73 280/14/75 268/14/75 +f 280/14/75 267/16/73 278/16/73 +f 307/16/69 301/16/69 311/17/68 +f 302/17/68 311/17/68 301/16/69 +f 288/13/9 312/13/9 287/13/9 +f 304/13/9 287/13/9 312/13/9 +f 312/13/8 310/12/8 304/13/8 +f 305/12/8 304/13/8 310/12/8 +f 306/14/72 309/15/71 299/14/72 +f 300/15/71 299/14/72 309/15/71 +f 295/11/65 290/10/64 293/11/65 +f 289/10/64 293/11/65 290/10/64 +f 311/17/68 302/17/68 308/17/74 +f 303/17/74 308/17/74 302/17/68 +f 286/12/35 285/12/35 310/12/35 +f 305/12/35 310/12/35 285/12/35 +f 309/15/71 298/10/70 300/15/71 +f 297/10/70 300/15/71 298/10/70 +f 308/17/74 303/17/74 292/16/73 +f 291/16/73 292/16/73 303/17/74 +f 307/16/69 306/14/72 301/16/69 +f 299/14/72 301/16/69 306/14/72 +f 281/15/12 283/14/12 289/10/12 +f 283/14/12 291/16/12 289/10/12 +f 289/10/12 291/16/12 293/11/12 +f 291/16/12 303/17/12 293/11/12 +f 303/17/12 305/12/12 293/11/12 +f 305/12/12 285/12/12 293/11/12 +f 305/12/12 303/17/12 304/13/12 +f 293/11/12 285/12/12 294/11/12 +f 304/13/12 303/17/12 287/13/12 +f 287/13/12 294/11/12 285/12/12 +f 303/17/12 302/17/12 287/13/12 +f 287/13/12 302/17/12 294/11/12 +f 294/11/12 302/17/12 297/10/12 +f 302/17/12 301/16/12 297/10/12 +f 297/10/12 301/16/12 300/15/12 +f 299/14/12 300/15/12 301/16/12 +f 298/10/70 296/11/66 297/10/70 +f 294/11/66 297/10/70 296/11/66 +f 296/11/66 295/11/65 294/11/66 +f 293/11/65 294/11/66 295/11/65 +f 292/16/73 291/16/73 284/14/75 +f 283/14/75 284/14/75 291/16/73 +f 282/15/67 281/15/67 290/10/64 +f 289/10/64 290/10/64 281/15/67 +f 288/13/7 287/13/7 286/12/7 +f 285/12/7 286/12/7 287/13/7 +f 284/14/75 283/14/75 282/15/67 +f 281/15/67 282/15/67 283/14/75 +f 342/16/73 331/16/73 344/14/75 +f 332/14/75 344/14/75 331/16/73 +f 336/17/68 327/17/68 343/17/74 +f 330/17/74 343/17/74 327/17/68 +f 341/13/7 329/13/7 335/12/7 +f 328/12/7 335/12/7 329/13/7 +f 344/14/75 332/14/75 334/15/67 +f 333/15/67 334/15/67 332/14/75 +f 340/14/72 339/15/71 323/14/72 +f 324/15/71 323/14/72 339/15/71 +f 343/17/74 330/17/74 342/16/73 +f 331/16/73 342/16/73 330/17/74 +f 341/13/9 322/13/9 329/13/9 +f 320/13/9 329/13/9 322/13/9 +f 337/16/69 340/14/72 325/16/69 +f 323/14/72 325/16/69 340/14/72 +f 338/10/70 318/11/66 326/10/70 +f 317/11/66 326/10/70 318/11/66 +f 339/15/71 338/10/70 324/15/71 +f 326/10/70 324/15/71 338/10/70 +f 337/16/69 325/16/69 336/17/68 +f 327/17/68 336/17/68 325/16/69 +f 335/12/35 328/12/35 321/12/35 +f 319/12/35 321/12/35 328/12/35 +f 334/15/67 333/15/67 315/10/64 +f 313/10/64 315/10/64 333/15/67 +f 333/15/12 332/14/12 313/10/12 +f 332/14/12 331/16/12 313/10/12 +f 313/10/12 331/16/12 314/11/12 +f 331/16/12 330/17/12 314/11/12 +f 330/17/12 319/12/12 314/11/12 +f 319/12/12 328/12/12 314/11/12 +f 319/12/12 330/17/12 320/13/12 +f 320/13/12 330/17/12 329/13/12 +f 327/17/12 329/13/12 330/17/12 +f 329/13/12 327/17/12 328/12/12 +f 314/11/12 328/12/12 317/11/12 +f 328/12/12 327/17/12 317/11/12 +f 317/11/12 327/17/12 326/10/12 +f 327/17/12 325/16/12 326/10/12 +f 326/10/12 325/16/12 324/15/12 +f 323/14/12 324/15/12 325/16/12 +f 322/13/8 321/12/8 320/13/8 +f 319/12/8 320/13/8 321/12/8 +f 318/11/66 316/11/65 317/11/66 +f 314/11/65 317/11/66 316/11/65 +f 316/11/65 315/10/64 314/11/65 +f 313/10/64 314/11/65 315/10/64 +f 374/16/73 363/16/73 376/14/75 +f 364/14/75 376/14/75 363/16/73 +f 368/17/68 359/17/68 375/17/74 +f 362/17/74 375/17/74 359/17/68 +f 373/13/7 361/13/7 367/12/7 +f 360/12/7 367/12/7 361/13/7 +f 376/14/75 364/14/75 366/15/67 +f 365/15/67 366/15/67 364/14/75 +f 372/14/72 371/15/71 355/14/72 +f 356/15/71 355/14/72 371/15/71 +f 375/17/74 362/17/74 374/16/73 +f 363/16/73 374/16/73 362/17/74 +f 373/13/9 354/13/9 361/13/9 +f 352/13/9 361/13/9 354/13/9 +f 369/16/69 372/14/72 357/16/69 +f 355/14/72 357/16/69 372/14/72 +f 370/10/70 350/11/66 358/10/70 +f 349/11/66 358/10/70 350/11/66 +f 371/15/71 370/10/70 356/15/71 +f 358/10/70 356/15/71 370/10/70 +f 369/16/69 357/16/69 368/17/68 +f 359/17/68 368/17/68 357/16/69 +f 367/12/35 360/12/35 353/12/35 +f 351/12/35 353/12/35 360/12/35 +f 366/15/67 365/15/67 347/10/64 +f 345/10/64 347/10/64 365/15/67 +f 365/15/12 364/14/12 345/10/12 +f 364/14/12 363/16/12 345/10/12 +f 345/10/12 363/16/12 346/11/12 +f 363/16/12 362/17/12 346/11/12 +f 362/17/12 351/12/12 346/11/12 +f 351/12/12 360/12/12 346/11/12 +f 351/12/12 362/17/12 352/13/12 +f 352/13/12 362/17/12 361/13/12 +f 359/17/12 361/13/12 362/17/12 +f 361/13/12 359/17/12 360/12/12 +f 346/11/12 360/12/12 349/11/12 +f 360/12/12 359/17/12 349/11/12 +f 349/11/12 359/17/12 358/10/12 +f 359/17/12 357/16/12 358/10/12 +f 358/10/12 357/16/12 356/15/12 +f 355/14/12 356/15/12 357/16/12 +f 354/13/8 353/12/8 352/13/8 +f 351/12/8 352/13/8 353/12/8 +f 350/11/66 348/11/65 349/11/66 +f 346/11/65 349/11/66 348/11/65 +f 348/11/65 347/10/64 346/11/65 +f 345/10/64 346/11/65 347/10/64 +f 379/17/8 378/18/8 377/17/8 +f 380/18/8 378/18/8 379/17/8 +f 380/18/8 381/19/8 378/18/8 +f 382/19/8 381/19/8 380/18/8 +f 24/20/8 381/19/8 382/19/8 +f 23/20/8 381/19/8 24/20/8 +f 21/21/8 381/19/8 23/20/8 +f 382/19/8 22/21/8 24/20/8 +f 381/19/8 21/21/8 383/22/8 +f 22/21/8 383/22/8 21/21/8 +f 384/22/8 22/21/8 382/19/8 +f 384/22/8 383/22/8 22/21/8 +f 384/22/8 385/23/8 383/22/8 +f 386/23/8 385/23/8 384/22/8 +f 387/11/8 385/23/8 386/23/8 +f 385/23/8 387/11/8 388/11/8 +f 389/19/20 384/22/76 382/19/20 +f 384/22/76 389/19/20 390/22/76 +f 390/22/76 386/23/77 384/22/76 +f 386/23/77 390/22/76 391/23/77 +f 391/23/77 387/11/78 386/23/77 +f 387/11/78 391/23/77 392/11/78 +f 392/11/9 388/11/9 387/11/9 +f 388/11/9 392/11/9 393/11/9 +f 393/11/79 385/23/80 388/11/79 +f 385/23/80 393/11/79 394/23/80 +f 385/23/80 395/22/81 383/22/81 +f 395/22/81 385/23/80 394/23/80 +f 395/22/81 381/19/12 383/22/81 +f 381/19/12 395/22/81 396/19/12 +f 377/17/35 397/17/35 379/17/35 +f 397/17/35 377/17/35 398/17/35 +f 392/11/7 394/23/7 393/11/7 +f 394/23/7 392/11/7 391/23/7 +f 394/23/7 391/23/7 390/22/7 +f 394/23/7 390/22/7 395/22/7 +f 395/22/7 390/22/7 17/21/7 +f 17/21/7 390/22/7 389/19/7 +f 18/21/7 395/22/7 17/21/7 +f 17/21/7 389/19/7 19/20/7 +f 395/22/7 18/21/7 396/19/7 +f 19/20/7 389/19/7 20/20/7 +f 396/19/7 18/21/7 20/20/7 +f 396/19/7 20/20/7 389/19/7 +f 396/19/7 389/19/7 399/18/7 +f 396/19/7 399/18/7 400/18/7 +f 400/18/7 399/18/7 397/17/7 +f 400/18/7 397/17/7 398/17/7 +f 401/25/82 83/24/83 87/17/82 +f 83/24/83 401/25/82 402/26/83 +f 73/27/84 404/28/85 403/27/84 +f 404/28/85 73/27/84 74/29/85 +f 405/26/86 87/17/82 88/24/86 +f 87/17/82 405/26/86 401/25/82 +f 406/27/87 83/24/83 402/26/83 +f 83/24/83 406/27/87 84/27/87 +f 405/26/86 73/27/84 403/27/84 +f 73/27/84 405/26/86 88/24/86 +f 85/11/88 404/28/85 74/29/85 +f 404/28/85 85/11/88 407/30/88 +f 86/29/89 407/30/88 85/11/88 +f 407/30/88 86/29/89 408/28/89 +f 86/29/89 406/27/87 408/28/89 +f 406/27/87 86/29/89 84/27/87 +f 101/27/84 410/28/85 409/27/84 +f 410/28/85 101/27/84 102/29/85 +f 412/27/87 103/24/83 411/26/83 +f 103/24/83 412/27/87 104/27/87 +f 92/29/89 412/27/87 413/28/89 +f 412/27/87 92/29/89 104/27/87 +f 90/11/88 410/28/85 102/29/85 +f 410/28/85 90/11/88 414/30/88 +f 415/26/86 100/17/82 99/24/86 +f 100/17/82 415/26/86 416/25/82 +f 416/25/82 103/24/83 100/17/82 +f 103/24/83 416/25/82 411/26/83 +f 92/29/89 414/30/88 90/11/88 +f 414/30/88 92/29/89 413/28/89 +f 415/26/86 101/27/84 409/27/84 +f 101/27/84 415/26/86 99/24/86 +f 417/25/90 147/24/91 151/17/90 +f 147/24/91 417/25/90 418/26/91 +f 137/27/92 420/28/93 419/27/92 +f 420/28/93 137/27/92 138/29/93 +f 421/26/94 151/17/90 152/24/94 +f 151/17/90 421/26/94 417/25/90 +f 422/27/95 147/24/91 418/26/91 +f 147/24/91 422/27/95 148/27/95 +f 421/26/94 137/27/92 419/27/92 +f 137/27/92 421/26/94 152/24/94 +f 149/11/96 420/28/93 138/29/93 +f 420/28/93 149/11/96 423/30/96 +f 150/29/97 423/30/96 149/11/96 +f 423/30/96 150/29/97 424/28/97 +f 150/29/97 422/27/95 424/28/97 +f 422/27/95 150/29/97 148/27/95 +f 165/27/92 426/28/93 425/27/92 +f 426/28/93 165/27/92 166/29/93 +f 428/27/95 167/24/91 427/26/91 +f 167/24/91 428/27/95 168/27/95 +f 156/29/97 428/27/95 429/28/97 +f 428/27/95 156/29/97 168/27/95 +f 154/11/96 426/28/93 166/29/93 +f 426/28/93 154/11/96 430/30/96 +f 431/26/94 164/17/90 163/24/94 +f 164/17/90 431/26/94 432/25/90 +f 432/25/90 167/24/91 164/17/90 +f 167/24/91 432/25/90 427/26/91 +f 156/29/97 430/30/96 154/11/96 +f 430/30/96 156/29/97 429/28/97 +f 431/26/94 165/27/92 425/27/92 +f 165/27/92 431/26/94 163/24/94 +f 194/31/20 207/32/20 213/31/20 +f 207/32/20 194/31/20 193/32/20 +f 248/31/20 222/32/20 224/31/20 +f 222/32/20 248/31/20 246/32/20 +f 258/31/20 271/32/20 277/31/20 +f 271/32/20 258/31/20 257/32/20 +f 310/32/12 312/31/12 286/32/12 +f 288/31/12 286/32/12 312/31/12 +f 321/32/12 322/31/12 335/32/12 +f 341/31/12 335/32/12 322/31/12 +f 353/32/12 354/31/12 367/32/12 +f 373/31/12 367/32/12 354/31/12 +f 396/33/98 378/34/99 381/33/98 +f 378/34/99 396/33/98 400/34/99 +f 378/34/99 398/35/100 377/35/100 +f 398/35/100 378/34/99 400/34/99 +f 379/35/102 399/34/101 380/34/101 +f 399/34/101 379/35/102 397/35/102 +f 399/34/101 382/33/103 380/34/101 +f 382/33/103 399/34/101 389/33/103 + +g wheels-front + +v 0.3999999 0.3594994 0.4168084 1 1 1 +v 0.2999999 0.3594994 0.4168084 1 1 1 +v 0.3999999 0.3594994 0.3 1 1 1 +v 0.2999999 0.3594994 0.3 1 1 1 +v 0.3999999 0 0.3 1 1 1 +v 0.3999999 0.06865826 0.2055 1 1 1 +v 0.2999999 0 0.3 1 1 1 +v 0.2999999 0.06865826 0.2055 1 1 1 +v 0.3999999 0 0.4168084 1 1 1 +v 0.2999999 0 0.4168084 1 1 1 +v 0.3999999 0.06865826 0.5113084 1 1 1 +v 0.2999999 0.06865826 0.5113084 1 1 1 +v 0.3999999 0.2908411 0.5113084 1 1 1 +v 0.2999999 0.2908411 0.5113084 1 1 1 +v 0.2999999 0.1797497 0.1694042 1 1 1 +v 0.3999999 0.1797497 0.1694042 1 1 1 +v 0.2999999 0.2908411 0.2055 1 1 1 +v 0.3999999 0.2908411 0.2055 1 1 1 +v 0.2999999 0.1797497 0.5474042 1 1 1 +v 0.3999999 0.1797497 0.5474042 1 1 1 +v 0.3999999 0.2908411 0.8945 1 1 1 +v 0.2999999 0.2908411 0.8945 1 1 1 +v 0.3999999 0.3594994 0.8 1 1 1 +v 0.2999999 0.3594994 0.8 1 1 1 +v 0.2999999 0.06865826 0.5886916 1 1 1 +v 0.3999999 0.06865826 0.5886916 1 1 1 +v 0.2999999 0.1797497 0.5525958 1 1 1 +v 0.3999999 0.1797497 0.5525958 1 1 1 +v 0.3999999 0.3594994 0.6831916 1 1 1 +v 0.2999999 0.3594994 0.6831916 1 1 1 +v 0.3999999 0.2908411 0.5886916 1 1 1 +v 0.2999999 0.2908411 0.5886916 1 1 1 +v 0.2999999 0.06865826 0.8945 1 1 1 +v 0.2999999 0.1797497 0.9305958 1 1 1 +v 0.3999999 0.06865826 0.8945 1 1 1 +v 0.3999999 0.1797497 0.9305958 1 1 1 +v 0.3999999 0 0.8 1 1 1 +v 0.2999999 0 0.8 1 1 1 +v 0.3999999 0 0.6831916 1 1 1 +v 0.2999999 0 0.6831916 1 1 1 +v -0.46 0.1161986 0.7448664 1 1 1 +v -0.46 0.1830202 0.6780448 1 1 1 +v -0.4915 0.1324952 0.7444575 1 1 1 +v -0.4915 0.1826113 0.6943414 1 1 1 +v -0.4915 0.2302747 0.7420047 1 1 1 +v -0.46 0.2465713 0.7415959 1 1 1 +v -0.4915 0.1801585 0.7921209 1 1 1 +v -0.46 0.1797497 0.8084174 1 1 1 +v -0.3999998 0.1797497 0.8354713 1 1 1 +v -0.4599998 0.1797497 0.8354713 1 1 1 +v -0.3999998 0.2364541 0.817047 1 1 1 +v -0.4599998 0.2364541 0.817047 1 1 1 +v -0.3999998 0.2714994 0.4435 1 1 1 +v -0.3999998 0.3594994 0.4435 1 1 1 +v -0.4599998 0.2714994 0.4435 1 1 1 +v -0.4599998 0.3594994 0.4435 1 1 1 +v -0.3999998 0.2714994 0.3311887 1 1 1 +v -0.4599998 0.2714994 0.3311887 1 1 1 +v -0.3999998 0.1230453 0.817047 1 1 1 +v -0.4599998 0.1230453 0.817047 1 1 1 +v -0.3999998 0.088 0.3311887 1 1 1 +v -0.4599998 0.088 0.3311887 1 1 1 +v -0.3999998 0.088 0.4194042 1 1 1 +v -0.4599998 0.088 0.4194042 1 1 1 +v -0.3999998 0.088 0.7688113 1 1 1 +v -0.4599998 0.088 0.7688113 1 1 1 +v -0.3999998 0.3594994 0.6565 1 1 1 +v -0.3999998 0.2714994 0.6565 1 1 1 +v -0.3999998 0.2714994 0.7688113 1 1 1 +v -0.3999998 0.1230453 0.2829531 1 1 1 +v -0.3999998 0.2364541 0.2829531 1 1 1 +v -0.3999998 0.1797497 0.2645287 1 1 1 +v -0.4599998 0.2714994 0.7688113 1 1 1 +v -0.4599998 0.2714994 0.6565 1 1 1 +v -0.4599998 0.3594994 0.6565 1 1 1 +v -0.4599998 0.2364541 0.2829531 1 1 1 +v -0.4599998 0.1230453 0.2829531 1 1 1 +v -0.4599998 0.1797497 0.2645287 1 1 1 +v -0.3999999 0.1797497 0.5525958 1 1 1 +v -0.2999999 0.1797497 0.5525958 1 1 1 +v -0.3999999 0.2908411 0.5886916 1 1 1 +v -0.2999999 0.2908411 0.5886916 1 1 1 +v -0.2999999 0 0.8 1 1 1 +v -0.2999999 0 0.6831916 1 1 1 +v -0.3999999 0 0.8 1 1 1 +v -0.3999999 0 0.6831916 1 1 1 +v -0.3999999 0.06865826 0.8945 1 1 1 +v -0.3999999 0.1797497 0.9305958 1 1 1 +v -0.2999999 0.06865826 0.8945 1 1 1 +v -0.2999999 0.1797497 0.9305958 1 1 1 +v -0.3999999 0.2908411 0.8945 1 1 1 +v -0.2999999 0.2908411 0.8945 1 1 1 +v -0.2999999 0.3594994 0.8 1 1 1 +v -0.3999999 0.3594994 0.8 1 1 1 +v -0.2999999 0.3594994 0.6831916 1 1 1 +v -0.3999999 0.3594994 0.6831916 1 1 1 +v -0.3999999 0.06865826 0.5886916 1 1 1 +v -0.2999999 0.06865826 0.5886916 1 1 1 +v -0.2999999 0 0.3 1 1 1 +v -0.2999999 0.06865826 0.2055 1 1 1 +v -0.3999999 0 0.3 1 1 1 +v -0.3999999 0.06865826 0.2055 1 1 1 +v -0.2999999 0.06865826 0.5113084 1 1 1 +v -0.2999999 0 0.4168084 1 1 1 +v -0.3999999 0.06865826 0.5113084 1 1 1 +v -0.3999999 0 0.4168084 1 1 1 +v -0.2999999 0.3594994 0.4168084 1 1 1 +v -0.3999999 0.3594994 0.4168084 1 1 1 +v -0.2999999 0.3594994 0.3 1 1 1 +v -0.3999999 0.3594994 0.3 1 1 1 +v -0.3999999 0.1797497 0.1694042 1 1 1 +v -0.2999999 0.1797497 0.1694042 1 1 1 +v -0.3999999 0.2908411 0.2055 1 1 1 +v -0.2999999 0.2908411 0.2055 1 1 1 +v -0.3999999 0.1797497 0.5474042 1 1 1 +v -0.3999999 0.2908411 0.5113084 1 1 1 +v -0.2999999 0.1797497 0.5474042 1 1 1 +v -0.2999999 0.2908411 0.5113084 1 1 1 +v -0.46 0.1129281 0.3616745 1 1 1 +v -0.46 0.1797497 0.2948529 1 1 1 +v -0.4915 0.1292247 0.3612657 1 1 1 +v -0.4915 0.1793409 0.3111495 1 1 1 +v -0.4915 0.2270042 0.3588129 1 1 1 +v -0.4915 0.176888 0.408929 1 1 1 +v -0.46 0.1764792 0.4252256 1 1 1 +v -0.46 0.2433008 0.358404 1 1 1 +v 0.4915 0.1826113 0.4056589 1 1 1 +v 0.46 0.1830202 0.4219555 1 1 1 +v 0.4915 0.2302747 0.3579956 1 1 1 +v 0.46 0.2465713 0.3584044 1 1 1 +v 0.46 0.1161986 0.3551339 1 1 1 +v 0.4915 0.1324952 0.3555427 1 1 1 +v 0.46 0.1797497 0.2915828 1 1 1 +v 0.4915 0.1801585 0.3078794 1 1 1 +v 0.46 0.1764792 0.6747742 1 1 1 +v 0.4915 0.176888 0.6910707 1 1 1 +v 0.46 0.2433008 0.7415957 1 1 1 +v 0.4915 0.2270042 0.7411869 1 1 1 +v 0.4915 0.1793409 0.7888502 1 1 1 +v 0.46 0.1797497 0.8051468 1 1 1 +v 0.4915 0.1292247 0.7387341 1 1 1 +v 0.46 0.1129281 0.7383252 1 1 1 +v 0.4599998 0.088 0.7688113 1 1 1 +v 0.4599998 0.088 0.6805958 1 1 1 +v 0.3999998 0.088 0.7688113 1 1 1 +v 0.3999998 0.088 0.6805958 1 1 1 +v 0.4599998 0.088 0.3311887 1 1 1 +v 0.3999998 0.088 0.3311887 1 1 1 +v 0.4599998 0.1230453 0.817047 1 1 1 +v 0.3999998 0.1230453 0.817047 1 1 1 +v 0.4599998 0.2714994 0.7688113 1 1 1 +v 0.3999998 0.2714994 0.7688113 1 1 1 +v 0.4599998 0.2714994 0.6565 1 1 1 +v 0.3999998 0.2714994 0.6565 1 1 1 +v 0.3999998 0.1230453 0.2829531 1 1 1 +v 0.4599998 0.1230453 0.2829531 1 1 1 +v 0.3999998 0.1797497 0.2645287 1 1 1 +v 0.4599998 0.1797497 0.2645287 1 1 1 +v 0.4599998 0.2364541 0.817047 1 1 1 +v 0.3999998 0.2364541 0.817047 1 1 1 +v 0.4599998 0.2714994 0.4435 1 1 1 +v 0.3999998 0.2714994 0.4435 1 1 1 +v 0.4599998 0.2714994 0.3311887 1 1 1 +v 0.3999998 0.2714994 0.3311887 1 1 1 +v 0.3999998 0.2364541 0.2829531 1 1 1 +v 0.4599998 0.2364541 0.2829531 1 1 1 +v 0.4599998 0.3594994 0.6565 1 1 1 +v 0.3999998 0.3594994 0.6565 1 1 1 +v 0.4599998 0.3594994 0.4435 1 1 1 +v 0.3999998 0.3594994 0.4435 1 1 1 +v 0.3999998 0.1797497 0.8354713 1 1 1 +v 0.4599998 0.1797497 0.8354713 1 1 1 +v 0.3 0.1686583 0.8 1 1 1 +v 0.3 0.06865829 0.7 1 1 1 +v -0.3 0.1686583 0.8 1 1 1 +v -0.3 0.06865829 0.7 1 1 1 +v 0.3 0.06865829 0.4 1 1 1 +v -0.3 0.06865829 0.4 1 1 1 +v 0.3 0.1686583 0.3 1 1 1 +v -0.3 0.1686583 0.3 1 1 1 +v -0.3 0.3594994 0.3 1 1 1 +v -0.3 0.3594994 0.8 1 1 1 +v 0.3 0.3594994 0.3 1 1 1 +v 0.3 0.3594994 0.8 1 1 1 + +vn 0 0.9510565 0.309017 +vn 0 0.9510565 -0.309017 +vn 0 -0.9510565 -0.309017 +vn 0 -0.5877852 -0.809017 +vn 0 -0.9510565 0.309017 +vn 0 -0.5877852 0.809017 +vn 0 0.5877852 0.809017 +vn 0 0.5877852 -0.809017 +vn -0.3359215 -0.6660168 -0.6660168 +vn -0.3511235 0.6620847 -0.6620847 +vn -0.3359215 0.6660168 0.6660168 +vn -0.3511235 -0.6620847 0.6620847 +vn 0.3511235 0.6620847 0.6620847 +vn 0.3511235 -0.6620847 -0.6620847 +vn 0.3359215 0.6660168 -0.6660168 +vn 0.3359215 -0.6660168 0.6660168 +vn 0 -0.3826834 0.9238795 +vn 0 -0.9238795 0.3826834 +vn 0 -0.9238795 -0.3826834 +vn 0 -0.3826834 -0.9238795 + +vt 0.71875 0.0631966 +vt 0.71875 0.1868034 +vt 0.71875 0.1275086 +vt 0.71875 0.05 +vt 0.71875 0.1268814 +vt 0.71875 0.2 +vt 0.71875 0.1231186 +vt 0.71875 0.1224914 +vt 0.71875 0.0925874 +vt 0.71875 0.1343587 +vt 0.71875 0.1601748 +vt 0.71875 0.05081609 +vt 0.96875 0.1868034 +vt 0.96875 0.0631966 +vt 0.59375 0.09376608 +vt 0.59375 0.025 +vt 0.59375 0.225 + +usemtl colormap + +f 435/2/105 434/2/104 433/2/104 +f 434/2/104 435/2/105 436/2/105 +f 439/1/106 438/36/107 437/1/106 +f 438/36/107 439/1/106 440/36/107 +f 442/1/108 437/1/106 441/1/108 +f 437/1/106 442/1/108 439/1/106 +f 444/36/109 441/1/108 443/36/109 +f 441/1/108 444/36/109 442/1/108 +f 433/2/104 446/37/110 445/37/110 +f 446/37/110 433/2/104 434/2/104 +f 449/37/111 448/9/8 447/9/8 +f 448/9/8 449/37/111 450/37/111 +f 452/9/7 446/37/110 451/9/7 +f 446/37/110 452/9/7 445/37/110 +f 443/36/109 451/9/7 444/36/109 +f 451/9/7 443/36/109 452/9/7 +f 447/9/8 438/36/107 440/36/107 +f 438/36/107 447/9/8 448/9/8 +f 450/37/111 436/2/105 435/2/105 +f 436/2/105 450/37/111 449/37/111 +f 455/2/104 454/37/110 453/37/110 +f 454/37/110 455/2/104 456/2/104 +f 459/9/8 458/36/107 457/36/107 +f 458/36/107 459/9/8 460/9/8 +f 463/37/111 462/2/105 461/2/105 +f 462/2/105 463/37/111 464/37/111 +f 467/36/109 466/9/7 465/36/109 +f 466/9/7 467/36/109 468/9/7 +f 465/36/109 469/1/108 467/36/109 +f 469/1/108 465/36/109 470/1/108 +f 468/9/7 454/37/110 466/9/7 +f 454/37/110 468/9/7 453/37/110 +f 472/1/106 458/36/107 471/1/106 +f 458/36/107 472/1/106 457/36/107 +f 470/1/108 471/1/106 469/1/108 +f 471/1/106 470/1/108 472/1/106 +f 464/37/111 460/9/8 459/9/8 +f 460/9/8 464/37/111 463/37/111 +f 461/2/105 456/2/104 455/2/104 +f 456/2/104 461/2/105 462/2/105 +f 475/39/112 474/38/112 473/1/112 +f 474/38/112 475/39/112 476/40/112 +f 477/41/113 474/38/113 476/40/113 +f 474/38/113 477/41/113 478/2/113 +f 475/39/12 477/41/12 476/40/12 +f 477/41/12 475/39/12 479/42/12 +f 477/41/114 480/43/114 478/2/114 +f 480/43/114 477/41/114 479/42/114 +f 480/43/115 475/39/115 473/1/115 +f 475/39/115 480/43/115 479/42/115 +f 483/45/110 482/44/7 481/44/7 +f 482/44/7 483/45/110 484/45/110 +f 487/46/8 486/2/8 485/46/8 +f 486/2/8 487/46/8 488/2/8 +f 490/46/105 485/46/35 489/46/105 +f 485/46/35 490/46/105 487/46/35 +f 481/44/7 492/47/109 491/47/109 +f 492/47/109 481/44/7 482/44/7 +f 495/1/9 494/1/106 493/1/106 +f 494/1/106 495/1/9 496/1/9 +f 497/1/108 496/1/9 495/1/9 +f 496/1/9 497/1/108 498/1/108 +f 499/2/20 485/46/20 486/2/20 +f 500/46/20 485/46/20 499/2/20 +f 497/1/20 485/46/20 500/46/20 +f 497/1/20 500/46/20 501/46/20 +f 497/1/20 501/46/20 483/45/20 +f 497/1/20 483/45/20 491/47/20 +f 491/47/20 483/45/20 481/44/20 +f 495/1/20 485/46/20 497/1/20 +f 493/1/20 485/46/20 495/1/20 +f 493/1/20 489/46/20 485/46/20 +f 502/47/20 489/46/20 493/1/20 +f 502/47/20 503/45/20 489/46/20 +f 503/45/20 502/47/20 504/44/20 +f 505/46/104 483/45/110 501/46/104 +f 483/45/110 505/46/104 484/45/110 +f 499/2/7 506/46/7 500/46/7 +f 506/46/7 499/2/7 507/2/7 +f 506/46/35 501/46/104 500/46/35 +f 501/46/104 506/46/35 505/46/104 +f 488/2/35 499/2/35 486/2/35 +f 499/2/35 488/2/35 507/2/35 +f 508/45/111 489/46/105 503/45/111 +f 489/46/105 508/45/111 490/46/105 +f 491/47/109 498/1/108 497/1/108 +f 498/1/108 491/47/109 492/47/109 +f 493/1/106 509/47/107 502/47/107 +f 509/47/107 493/1/106 494/1/106 +f 510/44/8 503/45/111 504/44/8 +f 503/45/111 510/44/8 508/45/111 +f 507/2/12 488/2/12 506/46/12 +f 488/2/12 498/1/12 506/46/12 +f 506/46/12 498/1/12 505/46/12 +f 487/46/12 498/1/12 488/2/12 +f 505/46/12 498/1/12 492/47/12 +f 505/46/12 492/47/12 484/45/12 +f 484/45/12 492/47/12 482/44/12 +f 487/46/12 496/1/12 498/1/12 +f 487/46/12 494/1/12 496/1/12 +f 490/46/12 494/1/12 487/46/12 +f 508/45/12 494/1/12 490/46/12 +f 508/45/12 509/47/12 494/1/12 +f 509/47/12 508/45/12 510/44/12 +f 509/47/107 504/44/8 502/47/107 +f 504/44/8 509/47/107 510/44/8 +f 513/37/111 512/9/8 511/9/8 +f 512/9/8 513/37/111 514/37/111 +f 517/1/108 516/1/106 515/1/108 +f 516/1/106 517/1/108 518/1/106 +f 521/36/109 520/9/7 519/36/109 +f 520/9/7 521/36/109 522/9/7 +f 522/9/7 523/37/110 520/9/7 +f 523/37/110 522/9/7 524/37/110 +f 527/2/105 526/2/104 525/2/104 +f 526/2/104 527/2/105 528/2/105 +f 525/2/104 523/37/110 524/37/110 +f 523/37/110 525/2/104 526/2/104 +f 511/9/8 530/36/107 529/36/107 +f 530/36/107 511/9/8 512/9/8 +f 514/37/111 528/2/105 527/2/105 +f 528/2/105 514/37/111 513/37/111 +f 518/1/106 530/36/107 516/1/106 +f 530/36/107 518/1/106 529/36/107 +f 519/36/109 515/1/108 521/36/109 +f 515/1/108 519/36/109 517/1/108 +f 533/1/106 532/36/107 531/1/106 +f 532/36/107 533/1/106 534/36/107 +f 537/36/109 536/1/108 535/36/109 +f 536/1/108 537/36/109 538/1/108 +f 541/2/105 540/2/104 539/2/104 +f 540/2/104 541/2/105 542/2/105 +f 538/1/108 531/1/106 536/1/108 +f 531/1/106 538/1/108 533/1/106 +f 545/37/111 544/9/8 543/9/8 +f 544/9/8 545/37/111 546/37/111 +f 549/9/7 548/37/110 547/9/7 +f 548/37/110 549/9/7 550/37/110 +f 535/36/109 547/9/7 537/36/109 +f 547/9/7 535/36/109 549/9/7 +f 539/2/104 548/37/110 550/37/110 +f 548/37/110 539/2/104 540/2/104 +f 543/9/8 532/36/107 534/36/107 +f 532/36/107 543/9/8 544/9/8 +f 546/37/111 542/2/105 541/2/105 +f 542/2/105 546/37/111 545/37/111 +f 553/39/112 552/38/112 551/1/112 +f 552/38/112 553/39/112 554/40/112 +f 553/39/12 555/41/12 554/40/12 +f 555/41/12 553/39/12 556/42/12 +f 557/43/115 553/39/115 551/1/115 +f 553/39/115 557/43/115 556/42/115 +f 555/41/113 552/38/113 554/40/113 +f 552/38/113 555/41/113 558/2/113 +f 555/41/114 557/43/114 558/2/114 +f 557/43/114 555/41/114 556/42/114 +f 561/41/116 560/38/116 559/40/116 +f 560/38/116 561/41/116 562/2/116 +f 565/43/117 564/39/117 563/1/117 +f 564/39/117 565/43/117 566/42/117 +f 561/41/20 564/39/20 566/42/20 +f 564/39/20 561/41/20 559/40/20 +f 562/2/118 566/42/118 565/43/118 +f 566/42/118 562/2/118 561/41/118 +f 560/38/119 564/39/119 559/40/119 +f 564/39/119 560/38/119 563/1/119 +f 569/2/118 568/42/118 567/43/118 +f 568/42/118 569/2/118 570/41/118 +f 570/41/116 572/38/116 571/40/116 +f 572/38/116 570/41/116 569/2/116 +f 572/38/119 573/39/119 571/40/119 +f 573/39/119 572/38/119 574/1/119 +f 567/43/117 573/39/117 574/1/117 +f 573/39/117 567/43/117 568/42/117 +f 570/41/20 573/39/20 568/42/20 +f 573/39/20 570/41/20 571/40/20 +f 577/1/108 576/1/9 575/1/108 +f 576/1/9 577/1/108 578/1/9 +f 578/1/9 579/1/106 576/1/9 +f 579/1/106 578/1/9 580/1/106 +f 582/47/109 575/1/108 581/47/109 +f 575/1/108 582/47/109 577/1/108 +f 585/46/35 584/46/104 583/46/104 +f 584/46/104 585/46/35 586/46/35 +f 589/44/8 588/47/107 587/47/107 +f 588/47/107 589/44/8 590/44/8 +f 583/46/104 592/45/110 591/45/110 +f 592/45/110 583/46/104 584/46/104 +f 595/46/105 594/46/35 593/46/35 +f 594/46/35 595/46/105 596/46/105 +f 597/45/111 590/44/8 589/44/8 +f 590/44/8 597/45/111 598/45/111 +f 601/2/35 600/2/35 599/2/35 +f 600/2/35 601/2/35 602/2/35 +f 604/44/7 592/45/110 603/44/7 +f 592/45/110 604/44/7 591/45/110 +f 599/2/20 593/46/20 601/2/20 +f 585/46/20 593/46/20 599/2/20 +f 576/1/20 593/46/20 585/46/20 +f 576/1/20 585/46/20 583/46/20 +f 579/1/20 593/46/20 576/1/20 +f 576/1/20 583/46/20 575/1/20 +f 579/1/20 595/46/20 593/46/20 +f 575/1/20 583/46/20 581/47/20 +f 581/47/20 583/46/20 591/45/20 +f 581/47/20 591/45/20 604/44/20 +f 588/47/20 595/46/20 579/1/20 +f 588/47/20 598/45/20 595/46/20 +f 598/45/20 588/47/20 590/44/20 +f 587/47/12 597/45/12 589/44/12 +f 597/45/12 587/47/12 580/1/12 +f 597/45/12 580/1/12 596/46/12 +f 596/46/12 580/1/12 578/1/12 +f 596/46/12 578/1/12 594/46/12 +f 594/46/12 578/1/12 602/2/12 +f 602/2/12 578/1/12 586/46/12 +f 600/2/12 602/2/12 586/46/12 +f 586/46/12 578/1/12 584/46/12 +f 584/46/12 578/1/12 577/1/12 +f 584/46/12 577/1/12 582/47/12 +f 584/46/12 582/47/12 592/45/12 +f 592/45/12 582/47/12 603/44/12 +f 585/46/7 600/2/7 586/46/7 +f 600/2/7 585/46/7 599/2/7 +f 598/45/111 596/46/105 595/46/105 +f 596/46/105 598/45/111 597/45/111 +f 581/47/109 603/44/7 582/47/109 +f 603/44/7 581/47/109 604/44/7 +f 602/2/8 593/46/8 594/46/8 +f 593/46/8 602/2/8 601/2/8 +f 580/1/106 588/47/107 579/1/106 +f 588/47/107 580/1/106 587/47/107 +f 440/49/12 449/48/12 447/27/12 +f 449/48/12 440/49/12 439/11/12 +f 449/48/12 439/11/12 436/17/12 +f 436/17/12 439/11/12 442/11/12 +f 436/17/12 442/11/12 434/17/12 +f 434/17/12 442/11/12 444/49/12 +f 434/17/12 444/49/12 446/48/12 +f 446/48/12 444/49/12 451/27/12 +f 450/48/20 438/49/20 448/27/20 +f 438/49/20 450/48/20 435/17/20 +f 438/49/20 435/17/20 437/11/20 +f 437/11/20 435/17/20 433/17/20 +f 437/11/20 433/17/20 441/11/20 +f 441/11/20 433/17/20 445/48/20 +f 441/11/20 445/48/20 443/49/20 +f 443/49/20 445/48/20 452/27/20 +f 463/48/20 458/49/20 460/27/20 +f 458/49/20 463/48/20 461/17/20 +f 458/49/20 461/17/20 471/11/20 +f 471/11/20 461/17/20 455/17/20 +f 471/11/20 455/17/20 469/11/20 +f 469/11/20 455/17/20 453/48/20 +f 469/11/20 453/48/20 467/49/20 +f 467/49/20 453/48/20 468/27/20 +f 457/49/12 464/48/12 459/27/12 +f 464/48/12 457/49/12 472/11/12 +f 464/48/12 472/11/12 462/17/12 +f 462/17/12 472/11/12 470/11/12 +f 462/17/12 470/11/12 456/17/12 +f 456/17/12 470/11/12 465/49/12 +f 456/17/12 465/49/12 454/48/12 +f 454/48/12 465/49/12 466/27/12 +f 529/49/12 513/48/12 511/27/12 +f 513/48/12 529/49/12 518/11/12 +f 513/48/12 518/11/12 528/17/12 +f 528/17/12 518/11/12 517/11/12 +f 528/17/12 517/11/12 526/17/12 +f 526/17/12 517/11/12 519/49/12 +f 526/17/12 519/49/12 523/48/12 +f 523/48/12 519/49/12 520/27/12 +f 514/48/20 530/49/20 512/27/20 +f 530/49/20 514/48/20 527/17/20 +f 530/49/20 527/17/20 516/11/20 +f 516/11/20 527/17/20 525/17/20 +f 516/11/20 525/17/20 515/11/20 +f 515/11/20 525/17/20 524/48/20 +f 515/11/20 524/48/20 521/49/20 +f 521/49/20 524/48/20 522/27/20 +f 546/48/20 532/49/20 544/27/20 +f 532/49/20 546/48/20 541/17/20 +f 532/49/20 541/17/20 531/11/20 +f 531/11/20 541/17/20 539/17/20 +f 531/11/20 539/17/20 536/11/20 +f 536/11/20 539/17/20 550/48/20 +f 536/11/20 550/48/20 535/49/20 +f 535/49/20 550/48/20 549/27/20 +f 534/49/12 545/48/12 543/27/12 +f 545/48/12 534/49/12 533/11/12 +f 545/48/12 533/11/12 542/17/12 +f 542/17/12 533/11/12 538/11/12 +f 542/17/12 538/11/12 540/17/12 +f 540/17/12 538/11/12 537/49/12 +f 540/17/12 537/49/12 548/48/12 +f 548/48/12 537/49/12 547/27/12 +f 607/50/120 606/51/121 605/50/120 +f 606/51/121 607/50/120 608/51/121 +f 606/51/121 610/51/122 609/51/122 +f 610/51/122 606/51/121 608/51/121 +f 610/51/122 611/50/123 609/51/122 +f 611/50/123 610/51/122 612/50/123 +f 610/51/12 613/52/12 612/50/12 +f 613/52/12 610/51/12 614/52/12 +f 614/52/12 610/51/12 608/51/12 +f 614/52/12 608/51/12 607/50/12 +f 616/52/20 611/50/20 615/52/20 +f 611/50/20 616/52/20 609/51/20 +f 609/51/20 616/52/20 606/51/20 +f 606/51/20 616/52/20 605/50/20 +f 613/52/8 611/50/123 612/50/123 +f 611/50/123 613/52/8 615/52/8 +f 616/52/7 607/50/120 605/50/120 +f 607/50/120 616/52/7 614/52/7 +f 615/52/35 614/52/35 616/52/35 +f 614/52/35 615/52/35 613/52/35 + +g wheels-back + +v 0.3999999 0.3594994 -0.6831916 1 1 1 +v 0.2999999 0.3594994 -0.6831916 1 1 1 +v 0.3999999 0.3594994 -0.8 1 1 1 +v 0.2999999 0.3594994 -0.8 1 1 1 +v 0.3999999 0 -0.8 1 1 1 +v 0.3999999 0.06865826 -0.8945 1 1 1 +v 0.2999999 0 -0.8 1 1 1 +v 0.2999999 0.06865826 -0.8945 1 1 1 +v 0.3999999 0 -0.6831916 1 1 1 +v 0.2999999 0 -0.6831916 1 1 1 +v 0.3999999 0.06865826 -0.5886916 1 1 1 +v 0.2999999 0.06865826 -0.5886916 1 1 1 +v 0.3999999 0.2908411 -0.5886916 1 1 1 +v 0.2999999 0.2908411 -0.5886916 1 1 1 +v 0.2999999 0.1797497 -0.9305958 1 1 1 +v 0.3999999 0.1797497 -0.9305958 1 1 1 +v 0.2999999 0.2908411 -0.8945 1 1 1 +v 0.3999999 0.2908411 -0.8945 1 1 1 +v 0.2999999 0.1797497 -0.5525958 1 1 1 +v 0.3999999 0.1797497 -0.5525958 1 1 1 +v 0.3999999 0.2908411 -0.2055 1 1 1 +v 0.2999999 0.2908411 -0.2055 1 1 1 +v 0.3999999 0.3594994 -0.3 1 1 1 +v 0.2999999 0.3594994 -0.3 1 1 1 +v 0.2999999 0.06865826 -0.5113084 1 1 1 +v 0.3999999 0.06865826 -0.5113084 1 1 1 +v 0.2999999 0.1797497 -0.5474042 1 1 1 +v 0.3999999 0.1797497 -0.5474042 1 1 1 +v 0.3999999 0.3594994 -0.4168084 1 1 1 +v 0.2999999 0.3594994 -0.4168084 1 1 1 +v 0.3999999 0.2908411 -0.5113084 1 1 1 +v 0.2999999 0.2908411 -0.5113084 1 1 1 +v 0.2999999 0.06865826 -0.2055 1 1 1 +v 0.2999999 0.1797497 -0.1694042 1 1 1 +v 0.3999999 0.06865826 -0.2055 1 1 1 +v 0.3999999 0.1797497 -0.1694042 1 1 1 +v 0.3999999 0 -0.3 1 1 1 +v 0.2999999 0 -0.3 1 1 1 +v 0.3999999 0 -0.4168084 1 1 1 +v 0.2999999 0 -0.4168084 1 1 1 +v -0.46 0.1161986 -0.3551337 1 1 1 +v -0.46 0.1830202 -0.4219553 1 1 1 +v -0.4915 0.1324952 -0.3555425 1 1 1 +v -0.4915 0.1826113 -0.4056587 1 1 1 +v -0.4915 0.2302747 -0.3579953 1 1 1 +v -0.46 0.2465713 -0.3584042 1 1 1 +v -0.4915 0.1801585 -0.3078791 1 1 1 +v -0.46 0.1797497 -0.2915826 1 1 1 +v -0.3999998 0.1797497 -0.2645287 1 1 1 +v -0.4599998 0.1797497 -0.2645287 1 1 1 +v -0.3999998 0.2364541 -0.2829531 1 1 1 +v -0.4599998 0.2364541 -0.2829531 1 1 1 +v -0.3999998 0.2714994 -0.6565 1 1 1 +v -0.3999998 0.3594994 -0.6565 1 1 1 +v -0.4599998 0.2714994 -0.6565 1 1 1 +v -0.4599998 0.3594994 -0.6565 1 1 1 +v -0.3999998 0.2714994 -0.7688113 1 1 1 +v -0.4599998 0.2714994 -0.7688113 1 1 1 +v -0.3999998 0.1230453 -0.2829531 1 1 1 +v -0.4599998 0.1230453 -0.2829531 1 1 1 +v -0.3999998 0.088 -0.7688113 1 1 1 +v -0.4599998 0.088 -0.7688113 1 1 1 +v -0.3999998 0.088 -0.6805958 1 1 1 +v -0.4599998 0.088 -0.6805958 1 1 1 +v -0.3999998 0.088 -0.3311887 1 1 1 +v -0.4599998 0.088 -0.3311887 1 1 1 +v -0.3999998 0.3594994 -0.4435 1 1 1 +v -0.3999998 0.2714994 -0.4435 1 1 1 +v -0.3999998 0.2714994 -0.3311887 1 1 1 +v -0.3999998 0.1230453 -0.817047 1 1 1 +v -0.3999998 0.2364541 -0.817047 1 1 1 +v -0.3999998 0.1797497 -0.8354713 1 1 1 +v -0.4599998 0.2714994 -0.3311887 1 1 1 +v -0.4599998 0.2714994 -0.4435 1 1 1 +v -0.4599998 0.3594994 -0.4435 1 1 1 +v -0.4599998 0.2364541 -0.817047 1 1 1 +v -0.4599998 0.1230453 -0.817047 1 1 1 +v -0.4599998 0.1797497 -0.8354713 1 1 1 +v -0.3999999 0.1797497 -0.5474042 1 1 1 +v -0.2999999 0.1797497 -0.5474042 1 1 1 +v -0.3999999 0.2908411 -0.5113084 1 1 1 +v -0.2999999 0.2908411 -0.5113084 1 1 1 +v -0.2999999 0 -0.3 1 1 1 +v -0.2999999 0 -0.4168084 1 1 1 +v -0.3999999 0 -0.3 1 1 1 +v -0.3999999 0 -0.4168084 1 1 1 +v -0.3999999 0.06865826 -0.2055 1 1 1 +v -0.3999999 0.1797497 -0.1694042 1 1 1 +v -0.2999999 0.06865826 -0.2055 1 1 1 +v -0.2999999 0.1797497 -0.1694042 1 1 1 +v -0.3999999 0.2908411 -0.2055 1 1 1 +v -0.2999999 0.2908411 -0.2055 1 1 1 +v -0.2999999 0.3594994 -0.3 1 1 1 +v -0.3999999 0.3594994 -0.3 1 1 1 +v -0.2999999 0.3594994 -0.4168084 1 1 1 +v -0.3999999 0.3594994 -0.4168084 1 1 1 +v -0.3999999 0.06865826 -0.5113084 1 1 1 +v -0.2999999 0.06865826 -0.5113084 1 1 1 +v -0.2999999 0 -0.8 1 1 1 +v -0.2999999 0.06865826 -0.8945 1 1 1 +v -0.3999999 0 -0.8 1 1 1 +v -0.3999999 0.06865826 -0.8945 1 1 1 +v -0.2999999 0.06865826 -0.5886916 1 1 1 +v -0.2999999 0 -0.6831916 1 1 1 +v -0.3999999 0.06865826 -0.5886916 1 1 1 +v -0.3999999 0 -0.6831916 1 1 1 +v -0.2999999 0.3594994 -0.6831916 1 1 1 +v -0.3999999 0.3594994 -0.6831916 1 1 1 +v -0.2999999 0.3594994 -0.8 1 1 1 +v -0.3999999 0.3594994 -0.8 1 1 1 +v -0.3999999 0.1797497 -0.9305958 1 1 1 +v -0.2999999 0.1797497 -0.9305958 1 1 1 +v -0.3999999 0.2908411 -0.8945 1 1 1 +v -0.2999999 0.2908411 -0.8945 1 1 1 +v -0.3999999 0.1797497 -0.5525958 1 1 1 +v -0.3999999 0.2908411 -0.5886916 1 1 1 +v -0.2999999 0.1797497 -0.5525958 1 1 1 +v -0.2999999 0.2908411 -0.5886916 1 1 1 +v -0.46 0.1129281 -0.7383255 1 1 1 +v -0.46 0.1797497 -0.8051471 1 1 1 +v -0.4915 0.1292247 -0.7387343 1 1 1 +v -0.4915 0.1793409 -0.7888505 1 1 1 +v -0.4915 0.2270042 -0.7411872 1 1 1 +v -0.4915 0.176888 -0.691071 1 1 1 +v -0.46 0.1764792 -0.6747744 1 1 1 +v -0.46 0.2433008 -0.741596 1 1 1 +v 0.4915 0.1826113 -0.6943411 1 1 1 +v 0.46 0.1830202 -0.6780446 1 1 1 +v 0.4915 0.2302747 -0.7420045 1 1 1 +v 0.46 0.2465713 -0.7415956 1 1 1 +v 0.46 0.1161986 -0.7448661 1 1 1 +v 0.4915 0.1324952 -0.7444573 1 1 1 +v 0.46 0.1797497 -0.8084172 1 1 1 +v 0.4915 0.1801585 -0.7921206 1 1 1 +v 0.46 0.1764792 -0.4252259 1 1 1 +v 0.4915 0.176888 -0.4089293 1 1 1 +v 0.46 0.2433008 -0.3584043 1 1 1 +v 0.4915 0.2270042 -0.3588131 1 1 1 +v 0.4915 0.1793409 -0.3111498 1 1 1 +v 0.46 0.1797497 -0.2948532 1 1 1 +v 0.4915 0.1292247 -0.361266 1 1 1 +v 0.46 0.1129281 -0.3616748 1 1 1 +v 0.4599998 0.088 -0.3311887 1 1 1 +v 0.4599998 0.088 -0.4194042 1 1 1 +v 0.3999998 0.088 -0.3311887 1 1 1 +v 0.3999998 0.088 -0.4194042 1 1 1 +v 0.4599998 0.088 -0.7688113 1 1 1 +v 0.3999998 0.088 -0.7688113 1 1 1 +v 0.4599998 0.1230453 -0.2829531 1 1 1 +v 0.3999998 0.1230453 -0.2829531 1 1 1 +v 0.4599998 0.2714994 -0.3311887 1 1 1 +v 0.3999998 0.2714994 -0.3311887 1 1 1 +v 0.4599998 0.2714994 -0.4435 1 1 1 +v 0.3999998 0.2714994 -0.4435 1 1 1 +v 0.3999998 0.1230453 -0.817047 1 1 1 +v 0.4599998 0.1230453 -0.817047 1 1 1 +v 0.3999998 0.1797497 -0.8354713 1 1 1 +v 0.4599998 0.1797497 -0.8354713 1 1 1 +v 0.4599998 0.2364541 -0.2829531 1 1 1 +v 0.3999998 0.2364541 -0.2829531 1 1 1 +v 0.4599998 0.2714994 -0.6565 1 1 1 +v 0.3999998 0.2714994 -0.6565 1 1 1 +v 0.4599998 0.2714994 -0.7688113 1 1 1 +v 0.3999998 0.2714994 -0.7688113 1 1 1 +v 0.3999998 0.2364541 -0.817047 1 1 1 +v 0.4599998 0.2364541 -0.817047 1 1 1 +v 0.4599998 0.3594994 -0.4435 1 1 1 +v 0.3999998 0.3594994 -0.4435 1 1 1 +v 0.4599998 0.3594994 -0.6565 1 1 1 +v 0.3999998 0.3594994 -0.6565 1 1 1 +v 0.3999998 0.1797497 -0.2645287 1 1 1 +v 0.4599998 0.1797497 -0.2645287 1 1 1 +v 0.3 0.1686583 -0.3 1 1 1 +v 0.3 0.06865829 -0.4 1 1 1 +v -0.3 0.1686583 -0.3 1 1 1 +v -0.3 0.06865829 -0.4 1 1 1 +v 0.3 0.06865829 -0.7 1 1 1 +v -0.3 0.06865829 -0.7 1 1 1 +v 0.3 0.1686583 -0.8 1 1 1 +v -0.3 0.1686583 -0.8 1 1 1 +v -0.3 0.3594994 -0.8 1 1 1 +v -0.3 0.3594994 -0.3 1 1 1 +v 0.3 0.3594994 -0.8 1 1 1 +v 0.3 0.3594994 -0.3 1 1 1 + + + +usemtl colormap + +f 619/2/105 618/2/104 617/2/104 +f 618/2/104 619/2/105 620/2/105 +f 623/1/106 622/36/107 621/1/106 +f 622/36/107 623/1/106 624/36/107 +f 626/1/108 621/1/106 625/1/108 +f 621/1/106 626/1/108 623/1/106 +f 628/36/109 625/1/108 627/36/109 +f 625/1/108 628/36/109 626/1/108 +f 617/2/104 630/37/110 629/37/110 +f 630/37/110 617/2/104 618/2/104 +f 633/37/111 632/9/8 631/9/8 +f 632/9/8 633/37/111 634/37/111 +f 636/9/7 630/37/110 635/9/7 +f 630/37/110 636/9/7 629/37/110 +f 627/36/109 635/9/7 628/36/109 +f 635/9/7 627/36/109 636/9/7 +f 631/9/8 622/36/107 624/36/107 +f 622/36/107 631/9/8 632/9/8 +f 634/37/111 620/2/105 619/2/105 +f 620/2/105 634/37/111 633/37/111 +f 639/2/104 638/37/110 637/37/110 +f 638/37/110 639/2/104 640/2/104 +f 643/9/8 642/36/107 641/36/107 +f 642/36/107 643/9/8 644/9/8 +f 647/37/111 646/2/105 645/2/105 +f 646/2/105 647/37/111 648/37/111 +f 651/36/109 650/9/7 649/36/109 +f 650/9/7 651/36/109 652/9/7 +f 649/36/109 653/1/108 651/36/109 +f 653/1/108 649/36/109 654/1/108 +f 652/9/7 638/37/110 650/9/7 +f 638/37/110 652/9/7 637/37/110 +f 656/1/106 642/36/107 655/1/106 +f 642/36/107 656/1/106 641/36/107 +f 654/1/108 655/1/106 653/1/108 +f 655/1/106 654/1/108 656/1/106 +f 648/37/111 644/9/8 643/9/8 +f 644/9/8 648/37/111 647/37/111 +f 645/2/105 640/2/104 639/2/104 +f 640/2/104 645/2/105 646/2/105 +f 659/39/112 658/38/112 657/1/112 +f 658/38/112 659/39/112 660/40/112 +f 661/41/113 658/38/113 660/40/113 +f 658/38/113 661/41/113 662/2/113 +f 659/39/12 661/41/12 660/40/12 +f 661/41/12 659/39/12 663/42/12 +f 661/41/114 664/43/114 662/2/114 +f 664/43/114 661/41/114 663/42/114 +f 664/43/115 659/39/115 657/1/115 +f 659/39/115 664/43/115 663/42/115 +f 667/45/110 666/44/7 665/44/7 +f 666/44/7 667/45/110 668/45/110 +f 671/46/8 670/2/8 669/46/8 +f 670/2/8 671/46/8 672/2/8 +f 674/46/105 669/46/35 673/46/105 +f 669/46/35 674/46/105 671/46/35 +f 665/44/7 676/47/109 675/47/109 +f 676/47/109 665/44/7 666/44/7 +f 679/1/9 678/1/106 677/1/106 +f 678/1/106 679/1/9 680/1/9 +f 681/1/108 680/1/9 679/1/9 +f 680/1/9 681/1/108 682/1/108 +f 683/2/20 669/46/20 670/2/20 +f 684/46/20 669/46/20 683/2/20 +f 681/1/20 669/46/20 684/46/20 +f 681/1/20 684/46/20 685/46/20 +f 681/1/20 685/46/20 667/45/20 +f 681/1/20 667/45/20 675/47/20 +f 675/47/20 667/45/20 665/44/20 +f 679/1/20 669/46/20 681/1/20 +f 677/1/20 669/46/20 679/1/20 +f 677/1/20 673/46/20 669/46/20 +f 686/47/20 673/46/20 677/1/20 +f 686/47/20 687/45/20 673/46/20 +f 687/45/20 686/47/20 688/44/20 +f 689/46/104 667/45/110 685/46/104 +f 667/45/110 689/46/104 668/45/110 +f 683/2/7 690/46/7 684/46/7 +f 690/46/7 683/2/7 691/2/7 +f 690/46/35 685/46/104 684/46/35 +f 685/46/104 690/46/35 689/46/104 +f 672/2/35 683/2/35 670/2/35 +f 683/2/35 672/2/35 691/2/35 +f 692/45/111 673/46/105 687/45/111 +f 673/46/105 692/45/111 674/46/105 +f 675/47/109 682/1/108 681/1/108 +f 682/1/108 675/47/109 676/47/109 +f 677/1/106 693/47/107 686/47/107 +f 693/47/107 677/1/106 678/1/106 +f 694/44/8 687/45/111 688/44/8 +f 687/45/111 694/44/8 692/45/111 +f 691/2/12 672/2/12 690/46/12 +f 672/2/12 682/1/12 690/46/12 +f 690/46/12 682/1/12 689/46/12 +f 671/46/12 682/1/12 672/2/12 +f 689/46/12 682/1/12 676/47/12 +f 689/46/12 676/47/12 668/45/12 +f 668/45/12 676/47/12 666/44/12 +f 671/46/12 680/1/12 682/1/12 +f 671/46/12 678/1/12 680/1/12 +f 674/46/12 678/1/12 671/46/12 +f 692/45/12 678/1/12 674/46/12 +f 692/45/12 693/47/12 678/1/12 +f 693/47/12 692/45/12 694/44/12 +f 693/47/107 688/44/8 686/47/107 +f 688/44/8 693/47/107 694/44/8 +f 697/37/111 696/9/8 695/9/8 +f 696/9/8 697/37/111 698/37/111 +f 701/1/108 700/1/106 699/1/108 +f 700/1/106 701/1/108 702/1/106 +f 705/36/109 704/9/7 703/36/109 +f 704/9/7 705/36/109 706/9/7 +f 706/9/7 707/37/110 704/9/7 +f 707/37/110 706/9/7 708/37/110 +f 711/2/105 710/2/104 709/2/104 +f 710/2/104 711/2/105 712/2/105 +f 709/2/104 707/37/110 708/37/110 +f 707/37/110 709/2/104 710/2/104 +f 695/9/8 714/36/107 713/36/107 +f 714/36/107 695/9/8 696/9/8 +f 698/37/111 712/2/105 711/2/105 +f 712/2/105 698/37/111 697/37/111 +f 702/1/106 714/36/107 700/1/106 +f 714/36/107 702/1/106 713/36/107 +f 703/36/109 699/1/108 705/36/109 +f 699/1/108 703/36/109 701/1/108 +f 717/1/106 716/36/107 715/1/106 +f 716/36/107 717/1/106 718/36/107 +f 721/36/109 720/1/108 719/36/109 +f 720/1/108 721/36/109 722/1/108 +f 725/2/105 724/2/104 723/2/104 +f 724/2/104 725/2/105 726/2/105 +f 722/1/108 715/1/106 720/1/108 +f 715/1/106 722/1/108 717/1/106 +f 729/37/111 728/9/8 727/9/8 +f 728/9/8 729/37/111 730/37/111 +f 733/9/7 732/37/110 731/9/7 +f 732/37/110 733/9/7 734/37/110 +f 719/36/109 731/9/7 721/36/109 +f 731/9/7 719/36/109 733/9/7 +f 723/2/104 732/37/110 734/37/110 +f 732/37/110 723/2/104 724/2/104 +f 727/9/8 716/36/107 718/36/107 +f 716/36/107 727/9/8 728/9/8 +f 730/37/111 726/2/105 725/2/105 +f 726/2/105 730/37/111 729/37/111 +f 737/39/112 736/38/112 735/1/112 +f 736/38/112 737/39/112 738/40/112 +f 737/39/12 739/41/12 738/40/12 +f 739/41/12 737/39/12 740/42/12 +f 741/43/115 737/39/115 735/1/115 +f 737/39/115 741/43/115 740/42/115 +f 739/41/113 736/38/113 738/40/113 +f 736/38/113 739/41/113 742/2/113 +f 739/41/114 741/43/114 742/2/114 +f 741/43/114 739/41/114 740/42/114 +f 745/41/116 744/38/116 743/40/116 +f 744/38/116 745/41/116 746/2/116 +f 749/43/117 748/39/117 747/1/117 +f 748/39/117 749/43/117 750/42/117 +f 745/41/20 748/39/20 750/42/20 +f 748/39/20 745/41/20 743/40/20 +f 746/2/118 750/42/118 749/43/118 +f 750/42/118 746/2/118 745/41/118 +f 744/38/119 748/39/119 743/40/119 +f 748/39/119 744/38/119 747/1/119 +f 753/2/118 752/42/118 751/43/118 +f 752/42/118 753/2/118 754/41/118 +f 754/41/116 756/38/116 755/40/116 +f 756/38/116 754/41/116 753/2/116 +f 756/38/119 757/39/119 755/40/119 +f 757/39/119 756/38/119 758/1/119 +f 751/43/117 757/39/117 758/1/117 +f 757/39/117 751/43/117 752/42/117 +f 754/41/20 757/39/20 752/42/20 +f 757/39/20 754/41/20 755/40/20 +f 761/1/108 760/1/9 759/1/108 +f 760/1/9 761/1/108 762/1/9 +f 762/1/9 763/1/106 760/1/9 +f 763/1/106 762/1/9 764/1/106 +f 766/47/109 759/1/108 765/47/109 +f 759/1/108 766/47/109 761/1/108 +f 769/46/35 768/46/104 767/46/104 +f 768/46/104 769/46/35 770/46/35 +f 773/44/8 772/47/107 771/47/107 +f 772/47/107 773/44/8 774/44/8 +f 767/46/104 776/45/110 775/45/110 +f 776/45/110 767/46/104 768/46/104 +f 779/46/105 778/46/35 777/46/35 +f 778/46/35 779/46/105 780/46/105 +f 781/45/111 774/44/8 773/44/8 +f 774/44/8 781/45/111 782/45/111 +f 785/2/35 784/2/35 783/2/35 +f 784/2/35 785/2/35 786/2/35 +f 788/44/7 776/45/110 787/44/7 +f 776/45/110 788/44/7 775/45/110 +f 783/2/20 777/46/20 785/2/20 +f 769/46/20 777/46/20 783/2/20 +f 760/1/20 777/46/20 769/46/20 +f 760/1/20 769/46/20 767/46/20 +f 763/1/20 777/46/20 760/1/20 +f 760/1/20 767/46/20 759/1/20 +f 763/1/20 779/46/20 777/46/20 +f 759/1/20 767/46/20 765/47/20 +f 765/47/20 767/46/20 775/45/20 +f 765/47/20 775/45/20 788/44/20 +f 772/47/20 779/46/20 763/1/20 +f 772/47/20 782/45/20 779/46/20 +f 782/45/20 772/47/20 774/44/20 +f 771/47/12 781/45/12 773/44/12 +f 781/45/12 771/47/12 764/1/12 +f 781/45/12 764/1/12 780/46/12 +f 780/46/12 764/1/12 762/1/12 +f 780/46/12 762/1/12 778/46/12 +f 778/46/12 762/1/12 786/2/12 +f 786/2/12 762/1/12 770/46/12 +f 784/2/12 786/2/12 770/46/12 +f 770/46/12 762/1/12 768/46/12 +f 768/46/12 762/1/12 761/1/12 +f 768/46/12 761/1/12 766/47/12 +f 768/46/12 766/47/12 776/45/12 +f 776/45/12 766/47/12 787/44/12 +f 769/46/7 784/2/7 770/46/7 +f 784/2/7 769/46/7 783/2/7 +f 782/45/111 780/46/105 779/46/105 +f 780/46/105 782/45/111 781/45/111 +f 765/47/109 787/44/7 766/47/109 +f 787/44/7 765/47/109 788/44/7 +f 786/2/8 777/46/8 778/46/8 +f 777/46/8 786/2/8 785/2/8 +f 764/1/106 772/47/107 763/1/106 +f 772/47/107 764/1/106 771/47/107 +f 624/49/12 633/48/12 631/27/12 +f 633/48/12 624/49/12 623/11/12 +f 633/48/12 623/11/12 620/17/12 +f 620/17/12 623/11/12 626/11/12 +f 620/17/12 626/11/12 618/17/12 +f 618/17/12 626/11/12 628/49/12 +f 618/17/12 628/49/12 630/48/12 +f 630/48/12 628/49/12 635/27/12 +f 634/48/20 622/49/20 632/27/20 +f 622/49/20 634/48/20 619/17/20 +f 622/49/20 619/17/20 621/11/20 +f 621/11/20 619/17/20 617/17/20 +f 621/11/20 617/17/20 625/11/20 +f 625/11/20 617/17/20 629/48/20 +f 625/11/20 629/48/20 627/49/20 +f 627/49/20 629/48/20 636/27/20 +f 647/48/20 642/49/20 644/27/20 +f 642/49/20 647/48/20 645/17/20 +f 642/49/20 645/17/20 655/11/20 +f 655/11/20 645/17/20 639/17/20 +f 655/11/20 639/17/20 653/11/20 +f 653/11/20 639/17/20 637/48/20 +f 653/11/20 637/48/20 651/49/20 +f 651/49/20 637/48/20 652/27/20 +f 641/49/12 648/48/12 643/27/12 +f 648/48/12 641/49/12 656/11/12 +f 648/48/12 656/11/12 646/17/12 +f 646/17/12 656/11/12 654/11/12 +f 646/17/12 654/11/12 640/17/12 +f 640/17/12 654/11/12 649/49/12 +f 640/17/12 649/49/12 638/48/12 +f 638/48/12 649/49/12 650/27/12 +f 713/49/12 697/48/12 695/27/12 +f 697/48/12 713/49/12 702/11/12 +f 697/48/12 702/11/12 712/17/12 +f 712/17/12 702/11/12 701/11/12 +f 712/17/12 701/11/12 710/17/12 +f 710/17/12 701/11/12 703/49/12 +f 710/17/12 703/49/12 707/48/12 +f 707/48/12 703/49/12 704/27/12 +f 698/48/20 714/49/20 696/27/20 +f 714/49/20 698/48/20 711/17/20 +f 714/49/20 711/17/20 700/11/20 +f 700/11/20 711/17/20 709/17/20 +f 700/11/20 709/17/20 699/11/20 +f 699/11/20 709/17/20 708/48/20 +f 699/11/20 708/48/20 705/49/20 +f 705/49/20 708/48/20 706/27/20 +f 730/48/20 716/49/20 728/27/20 +f 716/49/20 730/48/20 725/17/20 +f 716/49/20 725/17/20 715/11/20 +f 715/11/20 725/17/20 723/17/20 +f 715/11/20 723/17/20 720/11/20 +f 720/11/20 723/17/20 734/48/20 +f 720/11/20 734/48/20 719/49/20 +f 719/49/20 734/48/20 733/27/20 +f 718/49/12 729/48/12 727/27/12 +f 729/48/12 718/49/12 717/11/12 +f 729/48/12 717/11/12 726/17/12 +f 726/17/12 717/11/12 722/11/12 +f 726/17/12 722/11/12 724/17/12 +f 724/17/12 722/11/12 721/49/12 +f 724/17/12 721/49/12 732/48/12 +f 732/48/12 721/49/12 731/27/12 +f 791/50/120 790/51/121 789/50/120 +f 790/51/121 791/50/120 792/51/121 +f 790/51/121 794/51/122 793/51/122 +f 794/51/122 790/51/121 792/51/121 +f 794/51/122 795/50/123 793/51/122 +f 795/50/123 794/51/122 796/50/123 +f 794/51/12 797/52/12 796/50/12 +f 797/52/12 794/51/12 798/52/12 +f 798/52/12 794/51/12 792/51/12 +f 798/52/12 792/51/12 791/50/12 +f 800/52/20 795/50/20 799/52/20 +f 795/50/20 800/52/20 793/51/20 +f 793/51/20 800/52/20 790/51/20 +f 790/51/20 800/52/20 789/50/20 +f 797/52/8 795/50/123 796/50/123 +f 795/50/123 797/52/8 799/52/8 +f 800/52/7 791/50/120 789/50/120 +f 791/50/120 800/52/7 798/52/7 +f 799/52/35 798/52/35 800/52/35 +f 798/52/35 799/52/35 797/52/35 + diff --git a/Sources/LaneRunnerDemo/RunnerScene.swift b/Sources/LaneRunnerDemo/RunnerScene.swift new file mode 100644 index 0000000..a2be88d --- /dev/null +++ b/Sources/LaneRunnerDemo/RunnerScene.swift @@ -0,0 +1,207 @@ +import LaneRunner +import SceneKit +import SwiftUI + +/// Third-person 3D view of the runner, skinned with Kenney's CC0 Train Kit and Platformer Kit models. +@MainActor +final class RunnerScene { + let scene = SCNScene() + private let world = SCNNode() + private let player = SCNNode() + private let templates: [String: SCNNode] + private static let laneWidth: CGFloat = 1.7 + private static let rowLength: CGFloat = 3.2 + private static let drawnRows = 8 + + init() { + var templates: [String: SCNNode] = [:] + for (kit, names) in [ + ("train", ["train-electric-subway-a", "train-electric-subway-b", "track"]), + ( + "platformer", + ["character-oobi", "coin-gold", "fence-low-straight", "poles", "platform", "tree-pine", "tree"] + ), + ] { + for name in names { + guard + let url = Bundle.module.url( + forResource: name, withExtension: "obj", subdirectory: "Resources/Kenney/\(kit)"), + let loaded = try? SCNScene(url: url) + else { continue } + let node = SCNNode() + for child in loaded.rootNode.childNodes { node.addChildNode(child) } + let (low, high) = node.boundingBox + // Center on x/z and stand on y = 0 so placement is by lane and row only. + node.pivot = SCNMatrix4MakeTranslation((low.x + high.x) / 2, low.y, (low.z + high.z) / 2) + templates[name] = node + } + } + self.templates = templates + buildStage() + } + + /// Rebuild the track for `game`. After a step, the rows slide one row toward the camera over `duration`. + func show(_ game: LaneRunner, passed: [LaneRunner.Obstacle]?, action: LaneRunner.Action?, duration: Double) { + world.removeAllActions() + world.childNodes.forEach { $0.removeFromParentNode() } + var rows = Array(game.rows.prefix(Self.drawnRows).enumerated().map { (index: $0.offset + 1, row: $0.element) }) + if let passed { rows.insert((0, passed), at: 0) } + for (index, row) in rows { + let z = -CGFloat(index) * Self.rowLength + addScenery(z: z, seed: game.distance + index) + for (lane, obstacle) in row.enumerated() { + addObstacle(obstacle, x: Self.x(lane), z: z, variant: (game.distance + index + lane) % 2) + } + } + let moveX = SCNAction.move( + to: SCNVector3(Self.x(game.lane), 0, 0), duration: min(duration * 0.5, 0.2)) + moveX.timingMode = .easeOut + player.removeAllActions() + player.scale = SCNVector3(1.15, 1.15, 1.15) + player.eulerAngles = SCNVector3(0, CGFloat.pi, 0) + if game.isOver { + // The crash row is still rows[0]: stop the runner against it. + world.position.z = 0 + let fall = SCNAction.rotateTo(x: -.pi / 2, y: .pi, z: 0, duration: 0.25) + player.runAction(.group([moveX, fall])) + return + } + player.runAction(.group([moveX, Self.pose(action, duration: duration)])) + guard passed != nil else { + world.position.z = 0 + return + } + world.position.z = -Self.rowLength + world.runAction(.move(to: SCNVector3(0, 0, 0), duration: duration)) + } + + private static func x(_ lane: Int) -> CGFloat { CGFloat(lane - 1) * laneWidth } + + private static func pose(_ action: LaneRunner.Action?, duration: Double) -> SCNAction { + switch action { + case .jump: + let up = SCNAction.moveBy(x: 0, y: 1.2, z: 0, duration: duration * 0.45) + up.timingMode = .easeOut + let down = SCNAction.moveBy(x: 0, y: -1.2, z: 0, duration: duration * 0.45) + down.timingMode = .easeIn + return .sequence([up, down]) + case .slide: + return .sequence([ + .scale(to: 0.55, duration: duration * 0.15), .wait(duration: duration * 0.6), + .scale(to: 1.15, duration: duration * 0.2), + ]) + default: + let bob = SCNAction.moveBy(x: 0, y: 0.08, z: 0, duration: duration * 0.25) + return .sequence([bob, bob.reversed()]) + } + } + + private func clone(_ name: String) -> SCNNode { + templates[name]?.clone() ?? SCNNode(geometry: SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0.1)) + } + + private func addObstacle(_ obstacle: LaneRunner.Obstacle, x: CGFloat, z: CGFloat, variant: Int) { + for offset in [-1.0, 0.0, 1.0] as [CGFloat] { + let track = clone("track") + track.scale = SCNVector3(1.4, 1, 1.07) + track.position = SCNVector3(x, 0, z + offset * Self.rowLength / 3) + world.addChildNode(track) + } + switch obstacle { + case .open: + return + case .coin: + let coin = clone("coin-gold") + coin.scale = SCNVector3(1.4, 1.4, 1.4) + coin.position = SCNVector3(x, 0.45, z) + coin.runAction(.repeatForever(.rotateBy(x: 0, y: .pi * 2, z: 0, duration: 1.2))) + world.addChildNode(coin) + case .train: + let train = clone(variant == 0 ? "train-electric-subway-a" : "train-electric-subway-b") + train.scale = SCNVector3(1.15, 1.15, 1.15) + train.position = SCNVector3(x, 0.1, z) + world.addChildNode(train) + case .low: + let fence = clone("fence-low-straight") + fence.scale = SCNVector3(1.5, 1.8, 2) + fence.position = SCNVector3(x, 0.1, z) + world.addChildNode(fence) + case .high: + let poles = clone("poles") + poles.scale = SCNVector3(1.4, 1.9, 0.6) + poles.position = SCNVector3(x, 0.1, z) + world.addChildNode(poles) + let beam = clone("platform") + beam.scale = SCNVector3(1.55, 0.7, 0.25) + beam.position = SCNVector3(x, 1.55, z) + world.addChildNode(beam) + } + } + + private func addScenery(z: CGFloat, seed: Int) { + for side: CGFloat in [-1, 1] { + let tree = clone(seed % 3 == 0 ? "tree" : "tree-pine") + tree.scale = SCNVector3(2.2, 2.2, 2.2) + tree.position = SCNVector3(side * (Self.laneWidth * 1.5 + 1.3 + CGFloat(seed % 2) * 0.6), 0, z) + world.addChildNode(tree) + } + } + + private func buildStage() { + scene.background.contents = NSColor(red: 0.53, green: 0.78, blue: 0.95, alpha: 1) + scene.fogStartDistance = 14 + scene.fogEndDistance = 30 + scene.fogColor = NSColor(red: 0.53, green: 0.78, blue: 0.95, alpha: 1) + + let ground = SCNNode(geometry: SCNPlane(width: 60, height: 120)) + ground.geometry?.firstMaterial?.diffuse.contents = NSColor(red: 0.47, green: 0.66, blue: 0.36, alpha: 1) + ground.eulerAngles.x = -.pi / 2 + ground.position = SCNVector3(0, -0.01, -40) + scene.rootNode.addChildNode(ground) + let ballast = SCNNode(geometry: SCNPlane(width: Self.laneWidth * 3 + 0.6, height: 120)) + ballast.geometry?.firstMaterial?.diffuse.contents = NSColor(red: 0.55, green: 0.52, blue: 0.48, alpha: 1) + ballast.eulerAngles.x = -.pi / 2 + ballast.position = SCNVector3(0, 0, -40) + scene.rootNode.addChildNode(ballast) + + scene.rootNode.addChildNode(world) + player.addChildNode(clone("character-oobi")) + scene.rootNode.addChildNode(player) + + let camera = SCNNode() + camera.camera = SCNCamera() + camera.camera?.fieldOfView = 55 + camera.camera?.zFar = 60 + camera.position = SCNVector3(0, 3.4, 5.2) + camera.look(at: SCNVector3(0, 0.6, -7)) + scene.rootNode.addChildNode(camera) + + let sun = SCNNode() + sun.light = SCNLight() + sun.light?.type = .directional + sun.light?.castsShadow = true + sun.light?.shadowColor = NSColor.black.withAlphaComponent(0.35) + sun.eulerAngles = SCNVector3(-1.0, 0.5, 0) + scene.rootNode.addChildNode(sun) + let ambient = SCNNode() + ambient.light = SCNLight() + ambient.light?.type = .ambient + ambient.light?.intensity = 550 + scene.rootNode.addChildNode(ambient) + } +} + +struct RunnerSceneView: NSViewRepresentable { + let runner: RunnerScene + + func makeNSView(context: Context) -> SCNView { + let view = SCNView() + view.scene = runner.scene + view.antialiasingMode = .multisampling4X + view.rendersContinuously = true + view.allowsCameraControl = false + return view + } + + func updateNSView(_ view: SCNView, context: Context) {} +} From 5eda33aff72bf508a9fc994f694df78cdc6f80cd Mon Sep 17 00:00:00 2001 From: Alex-Wengg Date: Wed, 23 Sep 2026 01:54:05 -0400 Subject: [PATCH 4/9] Show run time in the lane runner demo Live TIME metric (pauses excluded) beside distance and coins, and the final time on the run-over card. Co-Authored-By: Claude Opus 5.5 (1M context) --- Sources/LaneRunnerDemo/LaneRunnerModel.swift | 15 +++++++++++++++ Sources/LaneRunnerDemo/LaneRunnerView.swift | 6 +++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Sources/LaneRunnerDemo/LaneRunnerModel.swift b/Sources/LaneRunnerDemo/LaneRunnerModel.swift index 50d6b3c..ea3a647 100644 --- a/Sources/LaneRunnerDemo/LaneRunnerModel.swift +++ b/Sources/LaneRunnerDemo/LaneRunnerModel.swift @@ -31,6 +31,9 @@ final class LaneRunnerModel: ObservableObject { @Published private(set) var isLoading = false @Published private(set) var loadedModels: Set = [] @Published private(set) var calls = 0 + /// Run time excluding pauses; `runStartedAt` is set while running. + @Published private(set) var runSeconds = 0.0 + @Published private(set) var runStartedAt: Date? @Published private(set) var lateRows = 0 @Published private(set) var unsafeChoices = 0 @Published private(set) var modelMs = 0.0 @@ -51,6 +54,14 @@ final class LaneRunnerModel: ObservableObject { private var decisionNumber = 0 private var autostart = false + func elapsed(at date: Date) -> Double { + runSeconds + (runStartedAt.map { date.timeIntervalSince($0) } ?? 0) + } + + static func clock(_ seconds: Double) -> String { + String(format: "%d:%04.1f", Int(seconds) / 60, seconds.truncatingRemainder(dividingBy: 60)) + } + var usesModel: Bool { control.model != nil } var canPlay: Bool { control.model.map { loadedModels.contains($0) } ?? true } @@ -102,6 +113,7 @@ final class LaneRunnerModel: ObservableObject { game = LaneRunner(seed: seed) runner.show(game, passed: nil, action: nil, duration: 0) calls = 0 + runSeconds = 0 lateRows = 0 unsafeChoices = 0 modelMs = 0 @@ -119,6 +131,8 @@ final class LaneRunnerModel: ObservableObject { inFlight = false queuedAction = .stay isRunning = false + if let runStartedAt { runSeconds += Date().timeIntervalSince(runStartedAt) } + runStartedAt = nil } func toggle() { @@ -129,6 +143,7 @@ final class LaneRunnerModel: ObservableObject { guard canPlay else { return } if game.isOver || game.distance == 0 { reset() } isRunning = true + runStartedAt = Date() let run = generation loopTask = Task { [weak self] in while let self, self.isRunning, self.generation == run, !Task.isCancelled { diff --git a/Sources/LaneRunnerDemo/LaneRunnerView.swift b/Sources/LaneRunnerDemo/LaneRunnerView.swift index 5231315..b34fa14 100644 --- a/Sources/LaneRunnerDemo/LaneRunnerView.swift +++ b/Sources/LaneRunnerDemo/LaneRunnerView.swift @@ -53,6 +53,9 @@ struct LaneRunnerView: View { HStack { metric("DISTANCE", "\(model.game.distance)") metric("COINS", "\(model.game.coins)") + TimelineView(.periodic(from: .now, by: 0.1)) { context in + metric("TIME", LaneRunnerModel.clock(model.elapsed(at: context.date))) + } } HStack { metric("MODEL CALL", model.calls == 0 ? "—" : String(format: "%.1f ms", model.modelMs)) @@ -102,7 +105,8 @@ struct LaneRunnerView: View { .font(.title2.bold()) Text( model.game.isOver - ? "\(model.game.distance) rows · \(model.game.coins) coins" + ? "\(model.game.distance) rows · \(model.game.coins) coins · " + + LaneRunnerModel.clock(model.elapsed(at: Date())) : "Choose a runner, then press Run" ) .font(.caption) From a98e205e30a42072e88305850af85bb4fd3dcd74 Mon Sep 17 00:00:00 2001 From: Alex-Wengg Date: Wed, 23 Sep 2026 01:56:05 -0400 Subject: [PATCH 5/9] Draw the high bar as a striped overhead barrier Kenney's poles model is a solid log palisade, so the high bar looked like a wall rather than something to slide under. Draw two thin posts and a red/white beam at chest height with open space below, and drop the unused poles/platform models. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../Resources/Kenney/platformer/platform.mtl | 6 - .../Resources/Kenney/platformer/platform.obj | 257 ------ .../Resources/Kenney/platformer/poles.mtl | 6 - .../Resources/Kenney/platformer/poles.obj | 736 ------------------ Sources/LaneRunnerDemo/RunnerScene.swift | 34 +- 5 files changed, 25 insertions(+), 1014 deletions(-) delete mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/platform.mtl delete mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/platform.obj delete mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/poles.mtl delete mode 100644 Sources/LaneRunnerDemo/Resources/Kenney/platformer/poles.obj diff --git a/Sources/LaneRunnerDemo/Resources/Kenney/platformer/platform.mtl b/Sources/LaneRunnerDemo/Resources/Kenney/platformer/platform.mtl deleted file mode 100644 index 462deb0..0000000 --- a/Sources/LaneRunnerDemo/Resources/Kenney/platformer/platform.mtl +++ /dev/null @@ -1,6 +0,0 @@ -# Created by Kenney (www.kenney.nl) - -newmtl colormap -Kd 1 1 1 -map_Kd Textures/colormap.png - diff --git a/Sources/LaneRunnerDemo/Resources/Kenney/platformer/platform.obj b/Sources/LaneRunnerDemo/Resources/Kenney/platformer/platform.obj deleted file mode 100644 index dbce075..0000000 --- a/Sources/LaneRunnerDemo/Resources/Kenney/platformer/platform.obj +++ /dev/null @@ -1,257 +0,0 @@ -# Created by Kenney (www.kenney.nl) - -mtllib platform.mtl - -g platform - -v -0.38 0 -0.5 1 1 1 -v -0.26 0 -0.5 1 1 1 -v -0.38 0.12 -0.5 1 1 1 -v -0.26 0.12 -0.5 1 1 1 -v -0.26 0 0.5 1 1 1 -v -0.38 0 0.5 1 1 1 -v -0.26 0.12 0.5 1 1 1 -v -0.38 0.12 0.5 1 1 1 -v 0.26 0 -0.5 1 1 1 -v 0.26 0.12 -0.5 1 1 1 -v 0.26 0 0.5 1 1 1 -v 0.26 0.12 0.5 1 1 1 -v 0.38 0 0.5 1 1 1 -v 0.38 0.12 0.5 1 1 1 -v 0.38 0 -0.5 1 1 1 -v 0.38 0.12 -0.5 1 1 1 -v -0.5 0.12 0.1529126 1 1 1 -v 0.5 0.12 0.1529126 1 1 1 -v -0.5 0.195 0.1529126 1 1 1 -v 0.5 0.1575 0.1529126 1 1 1 -v 0.5 0.1575 0.3470874 1 1 1 -v 0.5 0.12 0.3470874 1 1 1 -v -0.5 0.12 0.3470874 1 1 1 -v -0.5 0.195 0.3470874 1 1 1 -v 0.5 0.12 -0.4029126 1 1 1 -v 0.5 0.12 -0.5 1 1 1 -v -0.5 0.12 -0.4029126 1 1 1 -v -0.5 0.12 -0.5 1 1 1 -v -0.5 0.1575 -0.5 1 1 1 -v -0.5 0.1575 -0.4029126 1 1 1 -v 0.5 0.195 -0.5 1 1 1 -v 0.5 0.195 -0.4029126 1 1 1 -v -0.5 0.12 -0.09708738 1 1 1 -v 0.5 0.12 -0.09708738 1 1 1 -v -0.5 0.1575 -0.09708738 1 1 1 -v 0.5 0.195 -0.09708738 1 1 1 -v 0.5 0.195 0.09708738 1 1 1 -v -0.5 0.1575 0.09708738 1 1 1 -v 0.5 0.12 0.09708738 1 1 1 -v -0.5 0.12 0.09708738 1 1 1 -v 0.5 0.1575 -0.3470874 1 1 1 -v 0.5 0.12 -0.3470874 1 1 1 -v 0.5 0.1575 -0.1529126 1 1 1 -v 0.5 0.12 -0.1529126 1 1 1 -v -0.5 0.195 -0.1529126 1 1 1 -v -0.5 0.195 -0.3470874 1 1 1 -v -0.5 0.12 -0.1529126 1 1 1 -v -0.5 0.12 -0.3470874 1 1 1 -v -0.5 0.12 0.4029126 1 1 1 -v 0.5 0.12 0.4029126 1 1 1 -v -0.5 0.1575 0.4029126 1 1 1 -v 0.5 0.195 0.4029126 1 1 1 -v 0.5 0.195 0.5 1 1 1 -v -0.5 0.1575 0.5 1 1 1 -v -0.5 0.12 0.5 1 1 1 -v 0.5 0.12 0.5 1 1 1 - -vn 0 0 -1 -vn 0 0 1 -vn 0 -1 0 -vn -1 0 0 -vn 1 0 0 -vn 0 1 0 -vn 0.03747366 0.9992976 0 -vn -0.03747366 0.9992976 0 - -vt 0.59375 0.275 -vt 0.59375 0.475 -vt 0.46875 0.325 -vt 0.46875 0.425 -vt 0.46875 0.375 - -usemtl colormap - -f 3/2/1 2/1/1 1/1/1 -f 2/1/1 3/2/1 4/2/1 -f 7/2/2 6/1/2 5/1/2 -f 6/1/2 7/2/2 8/2/2 -f 6/1/3 2/1/3 5/1/3 -f 2/1/3 6/1/3 1/1/3 -f 6/1/4 3/2/4 1/1/4 -f 3/2/4 6/1/4 8/2/4 -f 7/2/5 2/1/5 4/2/5 -f 2/1/5 7/2/5 5/1/5 -f 3/2/6 7/2/6 4/2/6 -f 7/2/6 3/2/6 8/2/6 -f 11/1/4 10/2/4 9/1/4 -f 10/2/4 11/1/4 12/2/4 -f 14/2/2 11/1/2 13/1/2 -f 11/1/2 14/2/2 12/2/2 -f 11/1/3 15/1/3 13/1/3 -f 15/1/3 11/1/3 9/1/3 -f 14/2/5 15/1/5 16/2/5 -f 15/1/5 14/2/5 13/1/5 -f 10/2/1 15/1/1 9/1/1 -f 15/1/1 10/2/1 16/2/1 -f 10/2/6 14/2/6 16/2/6 -f 14/2/6 10/2/6 12/2/6 -f 19/4/1 18/3/1 17/3/1 -f 18/3/1 19/4/1 20/5/1 -f 21/5/5 18/3/5 20/5/5 -f 18/3/5 21/5/5 22/3/5 -f 21/5/2 23/3/2 22/3/2 -f 23/3/2 21/5/2 24/4/2 -f 23/3/4 19/4/4 17/3/4 -f 19/4/4 23/3/4 24/4/4 -f 19/4/7 21/5/7 20/5/7 -f 21/5/7 19/4/7 24/4/7 -f 23/3/3 18/3/3 22/3/3 -f 18/3/3 23/3/3 17/3/3 -f 27/3/3 26/3/3 25/3/3 -f 26/3/3 27/3/3 28/3/3 -f 27/3/4 29/5/4 28/3/4 -f 29/5/4 27/3/4 30/5/4 -f 32/4/5 26/3/5 31/4/5 -f 26/3/5 32/4/5 25/3/5 -f 32/4/2 27/3/2 25/3/2 -f 27/3/2 32/4/2 30/5/2 -f 29/5/1 26/3/1 28/3/1 -f 26/3/1 29/5/1 31/4/1 -f 31/4/8 30/5/8 32/4/8 -f 30/5/8 31/4/8 29/5/8 -f 35/5/1 34/3/1 33/3/1 -f 34/3/1 35/5/1 36/4/1 -f 35/5/8 37/4/8 36/4/8 -f 37/4/8 35/5/8 38/5/8 -f 37/4/2 40/3/2 39/3/2 -f 40/3/2 37/4/2 38/5/2 -f 40/3/3 34/3/3 39/3/3 -f 34/3/3 40/3/3 33/3/3 -f 37/4/5 34/3/5 36/4/5 -f 34/3/5 37/4/5 39/3/5 -f 40/3/4 35/5/4 33/3/4 -f 35/5/4 40/3/4 38/5/4 -f 43/5/5 42/3/5 41/5/5 -f 42/3/5 43/5/5 44/3/5 -f 41/5/7 45/4/7 43/5/7 -f 45/4/7 41/5/7 46/4/7 -f 43/5/2 47/3/2 44/3/2 -f 47/3/2 43/5/2 45/4/2 -f 47/3/3 42/3/3 44/3/3 -f 42/3/3 47/3/3 48/3/3 -f 47/3/4 46/4/4 48/3/4 -f 46/4/4 47/3/4 45/4/4 -f 46/4/1 42/3/1 48/3/1 -f 42/3/1 46/4/1 41/5/1 -f 51/5/1 50/3/1 49/3/1 -f 50/3/1 51/5/1 52/4/1 -f 52/4/8 54/5/8 53/4/8 -f 54/5/8 52/4/8 51/5/8 -f 55/3/4 51/5/4 49/3/4 -f 51/5/4 55/3/4 54/5/4 -f 53/4/2 55/3/2 56/3/2 -f 55/3/2 53/4/2 54/5/2 -f 55/3/3 50/3/3 56/3/3 -f 50/3/3 55/3/3 49/3/3 -f 53/4/5 50/3/5 52/4/5 -f 50/3/5 53/4/5 56/3/5 - -g platform - - - - -usemtl colormap - -f 3/2/1 2/1/1 1/1/1 -f 2/1/1 3/2/1 4/2/1 -f 7/2/2 6/1/2 5/1/2 -f 6/1/2 7/2/2 8/2/2 -f 6/1/3 2/1/3 5/1/3 -f 2/1/3 6/1/3 1/1/3 -f 6/1/4 3/2/4 1/1/4 -f 3/2/4 6/1/4 8/2/4 -f 7/2/5 2/1/5 4/2/5 -f 2/1/5 7/2/5 5/1/5 -f 3/2/6 7/2/6 4/2/6 -f 7/2/6 3/2/6 8/2/6 -f 11/1/4 10/2/4 9/1/4 -f 10/2/4 11/1/4 12/2/4 -f 14/2/2 11/1/2 13/1/2 -f 11/1/2 14/2/2 12/2/2 -f 11/1/3 15/1/3 13/1/3 -f 15/1/3 11/1/3 9/1/3 -f 14/2/5 15/1/5 16/2/5 -f 15/1/5 14/2/5 13/1/5 -f 10/2/1 15/1/1 9/1/1 -f 15/1/1 10/2/1 16/2/1 -f 10/2/6 14/2/6 16/2/6 -f 14/2/6 10/2/6 12/2/6 -f 19/4/1 18/3/1 17/3/1 -f 18/3/1 19/4/1 20/5/1 -f 21/5/5 18/3/5 20/5/5 -f 18/3/5 21/5/5 22/3/5 -f 21/5/2 23/3/2 22/3/2 -f 23/3/2 21/5/2 24/4/2 -f 23/3/4 19/4/4 17/3/4 -f 19/4/4 23/3/4 24/4/4 -f 19/4/7 21/5/7 20/5/7 -f 21/5/7 19/4/7 24/4/7 -f 23/3/3 18/3/3 22/3/3 -f 18/3/3 23/3/3 17/3/3 -f 27/3/3 26/3/3 25/3/3 -f 26/3/3 27/3/3 28/3/3 -f 27/3/4 29/5/4 28/3/4 -f 29/5/4 27/3/4 30/5/4 -f 32/4/5 26/3/5 31/4/5 -f 26/3/5 32/4/5 25/3/5 -f 32/4/2 27/3/2 25/3/2 -f 27/3/2 32/4/2 30/5/2 -f 29/5/1 26/3/1 28/3/1 -f 26/3/1 29/5/1 31/4/1 -f 31/4/8 30/5/8 32/4/8 -f 30/5/8 31/4/8 29/5/8 -f 35/5/1 34/3/1 33/3/1 -f 34/3/1 35/5/1 36/4/1 -f 35/5/8 37/4/8 36/4/8 -f 37/4/8 35/5/8 38/5/8 -f 37/4/2 40/3/2 39/3/2 -f 40/3/2 37/4/2 38/5/2 -f 40/3/3 34/3/3 39/3/3 -f 34/3/3 40/3/3 33/3/3 -f 37/4/5 34/3/5 36/4/5 -f 34/3/5 37/4/5 39/3/5 -f 40/3/4 35/5/4 33/3/4 -f 35/5/4 40/3/4 38/5/4 -f 43/5/5 42/3/5 41/5/5 -f 42/3/5 43/5/5 44/3/5 -f 41/5/7 45/4/7 43/5/7 -f 45/4/7 41/5/7 46/4/7 -f 43/5/2 47/3/2 44/3/2 -f 47/3/2 43/5/2 45/4/2 -f 47/3/3 42/3/3 44/3/3 -f 42/3/3 47/3/3 48/3/3 -f 47/3/4 46/4/4 48/3/4 -f 46/4/4 47/3/4 45/4/4 -f 46/4/1 42/3/1 48/3/1 -f 42/3/1 46/4/1 41/5/1 -f 51/5/1 50/3/1 49/3/1 -f 50/3/1 51/5/1 52/4/1 -f 52/4/8 54/5/8 53/4/8 -f 54/5/8 52/4/8 51/5/8 -f 55/3/4 51/5/4 49/3/4 -f 51/5/4 55/3/4 54/5/4 -f 53/4/2 55/3/2 56/3/2 -f 55/3/2 53/4/2 54/5/2 -f 55/3/3 50/3/3 56/3/3 -f 50/3/3 55/3/3 49/3/3 -f 53/4/5 50/3/5 52/4/5 -f 50/3/5 53/4/5 56/3/5 - diff --git a/Sources/LaneRunnerDemo/Resources/Kenney/platformer/poles.mtl b/Sources/LaneRunnerDemo/Resources/Kenney/platformer/poles.mtl deleted file mode 100644 index 462deb0..0000000 --- a/Sources/LaneRunnerDemo/Resources/Kenney/platformer/poles.mtl +++ /dev/null @@ -1,6 +0,0 @@ -# Created by Kenney (www.kenney.nl) - -newmtl colormap -Kd 1 1 1 -map_Kd Textures/colormap.png - diff --git a/Sources/LaneRunnerDemo/Resources/Kenney/platformer/poles.obj b/Sources/LaneRunnerDemo/Resources/Kenney/platformer/poles.obj deleted file mode 100644 index 4eb4f0b..0000000 --- a/Sources/LaneRunnerDemo/Resources/Kenney/platformer/poles.obj +++ /dev/null @@ -1,736 +0,0 @@ -# Created by Kenney (www.kenney.nl) - -mtllib poles.mtl - -g poles - -v -0.065 0.775 -0.03343146 1 1 1 -v -0.065 0.775 0.03343146 1 1 1 -v -0.09156854 0.775 -0.06 1 1 1 -v -0.09156854 0.775 0.06 1 1 1 -v -0.1584315 0.775 -0.06 1 1 1 -v -0.1584315 0.775 0.06 1 1 1 -v -0.185 0.775 -0.03343146 1 1 1 -v -0.185 0.775 0.03343146 1 1 1 -v -0.1875 9.023893E-17 -0.125 1 1 1 -v -0.1875 0.8 -0.125 1 1 1 -v -0.25 9.023893E-17 -0.0625 1 1 1 -v -0.25 0.8 -0.0625 1 1 1 -v -0.0625 0.8 -0.125 1 1 1 -v -0.0625 9.023893E-17 -0.125 1 1 1 -v 0 0.8 -0.0625 1 1 1 -v 0 9.023893E-17 -0.0625 1 1 1 -v -0.0625 9.023893E-17 0.125 1 1 1 -v -0.1875 9.023893E-17 0.125 1 1 1 -v -0.0625 0.8 0.125 1 1 1 -v -0.1875 0.8 0.125 1 1 1 -v -0.25 9.023893E-17 0.0625 1 1 1 -v -0.25 0.8 0.0625 1 1 1 -v 0 0.8 0.0625 1 1 1 -v 0 9.023893E-17 0.0625 1 1 1 -v -0.08321068 0.8 -0.075 1 1 1 -v -0.1667893 0.8 -0.075 1 1 1 -v -0.05 0.8 0.04178932 1 1 1 -v -0.08321068 0.8 0.075 1 1 1 -v -0.1667893 0.8 0.075 1 1 1 -v -0.2 0.8 0.04178932 1 1 1 -v -0.05 0.8 -0.04178932 1 1 1 -v -0.2 0.8 -0.04178932 1 1 1 -v 0.435 0.875 -0.03343146 1 1 1 -v 0.435 0.875 0.03343146 1 1 1 -v 0.4084315 0.875 -0.06 1 1 1 -v 0.4084315 0.875 0.06 1 1 1 -v 0.3415685 0.875 -0.06 1 1 1 -v 0.3415685 0.875 0.06 1 1 1 -v 0.315 0.875 -0.03343146 1 1 1 -v 0.315 0.875 0.03343146 1 1 1 -v 0.3125 -8.014827E-32 -0.125 1 1 1 -v 0.3125 0.9 -0.125 1 1 1 -v 0.25 -8.014827E-32 -0.0625 1 1 1 -v 0.25 0.9 -0.0625 1 1 1 -v 0.4375 0.9 -0.125 1 1 1 -v 0.4375 -8.014827E-32 -0.125 1 1 1 -v 0.5 0.9 -0.0625 1 1 1 -v 0.5 -8.014827E-32 -0.0625 1 1 1 -v 0.4375 -8.014827E-32 0.125 1 1 1 -v 0.3125 -8.014827E-32 0.125 1 1 1 -v 0.4375 0.9 0.125 1 1 1 -v 0.3125 0.9 0.125 1 1 1 -v 0.25 -8.014827E-32 0.0625 1 1 1 -v 0.25 0.9 0.0625 1 1 1 -v 0.5 0.9 0.0625 1 1 1 -v 0.5 -8.014827E-32 0.0625 1 1 1 -v 0.45 0.9 0.04178932 1 1 1 -v 0.4167893 0.9 0.075 1 1 1 -v 0.45 0.9 -0.04178932 1 1 1 -v 0.3332107 0.9 -0.075 1 1 1 -v 0.3 0.9 -0.04178932 1 1 1 -v 0.3 0.9 0.04178932 1 1 1 -v 0.3332107 0.9 0.075 1 1 1 -v 0.4167893 0.9 -0.075 1 1 1 -v -0.315 0.925 -0.03343146 1 1 1 -v -0.315 0.925 0.03343146 1 1 1 -v -0.3415685 0.925 -0.06 1 1 1 -v -0.3415685 0.925 0.06 1 1 1 -v -0.4084315 0.925 -0.06 1 1 1 -v -0.4084315 0.925 0.06 1 1 1 -v -0.435 0.925 -0.03343146 1 1 1 -v -0.435 0.925 0.03343146 1 1 1 -v -0.4375 -3.609557E-16 -0.125 1 1 1 -v -0.4375 0.9499999 -0.125 1 1 1 -v -0.5 -3.609557E-16 -0.0625 1 1 1 -v -0.5 0.9499999 -0.0625 1 1 1 -v -0.3125 0.9499999 -0.125 1 1 1 -v -0.3125 -3.609557E-16 -0.125 1 1 1 -v -0.25 0.9499999 -0.0625 1 1 1 -v -0.25 -3.609557E-16 -0.0625 1 1 1 -v -0.3125 -3.609557E-16 0.125 1 1 1 -v -0.4375 -3.609557E-16 0.125 1 1 1 -v -0.3125 0.9499999 0.125 1 1 1 -v -0.4375 0.9499999 0.125 1 1 1 -v -0.5 -3.609557E-16 0.0625 1 1 1 -v -0.5 0.9499999 0.0625 1 1 1 -v -0.25 0.9499999 0.0625 1 1 1 -v -0.25 -3.609557E-16 0.0625 1 1 1 -v -0.4167893 0.9499999 -0.075 1 1 1 -v -0.45 0.9499999 -0.04178932 1 1 1 -v -0.45 0.9499999 0.04178932 1 1 1 -v -0.4167893 0.9499999 0.075 1 1 1 -v -0.3332107 0.9499999 0.075 1 1 1 -v -0.3332107 0.9499999 -0.075 1 1 1 -v -0.3 0.9499999 -0.04178932 1 1 1 -v -0.3 0.9499999 0.04178932 1 1 1 -v 0.185 0.975 -0.03343146 1 1 1 -v 0.185 0.975 0.03343146 1 1 1 -v 0.1584315 0.975 -0.06 1 1 1 -v 0.1584315 0.975 0.06 1 1 1 -v 0.09156854 0.975 -0.06 1 1 1 -v 0.09156854 0.975 0.06 1 1 1 -v 0.065 0.975 -0.03343146 1 1 1 -v 0.065 0.975 0.03343146 1 1 1 -v 0.0625 -7.219114E-16 -0.125 1 1 1 -v 0.0625 1 -0.125 1 1 1 -v 0 -7.219114E-16 -0.0625 1 1 1 -v 0 1 -0.0625 1 1 1 -v 0.1875 1 -0.125 1 1 1 -v 0.1875 -7.219114E-16 -0.125 1 1 1 -v 0.25 1 -0.0625 1 1 1 -v 0.25 -7.219114E-16 -0.0625 1 1 1 -v 0.1875 -7.219114E-16 0.125 1 1 1 -v 0.0625 -7.219114E-16 0.125 1 1 1 -v 0.1875 1 0.125 1 1 1 -v 0.0625 1 0.125 1 1 1 -v 0 -7.219114E-16 0.0625 1 1 1 -v 0 1 0.0625 1 1 1 -v 0.25 1 0.0625 1 1 1 -v 0.25 -7.219114E-16 0.0625 1 1 1 -v 0.05 1 -0.04178932 1 1 1 -v 0.05 1 0.04178932 1 1 1 -v 0.1667893 1 -0.075 1 1 1 -v 0.2 1 -0.04178932 1 1 1 -v 0.08321068 1 0.075 1 1 1 -v 0.1667893 1 0.075 1 1 1 -v 0.08321068 1 -0.075 1 1 1 -v 0.2 1 0.04178932 1 1 1 -v 0.55 0.25 0.08321068 1 1 1 -v 0.55 0.25 -0.08321068 1 1 1 -v 0.4582107 0.25 0.175 1 1 1 -v 0.4582107 0.25 -0.175 1 1 1 -v -0.4582107 0.25 0.175 1 1 1 -v -0.4582107 0.25 -0.175 1 1 1 -v -0.55 0.25 0.08321068 1 1 1 -v -0.55 0.25 -0.08321068 1 1 1 -v 0.55 0.45 -0.08321068 1 1 1 -v 0.55 0.45 0.08321068 1 1 1 -v 0.4582107 0.45 -0.175 1 1 1 -v 0.4582107 0.45 0.175 1 1 1 -v -0.4582107 0.45 0.175 1 1 1 -v -0.4582107 0.45 -0.175 1 1 1 -v -0.55 0.45 0.08321068 1 1 1 -v -0.55 0.45 -0.08321068 1 1 1 - -vn 0 1 0 -vn -0.3826834 0 -0.9238795 -vn -0.9238795 0 -0.3826834 -vn 0.3826834 0 -0.9238795 -vn 0.9238795 0 -0.3826834 -vn 0.3826834 0 0.9238795 -vn -0.3826834 0 0.9238795 -vn -0.9238795 0 0.3826834 -vn 0.9238795 0 0.3826834 -vn 0 -1 0 -vn -0.3010484 0.562618 0.7699552 -vn 0.3010484 0.562618 0.7699552 -vn -0.3260678 0.5641471 0.758563 -vn 0.3260678 0.5641471 0.758563 -vn -0.7699552 0.562618 -0.3010484 -vn -0.758563 0.5641471 -0.3260678 -vn -0.3010484 0.562618 -0.7699552 -vn -0.3260678 0.5641471 -0.758563 -vn 0.3010484 0.562618 -0.7699552 -vn 0.3260678 0.5641471 -0.758563 -vn 0.7699552 0.562618 -0.3010484 -vn 0.758563 0.5641471 -0.3260678 -vn -0.758563 0.5641471 0.3260678 -vn -0.7699552 0.562618 0.3010484 -vn 0.758563 0.5641471 0.3260678 -vn 0.7699552 0.562618 0.3010484 - -vt 0.46875 0.46875 -vt 0.46875 0.275 -vt 0.46875 0.475 -vt 0.46875 0.4694445 -vt 0.46875 0.3528948 -vt 0.46875 0.355 -vt 0.46875 0.353 -vt 0.59375 0.475 -vt 0.59375 0.275 -vt 0.59375 0.355 - -usemtl colormap - -f 3/1/1 2/1/1 1/1/1 -f 2/1/1 3/1/1 4/1/1 -f 4/1/1 3/1/1 5/1/1 -f 4/1/1 5/1/1 6/1/1 -f 6/1/1 5/1/1 7/1/1 -f 6/1/1 7/1/1 8/1/1 -f 11/2/3 10/3/2 9/2/2 -f 10/3/2 11/2/3 12/3/3 -f 15/3/5 14/2/4 13/3/4 -f 14/2/4 15/3/5 16/2/5 -f 19/3/6 18/2/7 17/2/6 -f 18/2/7 19/3/6 20/3/7 -f 18/2/7 22/3/8 21/2/8 -f 22/3/8 18/2/7 20/3/7 -f 23/3/9 16/2/5 15/3/5 -f 16/2/5 23/3/9 24/2/9 -f 17/2/10 16/2/10 24/2/10 -f 16/2/10 17/2/10 14/2/10 -f 14/2/10 17/2/10 18/2/10 -f 14/2/10 18/2/10 9/2/10 -f 9/2/10 18/2/10 21/2/10 -f 9/2/10 21/2/10 11/2/10 -f 19/3/6 24/2/9 23/3/9 -f 24/2/9 19/3/6 17/2/6 -f 21/2/8 12/3/3 11/2/3 -f 12/3/3 21/2/8 22/3/8 -f 10/3/2 14/2/4 9/2/2 -f 14/2/4 10/3/2 13/3/4 -f 25/3/13 5/1/12 3/1/11 -f 5/1/12 25/3/13 26/3/14 -f 4/1/17 27/3/16 2/1/15 -f 27/3/16 4/1/17 28/3/18 -f 29/3/20 4/1/17 6/1/19 -f 4/1/17 29/3/20 28/3/18 -f 30/3/22 6/1/19 8/1/21 -f 6/1/19 30/3/22 29/3/20 -f 1/1/24 27/3/16 31/3/23 -f 27/3/16 1/1/24 2/1/15 -f 32/3/25 5/1/12 26/3/14 -f 5/1/12 32/3/25 7/1/26 -f 30/3/22 7/1/26 32/3/25 -f 7/1/26 30/3/22 8/1/21 -f 3/1/11 31/3/23 25/3/13 -f 31/3/23 3/1/11 1/1/24 -f 35/4/1 34/4/1 33/4/1 -f 34/4/1 35/4/1 36/4/1 -f 36/4/1 35/4/1 37/4/1 -f 36/4/1 37/4/1 38/4/1 -f 38/4/1 37/4/1 39/4/1 -f 38/4/1 39/4/1 40/4/1 -f 43/2/3 42/3/2 41/2/2 -f 42/3/2 43/2/3 44/3/3 -f 47/3/5 46/2/4 45/3/4 -f 46/2/4 47/3/5 48/2/5 -f 51/3/6 50/2/7 49/2/6 -f 50/2/7 51/3/6 52/3/7 -f 50/2/7 54/3/8 53/2/8 -f 54/3/8 50/2/7 52/3/7 -f 55/3/9 48/2/5 47/3/5 -f 48/2/5 55/3/9 56/2/9 -f 49/2/10 48/2/10 56/2/10 -f 48/2/10 49/2/10 46/2/10 -f 46/2/10 49/2/10 50/2/10 -f 46/2/10 50/2/10 41/2/10 -f 41/2/10 50/2/10 53/2/10 -f 41/2/10 53/2/10 43/2/10 -f 51/3/6 56/2/9 55/3/9 -f 56/2/9 51/3/6 49/2/6 -f 53/2/8 44/3/3 43/2/3 -f 44/3/3 53/2/8 54/3/8 -f 42/3/2 46/2/4 41/2/2 -f 46/2/4 42/3/2 45/3/4 -f 36/4/17 57/3/16 34/4/15 -f 57/3/16 36/4/17 58/3/18 -f 33/4/24 57/3/16 59/3/23 -f 57/3/16 33/4/24 34/4/15 -f 61/3/25 37/4/12 60/3/14 -f 37/4/12 61/3/25 39/4/26 -f 62/3/22 38/4/19 40/4/21 -f 38/4/19 62/3/22 63/3/20 -f 35/4/11 59/3/23 64/3/13 -f 59/3/23 35/4/11 33/4/24 -f 64/3/13 37/4/12 35/4/11 -f 37/4/12 64/3/13 60/3/14 -f 63/3/20 36/4/17 38/4/19 -f 36/4/17 63/3/20 58/3/18 -f 62/3/22 39/4/26 61/3/25 -f 39/4/26 62/3/22 40/4/21 -f 67/5/1 66/5/1 65/5/1 -f 66/5/1 67/5/1 68/5/1 -f 68/5/1 67/5/1 69/5/1 -f 68/5/1 69/5/1 70/5/1 -f 70/5/1 69/5/1 71/5/1 -f 70/5/1 71/5/1 72/5/1 -f 75/2/3 74/6/2 73/2/2 -f 74/6/2 75/2/3 76/6/3 -f 79/6/5 78/2/4 77/6/4 -f 78/2/4 79/6/5 80/2/5 -f 83/6/6 82/2/7 81/2/6 -f 82/2/7 83/6/6 84/6/7 -f 82/2/7 86/6/8 85/2/8 -f 86/6/8 82/2/7 84/6/7 -f 87/6/9 80/2/5 79/6/5 -f 80/2/5 87/6/9 88/2/9 -f 81/2/10 80/2/10 88/2/10 -f 80/2/10 81/2/10 78/2/10 -f 78/2/10 81/2/10 82/2/10 -f 78/2/10 82/2/10 73/2/10 -f 73/2/10 82/2/10 85/2/10 -f 73/2/10 85/2/10 75/2/10 -f 83/6/6 88/2/9 87/6/9 -f 88/2/9 83/6/6 81/2/6 -f 85/2/8 76/6/3 75/2/3 -f 76/6/3 85/2/8 86/6/8 -f 74/6/2 78/2/4 73/2/2 -f 78/2/4 74/6/2 77/6/4 -f 90/6/25 69/5/12 89/6/14 -f 69/5/12 90/6/25 71/5/26 -f 91/6/22 70/5/19 72/5/21 -f 70/5/19 91/6/22 92/6/20 -f 91/6/22 71/5/26 90/6/25 -f 71/5/26 91/6/22 72/5/21 -f 92/6/20 68/5/17 70/5/19 -f 68/5/17 92/6/20 93/6/18 -f 67/5/11 95/6/23 94/6/13 -f 95/6/23 67/5/11 65/5/24 -f 68/5/17 96/6/16 66/5/15 -f 96/6/16 68/5/17 93/6/18 -f 94/6/13 69/5/12 67/5/11 -f 69/5/12 94/6/13 89/6/14 -f 65/5/24 96/6/16 95/6/23 -f 96/6/16 65/5/24 66/5/15 -f 99/7/1 98/7/1 97/7/1 -f 98/7/1 99/7/1 100/7/1 -f 100/7/1 99/7/1 101/7/1 -f 100/7/1 101/7/1 102/7/1 -f 102/7/1 101/7/1 103/7/1 -f 102/7/1 103/7/1 104/7/1 -f 107/2/3 106/6/2 105/2/2 -f 106/6/2 107/2/3 108/6/3 -f 111/6/5 110/2/4 109/6/4 -f 110/2/4 111/6/5 112/2/5 -f 115/6/6 114/2/7 113/2/6 -f 114/2/7 115/6/6 116/6/7 -f 114/2/7 118/6/8 117/2/8 -f 118/6/8 114/2/7 116/6/7 -f 119/6/9 112/2/5 111/6/5 -f 112/2/5 119/6/9 120/2/9 -f 113/2/10 112/2/10 120/2/10 -f 112/2/10 113/2/10 110/2/10 -f 110/2/10 113/2/10 114/2/10 -f 110/2/10 114/2/10 105/2/10 -f 105/2/10 114/2/10 107/2/10 -f 107/2/10 114/2/10 117/2/10 -f 115/6/6 120/2/9 119/6/9 -f 120/2/9 115/6/6 113/2/6 -f 117/2/8 108/6/3 107/2/3 -f 108/6/3 117/2/8 118/6/8 -f 106/6/2 110/2/4 105/2/2 -f 110/2/4 106/6/2 109/6/4 -f 122/6/22 103/7/26 121/6/25 -f 103/7/26 122/6/22 104/7/21 -f 99/7/11 124/6/23 123/6/13 -f 124/6/23 99/7/11 97/7/24 -f 122/6/22 102/7/19 104/7/21 -f 102/7/19 122/6/22 125/6/20 -f 125/6/20 100/7/17 102/7/19 -f 100/7/17 125/6/20 126/6/18 -f 123/6/13 101/7/12 99/7/11 -f 101/7/12 123/6/13 127/6/14 -f 100/7/17 128/6/16 98/7/15 -f 128/6/16 100/7/17 126/6/18 -f 97/7/24 128/6/16 124/6/23 -f 128/6/16 97/7/24 98/7/15 -f 121/6/25 101/7/12 127/6/14 -f 101/7/12 121/6/25 103/7/26 -f 13/8/1 23/8/1 15/8/1 -f 23/8/1 13/8/1 31/8/1 -f 31/8/1 13/8/1 25/8/1 -f 27/8/1 23/8/1 31/8/1 -f 23/8/1 27/8/1 19/8/1 -f 19/8/1 27/8/1 28/8/1 -f 25/8/1 13/8/1 10/8/1 -f 25/8/1 10/8/1 26/8/1 -f 26/8/1 10/8/1 32/8/1 -f 32/8/1 10/8/1 12/8/1 -f 19/8/1 28/8/1 20/8/1 -f 20/8/1 28/8/1 29/8/1 -f 32/8/1 12/8/1 30/8/1 -f 20/8/1 29/8/1 30/8/1 -f 22/8/1 30/8/1 12/8/1 -f 20/8/1 30/8/1 22/8/1 -f 131/9/10 130/9/10 129/9/10 -f 130/9/10 131/9/10 132/9/10 -f 132/9/10 131/9/10 133/9/10 -f 132/9/10 133/9/10 134/9/10 -f 134/9/10 133/9/10 135/9/10 -f 134/9/10 135/9/10 136/9/10 -f 139/8/1 138/8/1 137/8/1 -f 138/8/1 139/8/1 140/8/1 -f 140/8/1 139/8/1 141/8/1 -f 141/8/1 139/8/1 142/8/1 -f 141/8/1 142/8/1 143/8/1 -f 143/8/1 142/8/1 144/8/1 -f 133/9/7 143/8/8 135/9/8 -f 143/8/8 133/9/7 141/8/7 -f 131/9/6 141/8/7 133/9/7 -f 141/8/7 131/9/6 140/8/6 -f 140/8/6 129/9/9 138/8/9 -f 129/9/9 140/8/6 131/9/6 -f 138/8/9 130/9/5 137/8/5 -f 130/9/5 138/8/9 129/9/9 -f 139/8/4 130/9/5 132/9/4 -f 130/9/5 139/8/4 137/8/5 -f 142/8/2 132/9/4 134/9/2 -f 132/9/4 142/8/2 139/8/4 -f 136/9/3 142/8/2 134/9/2 -f 142/8/2 136/9/3 144/8/3 -f 135/9/8 144/8/3 136/9/3 -f 144/8/3 135/9/8 143/8/8 -f 45/8/1 55/8/1 47/8/1 -f 55/8/1 45/8/1 59/8/1 -f 59/8/1 45/8/1 64/8/1 -f 57/8/1 55/8/1 59/8/1 -f 55/8/1 57/8/1 51/8/1 -f 51/8/1 57/8/1 58/8/1 -f 64/8/1 45/8/1 42/8/1 -f 64/8/1 42/8/1 60/8/1 -f 60/8/1 42/8/1 61/8/1 -f 61/8/1 42/8/1 44/8/1 -f 51/8/1 58/8/1 52/8/1 -f 52/8/1 58/8/1 63/8/1 -f 61/8/1 44/8/1 62/8/1 -f 52/8/1 63/8/1 62/8/1 -f 54/8/1 62/8/1 44/8/1 -f 52/8/1 62/8/1 54/8/1 -f 77/10/1 87/10/1 79/10/1 -f 87/10/1 77/10/1 95/10/1 -f 95/10/1 77/10/1 94/10/1 -f 96/10/1 87/10/1 95/10/1 -f 87/10/1 96/10/1 83/10/1 -f 83/10/1 96/10/1 93/10/1 -f 94/10/1 77/10/1 74/10/1 -f 94/10/1 74/10/1 89/10/1 -f 89/10/1 74/10/1 90/10/1 -f 90/10/1 74/10/1 76/10/1 -f 83/10/1 93/10/1 84/10/1 -f 84/10/1 93/10/1 92/10/1 -f 90/10/1 76/10/1 91/10/1 -f 84/10/1 92/10/1 91/10/1 -f 86/10/1 91/10/1 76/10/1 -f 84/10/1 91/10/1 86/10/1 -f 109/10/1 119/10/1 111/10/1 -f 119/10/1 109/10/1 124/10/1 -f 124/10/1 109/10/1 123/10/1 -f 128/10/1 119/10/1 124/10/1 -f 119/10/1 128/10/1 115/10/1 -f 115/10/1 128/10/1 126/10/1 -f 123/10/1 109/10/1 106/10/1 -f 123/10/1 106/10/1 127/10/1 -f 127/10/1 106/10/1 121/10/1 -f 121/10/1 106/10/1 108/10/1 -f 115/10/1 126/10/1 116/10/1 -f 116/10/1 126/10/1 125/10/1 -f 121/10/1 108/10/1 122/10/1 -f 116/10/1 125/10/1 122/10/1 -f 118/10/1 122/10/1 108/10/1 -f 116/10/1 122/10/1 118/10/1 - -g poles - - - - -usemtl colormap - -f 3/1/1 2/1/1 1/1/1 -f 2/1/1 3/1/1 4/1/1 -f 4/1/1 3/1/1 5/1/1 -f 4/1/1 5/1/1 6/1/1 -f 6/1/1 5/1/1 7/1/1 -f 6/1/1 7/1/1 8/1/1 -f 11/2/3 10/3/2 9/2/2 -f 10/3/2 11/2/3 12/3/3 -f 15/3/5 14/2/4 13/3/4 -f 14/2/4 15/3/5 16/2/5 -f 19/3/6 18/2/7 17/2/6 -f 18/2/7 19/3/6 20/3/7 -f 18/2/7 22/3/8 21/2/8 -f 22/3/8 18/2/7 20/3/7 -f 23/3/9 16/2/5 15/3/5 -f 16/2/5 23/3/9 24/2/9 -f 17/2/10 16/2/10 24/2/10 -f 16/2/10 17/2/10 14/2/10 -f 14/2/10 17/2/10 18/2/10 -f 14/2/10 18/2/10 9/2/10 -f 9/2/10 18/2/10 21/2/10 -f 9/2/10 21/2/10 11/2/10 -f 19/3/6 24/2/9 23/3/9 -f 24/2/9 19/3/6 17/2/6 -f 21/2/8 12/3/3 11/2/3 -f 12/3/3 21/2/8 22/3/8 -f 10/3/2 14/2/4 9/2/2 -f 14/2/4 10/3/2 13/3/4 -f 25/3/13 5/1/12 3/1/11 -f 5/1/12 25/3/13 26/3/14 -f 4/1/17 27/3/16 2/1/15 -f 27/3/16 4/1/17 28/3/18 -f 29/3/20 4/1/17 6/1/19 -f 4/1/17 29/3/20 28/3/18 -f 30/3/22 6/1/19 8/1/21 -f 6/1/19 30/3/22 29/3/20 -f 1/1/24 27/3/16 31/3/23 -f 27/3/16 1/1/24 2/1/15 -f 32/3/25 5/1/12 26/3/14 -f 5/1/12 32/3/25 7/1/26 -f 30/3/22 7/1/26 32/3/25 -f 7/1/26 30/3/22 8/1/21 -f 3/1/11 31/3/23 25/3/13 -f 31/3/23 3/1/11 1/1/24 -f 35/4/1 34/4/1 33/4/1 -f 34/4/1 35/4/1 36/4/1 -f 36/4/1 35/4/1 37/4/1 -f 36/4/1 37/4/1 38/4/1 -f 38/4/1 37/4/1 39/4/1 -f 38/4/1 39/4/1 40/4/1 -f 43/2/3 42/3/2 41/2/2 -f 42/3/2 43/2/3 44/3/3 -f 47/3/5 46/2/4 45/3/4 -f 46/2/4 47/3/5 48/2/5 -f 51/3/6 50/2/7 49/2/6 -f 50/2/7 51/3/6 52/3/7 -f 50/2/7 54/3/8 53/2/8 -f 54/3/8 50/2/7 52/3/7 -f 55/3/9 48/2/5 47/3/5 -f 48/2/5 55/3/9 56/2/9 -f 49/2/10 48/2/10 56/2/10 -f 48/2/10 49/2/10 46/2/10 -f 46/2/10 49/2/10 50/2/10 -f 46/2/10 50/2/10 41/2/10 -f 41/2/10 50/2/10 53/2/10 -f 41/2/10 53/2/10 43/2/10 -f 51/3/6 56/2/9 55/3/9 -f 56/2/9 51/3/6 49/2/6 -f 53/2/8 44/3/3 43/2/3 -f 44/3/3 53/2/8 54/3/8 -f 42/3/2 46/2/4 41/2/2 -f 46/2/4 42/3/2 45/3/4 -f 36/4/17 57/3/16 34/4/15 -f 57/3/16 36/4/17 58/3/18 -f 33/4/24 57/3/16 59/3/23 -f 57/3/16 33/4/24 34/4/15 -f 61/3/25 37/4/12 60/3/14 -f 37/4/12 61/3/25 39/4/26 -f 62/3/22 38/4/19 40/4/21 -f 38/4/19 62/3/22 63/3/20 -f 35/4/11 59/3/23 64/3/13 -f 59/3/23 35/4/11 33/4/24 -f 64/3/13 37/4/12 35/4/11 -f 37/4/12 64/3/13 60/3/14 -f 63/3/20 36/4/17 38/4/19 -f 36/4/17 63/3/20 58/3/18 -f 62/3/22 39/4/26 61/3/25 -f 39/4/26 62/3/22 40/4/21 -f 67/5/1 66/5/1 65/5/1 -f 66/5/1 67/5/1 68/5/1 -f 68/5/1 67/5/1 69/5/1 -f 68/5/1 69/5/1 70/5/1 -f 70/5/1 69/5/1 71/5/1 -f 70/5/1 71/5/1 72/5/1 -f 75/2/3 74/6/2 73/2/2 -f 74/6/2 75/2/3 76/6/3 -f 79/6/5 78/2/4 77/6/4 -f 78/2/4 79/6/5 80/2/5 -f 83/6/6 82/2/7 81/2/6 -f 82/2/7 83/6/6 84/6/7 -f 82/2/7 86/6/8 85/2/8 -f 86/6/8 82/2/7 84/6/7 -f 87/6/9 80/2/5 79/6/5 -f 80/2/5 87/6/9 88/2/9 -f 81/2/10 80/2/10 88/2/10 -f 80/2/10 81/2/10 78/2/10 -f 78/2/10 81/2/10 82/2/10 -f 78/2/10 82/2/10 73/2/10 -f 73/2/10 82/2/10 85/2/10 -f 73/2/10 85/2/10 75/2/10 -f 83/6/6 88/2/9 87/6/9 -f 88/2/9 83/6/6 81/2/6 -f 85/2/8 76/6/3 75/2/3 -f 76/6/3 85/2/8 86/6/8 -f 74/6/2 78/2/4 73/2/2 -f 78/2/4 74/6/2 77/6/4 -f 90/6/25 69/5/12 89/6/14 -f 69/5/12 90/6/25 71/5/26 -f 91/6/22 70/5/19 72/5/21 -f 70/5/19 91/6/22 92/6/20 -f 91/6/22 71/5/26 90/6/25 -f 71/5/26 91/6/22 72/5/21 -f 92/6/20 68/5/17 70/5/19 -f 68/5/17 92/6/20 93/6/18 -f 67/5/11 95/6/23 94/6/13 -f 95/6/23 67/5/11 65/5/24 -f 68/5/17 96/6/16 66/5/15 -f 96/6/16 68/5/17 93/6/18 -f 94/6/13 69/5/12 67/5/11 -f 69/5/12 94/6/13 89/6/14 -f 65/5/24 96/6/16 95/6/23 -f 96/6/16 65/5/24 66/5/15 -f 99/7/1 98/7/1 97/7/1 -f 98/7/1 99/7/1 100/7/1 -f 100/7/1 99/7/1 101/7/1 -f 100/7/1 101/7/1 102/7/1 -f 102/7/1 101/7/1 103/7/1 -f 102/7/1 103/7/1 104/7/1 -f 107/2/3 106/6/2 105/2/2 -f 106/6/2 107/2/3 108/6/3 -f 111/6/5 110/2/4 109/6/4 -f 110/2/4 111/6/5 112/2/5 -f 115/6/6 114/2/7 113/2/6 -f 114/2/7 115/6/6 116/6/7 -f 114/2/7 118/6/8 117/2/8 -f 118/6/8 114/2/7 116/6/7 -f 119/6/9 112/2/5 111/6/5 -f 112/2/5 119/6/9 120/2/9 -f 113/2/10 112/2/10 120/2/10 -f 112/2/10 113/2/10 110/2/10 -f 110/2/10 113/2/10 114/2/10 -f 110/2/10 114/2/10 105/2/10 -f 105/2/10 114/2/10 107/2/10 -f 107/2/10 114/2/10 117/2/10 -f 115/6/6 120/2/9 119/6/9 -f 120/2/9 115/6/6 113/2/6 -f 117/2/8 108/6/3 107/2/3 -f 108/6/3 117/2/8 118/6/8 -f 106/6/2 110/2/4 105/2/2 -f 110/2/4 106/6/2 109/6/4 -f 122/6/22 103/7/26 121/6/25 -f 103/7/26 122/6/22 104/7/21 -f 99/7/11 124/6/23 123/6/13 -f 124/6/23 99/7/11 97/7/24 -f 122/6/22 102/7/19 104/7/21 -f 102/7/19 122/6/22 125/6/20 -f 125/6/20 100/7/17 102/7/19 -f 100/7/17 125/6/20 126/6/18 -f 123/6/13 101/7/12 99/7/11 -f 101/7/12 123/6/13 127/6/14 -f 100/7/17 128/6/16 98/7/15 -f 128/6/16 100/7/17 126/6/18 -f 97/7/24 128/6/16 124/6/23 -f 128/6/16 97/7/24 98/7/15 -f 121/6/25 101/7/12 127/6/14 -f 101/7/12 121/6/25 103/7/26 -f 13/8/1 23/8/1 15/8/1 -f 23/8/1 13/8/1 31/8/1 -f 31/8/1 13/8/1 25/8/1 -f 27/8/1 23/8/1 31/8/1 -f 23/8/1 27/8/1 19/8/1 -f 19/8/1 27/8/1 28/8/1 -f 25/8/1 13/8/1 10/8/1 -f 25/8/1 10/8/1 26/8/1 -f 26/8/1 10/8/1 32/8/1 -f 32/8/1 10/8/1 12/8/1 -f 19/8/1 28/8/1 20/8/1 -f 20/8/1 28/8/1 29/8/1 -f 32/8/1 12/8/1 30/8/1 -f 20/8/1 29/8/1 30/8/1 -f 22/8/1 30/8/1 12/8/1 -f 20/8/1 30/8/1 22/8/1 -f 131/9/10 130/9/10 129/9/10 -f 130/9/10 131/9/10 132/9/10 -f 132/9/10 131/9/10 133/9/10 -f 132/9/10 133/9/10 134/9/10 -f 134/9/10 133/9/10 135/9/10 -f 134/9/10 135/9/10 136/9/10 -f 139/8/1 138/8/1 137/8/1 -f 138/8/1 139/8/1 140/8/1 -f 140/8/1 139/8/1 141/8/1 -f 141/8/1 139/8/1 142/8/1 -f 141/8/1 142/8/1 143/8/1 -f 143/8/1 142/8/1 144/8/1 -f 133/9/7 143/8/8 135/9/8 -f 143/8/8 133/9/7 141/8/7 -f 131/9/6 141/8/7 133/9/7 -f 141/8/7 131/9/6 140/8/6 -f 140/8/6 129/9/9 138/8/9 -f 129/9/9 140/8/6 131/9/6 -f 138/8/9 130/9/5 137/8/5 -f 130/9/5 138/8/9 129/9/9 -f 139/8/4 130/9/5 132/9/4 -f 130/9/5 139/8/4 137/8/5 -f 142/8/2 132/9/4 134/9/2 -f 132/9/4 142/8/2 139/8/4 -f 136/9/3 142/8/2 134/9/2 -f 142/8/2 136/9/3 144/8/3 -f 135/9/8 144/8/3 136/9/3 -f 144/8/3 135/9/8 143/8/8 -f 45/8/1 55/8/1 47/8/1 -f 55/8/1 45/8/1 59/8/1 -f 59/8/1 45/8/1 64/8/1 -f 57/8/1 55/8/1 59/8/1 -f 55/8/1 57/8/1 51/8/1 -f 51/8/1 57/8/1 58/8/1 -f 64/8/1 45/8/1 42/8/1 -f 64/8/1 42/8/1 60/8/1 -f 60/8/1 42/8/1 61/8/1 -f 61/8/1 42/8/1 44/8/1 -f 51/8/1 58/8/1 52/8/1 -f 52/8/1 58/8/1 63/8/1 -f 61/8/1 44/8/1 62/8/1 -f 52/8/1 63/8/1 62/8/1 -f 54/8/1 62/8/1 44/8/1 -f 52/8/1 62/8/1 54/8/1 -f 77/10/1 87/10/1 79/10/1 -f 87/10/1 77/10/1 95/10/1 -f 95/10/1 77/10/1 94/10/1 -f 96/10/1 87/10/1 95/10/1 -f 87/10/1 96/10/1 83/10/1 -f 83/10/1 96/10/1 93/10/1 -f 94/10/1 77/10/1 74/10/1 -f 94/10/1 74/10/1 89/10/1 -f 89/10/1 74/10/1 90/10/1 -f 90/10/1 74/10/1 76/10/1 -f 83/10/1 93/10/1 84/10/1 -f 84/10/1 93/10/1 92/10/1 -f 90/10/1 76/10/1 91/10/1 -f 84/10/1 92/10/1 91/10/1 -f 86/10/1 91/10/1 76/10/1 -f 84/10/1 91/10/1 86/10/1 -f 109/10/1 119/10/1 111/10/1 -f 119/10/1 109/10/1 124/10/1 -f 124/10/1 109/10/1 123/10/1 -f 128/10/1 119/10/1 124/10/1 -f 119/10/1 128/10/1 115/10/1 -f 115/10/1 128/10/1 126/10/1 -f 123/10/1 109/10/1 106/10/1 -f 123/10/1 106/10/1 127/10/1 -f 127/10/1 106/10/1 121/10/1 -f 121/10/1 106/10/1 108/10/1 -f 115/10/1 126/10/1 116/10/1 -f 116/10/1 126/10/1 125/10/1 -f 121/10/1 108/10/1 122/10/1 -f 116/10/1 125/10/1 122/10/1 -f 118/10/1 122/10/1 108/10/1 -f 116/10/1 122/10/1 118/10/1 - diff --git a/Sources/LaneRunnerDemo/RunnerScene.swift b/Sources/LaneRunnerDemo/RunnerScene.swift index a2be88d..b305e0a 100644 --- a/Sources/LaneRunnerDemo/RunnerScene.swift +++ b/Sources/LaneRunnerDemo/RunnerScene.swift @@ -19,7 +19,7 @@ final class RunnerScene { ("train", ["train-electric-subway-a", "train-electric-subway-b", "track"]), ( "platformer", - ["character-oobi", "coin-gold", "fence-low-straight", "poles", "platform", "tree-pine", "tree"] + ["character-oobi", "coin-gold", "fence-low-straight", "tree-pine", "tree"] ), ] { for name in names { @@ -127,17 +127,33 @@ final class RunnerScene { fence.position = SCNVector3(x, 0.1, z) world.addChildNode(fence) case .high: - let poles = clone("poles") - poles.scale = SCNVector3(1.4, 1.9, 0.6) - poles.position = SCNVector3(x, 0.1, z) - world.addChildNode(poles) - let beam = clone("platform") - beam.scale = SCNVector3(1.55, 0.7, 0.25) - beam.position = SCNVector3(x, 1.55, z) - world.addChildNode(beam) + world.addChildNode(Self.overheadBar(x: x, z: z)) } } + /// Two posts and a striped beam with open space below: something to slide under, not a wall. + private static func overheadBar(x: CGFloat, z: CGFloat) -> SCNNode { + let bar = SCNNode() + let wood = NSColor(red: 0.62, green: 0.38, blue: 0.24, alpha: 1) + for side: CGFloat in [-1, 1] { + let post = SCNNode(geometry: SCNCylinder(radius: 0.07, height: 1.15)) + post.geometry?.firstMaterial?.diffuse.contents = wood + post.position = SCNVector3(side * laneWidth * 0.44, 0.575, 0) + bar.addChildNode(post) + } + let stripes = 6 + let stripeWidth = laneWidth * 0.95 / CGFloat(stripes) + for index in 0.. Date: Wed, 23 Sep 2026 01:58:45 -0400 Subject: [PATCH 6/9] Smooth the runner's jump, slide, and lane-change animations Lane movement, jump height, and slide squash ran on one node, so each row's lane move snapped y back to 0 and the scale reset cut jumps and slides short. Split the runner into lane / hop / stride / body nodes so the motions no longer fight. Also retime the track: the passed row now slides from half a row ahead to half a row behind, crossing the runner mid-row where a sine jump peaks and a smoothstep slide is lowest (previously the obstacle arrived after the jump had landed). Lane changes ease with a small lean, the runner bobs while running, and a crash stops at the obstacle before falling. Co-Authored-By: Claude Opus 5.5 (1M context) --- Sources/LaneRunnerDemo/RunnerScene.swift | 124 ++++++++++++++++------- 1 file changed, 88 insertions(+), 36 deletions(-) diff --git a/Sources/LaneRunnerDemo/RunnerScene.swift b/Sources/LaneRunnerDemo/RunnerScene.swift index b305e0a..91f1002 100644 --- a/Sources/LaneRunnerDemo/RunnerScene.swift +++ b/Sources/LaneRunnerDemo/RunnerScene.swift @@ -7,7 +7,12 @@ import SwiftUI final class RunnerScene { let scene = SCNScene() private let world = SCNNode() + /// Lane position; `hop` carries jump height, `stride` the running bob, `body` slide squash and falls. private let player = SCNNode() + private let hop = SCNNode() + private let stride = SCNNode() + private let body = SCNNode() + private static let bodyScale: CGFloat = 1.15 private let templates: [String: SCNNode] private static let laneWidth: CGFloat = 1.7 private static let rowLength: CGFloat = 3.2 @@ -40,12 +45,16 @@ final class RunnerScene { buildStage() } - /// Rebuild the track for `game`. After a step, the rows slide one row toward the camera over `duration`. + /// Rebuild the track for `game`. After a step, the row being passed slides from half a row ahead of the + /// runner to half a row behind over `duration`, so it crosses the runner mid-row, when a jump peaks. func show(_ game: LaneRunner, passed: [LaneRunner.Obstacle]?, action: LaneRunner.Action?, duration: Double) { world.removeAllActions() world.childNodes.forEach { $0.removeFromParentNode() } - var rows = Array(game.rows.prefix(Self.drawnRows).enumerated().map { (index: $0.offset + 1, row: $0.element) }) - if let passed { rows.insert((0, passed), at: 0) } + // On a crash the step did not advance: rows[0] is the row the runner hit. + let crossing = game.isOver ? game.rows.first : passed + var rows = game.rows.prefix(Self.drawnRows).enumerated().map { (index: $0.offset + 1, row: $0.element) } + if game.isOver { rows.removeFirst() } + if let crossing { rows.insert((0, crossing), at: 0) } for (index, row) in rows { let z = -CGFloat(index) * Self.rowLength addScenery(z: z, seed: game.distance + index) @@ -53,49 +62,86 @@ final class RunnerScene { addObstacle(obstacle, x: Self.x(lane), z: z, variant: (game.distance + index + lane) % 2) } } - let moveX = SCNAction.move( - to: SCNVector3(Self.x(game.lane), 0, 0), duration: min(duration * 0.5, 0.2)) - moveX.timingMode = .easeOut - player.removeAllActions() - player.scale = SCNVector3(1.15, 1.15, 1.15) - player.eulerAngles = SCNVector3(0, CGFloat.pi, 0) - if game.isOver { - // The crash row is still rows[0]: stop the runner against it. - world.position.z = 0 - let fall = SCNAction.rotateTo(x: -.pi / 2, y: .pi, z: 0, duration: 0.25) - player.runAction(.group([moveX, fall])) + let half = Self.rowLength / 2 + world.position.z = -half + guard let crossing, duration > 0 else { + resetRunner(lane: game.lane) return } - player.runAction(.group([moveX, Self.pose(action, duration: duration)])) - guard passed != nil else { - world.position.z = 0 + let direction = Self.x(game.lane) - player.position.x + let laneMove = SCNAction.move(to: SCNVector3(Self.x(game.lane), 0, 0), duration: duration * 0.35) + laneMove.timingMode = .easeInEaseOut + player.runAction(laneMove, forKey: "lane") + if direction != 0 { + let lean = SCNAction.customAction(duration: duration * 0.35) { node, elapsed in + node.eulerAngles.z = -0.25 * (direction > 0 ? 1 : -1) * sin(.pi * elapsed / (duration * 0.35)) + } + player.runAction(lean, forKey: "lean") + } + if game.isOver { + // Stop at the obstacle: a train's nose is already at the runner, bars are half a row ahead. + let contact: CGFloat = crossing[game.lane] == .train ? -half : -0.45 + let bump = SCNAction.move(to: SCNVector3(0, 0, contact), duration: duration * 0.3) + bump.timingMode = .easeOut + world.runAction(bump) + stride.removeAllActions() + stride.position.y = 0 + body.runAction( + .sequence([ + .wait(duration: duration * 0.3), + .rotateTo(x: -.pi / 2, y: 0, z: 0, duration: 0.3, usesShortestUnitArc: true), + ])) return } - world.position.z = -Self.rowLength - world.runAction(.move(to: SCNVector3(0, 0, 0), duration: duration)) - } - - private static func x(_ lane: Int) -> CGFloat { CGFloat(lane - 1) * laneWidth } - - private static func pose(_ action: LaneRunner.Action?, duration: Double) -> SCNAction { + world.runAction(.move(to: SCNVector3(0, 0, half), duration: duration)) + hop.removeAllActions() + body.removeAction(forKey: "pose") + hop.position.y = 0 + body.scale = SCNVector3(Self.bodyScale, Self.bodyScale, Self.bodyScale) + body.eulerAngles.x = 0 switch action { case .jump: - let up = SCNAction.moveBy(x: 0, y: 1.2, z: 0, duration: duration * 0.45) - up.timingMode = .easeOut - let down = SCNAction.moveBy(x: 0, y: -1.2, z: 0, duration: duration * 0.45) - down.timingMode = .easeIn - return .sequence([up, down]) + hop.runAction( + .customAction(duration: duration) { node, elapsed in + node.position.y = 1.15 * sin(.pi * elapsed / duration) + }) case .slide: - return .sequence([ - .scale(to: 0.55, duration: duration * 0.15), .wait(duration: duration * 0.6), - .scale(to: 1.15, duration: duration * 0.2), - ]) + let scale = Self.bodyScale + body.runAction( + .customAction(duration: duration) { node, elapsed in + let squash = Self.plateau(elapsed / duration) + node.scale = SCNVector3(scale, scale * (1 - 0.5 * squash), scale) + node.eulerAngles.x = -0.35 * squash + }, forKey: "pose") default: - let bob = SCNAction.moveBy(x: 0, y: 0.08, z: 0, duration: duration * 0.25) - return .sequence([bob, bob.reversed()]) + break } } + private func resetRunner(lane: Int) { + player.removeAllActions() + hop.removeAllActions() + body.removeAllActions() + player.position = SCNVector3(Self.x(lane), 0, 0) + player.eulerAngles.z = 0 + hop.position.y = 0 + body.scale = SCNVector3(Self.bodyScale, Self.bodyScale, Self.bodyScale) + body.eulerAngles = SCNVector3(0, 0, 0) + guard stride.action(forKey: "run") == nil else { return } + let up = SCNAction.moveBy(x: 0, y: 0.07, z: 0, duration: 0.16) + up.timingMode = .easeInEaseOut + stride.runAction(.repeatForever(.sequence([up, up.reversed()])), forKey: "run") + } + + private static func x(_ lane: Int) -> CGFloat { CGFloat(lane - 1) * laneWidth } + + /// 0 → 1 over the first 20 %, held, then back to 0 over the last 20 %, with smoothstep easing. + nonisolated private static func plateau(_ t: CGFloat) -> CGFloat { + let edge = min(t, 1 - t) / 0.2 + let clamped = max(0, min(1, edge)) + return clamped * clamped * (3 - 2 * clamped) + } + private func clone(_ name: String) -> SCNNode { templates[name]?.clone() ?? SCNNode(geometry: SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0.1)) } @@ -181,8 +227,14 @@ final class RunnerScene { scene.rootNode.addChildNode(ballast) scene.rootNode.addChildNode(world) - player.addChildNode(clone("character-oobi")) + let model = clone("character-oobi") + model.eulerAngles.y = .pi + body.addChildNode(model) + stride.addChildNode(body) + hop.addChildNode(stride) + player.addChildNode(hop) scene.rootNode.addChildNode(player) + resetRunner(lane: 1) let camera = SCNNode() camera.camera = SCNCamera() From 1da3cfa900321f8f1b4a333ceb9cf3605ec79a55 Mon Sep 17 00:00:00 2001 From: Alex-Wengg Date: Wed, 23 Sep 2026 02:06:38 -0400 Subject: [PATCH 7/9] Add a coin pickup reaction to the lane runner When the runner crosses a coin in its lane, at the moment the coin reaches it: the coin pops up, spins, shrinks and fades; a short burst of soft gold sparks plays; a billboarded "+1" rises and fades; and the runner does a quick squash-and-settle bounce. Co-Authored-By: Claude Opus 5.5 (1M context) --- Sources/LaneRunnerDemo/RunnerScene.swift | 92 ++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/Sources/LaneRunnerDemo/RunnerScene.swift b/Sources/LaneRunnerDemo/RunnerScene.swift index 91f1002..b8344ad 100644 --- a/Sources/LaneRunnerDemo/RunnerScene.swift +++ b/Sources/LaneRunnerDemo/RunnerScene.swift @@ -94,6 +94,7 @@ final class RunnerScene { return } world.runAction(.move(to: SCNVector3(0, 0, half), duration: duration)) + if crossing[game.lane] == .coin { collectCoin(lane: game.lane, after: duration * 0.4) } hop.removeAllActions() body.removeAction(forKey: "pose") hop.position.y = 0 @@ -118,6 +119,95 @@ final class RunnerScene { } } + /// The coin reaches the runner mid-row: it pops up and vanishes, sparks burst, "+1" rises, the runner bounces. + private func collectCoin(lane: Int, after delay: Double) { + if let coin = world.childNode(withName: "crossing-coin-\(Self.x(lane))", recursively: false) { + let rise = SCNAction.moveBy(x: 0, y: 1.1, z: 0, duration: 0.3) + rise.timingMode = .easeOut + coin.runAction( + .sequence([ + .wait(duration: delay), + .group([ + rise, .scale(to: 0.2, duration: 0.3), .fadeOut(duration: 0.3), + .rotateBy(x: 0, y: .pi * 6, z: 0, duration: 0.3), + ]), + .removeFromParentNode(), + ])) + } + let squash = SCNAction.scale(to: 1.18, duration: 0.07) + squash.timingMode = .easeOut + let settle = SCNAction.scale(to: 1, duration: 0.18) + settle.timingMode = .easeInEaseOut + stride.runAction(.sequence([.wait(duration: delay), squash, settle]), forKey: "pickup") + + let label = SCNText(string: "+1", extrusionDepth: 0.02) + label.font = NSFont.systemFont(ofSize: 0.5, weight: .heavy) + label.flatness = 0.05 + label.firstMaterial?.diffuse.contents = NSColor.systemYellow + label.firstMaterial?.emission.contents = NSColor.systemOrange + let plus = SCNNode(geometry: label) + let (low, high) = plus.boundingBox + plus.pivot = SCNMatrix4MakeTranslation((low.x + high.x) / 2, low.y, 0) + plus.position = SCNVector3(Self.x(lane), 1.3, -0.2) + plus.constraints = [SCNBillboardConstraint()] + plus.opacity = 0 + scene.rootNode.addChildNode(plus) + plus.runAction( + .sequence([ + .wait(duration: delay), + .group([.fadeIn(duration: 0.08), .moveBy(x: 0, y: 0.9, z: 0, duration: 0.6)]), + .fadeOut(duration: 0.25), + .removeFromParentNode(), + ])) + + let x = Self.x(lane) + Task { @MainActor [weak self] in + try? await Task.sleep(for: .seconds(delay)) + self?.burstSparkles(x: x) + } + } + + private func burstSparkles(x: CGFloat) { + let burst = SCNNode() + burst.position = SCNVector3(x, 0.8, 0) + burst.addParticleSystem(Self.sparkles()) + scene.rootNode.addChildNode(burst) + burst.runAction(.sequence([.wait(duration: 1), .removeFromParentNode()])) + } + + /// A soft round dot so sparks are not drawn as squares. + private static let glint: NSImage = { + let size = 32 + let image = NSImage(size: NSSize(width: size, height: size)) + image.lockFocus() + let gradient = NSGradient(colors: [.white, NSColor.white.withAlphaComponent(0)]) + gradient?.draw( + in: NSBezierPath(ovalIn: NSRect(x: 0, y: 0, width: size, height: size)), relativeCenterPosition: .zero) + image.unlockFocus() + return image + }() + + private static func sparkles() -> SCNParticleSystem { + let sparks = SCNParticleSystem() + sparks.loops = false + sparks.emissionDuration = 0.05 + sparks.birthRate = 360 + sparks.particleLifeSpan = 0.35 + sparks.particleLifeSpanVariation = 0.1 + sparks.particleVelocity = 1.5 + sparks.particleVelocityVariation = 0.5 + sparks.spreadingAngle = 180 + sparks.particleSize = 0.045 + sparks.particleSizeVariation = 0.02 + sparks.particleImage = glint + sparks.particleColor = NSColor(red: 1, green: 0.84, blue: 0.25, alpha: 1) + sparks.particleColorVariation = SCNVector4(0.05, 0.1, 0.2, 0) + sparks.acceleration = SCNVector3(0, -4, 0) + sparks.blendMode = .additive + sparks.isAffectedByGravity = false + return sparks + } + private func resetRunner(lane: Int) { player.removeAllActions() hop.removeAllActions() @@ -161,6 +251,8 @@ final class RunnerScene { coin.scale = SCNVector3(1.4, 1.4, 1.4) coin.position = SCNVector3(x, 0.45, z) coin.runAction(.repeatForever(.rotateBy(x: 0, y: .pi * 2, z: 0, duration: 1.2))) + // The row being crossed sits at z = 0; name its coins so a pickup can find them. + if z == 0 { coin.name = "crossing-coin-\(x)" } world.addChildNode(coin) case .train: let train = clone(variant == 0 ? "train-electric-subway-a" : "train-electric-subway-b") From 03b23df40afeb2108664875f24c91544a1829009 Mon Sep 17 00:00:00 2001 From: Alex-Wengg Date: Wed, 23 Sep 2026 02:19:34 -0400 Subject: [PATCH 8/9] Make the lane runner get harder over time Like Subway Surfers and Temple Run, runs now ramp up: - Track density (engine): a 30-row easy opening with the original rules, then over 240 rows open breather rows disappear (up to 65% of the time) and blocked lanes rise (trains 40 -> 55%, open 20 -> 5%). Back-to-back obstacle rows are only generated when every lane passable in the first can legally enter the second (same lane with the right move, or an adjacent open lane), so tracks stay survivable: the heuristic clears 600 rows on seeds 1-12. - Speed (app): each row is 0.5% faster, floored at 40% of the starting interval; the panel shows the current interval and multiplier. Tracks changed, so results are re-run (seeds 1-4, 300-row cap): GLiNER base 129, GLiNER multilingual 62, GLiNER small 48, Laya 28, GLiClass 20, LFM 20, random 14, Kev 0.6B 12, Verdict/Jeff/Kev 0.5B 10. Co-Authored-By: Claude Opus 5.5 (1M context) --- Sources/LaneRunner/LaneRunner.swift | 62 +++++++++++++++----- Sources/LaneRunnerDemo/LaneRunnerModel.swift | 9 ++- Sources/LaneRunnerDemo/LaneRunnerView.swift | 9 ++- Sources/LaneRunnerDemo/README.md | 37 +++++++----- Tests/LaneRunnerTests/LaneRunnerTests.swift | 21 ++++++- 5 files changed, 103 insertions(+), 35 deletions(-) diff --git a/Sources/LaneRunner/LaneRunner.swift b/Sources/LaneRunner/LaneRunner.swift index 6e81f66..06872f1 100644 --- a/Sources/LaneRunner/LaneRunner.swift +++ b/Sources/LaneRunner/LaneRunner.swift @@ -144,29 +144,63 @@ public struct LaneRunner: Sendable, Equatable { return best } - /// Obstacle rows alternate with open rows, and every obstacle row leaves at least one open lane, - /// so two lane changes always reach it. + /// Easy opening before the ramp, then rows over which the track reaches its hardest mix. + public static let easyRows = 30 + public static let rampRows = 240 + + /// 0 through the easy opening, rising to 1 over the next `rampRows` rows. + public static func difficulty(atRow row: Int) -> Double { + min(1, max(0, Double(row - easyRows) / Double(rampRows))) + } + + /// Early on, obstacle rows alternate with open rows and each leaves one lane open, so two lane changes always + /// reach it. As difficulty rises, open rows disappear and more lanes are blocked. Back-to-back obstacle rows are + /// only emitted when every lane passable in the first has a legal move into the second, so tracks stay survivable. private mutating func appendRow() { defer { generated += 1 } - guard generated >= 2 else { + guard generated >= 2, let previous = rows.last else { rows.append(Array(repeating: .open, count: Self.lanes)) return } - if generated % 2 == 1 { + let difficulty = Self.difficulty(atRow: generated) + let previousBlocks = previous.contains { $0 == .low || $0 == .high || $0 == .train } + if previousBlocks && (difficulty == 0 || Double(nextRandom() % 1_000) / 1_000 >= 0.65 * difficulty) { rows.append((0.. [Obstacle] { let free = Int(nextRandom() % UInt64(Self.lanes)) - rows.append( - (0.. Bool { + first.indices.filter { first[$0] != .train }.allSatisfy { lane in + second.indices.contains { next in + (next == lane && second[next] != .train) + || (abs(next - lane) == 1 && (second[next] == .open || second[next] == .coin)) + } + } } private mutating func nextRandom() -> UInt64 { diff --git a/Sources/LaneRunnerDemo/LaneRunnerModel.swift b/Sources/LaneRunnerDemo/LaneRunnerModel.swift index ea3a647..d3a3161 100644 --- a/Sources/LaneRunnerDemo/LaneRunnerModel.swift +++ b/Sources/LaneRunnerDemo/LaneRunnerModel.swift @@ -54,6 +54,10 @@ final class LaneRunnerModel: ObservableObject { private var decisionNumber = 0 private var autostart = false + /// Like Subway Surfers, the run speeds up: each row is 0.5 % faster, down to 40 % of the starting interval. + var currentRowMs: Double { max(rowMs * 0.4, rowMs * pow(0.995, Double(game.distance))) } + var speedMultiplier: Double { rowMs / currentRowMs } + func elapsed(at date: Date) -> Double { runSeconds + (runStartedAt.map { date.timeIntervalSince($0) } ?? 0) } @@ -148,7 +152,7 @@ final class LaneRunnerModel: ObservableObject { loopTask = Task { [weak self] in while let self, self.isRunning, self.generation == run, !Task.isCancelled { self.requestDecision(run: run) - try? await Task.sleep(for: .milliseconds(self.rowMs)) + try? await Task.sleep(for: .milliseconds(self.currentRowMs)) guard self.isRunning, self.generation == run else { return } self.advanceRow() } @@ -185,8 +189,9 @@ final class LaneRunnerModel: ObservableObject { } if !game.isSafe(action) && game.legalActions.contains(where: game.isSafe) { unsafeChoices += 1 } let passed = game.rows[0] + let duration = currentRowMs / 1000 game.step(action) - runner.show(game, passed: game.isOver ? nil : passed, action: action, duration: rowMs / 1000) + runner.show(game, passed: game.isOver ? nil : passed, action: action, duration: duration) if game.isOver { pause() } } diff --git a/Sources/LaneRunnerDemo/LaneRunnerView.swift b/Sources/LaneRunnerDemo/LaneRunnerView.swift index b34fa14..8907ca1 100644 --- a/Sources/LaneRunnerDemo/LaneRunnerView.swift +++ b/Sources/LaneRunnerDemo/LaneRunnerView.swift @@ -47,8 +47,13 @@ struct LaneRunnerView: View { .frame(width: 90).disabled(model.isRunning) .onChange(of: model.seed) { _, _ in model.reset() } } - Text(String(format: "Row every %.0f ms", model.rowMs)).font(.subheadline) - Slider(value: $model.rowMs, in: 150...800, step: 50) + Text( + String( + format: "Start at %.0f ms per row · now %.0f ms (%.1f× speed)", model.rowMs, + model.currentRowMs, model.speedMultiplier) + ) + .font(.subheadline) + Slider(value: $model.rowMs, in: 150...800, step: 50).disabled(model.isRunning) Divider() HStack { metric("DISTANCE", "\(model.game.distance)") diff --git a/Sources/LaneRunnerDemo/README.md b/Sources/LaneRunnerDemo/README.md index 7b07c60..c9cff01 100644 --- a/Sources/LaneRunnerDemo/README.md +++ b/Sources/LaneRunnerDemo/README.md @@ -13,31 +13,36 @@ LANE_RUNNER_MODEL=gliner2Multilingual LANE_RUNNER_SEED=2 swift run -c release La `LANE_RUNNER_ROW_MS` sets the row interval. The first load checks and compiles the model, which takes about 20 s. -This is a Subway Surfers-style endless runner with three lanes. Each step enters the next row, and the runner picks one of five moves: **left**, **right**, **jump** (clears a low bar), **slide** (passes under a high bar), or **stay**. Trains block a lane, and coins are a bonus. Obstacle rows alternate with open rows, and each obstacle row leaves one lane open, so every track can be survived. +This is a Subway Surfers-style endless runner with three lanes. Each step enters the next row, and the runner picks one of five moves: **left**, **right**, **jump** (clears a low bar), **slide** (passes under a high bar), or **stay**. Trains block a lane, and coins are a bonus. + +Like Subway Surfers and Temple Run, it gets harder the longer you survive: + +- **Denser track.** The first 30 rows are easy: obstacle rows alternate with open rows, and each obstacle row leaves one lane open. Over the next 240 rows, the open rows disappear and more lanes are blocked. Two obstacle rows appear back to back only when every lane passable in the first has a legal move into the second, so every track can still be survived. +- **Faster app runs.** Each row is 0.5% faster than the one before, down to 40% of the starting interval. At the default 400 ms, the interval reaches 160 ms after about 180 rows. The headless checker has no clock, so only density applies there. The runner chooses once per row, not once per frame, and each option states its consequence. The first Flappy Bird trial showed that frame-by-frame control does not suit these models, so this setup follows the Tetris harness pattern. The model reads a short state (`Lane 2 of 3. Next row: train, open, low bar. Then: …`) plus one label per legal move, such as `jump: crash, hit a train`, `left: safe, coin`, or `stay: safe, then trapped`. The labels and the heuristic both look only at the three visible rows. Option order rotates every row, so a fixed position preference does not look like skill. -The app renders a 3D third-person track in SceneKit with CC0 models from Kenney's [Train Kit](https://kenney.nl/assets/train-kit) and [Platformer Kit](https://kenney.nl/assets/platformer-kit). The models and their license files are in `Resources/Kenney/`. It also shows the exact text the model reads, with unsafe options in red. Rows advance on a timer (150–800 ms). If a reply misses its row, the runner stays in its lane and the row counts as late. `LaneRunnerCheck` runs the same tracks headless with no clock, runs each seed up to 200 rows, and prints per-seed JSON. Pass a model name, `heuristic`, or `random`. +The app renders a 3D third-person track in SceneKit with CC0 models from Kenney's [Train Kit](https://kenney.nl/assets/train-kit) and [Platformer Kit](https://kenney.nl/assets/platformer-kit). The models and their license files are in `Resources/Kenney/`. It also shows the exact text the model reads, with unsafe options in red. Rows advance on a timer (150–800 ms). If a reply misses its row, the runner stays in its lane and the row counts as late. `LaneRunnerCheck` runs the same tracks headless with no clock, runs each seed up to 200 rows by default (`--max-rows=` changes it), and prints per-seed JSON. Pass a model name, `heuristic`, or `random`. ## Results -Seeds 1–4, up to 200 rows each (800 maximum), Apple M5 Pro: +Seeds 1–4, up to 300 rows each (1,200 maximum), Apple M5 Pro: | Policy | Rows (per seed) | Total | Median call | | --- | --- | ---: | ---: | -| Heuristic | 200, 200, 200, 200 | 800 | — | -| GLiNER 2.5 base W8 | 12, 68, 96, 8 | 184 | 10.6–11.3 ms | -| GLiNER 2.5 multilingual W8 | 16, 122, 12, 10 | 160 | 7.7–9.4 ms | -| Kev 0.6B FP16 (bridge) | 84, 18, 28, 2 | 132 | 19.2–22.8 ms | -| GLiClass Edge Apps v2 LUT8 | 28, 2, 38, 2 | 70 | 2.0–2.2 ms | -| GLiNER 2.5 small W8 | 12, 2, 32, 10 | 56 | 8.5–11.4 ms | -| Jeff FP16 (bridge) | 10, 4, 10, 6 | 30 | 15.0–20.7 ms | -| Random legal move | 12, 2, 8, 8 | 30 | — | -| Laya multilingual E8 | 10, 2, 4, 6 | 22 | 5.1 ms | -| Verdict FP16 | 2, 2, 6, 6 | 16 | 10.3–10.7 ms | -| LFM2.5-350M-RLCD FP16 (bridge) | 2, 6, 2, 2 | 12 | 56–158 ms | -| Kev 0.5B FP16 (bridge) | 2, 2, 4, 2 | 10 | 10.1–10.9 ms | +| Heuristic | 300, 300, 300, 300 | 1,200 | — | +| GLiNER 2.5 base W8 | 30, 43, 36, 20 | 129 | 7.5–10.1 ms | +| GLiNER 2.5 multilingual W8 | 20, 12, 20, 10 | 62 | 7.2–11.2 ms | +| GLiNER 2.5 small W8 | 10, 18, 10, 10 | 48 | 6.8–11.4 ms | +| Laya multilingual E8 | 6, 2, 4, 16 | 28 | 5.0–5.2 ms | +| GLiClass Edge Apps v2 LUT8 | 4, 2, 2, 12 | 20 | 2.0–2.2 ms | +| LFM2.5-350M-RLCD FP16 (bridge) | 4, 2, 2, 12 | 20 | 73–138 ms | +| Random legal move | 2, 2, 8, 2 | 14 | — | +| Kev 0.6B FP16 (bridge) | 4, 2, 4, 2 | 12 | 12.4–16.3 ms | +| Verdict FP16 | 2, 2, 2, 4 | 10 | 10.1–10.8 ms | +| Jeff FP16 (bridge) | 2, 2, 2, 4 | 10 | 9.8–10.3 ms | +| Kev 0.5B FP16 (bridge) | 2, 2, 4, 2 | 10 | 10.0–10.4 ms | Decision 1.0 Kai and Lex publish Choice packages with three candidate slots, and NanoJev's head takes four options, so they cannot choose among the runner's four or five moves. -Every model crashed on every seed, and each run ended on its first unsafe choice: an option labeled `crash` although a safe option was offered. The best models, GLiNER base and multilingual and Kev 0.6B, went about 4–6 times as far as random play. Flappy Bird's best model passed one pipe in total. Most models were at or below random. Kev 0.6B chose the first-listed option in 90 of 136 decisions, so part of its distance comes from position preference. GLiClass chose `stay` in 53 of 74 decisions. Four seeds make a small check, not a model ranking. The raw JSON is in FluidAudio's ignored `.mobius/lane-runner/` directory. +Every model crashed on every seed, each time by choosing an option labeled `crash` although a safe option was offered. Only GLiNER 2.5 base regularly got past the 30-row easy opening; its best run reached row 43. The three GLiNER 2.5 models are the only ones clearly above random play. Kev 0.6B chose the first-listed option in 11 of 16 decisions. Before the difficulty ramp, the tracks differed and the ranking was similar: GLiNER base, then GLiNER multilingual, led the models. Four seeds make a small check, not a model ranking. The raw JSON is in FluidAudio's ignored `.mobius/lane-runner/ramp/` directory. diff --git a/Tests/LaneRunnerTests/LaneRunnerTests.swift b/Tests/LaneRunnerTests/LaneRunnerTests.swift index 7da49dd..7f2d20c 100644 --- a/Tests/LaneRunnerTests/LaneRunnerTests.swift +++ b/Tests/LaneRunnerTests/LaneRunnerTests.swift @@ -16,7 +16,7 @@ struct LaneRunnerTests { @Test func everyTrackIsSurvivable() { for seed in UInt64(1)...20 { var game = LaneRunner(seed: seed) - while !game.isOver && game.distance < 300 { game.step(game.heuristicAction) } + while !game.isOver && game.distance < 400 { game.step(game.heuristicAction) } #expect(!game.isOver, "seed \(seed) crashed: \(game.crash ?? "")") } } @@ -45,4 +45,23 @@ struct LaneRunnerTests { game.lane = 1 #expect(game.legalActions.count == 5) } + + @Test func tracksGetDenser() { + var game = LaneRunner(seed: 3) + var blockedEarly = 0 + var blockedLate = 0 + while game.distance < 400 { + let blocked = game.rows[0].filter { $0 == .low || $0 == .high || $0 == .train }.count + if game.distance < 60 { blockedEarly += blocked } + if game.distance >= 340 { blockedLate += blocked } + game.step(game.heuristicAction) + } + #expect(blockedLate * 4 > blockedEarly * 5) + } + + @Test func backToBackRowsNeedALegalMove() { + #expect(LaneRunner.canFollow([.train, .open, .train], with: [.open, .train, .train])) + #expect(!LaneRunner.canFollow([.train, .open, .train], with: [.low, .train, .train])) + #expect(LaneRunner.canFollow([.low, .train, .train], with: [.low, .train, .train])) + } } From ea9b43539311da9e29e94fa0b5b7b76240eb63f6 Mon Sep 17 00:00:00 2001 From: Alex-Wengg Date: Wed, 23 Sep 2026 02:19:51 -0400 Subject: [PATCH 9/9] Point the runner demo example at the post-ramp best run Co-Authored-By: Claude Opus 5.5 (1M context) --- Sources/LaneRunnerDemo/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/LaneRunnerDemo/README.md b/Sources/LaneRunnerDemo/README.md index c9cff01..7e56a28 100644 --- a/Sources/LaneRunnerDemo/README.md +++ b/Sources/LaneRunnerDemo/README.md @@ -5,10 +5,10 @@ swift run -c release LaneRunnerDemo swift run -c release LaneRunnerCheck gliner2Base --seeds=1,2,3,4 ``` -To start a demo with no clicks, set the model and seed, for example the 122-row GLiNER multilingual run: +To start a demo with no clicks, set the model and seed, for example GLiNER 2.5 base's 43-row run: ```bash -LANE_RUNNER_MODEL=gliner2Multilingual LANE_RUNNER_SEED=2 swift run -c release LaneRunnerDemo +LANE_RUNNER_MODEL=gliner2Base LANE_RUNNER_SEED=2 swift run -c release LaneRunnerDemo ``` `LANE_RUNNER_ROW_MS` sets the row interval. The first load checks and compiles the model, which takes about 20 s.