Function( Function { head: Destructured( FunctionHeadDestructured { ellipsis: true, identifier: None, arguments: [ FunctionHeadDestructuredArgument { identifier: "config", default: None, }, FunctionHeadDestructuredArgument { identifier: "lib", default: None, }, FunctionHeadDestructuredArgument { identifier: "pkgs", default: None, }, FunctionHeadDestructuredArgument { identifier: "options", default: None, }, ], }, ), body: With( With { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 2, column: 6, }, end: Position { line: 2, column: 9, }, }, }, ), target: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "cfg", span: Span { start: Position { line: 4, column: 3, }, end: Position { line: 4, column: 6, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 4, column: 9, }, end: Position { line: 4, column: 15, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 4, column: 16, }, end: Position { line: 4, column: 24, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 4, column: 25, }, end: Position { line: 4, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "opt", span: Span { start: Position { line: 5, column: 3, }, end: Position { line: 5, column: 6, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "options", span: Span { start: Position { line: 5, column: 9, }, end: Position { line: 5, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 5, column: 17, }, end: Position { line: 5, column: 25, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 5, column: 26, }, end: Position { line: 5, column: 30, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "user", span: Span { start: Position { line: 6, column: 3, }, end: Position { line: 6, column: 7, }, }, }, ), ], to: IfThenElse( IfThenElse { predicate: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 6, column: 13, }, end: Position { line: 6, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "useRoot", span: Span { start: Position { line: 6, column: 17, }, end: Position { line: 6, column: 24, }, }, }, ), ], default: None, }, ), then: String( String_ { parts: [ Raw( PartRaw { content: "root", span: Span { start: Position { line: 6, column: 31, }, end: Position { line: 6, column: 35, }, }, }, ), ], span: Span { start: Position { line: 6, column: 30, }, end: Position { line: 6, column: 36, }, }, }, ), else_: String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 6, column: 43, }, end: Position { line: 6, column: 47, }, }, }, ), ], span: Span { start: Position { line: 6, column: 42, }, end: Position { line: 6, column: 48, }, }, }, ), span: Span { start: Position { line: 6, column: 10, }, end: Position { line: 6, column: 48, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "numCerts", span: Span { start: Position { line: 9, column: 3, }, end: Position { line: 9, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "length", span: Span { start: Position { line: 9, column: 14, }, end: Position { line: 9, column: 20, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 9, column: 22, }, end: Position { line: 9, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "attrNames", span: Span { start: Position { line: 9, column: 31, }, end: Position { line: 9, column: 40, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 9, column: 41, }, end: Position { line: 9, column: 44, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "certs", span: Span { start: Position { line: 9, column: 45, }, end: Position { line: 9, column: 50, }, }, }, ), ], default: None, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "_24hSecs", span: Span { start: Position { line: 10, column: 3, }, end: Position { line: 10, column: 11, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: Integer( Integer { value: "60", span: Span { start: Position { line: 10, column: 14, }, end: Position { line: 10, column: 16, }, }, }, ), operator: Multiplication, right: Integer( Integer { value: "60", span: Span { start: Position { line: 10, column: 19, }, end: Position { line: 10, column: 21, }, }, }, ), }, ), operator: Multiplication, right: Integer( Integer { value: "24", span: Span { start: Position { line: 10, column: 24, }, end: Position { line: 10, column: 26, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "mkHash", span: Span { start: Position { line: 13, column: 3, }, end: Position { line: 13, column: 9, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 13, column: 17, }, end: Position { line: 13, column: 25, }, }, }, ), target: Function( Function { head: Simple( FunctionHeadSimple { identifier: "val", }, ), body: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "substring", span: Span { start: Position { line: 13, column: 32, }, end: Position { line: 13, column: 41, }, }, }, ), arguments: [ Integer( Integer { value: "0", span: Span { start: Position { line: 13, column: 42, }, end: Position { line: 13, column: 43, }, }, }, ), Integer( Integer { value: "20", span: Span { start: Position { line: 13, column: 44, }, end: Position { line: 13, column: 46, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "hashString", span: Span { start: Position { line: 13, column: 48, }, end: Position { line: 13, column: 58, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "sha256", span: Span { start: Position { line: 13, column: 60, }, end: Position { line: 13, column: 66, }, }, }, ), ], span: Span { start: Position { line: 13, column: 59, }, end: Position { line: 13, column: 67, }, }, }, ), Identifier( Identifier { id: "val", span: Span { start: Position { line: 13, column: 68, }, end: Position { line: 13, column: 71, }, }, }, ), ], }, ), ], }, ), span: Span { start: Position { line: 13, column: 27, }, end: Position { line: 13, column: 72, }, }, }, ), span: Span { start: Position { line: 13, column: 12, }, end: Position { line: 13, column: 72, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "mkAccountHash", span: Span { start: Position { line: 14, column: 3, }, end: Position { line: 14, column: 16, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "acmeServer", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "data", }, ), body: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkHash", span: Span { start: Position { line: 14, column: 37, }, end: Position { line: 14, column: 43, }, }, }, ), arguments: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 14, column: 47, }, end: Position { line: 14, column: 55, }, }, }, ), arguments: [ Identifier( Identifier { id: "acmeServer", span: Span { start: Position { line: 14, column: 56, }, end: Position { line: 14, column: 66, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 14, column: 45, }, end: Position { line: 14, column: 68, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 14, column: 70, }, end: Position { line: 14, column: 74, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "keyType", span: Span { start: Position { line: 14, column: 75, }, end: Position { line: 14, column: 82, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 14, column: 45, }, end: Position { line: 14, column: 84, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 14, column: 86, }, end: Position { line: 14, column: 90, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "email", span: Span { start: Position { line: 14, column: 91, }, end: Position { line: 14, column: 96, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 14, column: 44, }, end: Position { line: 14, column: 98, }, }, }, ), ], }, ), span: Span { start: Position { line: 14, column: 31, }, end: Position { line: 14, column: 98, }, }, }, ), span: Span { start: Position { line: 14, column: 19, }, end: Position { line: 14, column: 98, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "accountDirRoot", span: Span { start: Position { line: 15, column: 3, }, end: Position { line: 15, column: 17, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/acme/.lego/accounts/", span: Span { start: Position { line: 15, column: 21, }, end: Position { line: 15, column: 50, }, }, }, ), ], span: Span { start: Position { line: 15, column: 20, }, end: Position { line: 15, column: 51, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "commonServiceConfig", span: Span { start: Position { line: 25, column: 3, }, end: Position { line: 25, column: 22, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "Type", span: Span { start: Position { line: 26, column: 5, }, end: Position { line: 26, column: 9, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "oneshot", span: Span { start: Position { line: 26, column: 13, }, end: Position { line: 26, column: 20, }, }, }, ), ], span: Span { start: Position { line: 26, column: 12, }, end: Position { line: 26, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "User", span: Span { start: Position { line: 27, column: 5, }, end: Position { line: 27, column: 9, }, }, }, ), ], to: Identifier( Identifier { id: "user", span: Span { start: Position { line: 27, column: 12, }, end: Position { line: 27, column: 16, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "Group", span: Span { start: Position { line: 28, column: 5, }, end: Position { line: 28, column: 10, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkDefault", span: Span { start: Position { line: 28, column: 13, }, end: Position { line: 28, column: 22, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 28, column: 24, }, end: Position { line: 28, column: 28, }, }, }, ), ], span: Span { start: Position { line: 28, column: 23, }, end: Position { line: 28, column: 29, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "UMask", span: Span { start: Position { line: 29, column: 5, }, end: Position { line: 29, column: 10, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "0022", span: Span { start: Position { line: 29, column: 14, }, end: Position { line: 29, column: 18, }, }, }, ), ], span: Span { start: Position { line: 29, column: 13, }, end: Position { line: 29, column: 19, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "StateDirectoryMode", span: Span { start: Position { line: 30, column: 5, }, end: Position { line: 30, column: 23, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "750", span: Span { start: Position { line: 30, column: 27, }, end: Position { line: 30, column: 30, }, }, }, ), ], span: Span { start: Position { line: 30, column: 26, }, end: Position { line: 30, column: 31, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ProtectSystem", span: Span { start: Position { line: 31, column: 5, }, end: Position { line: 31, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "strict", span: Span { start: Position { line: 31, column: 22, }, end: Position { line: 31, column: 28, }, }, }, ), ], span: Span { start: Position { line: 31, column: 21, }, end: Position { line: 31, column: 29, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ReadWritePaths", span: Span { start: Position { line: 32, column: 5, }, end: Position { line: 32, column: 19, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/acme", span: Span { start: Position { line: 33, column: 8, }, end: Position { line: 33, column: 21, }, }, }, ), ], span: Span { start: Position { line: 33, column: 7, }, end: Position { line: 33, column: 22, }, }, }, ), ], span: Span { start: Position { line: 32, column: 22, }, end: Position { line: 34, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "PrivateTmp", span: Span { start: Position { line: 35, column: 5, }, end: Position { line: 35, column: 15, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 35, column: 18, }, end: Position { line: 35, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "WorkingDirectory", span: Span { start: Position { line: 37, column: 5, }, end: Position { line: 37, column: 21, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/tmp", span: Span { start: Position { line: 37, column: 25, }, end: Position { line: 37, column: 29, }, }, }, ), ], span: Span { start: Position { line: 37, column: 24, }, end: Position { line: 37, column: 30, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "CapabilityBoundingSet", span: Span { start: Position { line: 39, column: 5, }, end: Position { line: 39, column: 26, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [], span: Span { start: Position { line: 39, column: 31, }, end: Position { line: 39, column: 33, }, }, }, ), ], span: Span { start: Position { line: 39, column: 29, }, end: Position { line: 39, column: 35, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "DevicePolicy", span: Span { start: Position { line: 40, column: 5, }, end: Position { line: 40, column: 17, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "closed", span: Span { start: Position { line: 40, column: 21, }, end: Position { line: 40, column: 27, }, }, }, ), ], span: Span { start: Position { line: 40, column: 20, }, end: Position { line: 40, column: 28, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "LockPersonality", span: Span { start: Position { line: 41, column: 5, }, end: Position { line: 41, column: 20, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 41, column: 23, }, end: Position { line: 41, column: 27, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "MemoryDenyWriteExecute", span: Span { start: Position { line: 42, column: 5, }, end: Position { line: 42, column: 27, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 42, column: 30, }, end: Position { line: 42, column: 34, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "NoNewPrivileges", span: Span { start: Position { line: 43, column: 5, }, end: Position { line: 43, column: 20, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 43, column: 23, }, end: Position { line: 43, column: 27, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "PrivateDevices", span: Span { start: Position { line: 44, column: 5, }, end: Position { line: 44, column: 19, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 44, column: 22, }, end: Position { line: 44, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ProtectClock", span: Span { start: Position { line: 45, column: 5, }, end: Position { line: 45, column: 17, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 45, column: 20, }, end: Position { line: 45, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ProtectHome", span: Span { start: Position { line: 46, column: 5, }, end: Position { line: 46, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 46, column: 19, }, end: Position { line: 46, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ProtectHostname", span: Span { start: Position { line: 47, column: 5, }, end: Position { line: 47, column: 20, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 47, column: 23, }, end: Position { line: 47, column: 27, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ProtectControlGroups", span: Span { start: Position { line: 48, column: 5, }, end: Position { line: 48, column: 25, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 48, column: 28, }, end: Position { line: 48, column: 32, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ProtectKernelLogs", span: Span { start: Position { line: 49, column: 5, }, end: Position { line: 49, column: 22, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 49, column: 25, }, end: Position { line: 49, column: 29, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ProtectKernelModules", span: Span { start: Position { line: 50, column: 5, }, end: Position { line: 50, column: 25, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 50, column: 28, }, end: Position { line: 50, column: 32, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ProtectKernelTunables", span: Span { start: Position { line: 51, column: 5, }, end: Position { line: 51, column: 26, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 51, column: 29, }, end: Position { line: 51, column: 33, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ProtectProc", span: Span { start: Position { line: 52, column: 5, }, end: Position { line: 52, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "invisible", span: Span { start: Position { line: 52, column: 20, }, end: Position { line: 52, column: 29, }, }, }, ), ], span: Span { start: Position { line: 52, column: 19, }, end: Position { line: 52, column: 30, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ProcSubset", span: Span { start: Position { line: 53, column: 5, }, end: Position { line: 53, column: 15, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "pid", span: Span { start: Position { line: 53, column: 19, }, end: Position { line: 53, column: 22, }, }, }, ), ], span: Span { start: Position { line: 53, column: 18, }, end: Position { line: 53, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "RemoveIPC", span: Span { start: Position { line: 54, column: 5, }, end: Position { line: 54, column: 14, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 54, column: 17, }, end: Position { line: 54, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "RestrictAddressFamilies", span: Span { start: Position { line: 55, column: 5, }, end: Position { line: 55, column: 28, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "AF_INET", span: Span { start: Position { line: 56, column: 8, }, end: Position { line: 56, column: 15, }, }, }, ), ], span: Span { start: Position { line: 56, column: 7, }, end: Position { line: 56, column: 16, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "AF_INET6", span: Span { start: Position { line: 57, column: 8, }, end: Position { line: 57, column: 16, }, }, }, ), ], span: Span { start: Position { line: 57, column: 7, }, end: Position { line: 57, column: 17, }, }, }, ), ], span: Span { start: Position { line: 55, column: 31, }, end: Position { line: 58, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "RestrictNamespaces", span: Span { start: Position { line: 59, column: 5, }, end: Position { line: 59, column: 23, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 59, column: 26, }, end: Position { line: 59, column: 30, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "RestrictRealtime", span: Span { start: Position { line: 60, column: 5, }, end: Position { line: 60, column: 21, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 60, column: 24, }, end: Position { line: 60, column: 28, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "RestrictSUIDSGID", span: Span { start: Position { line: 61, column: 5, }, end: Position { line: 61, column: 21, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 61, column: 24, }, end: Position { line: 61, column: 28, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "SystemCallArchitectures", span: Span { start: Position { line: 62, column: 5, }, end: Position { line: 62, column: 28, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "native", span: Span { start: Position { line: 62, column: 32, }, end: Position { line: 62, column: 38, }, }, }, ), ], span: Span { start: Position { line: 62, column: 31, }, end: Position { line: 62, column: 39, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "SystemCallFilter", span: Span { start: Position { line: 63, column: 5, }, end: Position { line: 63, column: 21, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "@system-service @resources", span: Span { start: Position { line: 65, column: 8, }, end: Position { line: 65, column: 34, }, }, }, ), ], span: Span { start: Position { line: 65, column: 7, }, end: Position { line: 65, column: 35, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "~@privileged", span: Span { start: Position { line: 67, column: 8, }, end: Position { line: 67, column: 20, }, }, }, ), ], span: Span { start: Position { line: 67, column: 7, }, end: Position { line: 67, column: 21, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "@chown", span: Span { start: Position { line: 69, column: 8, }, end: Position { line: 69, column: 14, }, }, }, ), ], span: Span { start: Position { line: 69, column: 7, }, end: Position { line: 69, column: 15, }, }, }, ), ], span: Span { start: Position { line: 63, column: 24, }, end: Position { line: 70, column: 6, }, }, }, ), }, ), ], span: Span { start: Position { line: 25, column: 25, }, end: Position { line: 71, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "selfsignCAService", span: Span { start: Position { line: 75, column: 3, }, end: Position { line: 75, column: 20, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 76, column: 5, }, end: Position { line: 76, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "Generate self-signed certificate authority", span: Span { start: Position { line: 76, column: 20, }, end: Position { line: 76, column: 62, }, }, }, ), ], span: Span { start: Position { line: 76, column: 19, }, end: Position { line: 76, column: 63, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 78, column: 5, }, end: Position { line: 78, column: 9, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 78, column: 17, }, end: Position { line: 78, column: 21, }, }, }, ), target: List( List { elements: [ Identifier( Identifier { id: "minica", span: Span { start: Position { line: 78, column: 25, }, end: Position { line: 78, column: 31, }, }, }, ), ], span: Span { start: Position { line: 78, column: 23, }, end: Position { line: 78, column: 33, }, }, }, ), span: Span { start: Position { line: 78, column: 12, }, end: Position { line: 78, column: 33, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "unitConfig", span: Span { start: Position { line: 80, column: 5, }, end: Position { line: 80, column: 15, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ConditionPathExists", span: Span { start: Position { line: 81, column: 7, }, end: Position { line: 81, column: 26, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "!/var/lib/acme/.minica/key.pem", span: Span { start: Position { line: 81, column: 30, }, end: Position { line: 81, column: 60, }, }, }, ), ], span: Span { start: Position { line: 81, column: 29, }, end: Position { line: 81, column: 61, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "StartLimitIntervalSec", span: Span { start: Position { line: 82, column: 7, }, end: Position { line: 82, column: 28, }, }, }, ), ], to: Integer( Integer { value: "0", span: Span { start: Position { line: 82, column: 31, }, end: Position { line: 82, column: 32, }, }, }, ), }, ), ], span: Span { start: Position { line: 80, column: 18, }, end: Position { line: 83, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 85, column: 5, }, end: Position { line: 85, column: 18, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "commonServiceConfig", span: Span { start: Position { line: 85, column: 21, }, end: Position { line: 85, column: 40, }, }, }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "StateDirectory", span: Span { start: Position { line: 86, column: 7, }, end: Position { line: 86, column: 21, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "acme/.minica", span: Span { start: Position { line: 86, column: 25, }, end: Position { line: 86, column: 37, }, }, }, ), ], span: Span { start: Position { line: 86, column: 24, }, end: Position { line: 86, column: 38, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "BindPaths", span: Span { start: Position { line: 87, column: 7, }, end: Position { line: 87, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/acme/.minica:/tmp/ca", span: Span { start: Position { line: 87, column: 20, }, end: Position { line: 87, column: 49, }, }, }, ), ], span: Span { start: Position { line: 87, column: 19, }, end: Position { line: 87, column: 50, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "UMask", span: Span { start: Position { line: 88, column: 7, }, end: Position { line: 88, column: 12, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "0077", span: Span { start: Position { line: 88, column: 16, }, end: Position { line: 88, column: 20, }, }, }, ), ], span: Span { start: Position { line: 88, column: 15, }, end: Position { line: 88, column: 21, }, }, }, ), }, ), ], span: Span { start: Position { line: 85, column: 44, }, end: Position { line: 89, column: 6, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "script", span: Span { start: Position { line: 92, column: 5, }, end: Position { line: 92, column: 11, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "minica \\\n --ca-key ca/key.pem \\\n --ca-cert ca/cert.pem \\\n --domains selfsigned.local\n", span: Span { start: Position { line: 93, column: 1, }, end: Position { line: 97, column: 5, }, }, }, ), ], span: Span { start: Position { line: 92, column: 14, }, end: Position { line: 97, column: 7, }, }, }, ), }, ), ], span: Span { start: Position { line: 75, column: 23, }, end: Position { line: 98, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "userMigrationService", span: Span { start: Position { line: 103, column: 3, }, end: Position { line: 103, column: 23, }, }, }, ), ], to: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "script", span: Span { start: Position { line: 104, column: 5, }, end: Position { line: 104, column: 11, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 104, column: 19, }, end: Position { line: 104, column: 27, }, }, }, ), target: BinaryOperation( BinaryOperation { left: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "chown -R ", span: Span { start: Position { line: 105, column: 1, }, end: Position { line: 105, column: 16, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "user", span: Span { start: Position { line: 105, column: 18, }, end: Position { line: 105, column: 22, }, }, }, ), }, ), Raw( PartRaw { content: " .lego/accounts\n", span: Span { start: Position { line: 105, column: 1, }, end: Position { line: 106, column: 5, }, }, }, ), ], span: Span { start: Position { line: 104, column: 29, }, end: Position { line: 106, column: 7, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "concatStringsSep", span: Span { start: Position { line: 106, column: 11, }, end: Position { line: 106, column: 27, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "\n", span: Span { start: Position { line: 106, column: 29, }, end: Position { line: 106, column: 31, }, }, }, ), ], span: Span { start: Position { line: 106, column: 28, }, end: Position { line: 106, column: 32, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrsToList", span: Span { start: Position { line: 106, column: 34, }, end: Position { line: 106, column: 48, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cert", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "data", }, ), body: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "for fixpath in ", span: Span { start: Position { line: 107, column: 1, }, end: Position { line: 107, column: 22, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "escapeShellArg", span: Span { start: Position { line: 107, column: 24, }, end: Position { line: 107, column: 38, }, }, }, ), arguments: [ Identifier( Identifier { id: "cert", span: Span { start: Position { line: 107, column: 39, }, end: Position { line: 107, column: 43, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " .lego/", span: Span { start: Position { line: 107, column: 1, }, end: Position { line: 107, column: 51, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "escapeShellArg", span: Span { start: Position { line: 107, column: 53, }, end: Position { line: 107, column: 67, }, }, }, ), arguments: [ Identifier( Identifier { id: "cert", span: Span { start: Position { line: 107, column: 68, }, end: Position { line: 107, column: 72, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "; do\n if [ -d \"$fixpath\" ]; then\n chmod -R u=rwX,g=rX,o= \"$fixpath\"\n chown -R ", span: Span { start: Position { line: 107, column: 1, }, end: Position { line: 110, column: 20, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "user", span: Span { start: Position { line: 110, column: 22, }, end: Position { line: 110, column: 26, }, }, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 107, column: 1, }, end: Position { line: 110, column: 28, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 110, column: 30, }, end: Position { line: 110, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 110, column: 35, }, end: Position { line: 110, column: 40, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: " \"$fixpath\"\n fi\ndone\n", span: Span { start: Position { line: 107, column: 1, }, end: Position { line: 113, column: 5, }, }, }, ), ], span: Span { start: Position { line: 106, column: 62, }, end: Position { line: 113, column: 7, }, }, }, ), span: Span { start: Position { line: 106, column: 56, }, end: Position { line: 113, column: 7, }, }, }, ), span: Span { start: Position { line: 106, column: 50, }, end: Position { line: 113, column: 7, }, }, }, ), Identifier( Identifier { id: "certConfigs", span: Span { start: Position { line: 113, column: 9, }, end: Position { line: 113, column: 20, }, }, }, ), ], }, ), ], }, ), }, ), span: Span { start: Position { line: 104, column: 14, }, end: Position { line: 113, column: 22, }, }, }, ), }, ), ], target: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 115, column: 5, }, end: Position { line: 115, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "Fix owner and group of all ACME certificates", span: Span { start: Position { line: 115, column: 20, }, end: Position { line: 115, column: 64, }, }, }, ), ], span: Span { start: Position { line: 115, column: 19, }, end: Position { line: 115, column: 65, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 117, column: 5, }, end: Position { line: 117, column: 18, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "commonServiceConfig", span: Span { start: Position { line: 117, column: 21, }, end: Position { line: 117, column: 40, }, }, }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "RemainAfterExit", span: Span { start: Position { line: 119, column: 7, }, end: Position { line: 119, column: 22, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 119, column: 25, }, end: Position { line: 119, column: 29, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "StateDirectory", span: Span { start: Position { line: 122, column: 7, }, end: Position { line: 122, column: 21, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 122, column: 27, }, end: Position { line: 122, column: 31, }, }, }, ), ], span: Span { start: Position { line: 122, column: 26, }, end: Position { line: 122, column: 32, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme/.lego", span: Span { start: Position { line: 122, column: 34, }, end: Position { line: 122, column: 44, }, }, }, ), ], span: Span { start: Position { line: 122, column: 33, }, end: Position { line: 122, column: 45, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme/.lego/accounts", span: Span { start: Position { line: 122, column: 47, }, end: Position { line: 122, column: 66, }, }, }, ), ], span: Span { start: Position { line: 122, column: 46, }, end: Position { line: 122, column: 67, }, }, }, ), ], span: Span { start: Position { line: 122, column: 24, }, end: Position { line: 122, column: 69, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "StateDirectoryMode", span: Span { start: Position { line: 123, column: 7, }, end: Position { line: 123, column: 25, }, }, }, ), ], to: Integer( Integer { value: "755", span: Span { start: Position { line: 123, column: 28, }, end: Position { line: 123, column: 31, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "WorkingDirectory", span: Span { start: Position { line: 124, column: 7, }, end: Position { line: 124, column: 23, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/acme", span: Span { start: Position { line: 124, column: 27, }, end: Position { line: 124, column: 40, }, }, }, ), ], span: Span { start: Position { line: 124, column: 26, }, end: Position { line: 124, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ExecStart", span: Span { start: Position { line: 127, column: 7, }, end: Position { line: 127, column: 16, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: String( String_ { parts: [ Raw( PartRaw { content: "+", span: Span { start: Position { line: 127, column: 20, }, end: Position { line: 127, column: 21, }, }, }, ), ], span: Span { start: Position { line: 127, column: 19, }, end: Position { line: 127, column: 22, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 127, column: 26, }, end: Position { line: 127, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeShellScript", span: Span { start: Position { line: 127, column: 31, }, end: Position { line: 127, column: 47, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "acme-fixperms", span: Span { start: Position { line: 127, column: 49, }, end: Position { line: 127, column: 62, }, }, }, ), ], span: Span { start: Position { line: 127, column: 48, }, end: Position { line: 127, column: 63, }, }, }, ), Identifier( Identifier { id: "script", span: Span { start: Position { line: 127, column: 64, }, end: Position { line: 127, column: 70, }, }, }, ), ], }, ), }, ), }, ), ], span: Span { start: Position { line: 117, column: 44, }, end: Position { line: 128, column: 6, }, }, }, ), }, ), }, ), ], span: Span { start: Position { line: 114, column: 6, }, end: Position { line: 129, column: 4, }, }, }, ), span: Span { start: Position { line: 103, column: 26, }, end: Position { line: 129, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "certToConfig", span: Span { start: Position { line: 131, column: 3, }, end: Position { line: 131, column: 15, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "cert", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "data", }, ), body: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "acmeServer", span: Span { start: Position { line: 132, column: 5, }, end: Position { line: 132, column: 15, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 132, column: 18, }, end: Position { line: 132, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "server", span: Span { start: Position { line: 132, column: 23, }, end: Position { line: 132, column: 29, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "useDns", span: Span { start: Position { line: 133, column: 5, }, end: Position { line: 133, column: 11, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 133, column: 14, }, end: Position { line: 133, column: 18, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "dnsProvider", span: Span { start: Position { line: 133, column: 19, }, end: Position { line: 133, column: 30, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 133, column: 34, }, end: Position { line: 133, column: 38, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "destPath", span: Span { start: Position { line: 134, column: 5, }, end: Position { line: 134, column: 13, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/acme/", span: Span { start: Position { line: 134, column: 17, }, end: Position { line: 134, column: 38, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 134, column: 33, }, end: Position { line: 134, column: 37, }, }, }, ), }, ), ], span: Span { start: Position { line: 134, column: 16, }, end: Position { line: 134, column: 39, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "selfsignedDeps", span: Span { start: Position { line: 135, column: 5, }, end: Position { line: 135, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 135, column: 22, }, end: Position { line: 135, column: 31, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 135, column: 33, }, end: Position { line: 135, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "preliminarySelfsigned", span: Span { start: Position { line: 135, column: 37, }, end: Position { line: 135, column: 58, }, }, }, ), ], default: None, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "acme-selfsigned-", span: Span { start: Position { line: 135, column: 63, }, end: Position { line: 135, column: 86, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 135, column: 81, }, end: Position { line: 135, column: 85, }, }, }, ), }, ), Raw( PartRaw { content: ".service", span: Span { start: Position { line: 135, column: 63, }, end: Position { line: 135, column: 94, }, }, }, ), ], span: Span { start: Position { line: 135, column: 62, }, end: Position { line: 135, column: 95, }, }, }, ), ], span: Span { start: Position { line: 135, column: 60, }, end: Position { line: 135, column: 97, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "keyName", span: Span { start: Position { line: 140, column: 5, }, end: Position { line: 140, column: 12, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 140, column: 15, }, end: Position { line: 140, column: 23, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "replaceStrings", span: Span { start: Position { line: 140, column: 24, }, end: Position { line: 140, column: 38, }, }, }, ), ], default: None, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "*", span: Span { start: Position { line: 140, column: 41, }, end: Position { line: 140, column: 42, }, }, }, ), ], span: Span { start: Position { line: 140, column: 40, }, end: Position { line: 140, column: 43, }, }, }, ), ], span: Span { start: Position { line: 140, column: 39, }, end: Position { line: 140, column: 44, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "_", span: Span { start: Position { line: 140, column: 47, }, end: Position { line: 140, column: 48, }, }, }, ), ], span: Span { start: Position { line: 140, column: 46, }, end: Position { line: 140, column: 49, }, }, }, ), ], span: Span { start: Position { line: 140, column: 45, }, end: Position { line: 140, column: 50, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 140, column: 51, }, end: Position { line: 140, column: 55, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "domain", span: Span { start: Position { line: 140, column: 56, }, end: Position { line: 140, column: 62, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraDomains", span: Span { start: Position { line: 144, column: 5, }, end: Position { line: 144, column: 17, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 144, column: 20, }, end: Position { line: 144, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "extraDomainNames", span: Span { start: Position { line: 144, column: 25, }, end: Position { line: 144, column: 41, }, }, }, ), ], default: None, }, ), operator: Concatenation, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 145, column: 7, }, end: Position { line: 145, column: 16, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 146, column: 8, }, end: Position { line: 146, column: 12, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "extraDomains", span: Span { start: Position { line: 146, column: 13, }, end: Position { line: 146, column: 25, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: String( String_ { parts: [ Raw( PartRaw { content: "_mkMergedOptionModule", span: Span { start: Position { line: 146, column: 30, }, end: Position { line: 146, column: 51, }, }, }, ), ], span: Span { start: Position { line: 146, column: 29, }, end: Position { line: 146, column: 52, }, }, }, ), }, ), FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 147, column: 8, }, end: Position { line: 147, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "attrNames", span: Span { start: Position { line: 147, column: 17, }, end: Position { line: 147, column: 26, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 147, column: 27, }, end: Position { line: 147, column: 31, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "extraDomains", span: Span { start: Position { line: 147, column: 32, }, end: Position { line: 147, column: 44, }, }, }, ), ], default: None, }, ), ], }, ), ], }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "hashData", span: Span { start: Position { line: 152, column: 5, }, end: Position { line: 152, column: 13, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 152, column: 21, }, end: Position { line: 152, column: 29, }, }, }, ), target: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "", span: Span { start: Position { line: 153, column: 1, }, end: Position { line: 153, column: 7, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "concatStringsSep", span: Span { start: Position { line: 153, column: 9, }, end: Position { line: 153, column: 25, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: " ", span: Span { start: Position { line: 153, column: 27, }, end: Position { line: 153, column: 28, }, }, }, ), ], span: Span { start: Position { line: 153, column: 26, }, end: Position { line: 153, column: 29, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 153, column: 30, }, end: Position { line: 153, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "extraLegoFlags", span: Span { start: Position { line: 153, column: 35, }, end: Position { line: 153, column: 49, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: " -\n", span: Span { start: Position { line: 153, column: 1, }, end: Position { line: 154, column: 7, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "concatStringsSep", span: Span { start: Position { line: 154, column: 9, }, end: Position { line: 154, column: 25, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: " ", span: Span { start: Position { line: 154, column: 27, }, end: Position { line: 154, column: 28, }, }, }, ), ], span: Span { start: Position { line: 154, column: 26, }, end: Position { line: 154, column: 29, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 154, column: 30, }, end: Position { line: 154, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "extraLegoRunFlags", span: Span { start: Position { line: 154, column: 35, }, end: Position { line: 154, column: 52, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: " -\n", span: Span { start: Position { line: 153, column: 1, }, end: Position { line: 155, column: 7, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "concatStringsSep", span: Span { start: Position { line: 155, column: 9, }, end: Position { line: 155, column: 25, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: " ", span: Span { start: Position { line: 155, column: 27, }, end: Position { line: 155, column: 28, }, }, }, ), ], span: Span { start: Position { line: 155, column: 26, }, end: Position { line: 155, column: 29, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 155, column: 30, }, end: Position { line: 155, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "extraLegoRenewFlags", span: Span { start: Position { line: 155, column: 35, }, end: Position { line: 155, column: 54, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: " -\n", span: Span { start: Position { line: 153, column: 1, }, end: Position { line: 156, column: 7, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 156, column: 9, }, end: Position { line: 156, column: 17, }, }, }, ), arguments: [ Identifier( Identifier { id: "acmeServer", span: Span { start: Position { line: 156, column: 18, }, end: Position { line: 156, column: 28, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 153, column: 1, }, end: Position { line: 156, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 156, column: 32, }, end: Position { line: 156, column: 40, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 156, column: 41, }, end: Position { line: 156, column: 45, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "dnsProvider", span: Span { start: Position { line: 156, column: 46, }, end: Position { line: 156, column: 57, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 153, column: 1, }, end: Position { line: 157, column: 7, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 157, column: 9, }, end: Position { line: 157, column: 17, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 157, column: 18, }, end: Position { line: 157, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ocspMustStaple", span: Span { start: Position { line: 157, column: 23, }, end: Position { line: 157, column: 37, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 153, column: 1, }, end: Position { line: 157, column: 39, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 157, column: 41, }, end: Position { line: 157, column: 45, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "keyType", span: Span { start: Position { line: 157, column: 46, }, end: Position { line: 157, column: 53, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "\n", span: Span { start: Position { line: 153, column: 1, }, end: Position { line: 158, column: 5, }, }, }, ), ], span: Span { start: Position { line: 152, column: 31, }, end: Position { line: 158, column: 7, }, }, }, ), span: Span { start: Position { line: 152, column: 16, }, end: Position { line: 158, column: 7, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "certDir", span: Span { start: Position { line: 159, column: 5, }, end: Position { line: 159, column: 12, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkHash", span: Span { start: Position { line: 159, column: 15, }, end: Position { line: 159, column: 21, }, }, }, ), arguments: [ Identifier( Identifier { id: "hashData", span: Span { start: Position { line: 159, column: 22, }, end: Position { line: 159, column: 30, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "domainHash", span: Span { start: Position { line: 161, column: 5, }, end: Position { line: 161, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkHash", span: Span { start: Position { line: 161, column: 18, }, end: Position { line: 161, column: 24, }, }, }, ), arguments: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "concatStringsSep", span: Span { start: Position { line: 161, column: 28, }, end: Position { line: 161, column: 44, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: " ", span: Span { start: Position { line: 161, column: 46, }, end: Position { line: 161, column: 47, }, }, }, ), ], span: Span { start: Position { line: 161, column: 45, }, end: Position { line: 161, column: 48, }, }, }, ), Identifier( Identifier { id: "extraDomains", span: Span { start: Position { line: 161, column: 49, }, end: Position { line: 161, column: 61, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: " ", span: Span { start: Position { line: 161, column: 26, }, end: Position { line: 161, column: 63, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 161, column: 65, }, end: Position { line: 161, column: 69, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "domain", span: Span { start: Position { line: 161, column: 70, }, end: Position { line: 161, column: 76, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 161, column: 25, }, end: Position { line: 161, column: 78, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "accountHash", span: Span { start: Position { line: 162, column: 5, }, end: Position { line: 162, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkAccountHash", span: Span { start: Position { line: 162, column: 20, }, end: Position { line: 162, column: 33, }, }, }, ), arguments: [ Identifier( Identifier { id: "acmeServer", span: Span { start: Position { line: 162, column: 34, }, end: Position { line: 162, column: 44, }, }, }, ), Identifier( Identifier { id: "data", span: Span { start: Position { line: 162, column: 45, }, end: Position { line: 162, column: 49, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "accountDir", span: Span { start: Position { line: 163, column: 5, }, end: Position { line: 163, column: 15, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "accountDirRoot", span: Span { start: Position { line: 163, column: 18, }, end: Position { line: 163, column: 32, }, }, }, ), operator: Addition, right: Identifier( Identifier { id: "accountHash", span: Span { start: Position { line: 163, column: 35, }, end: Position { line: 163, column: 46, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "protocolOpts", span: Span { start: Position { line: 165, column: 5, }, end: Position { line: 165, column: 17, }, }, }, ), ], to: IfThenElse( IfThenElse { predicate: Identifier( Identifier { id: "useDns", span: Span { start: Position { line: 165, column: 23, }, end: Position { line: 165, column: 29, }, }, }, ), then: BinaryOperation( BinaryOperation { left: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "--dns", span: Span { start: Position { line: 166, column: 10, }, end: Position { line: 166, column: 15, }, }, }, ), ], span: Span { start: Position { line: 166, column: 9, }, end: Position { line: 166, column: 16, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 166, column: 17, }, end: Position { line: 166, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "dnsProvider", span: Span { start: Position { line: 166, column: 22, }, end: Position { line: 166, column: 33, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 166, column: 7, }, end: Position { line: 166, column: 35, }, }, }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 167, column: 10, }, end: Position { line: 167, column: 19, }, }, }, ), arguments: [ UnaryOperation( UnaryOperation { operator: Not, operand: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 167, column: 22, }, end: Position { line: 167, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "dnsPropagationCheck", span: Span { start: Position { line: 167, column: 27, }, end: Position { line: 167, column: 46, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 167, column: 21, }, end: Position { line: 167, column: 46, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "--dns.disable-cp", span: Span { start: Position { line: 167, column: 51, }, end: Position { line: 167, column: 67, }, }, }, ), ], span: Span { start: Position { line: 167, column: 50, }, end: Position { line: 167, column: 68, }, }, }, ), ], span: Span { start: Position { line: 167, column: 48, }, end: Position { line: 167, column: 70, }, }, }, ), ], }, ), operator: Concatenation, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 168, column: 10, }, end: Position { line: 168, column: 19, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 168, column: 21, }, end: Position { line: 168, column: 25, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "dnsResolver", span: Span { start: Position { line: 168, column: 26, }, end: Position { line: 168, column: 37, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 168, column: 41, }, end: Position { line: 168, column: 45, }, }, }, ), }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "--dns.resolvers", span: Span { start: Position { line: 168, column: 50, }, end: Position { line: 168, column: 65, }, }, }, ), ], span: Span { start: Position { line: 168, column: 49, }, end: Position { line: 168, column: 66, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 168, column: 67, }, end: Position { line: 168, column: 71, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "dnsResolver", span: Span { start: Position { line: 168, column: 72, }, end: Position { line: 168, column: 83, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 168, column: 47, }, end: Position { line: 168, column: 85, }, }, }, ), ], }, ), }, ), }, ), else_: IfThenElse( IfThenElse { predicate: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 169, column: 15, }, end: Position { line: 169, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenHTTP", span: Span { start: Position { line: 169, column: 20, }, end: Position { line: 169, column: 30, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 169, column: 34, }, end: Position { line: 169, column: 38, }, }, }, ), }, ), then: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "--http", span: Span { start: Position { line: 169, column: 47, }, end: Position { line: 169, column: 53, }, }, }, ), ], span: Span { start: Position { line: 169, column: 46, }, end: Position { line: 169, column: 54, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "--http.port", span: Span { start: Position { line: 169, column: 56, }, end: Position { line: 169, column: 67, }, }, }, ), ], span: Span { start: Position { line: 169, column: 55, }, end: Position { line: 169, column: 68, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 169, column: 69, }, end: Position { line: 169, column: 73, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenHTTP", span: Span { start: Position { line: 169, column: 74, }, end: Position { line: 169, column: 84, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 169, column: 44, }, end: Position { line: 169, column: 86, }, }, }, ), else_: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "--http", span: Span { start: Position { line: 170, column: 13, }, end: Position { line: 170, column: 19, }, }, }, ), ], span: Span { start: Position { line: 170, column: 12, }, end: Position { line: 170, column: 20, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "--http.webroot", span: Span { start: Position { line: 170, column: 22, }, end: Position { line: 170, column: 36, }, }, }, ), ], span: Span { start: Position { line: 170, column: 21, }, end: Position { line: 170, column: 37, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 170, column: 38, }, end: Position { line: 170, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "webroot", span: Span { start: Position { line: 170, column: 43, }, end: Position { line: 170, column: 50, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 170, column: 10, }, end: Position { line: 170, column: 52, }, }, }, ), span: Span { start: Position { line: 169, column: 12, }, end: Position { line: 170, column: 52, }, }, }, ), span: Span { start: Position { line: 165, column: 20, }, end: Position { line: 170, column: 52, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "commonOpts", span: Span { start: Position { line: 172, column: 5, }, end: Position { line: 172, column: 15, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "--accept-tos", span: Span { start: Position { line: 173, column: 8, }, end: Position { line: 173, column: 20, }, }, }, ), ], span: Span { start: Position { line: 173, column: 7, }, end: Position { line: 173, column: 21, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "--path", span: Span { start: Position { line: 174, column: 8, }, end: Position { line: 174, column: 14, }, }, }, ), ], span: Span { start: Position { line: 174, column: 7, }, end: Position { line: 174, column: 15, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: ".", span: Span { start: Position { line: 174, column: 17, }, end: Position { line: 174, column: 18, }, }, }, ), ], span: Span { start: Position { line: 174, column: 16, }, end: Position { line: 174, column: 19, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "-d", span: Span { start: Position { line: 175, column: 8, }, end: Position { line: 175, column: 10, }, }, }, ), ], span: Span { start: Position { line: 175, column: 7, }, end: Position { line: 175, column: 11, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 175, column: 12, }, end: Position { line: 175, column: 16, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "domain", span: Span { start: Position { line: 175, column: 17, }, end: Position { line: 175, column: 23, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "--email", span: Span { start: Position { line: 176, column: 8, }, end: Position { line: 176, column: 15, }, }, }, ), ], span: Span { start: Position { line: 176, column: 7, }, end: Position { line: 176, column: 16, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 176, column: 17, }, end: Position { line: 176, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "email", span: Span { start: Position { line: 176, column: 22, }, end: Position { line: 176, column: 27, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "--key-type", span: Span { start: Position { line: 177, column: 8, }, end: Position { line: 177, column: 18, }, }, }, ), ], span: Span { start: Position { line: 177, column: 7, }, end: Position { line: 177, column: 19, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 177, column: 20, }, end: Position { line: 177, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "keyType", span: Span { start: Position { line: 177, column: 25, }, end: Position { line: 177, column: 32, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 172, column: 18, }, end: Position { line: 178, column: 6, }, }, }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "protocolOpts", span: Span { start: Position { line: 178, column: 10, }, end: Position { line: 178, column: 22, }, }, }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 179, column: 10, }, end: Position { line: 179, column: 19, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "acmeServer", span: Span { start: Position { line: 179, column: 21, }, end: Position { line: 179, column: 31, }, }, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 179, column: 35, }, end: Position { line: 179, column: 39, }, }, }, ), }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "--server", span: Span { start: Position { line: 179, column: 44, }, end: Position { line: 179, column: 52, }, }, }, ), ], span: Span { start: Position { line: 179, column: 43, }, end: Position { line: 179, column: 53, }, }, }, ), Identifier( Identifier { id: "acmeServer", span: Span { start: Position { line: 179, column: 54, }, end: Position { line: 179, column: 64, }, }, }, ), ], span: Span { start: Position { line: 179, column: 41, }, end: Position { line: 179, column: 66, }, }, }, ), ], }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "concatMap", span: Span { start: Position { line: 180, column: 10, }, end: Position { line: 180, column: 19, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "name", }, ), body: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "-d", span: Span { start: Position { line: 180, column: 30, }, end: Position { line: 180, column: 32, }, }, }, ), ], span: Span { start: Position { line: 180, column: 29, }, end: Position { line: 180, column: 33, }, }, }, ), Identifier( Identifier { id: "name", span: Span { start: Position { line: 180, column: 34, }, end: Position { line: 180, column: 38, }, }, }, ), ], span: Span { start: Position { line: 180, column: 27, }, end: Position { line: 180, column: 40, }, }, }, ), span: Span { start: Position { line: 180, column: 21, }, end: Position { line: 180, column: 40, }, }, }, ), Identifier( Identifier { id: "extraDomains", span: Span { start: Position { line: 180, column: 42, }, end: Position { line: 180, column: 54, }, }, }, ), ], }, ), operator: Concatenation, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 181, column: 10, }, end: Position { line: 181, column: 14, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "extraLegoFlags", span: Span { start: Position { line: 181, column: 15, }, end: Position { line: 181, column: 29, }, }, }, ), ], default: None, }, ), }, ), }, ), }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "runOpts", span: Span { start: Position { line: 185, column: 5, }, end: Position { line: 185, column: 12, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "escapeShellArgs", span: Span { start: Position { line: 185, column: 15, }, end: Position { line: 185, column: 30, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "commonOpts", span: Span { start: Position { line: 186, column: 7, }, end: Position { line: 186, column: 17, }, }, }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "run", span: Span { start: Position { line: 187, column: 13, }, end: Position { line: 187, column: 16, }, }, }, ), ], span: Span { start: Position { line: 187, column: 12, }, end: Position { line: 187, column: 17, }, }, }, ), ], span: Span { start: Position { line: 187, column: 10, }, end: Position { line: 187, column: 19, }, }, }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 188, column: 10, }, end: Position { line: 188, column: 19, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 188, column: 20, }, end: Position { line: 188, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ocspMustStaple", span: Span { start: Position { line: 188, column: 25, }, end: Position { line: 188, column: 39, }, }, }, ), ], default: None, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "--must-staple", span: Span { start: Position { line: 188, column: 43, }, end: Position { line: 188, column: 56, }, }, }, ), ], span: Span { start: Position { line: 188, column: 42, }, end: Position { line: 188, column: 57, }, }, }, ), ], span: Span { start: Position { line: 188, column: 40, }, end: Position { line: 188, column: 59, }, }, }, ), ], }, ), operator: Concatenation, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 189, column: 10, }, end: Position { line: 189, column: 14, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "extraLegoRunFlags", span: Span { start: Position { line: 189, column: 15, }, end: Position { line: 189, column: 32, }, }, }, ), ], default: None, }, ), }, ), }, ), }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "renewOpts", span: Span { start: Position { line: 191, column: 5, }, end: Position { line: 191, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "escapeShellArgs", span: Span { start: Position { line: 191, column: 17, }, end: Position { line: 191, column: 32, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "commonOpts", span: Span { start: Position { line: 192, column: 7, }, end: Position { line: 192, column: 17, }, }, }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "renew", span: Span { start: Position { line: 193, column: 13, }, end: Position { line: 193, column: 18, }, }, }, ), ], span: Span { start: Position { line: 193, column: 12, }, end: Position { line: 193, column: 19, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "--no-random-sleep", span: Span { start: Position { line: 193, column: 21, }, end: Position { line: 193, column: 38, }, }, }, ), ], span: Span { start: Position { line: 193, column: 20, }, end: Position { line: 193, column: 39, }, }, }, ), ], span: Span { start: Position { line: 193, column: 10, }, end: Position { line: 193, column: 41, }, }, }, ), operator: Concatenation, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 194, column: 10, }, end: Position { line: 194, column: 19, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 194, column: 20, }, end: Position { line: 194, column: 24, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ocspMustStaple", span: Span { start: Position { line: 194, column: 25, }, end: Position { line: 194, column: 39, }, }, }, ), ], default: None, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "--must-staple", span: Span { start: Position { line: 194, column: 43, }, end: Position { line: 194, column: 56, }, }, }, ), ], span: Span { start: Position { line: 194, column: 42, }, end: Position { line: 194, column: 57, }, }, }, ), ], span: Span { start: Position { line: 194, column: 40, }, end: Position { line: 194, column: 59, }, }, }, ), ], }, ), operator: Concatenation, right: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 195, column: 10, }, end: Position { line: 195, column: 14, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "extraLegoRenewFlags", span: Span { start: Position { line: 195, column: 15, }, end: Position { line: 195, column: 34, }, }, }, ), ], default: None, }, ), }, ), }, ), }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "webroots", span: Span { start: Position { line: 200, column: 5, }, end: Position { line: 200, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 201, column: 7, }, end: Position { line: 201, column: 10, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "remove", span: Span { start: Position { line: 201, column: 11, }, end: Position { line: 201, column: 17, }, }, }, ), ], default: None, }, ), arguments: [ Identifier( Identifier { id: "null", span: Span { start: Position { line: 201, column: 18, }, end: Position { line: 201, column: 22, }, }, }, ), FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 202, column: 10, }, end: Position { line: 202, column: 13, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "unique", span: Span { start: Position { line: 202, column: 14, }, end: Position { line: 202, column: 20, }, }, }, ), ], default: None, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 203, column: 14, }, end: Position { line: 203, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "map", span: Span { start: Position { line: 203, column: 23, }, end: Position { line: 203, column: 26, }, }, }, ), ], default: None, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "certAttrs", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "certAttrs", span: Span { start: Position { line: 204, column: 25, }, end: Position { line: 204, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "webroot", span: Span { start: Position { line: 204, column: 35, }, end: Position { line: 204, column: 42, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 204, column: 14, }, end: Position { line: 204, column: 42, }, }, }, ), FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 205, column: 14, }, end: Position { line: 205, column: 17, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "attrValues", span: Span { start: Position { line: 205, column: 18, }, end: Position { line: 205, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 205, column: 29, }, end: Position { line: 205, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 205, column: 36, }, end: Position { line: 205, column: 44, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 205, column: 45, }, end: Position { line: 205, column: 49, }, }, }, ), Raw( PartRaw { content: "certs", span: Span { start: Position { line: 205, column: 50, }, end: Position { line: 205, column: 55, }, }, }, ), ], default: None, }, ), ], }, ), ], }, ), ], }, ), ], }, ), }, ), ], target: Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: None, attributes: [ Raw( PartRaw { content: "accountHash", span: Span { start: Position { line: 207, column: 13, }, end: Position { line: 207, column: 24, }, }, }, ), Raw( PartRaw { content: "cert", span: Span { start: Position { line: 207, column: 25, }, end: Position { line: 207, column: 29, }, }, }, ), Raw( PartRaw { content: "selfsignedDeps", span: Span { start: Position { line: 207, column: 30, }, end: Position { line: 207, column: 44, }, }, }, ), ], span: Span { start: Position { line: 206, column: 7, }, end: Position { line: 207, column: 45, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 209, column: 5, }, end: Position { line: 209, column: 10, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 209, column: 13, }, end: Position { line: 209, column: 17, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 209, column: 18, }, end: Position { line: 209, column: 23, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "renewTimer", span: Span { start: Position { line: 211, column: 5, }, end: Position { line: 211, column: 15, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 212, column: 7, }, end: Position { line: 212, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "Renew ACME Certificate for ", span: Span { start: Position { line: 212, column: 22, }, end: Position { line: 212, column: 56, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 212, column: 51, }, end: Position { line: 212, column: 55, }, }, }, ), }, ), ], span: Span { start: Position { line: 212, column: 21, }, end: Position { line: 212, column: 57, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "wantedBy", span: Span { start: Position { line: 213, column: 7, }, end: Position { line: 213, column: 15, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "timers.target", span: Span { start: Position { line: 213, column: 21, }, end: Position { line: 213, column: 34, }, }, }, ), ], span: Span { start: Position { line: 213, column: 20, }, end: Position { line: 213, column: 35, }, }, }, ), ], span: Span { start: Position { line: 213, column: 18, }, end: Position { line: 213, column: 37, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "timerConfig", span: Span { start: Position { line: 214, column: 7, }, end: Position { line: 214, column: 18, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "OnCalendar", span: Span { start: Position { line: 215, column: 9, }, end: Position { line: 215, column: 19, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 215, column: 22, }, end: Position { line: 215, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "renewInterval", span: Span { start: Position { line: 215, column: 27, }, end: Position { line: 215, column: 40, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "Unit", span: Span { start: Position { line: 216, column: 9, }, end: Position { line: 216, column: 13, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "acme-", span: Span { start: Position { line: 216, column: 17, }, end: Position { line: 216, column: 29, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 216, column: 24, }, end: Position { line: 216, column: 28, }, }, }, ), }, ), Raw( PartRaw { content: ".service", span: Span { start: Position { line: 216, column: 17, }, end: Position { line: 216, column: 37, }, }, }, ), ], span: Span { start: Position { line: 216, column: 16, }, end: Position { line: 216, column: 38, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "Persistent", span: Span { start: Position { line: 217, column: 9, }, end: Position { line: 217, column: 19, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "yes", span: Span { start: Position { line: 217, column: 23, }, end: Position { line: 217, column: 26, }, }, }, ), ], span: Span { start: Position { line: 217, column: 22, }, end: Position { line: 217, column: 27, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "AccuracySec", span: Span { start: Position { line: 225, column: 9, }, end: Position { line: 225, column: 20, }, }, }, ), ], to: String( String_ { parts: [ Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 225, column: 26, }, end: Position { line: 225, column: 34, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "_24hSecs", span: Span { start: Position { line: 225, column: 36, }, end: Position { line: 225, column: 44, }, }, }, ), operator: Division, right: Identifier( Identifier { id: "numCerts", span: Span { start: Position { line: 225, column: 47, }, end: Position { line: 225, column: 55, }, }, }, ), }, ), ], }, ), }, ), Raw( PartRaw { content: "s", span: Span { start: Position { line: 225, column: 24, }, end: Position { line: 225, column: 58, }, }, }, ), ], span: Span { start: Position { line: 225, column: 23, }, end: Position { line: 225, column: 59, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "RandomizedDelaySec", span: Span { start: Position { line: 227, column: 9, }, end: Position { line: 227, column: 27, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "24h", span: Span { start: Position { line: 227, column: 31, }, end: Position { line: 227, column: 34, }, }, }, ), ], span: Span { start: Position { line: 227, column: 30, }, end: Position { line: 227, column: 35, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "FixedRandomDelay", span: Span { start: Position { line: 228, column: 9, }, end: Position { line: 228, column: 25, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 228, column: 28, }, end: Position { line: 228, column: 32, }, }, }, ), }, ), ], span: Span { start: Position { line: 214, column: 21, }, end: Position { line: 229, column: 8, }, }, }, ), }, ), ], span: Span { start: Position { line: 211, column: 18, }, end: Position { line: 230, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "selfsignService", span: Span { start: Position { line: 232, column: 5, }, end: Position { line: 232, column: 20, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 233, column: 7, }, end: Position { line: 233, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "Generate self-signed certificate for ", span: Span { start: Position { line: 233, column: 22, }, end: Position { line: 233, column: 66, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 233, column: 61, }, end: Position { line: 233, column: 65, }, }, }, ), }, ), ], span: Span { start: Position { line: 233, column: 21, }, end: Position { line: 233, column: 67, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "after", span: Span { start: Position { line: 234, column: 7, }, end: Position { line: 234, column: 12, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "acme-selfsigned-ca.service", span: Span { start: Position { line: 234, column: 18, }, end: Position { line: 234, column: 44, }, }, }, ), ], span: Span { start: Position { line: 234, column: 17, }, end: Position { line: 234, column: 45, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme-fixperms.service", span: Span { start: Position { line: 234, column: 47, }, end: Position { line: 234, column: 68, }, }, }, ), ], span: Span { start: Position { line: 234, column: 46, }, end: Position { line: 234, column: 69, }, }, }, ), ], span: Span { start: Position { line: 234, column: 15, }, end: Position { line: 234, column: 71, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "requires", span: Span { start: Position { line: 235, column: 7, }, end: Position { line: 235, column: 15, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "acme-selfsigned-ca.service", span: Span { start: Position { line: 235, column: 21, }, end: Position { line: 235, column: 47, }, }, }, ), ], span: Span { start: Position { line: 235, column: 20, }, end: Position { line: 235, column: 48, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme-fixperms.service", span: Span { start: Position { line: 235, column: 50, }, end: Position { line: 235, column: 71, }, }, }, ), ], span: Span { start: Position { line: 235, column: 49, }, end: Position { line: 235, column: 72, }, }, }, ), ], span: Span { start: Position { line: 235, column: 18, }, end: Position { line: 235, column: 74, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 237, column: 7, }, end: Position { line: 237, column: 11, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 237, column: 19, }, end: Position { line: 237, column: 23, }, }, }, ), target: List( List { elements: [ Identifier( Identifier { id: "minica", span: Span { start: Position { line: 237, column: 27, }, end: Position { line: 237, column: 33, }, }, }, ), ], span: Span { start: Position { line: 237, column: 25, }, end: Position { line: 237, column: 35, }, }, }, ), span: Span { start: Position { line: 237, column: 14, }, end: Position { line: 237, column: 35, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "unitConfig", span: Span { start: Position { line: 239, column: 7, }, end: Position { line: 239, column: 17, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ConditionPathExists", span: Span { start: Position { line: 240, column: 9, }, end: Position { line: 240, column: 28, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "!/var/lib/acme/", span: Span { start: Position { line: 240, column: 32, }, end: Position { line: 240, column: 54, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 240, column: 49, }, end: Position { line: 240, column: 53, }, }, }, ), }, ), Raw( PartRaw { content: "/key.pem", span: Span { start: Position { line: 240, column: 32, }, end: Position { line: 240, column: 62, }, }, }, ), ], span: Span { start: Position { line: 240, column: 31, }, end: Position { line: 240, column: 63, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "StartLimitIntervalSec", span: Span { start: Position { line: 241, column: 9, }, end: Position { line: 241, column: 30, }, }, }, ), ], to: Integer( Integer { value: "0", span: Span { start: Position { line: 241, column: 33, }, end: Position { line: 241, column: 34, }, }, }, ), }, ), ], span: Span { start: Position { line: 239, column: 20, }, end: Position { line: 242, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 244, column: 7, }, end: Position { line: 244, column: 20, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "commonServiceConfig", span: Span { start: Position { line: 244, column: 23, }, end: Position { line: 244, column: 42, }, }, }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "Group", span: Span { start: Position { line: 245, column: 9, }, end: Position { line: 245, column: 14, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 245, column: 17, }, end: Position { line: 245, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 245, column: 22, }, end: Position { line: 245, column: 27, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "UMask", span: Span { start: Position { line: 246, column: 9, }, end: Position { line: 246, column: 14, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "0027", span: Span { start: Position { line: 246, column: 18, }, end: Position { line: 246, column: 22, }, }, }, ), ], span: Span { start: Position { line: 246, column: 17, }, end: Position { line: 246, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "StateDirectory", span: Span { start: Position { line: 248, column: 9, }, end: Position { line: 248, column: 23, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "acme/", span: Span { start: Position { line: 248, column: 27, }, end: Position { line: 248, column: 39, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 248, column: 34, }, end: Position { line: 248, column: 38, }, }, }, ), }, ), ], span: Span { start: Position { line: 248, column: 26, }, end: Position { line: 248, column: 40, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "BindPaths", span: Span { start: Position { line: 250, column: 9, }, end: Position { line: 250, column: 18, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/acme/.minica:/tmp/ca", span: Span { start: Position { line: 251, column: 12, }, end: Position { line: 251, column: 41, }, }, }, ), ], span: Span { start: Position { line: 251, column: 11, }, end: Position { line: 251, column: 42, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/acme/", span: Span { start: Position { line: 252, column: 12, }, end: Position { line: 252, column: 33, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 252, column: 28, }, end: Position { line: 252, column: 32, }, }, }, ), }, ), Raw( PartRaw { content: ":/tmp/", span: Span { start: Position { line: 252, column: 12, }, end: Position { line: 252, column: 39, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "keyName", span: Span { start: Position { line: 252, column: 41, }, end: Position { line: 252, column: 48, }, }, }, ), }, ), ], span: Span { start: Position { line: 252, column: 11, }, end: Position { line: 252, column: 50, }, }, }, ), ], span: Span { start: Position { line: 250, column: 21, }, end: Position { line: 253, column: 10, }, }, }, ), }, ), ], span: Span { start: Position { line: 244, column: 46, }, end: Position { line: 254, column: 8, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "script", span: Span { start: Position { line: 259, column: 7, }, end: Position { line: 259, column: 13, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "minica \\\n --ca-key ca/key.pem \\\n --ca-cert ca/cert.pem \\\n --domains ", span: Span { start: Position { line: 260, column: 1, }, end: Position { line: 263, column: 21, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "escapeShellArg", span: Span { start: Position { line: 263, column: 23, }, end: Position { line: 263, column: 37, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 263, column: 39, }, end: Position { line: 263, column: 47, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "concatStringsSep", span: Span { start: Position { line: 263, column: 48, }, end: Position { line: 263, column: 64, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: ",", span: Span { start: Position { line: 263, column: 66, }, end: Position { line: 263, column: 67, }, }, }, ), ], span: Span { start: Position { line: 263, column: 65, }, end: Position { line: 263, column: 68, }, }, }, ), BinaryOperation( BinaryOperation { left: List( List { elements: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 263, column: 72, }, end: Position { line: 263, column: 76, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "domain", span: Span { start: Position { line: 263, column: 77, }, end: Position { line: 263, column: 83, }, }, }, ), ], default: None, }, ), ], span: Span { start: Position { line: 263, column: 70, }, end: Position { line: 263, column: 85, }, }, }, ), operator: Concatenation, right: Identifier( Identifier { id: "extraDomains", span: Span { start: Position { line: 263, column: 89, }, end: Position { line: 263, column: 101, }, }, }, ), }, ), ], }, ), ], }, ), }, ), Raw( PartRaw { content: "\n\n# Create files to match directory layout for real certificates\ncd ", span: Span { start: Position { line: 260, column: 1, }, end: Position { line: 266, column: 12, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 260, column: 1, }, end: Position { line: 266, column: 13, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "keyName", span: Span { start: Position { line: 266, column: 15, }, end: Position { line: 266, column: 22, }, }, }, ), }, ), Raw( PartRaw { content: "'\ncp ../ca/cert.pem chain.pem\ncat cert.pem chain.pem > fullchain.pem\ncat key.pem fullchain.pem > full.pem\n\n# Group might change between runs, re-apply it\nchown ", span: Span { start: Position { line: 260, column: 1, }, end: Position { line: 272, column: 15, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 260, column: 1, }, end: Position { line: 272, column: 16, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "user", span: Span { start: Position { line: 272, column: 18, }, end: Position { line: 272, column: 22, }, }, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 260, column: 1, }, end: Position { line: 272, column: 24, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 272, column: 26, }, end: Position { line: 272, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 272, column: 31, }, end: Position { line: 272, column: 36, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "' *\n\n# Default permissions make the files unreadable by group + anon\n# Need to be readable by group\nchmod 640 *\n", span: Span { start: Position { line: 260, column: 1, }, end: Position { line: 277, column: 7, }, }, }, ), ], span: Span { start: Position { line: 259, column: 16, }, end: Position { line: 277, column: 9, }, }, }, ), }, ), ], span: Span { start: Position { line: 232, column: 23, }, end: Position { line: 278, column: 6, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "renewService", span: Span { start: Position { line: 280, column: 5, }, end: Position { line: 280, column: 17, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 281, column: 7, }, end: Position { line: 281, column: 18, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "Renew ACME certificate for ", span: Span { start: Position { line: 281, column: 22, }, end: Position { line: 281, column: 56, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 281, column: 51, }, end: Position { line: 281, column: 55, }, }, }, ), }, ), ], span: Span { start: Position { line: 281, column: 21, }, end: Position { line: 281, column: 57, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "after", span: Span { start: Position { line: 282, column: 7, }, end: Position { line: 282, column: 12, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "network.target", span: Span { start: Position { line: 282, column: 18, }, end: Position { line: 282, column: 32, }, }, }, ), ], span: Span { start: Position { line: 282, column: 17, }, end: Position { line: 282, column: 33, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "network-online.target", span: Span { start: Position { line: 282, column: 35, }, end: Position { line: 282, column: 56, }, }, }, ), ], span: Span { start: Position { line: 282, column: 34, }, end: Position { line: 282, column: 57, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme-fixperms.service", span: Span { start: Position { line: 282, column: 59, }, end: Position { line: 282, column: 80, }, }, }, ), ], span: Span { start: Position { line: 282, column: 58, }, end: Position { line: 282, column: 81, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "nss-lookup.target", span: Span { start: Position { line: 282, column: 83, }, end: Position { line: 282, column: 100, }, }, }, ), ], span: Span { start: Position { line: 282, column: 82, }, end: Position { line: 282, column: 101, }, }, }, ), ], span: Span { start: Position { line: 282, column: 15, }, end: Position { line: 282, column: 103, }, }, }, ), operator: Concatenation, right: Identifier( Identifier { id: "selfsignedDeps", span: Span { start: Position { line: 282, column: 107, }, end: Position { line: 282, column: 121, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "wants", span: Span { start: Position { line: 283, column: 7, }, end: Position { line: 283, column: 12, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "network-online.target", span: Span { start: Position { line: 283, column: 18, }, end: Position { line: 283, column: 39, }, }, }, ), ], span: Span { start: Position { line: 283, column: 17, }, end: Position { line: 283, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme-fixperms.service", span: Span { start: Position { line: 283, column: 42, }, end: Position { line: 283, column: 63, }, }, }, ), ], span: Span { start: Position { line: 283, column: 41, }, end: Position { line: 283, column: 64, }, }, }, ), ], span: Span { start: Position { line: 283, column: 15, }, end: Position { line: 283, column: 66, }, }, }, ), operator: Concatenation, right: Identifier( Identifier { id: "selfsignedDeps", span: Span { start: Position { line: 283, column: 70, }, end: Position { line: 283, column: 84, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "wantedBy", span: Span { start: Position { line: 286, column: 7, }, end: Position { line: 286, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionals", span: Span { start: Position { line: 286, column: 18, }, end: Position { line: 286, column: 27, }, }, }, ), arguments: [ UnaryOperation( UnaryOperation { operator: Not, operand: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 286, column: 30, }, end: Position { line: 286, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "boot", span: Span { start: Position { line: 286, column: 37, }, end: Position { line: 286, column: 41, }, }, }, ), Raw( PartRaw { content: "isContainer", span: Span { start: Position { line: 286, column: 42, }, end: Position { line: 286, column: 53, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 286, column: 29, }, end: Position { line: 286, column: 53, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "multi-user.target", span: Span { start: Position { line: 286, column: 58, }, end: Position { line: 286, column: 75, }, }, }, ), ], span: Span { start: Position { line: 286, column: 57, }, end: Position { line: 286, column: 76, }, }, }, ), ], span: Span { start: Position { line: 286, column: 55, }, end: Position { line: 286, column: 78, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 288, column: 7, }, end: Position { line: 288, column: 11, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 288, column: 19, }, end: Position { line: 288, column: 23, }, }, }, ), target: List( List { elements: [ Identifier( Identifier { id: "lego", span: Span { start: Position { line: 288, column: 27, }, end: Position { line: 288, column: 31, }, }, }, ), Identifier( Identifier { id: "coreutils", span: Span { start: Position { line: 288, column: 32, }, end: Position { line: 288, column: 41, }, }, }, ), Identifier( Identifier { id: "diffutils", span: Span { start: Position { line: 288, column: 42, }, end: Position { line: 288, column: 51, }, }, }, ), Identifier( Identifier { id: "openssl", span: Span { start: Position { line: 288, column: 52, }, end: Position { line: 288, column: 59, }, }, }, ), ], span: Span { start: Position { line: 288, column: 25, }, end: Position { line: 288, column: 61, }, }, }, ), span: Span { start: Position { line: 288, column: 14, }, end: Position { line: 288, column: 61, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "serviceConfig", span: Span { start: Position { line: 290, column: 7, }, end: Position { line: 290, column: 20, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "commonServiceConfig", span: Span { start: Position { line: 290, column: 23, }, end: Position { line: 290, column: 42, }, }, }, ), operator: Update, right: BinaryOperation( BinaryOperation { left: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "Group", span: Span { start: Position { line: 291, column: 9, }, end: Position { line: 291, column: 14, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 291, column: 17, }, end: Position { line: 291, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 291, column: 22, }, end: Position { line: 291, column: 27, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "StateDirectory", span: Span { start: Position { line: 296, column: 9, }, end: Position { line: 296, column: 23, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "acme/", span: Span { start: Position { line: 297, column: 12, }, end: Position { line: 297, column: 24, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 297, column: 19, }, end: Position { line: 297, column: 23, }, }, }, ), }, ), ], span: Span { start: Position { line: 297, column: 11, }, end: Position { line: 297, column: 25, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme/.lego/", span: Span { start: Position { line: 298, column: 12, }, end: Position { line: 298, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 298, column: 25, }, end: Position { line: 298, column: 29, }, }, }, ), }, ), ], span: Span { start: Position { line: 298, column: 11, }, end: Position { line: 298, column: 31, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme/.lego/", span: Span { start: Position { line: 299, column: 12, }, end: Position { line: 299, column: 30, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 299, column: 25, }, end: Position { line: 299, column: 29, }, }, }, ), }, ), Raw( PartRaw { content: "/", span: Span { start: Position { line: 299, column: 12, }, end: Position { line: 299, column: 31, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "certDir", span: Span { start: Position { line: 299, column: 33, }, end: Position { line: 299, column: 40, }, }, }, ), }, ), ], span: Span { start: Position { line: 299, column: 11, }, end: Position { line: 299, column: 42, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme/.lego/accounts/", span: Span { start: Position { line: 300, column: 12, }, end: Position { line: 300, column: 46, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "accountHash", span: Span { start: Position { line: 300, column: 34, }, end: Position { line: 300, column: 45, }, }, }, ), }, ), ], span: Span { start: Position { line: 300, column: 11, }, end: Position { line: 300, column: 47, }, }, }, ), ], span: Span { start: Position { line: 296, column: 26, }, end: Position { line: 301, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ReadWritePaths", span: Span { start: Position { line: 303, column: 9, }, end: Position { line: 303, column: 23, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "commonServiceConfig", span: Span { start: Position { line: 303, column: 26, }, end: Position { line: 303, column: 45, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "ReadWritePaths", span: Span { start: Position { line: 303, column: 46, }, end: Position { line: 303, column: 60, }, }, }, ), ], default: None, }, ), operator: Concatenation, right: Identifier( Identifier { id: "webroots", span: Span { start: Position { line: 303, column: 64, }, end: Position { line: 303, column: 72, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "BindPaths", span: Span { start: Position { line: 306, column: 9, }, end: Position { line: 306, column: 18, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "accountDir", span: Span { start: Position { line: 307, column: 14, }, end: Position { line: 307, column: 24, }, }, }, ), }, ), Raw( PartRaw { content: ":/tmp/accounts", span: Span { start: Position { line: 307, column: 12, }, end: Position { line: 307, column: 39, }, }, }, ), ], span: Span { start: Position { line: 307, column: 11, }, end: Position { line: 307, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/acme/", span: Span { start: Position { line: 308, column: 12, }, end: Position { line: 308, column: 33, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 308, column: 28, }, end: Position { line: 308, column: 32, }, }, }, ), }, ), Raw( PartRaw { content: ":/tmp/out", span: Span { start: Position { line: 308, column: 12, }, end: Position { line: 308, column: 42, }, }, }, ), ], span: Span { start: Position { line: 308, column: 11, }, end: Position { line: 308, column: 43, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/acme/.lego/", span: Span { start: Position { line: 309, column: 12, }, end: Position { line: 309, column: 39, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 309, column: 34, }, end: Position { line: 309, column: 38, }, }, }, ), }, ), Raw( PartRaw { content: "/", span: Span { start: Position { line: 309, column: 12, }, end: Position { line: 309, column: 40, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "certDir", span: Span { start: Position { line: 309, column: 42, }, end: Position { line: 309, column: 49, }, }, }, ), }, ), Raw( PartRaw { content: ":/tmp/certificates", span: Span { start: Position { line: 309, column: 12, }, end: Position { line: 309, column: 68, }, }, }, ), ], span: Span { start: Position { line: 309, column: 11, }, end: Position { line: 309, column: 69, }, }, }, ), ], span: Span { start: Position { line: 306, column: 21, }, end: Position { line: 310, column: 10, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "EnvironmentFile", span: Span { start: Position { line: 313, column: 9, }, end: Position { line: 313, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 313, column: 27, }, end: Position { line: 313, column: 31, }, }, }, ), arguments: [ Identifier( Identifier { id: "useDns", span: Span { start: Position { line: 313, column: 32, }, end: Position { line: 313, column: 38, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 313, column: 39, }, end: Position { line: 313, column: 43, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "credentialsFile", span: Span { start: Position { line: 313, column: 44, }, end: Position { line: 313, column: 59, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ExecStartPost", span: Span { start: Position { line: 316, column: 9, }, end: Position { line: 316, column: 22, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: String( String_ { parts: [ Raw( PartRaw { content: "+", span: Span { start: Position { line: 316, column: 26, }, end: Position { line: 316, column: 27, }, }, }, ), ], span: Span { start: Position { line: 316, column: 25, }, end: Position { line: 316, column: 28, }, }, }, ), operator: Addition, right: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "pkgs", span: Span { start: Position { line: 316, column: 32, }, end: Position { line: 316, column: 36, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "writeShellScript", span: Span { start: Position { line: 316, column: 37, }, end: Position { line: 316, column: 53, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "acme-postrun", span: Span { start: Position { line: 316, column: 55, }, end: Position { line: 316, column: 67, }, }, }, ), ], span: Span { start: Position { line: 316, column: 54, }, end: Position { line: 316, column: 68, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "cd /var/lib/acme/", span: Span { start: Position { line: 317, column: 1, }, end: Position { line: 317, column: 28, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "escapeShellArg", span: Span { start: Position { line: 317, column: 30, }, end: Position { line: 317, column: 44, }, }, }, ), arguments: [ Identifier( Identifier { id: "cert", span: Span { start: Position { line: 317, column: 45, }, end: Position { line: 317, column: 49, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\nif [ -e renewed ]; then\n rm renewed\n ", span: Span { start: Position { line: 317, column: 1, }, end: Position { line: 320, column: 13, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 320, column: 15, }, end: Position { line: 320, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "postRun", span: Span { start: Position { line: 320, column: 20, }, end: Position { line: 320, column: 27, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "\n ", span: Span { start: Position { line: 317, column: 1, }, end: Position { line: 321, column: 13, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 321, column: 15, }, end: Position { line: 321, column: 29, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 321, column: 31, }, end: Position { line: 321, column: 35, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "reloadServices", span: Span { start: Position { line: 321, column: 36, }, end: Position { line: 321, column: 50, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: List( List { elements: [], span: Span { start: Position { line: 321, column: 54, }, end: Position { line: 321, column: 56, }, }, }, ), }, ), String( String_ { parts: [ Raw( PartRaw { content: "systemctl --no-block try-reload-or-restart ", span: Span { start: Position { line: 322, column: 18, }, end: Position { line: 322, column: 99, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "escapeShellArgs", span: Span { start: Position { line: 322, column: 63, }, end: Position { line: 322, column: 78, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 322, column: 79, }, end: Position { line: 322, column: 83, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "reloadServices", span: Span { start: Position { line: 322, column: 84, }, end: Position { line: 322, column: 98, }, }, }, ), ], default: None, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 322, column: 17, }, end: Position { line: 322, column: 100, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\nfi\n", span: Span { start: Position { line: 317, column: 1, }, end: Position { line: 325, column: 9, }, }, }, ), ], span: Span { start: Position { line: 316, column: 69, }, end: Position { line: 325, column: 11, }, }, }, ), ], }, ), }, ), }, ), ], span: Span { start: Position { line: 290, column: 46, }, end: Position { line: 326, column: 8, }, }, }, ), operator: Update, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalAttrs", span: Span { start: Position { line: 326, column: 12, }, end: Position { line: 326, column: 25, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 326, column: 27, }, end: Position { line: 326, column: 31, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenHTTP", span: Span { start: Position { line: 326, column: 32, }, end: Position { line: 326, column: 42, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 326, column: 46, }, end: Position { line: 326, column: 50, }, }, }, ), }, ), operator: LogicalAnd, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toInt", span: Span { start: Position { line: 326, column: 54, }, end: Position { line: 326, column: 59, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "elemAt", span: Span { start: Position { line: 326, column: 61, }, end: Position { line: 326, column: 67, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "splitString", span: Span { start: Position { line: 326, column: 69, }, end: Position { line: 326, column: 80, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: ":", span: Span { start: Position { line: 326, column: 82, }, end: Position { line: 326, column: 83, }, }, }, ), ], span: Span { start: Position { line: 326, column: 81, }, end: Position { line: 326, column: 84, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 326, column: 85, }, end: Position { line: 326, column: 89, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenHTTP", span: Span { start: Position { line: 326, column: 90, }, end: Position { line: 326, column: 100, }, }, }, ), ], default: None, }, ), ], }, ), Integer( Integer { value: "1", span: Span { start: Position { line: 326, column: 102, }, end: Position { line: 326, column: 103, }, }, }, ), ], }, ), ], }, ), operator: LessThan, right: Integer( Integer { value: "1024", span: Span { start: Position { line: 326, column: 107, }, end: Position { line: 326, column: 111, }, }, }, ), }, ), }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "CapabilityBoundingSet", span: Span { start: Position { line: 327, column: 9, }, end: Position { line: 327, column: 30, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "CAP_NET_BIND_SERVICE", span: Span { start: Position { line: 327, column: 36, }, end: Position { line: 327, column: 56, }, }, }, ), ], span: Span { start: Position { line: 327, column: 35, }, end: Position { line: 327, column: 57, }, }, }, ), ], span: Span { start: Position { line: 327, column: 33, }, end: Position { line: 327, column: 59, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "AmbientCapabilities", span: Span { start: Position { line: 328, column: 9, }, end: Position { line: 328, column: 28, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "CAP_NET_BIND_SERVICE", span: Span { start: Position { line: 328, column: 34, }, end: Position { line: 328, column: 54, }, }, }, ), ], span: Span { start: Position { line: 328, column: 33, }, end: Position { line: 328, column: 55, }, }, }, ), ], span: Span { start: Position { line: 328, column: 31, }, end: Position { line: 328, column: 57, }, }, }, ), }, ), ], span: Span { start: Position { line: 326, column: 113, }, end: Position { line: 329, column: 8, }, }, }, ), ], }, ), }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "script", span: Span { start: Position { line: 332, column: 7, }, end: Position { line: 332, column: 13, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 333, column: 9, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 333, column: 11, }, end: Position { line: 333, column: 25, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 333, column: 26, }, end: Position { line: 333, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "enableDebugLogs", span: Span { start: Position { line: 333, column: 31, }, end: Position { line: 333, column: 46, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "set -x", span: Span { start: Position { line: 333, column: 48, }, end: Position { line: 333, column: 54, }, }, }, ), ], span: Span { start: Position { line: 333, column: 47, }, end: Position { line: 333, column: 55, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\nset -euo pipefail\n\n# This reimplements the expiration date check, but without querying\n# the acme server first. By doing this offline, we avoid errors\n# when the network or DNS are unavailable, which can happen during\n# nixos-rebuild switch.\nis_expiration_skippable() {\n pem=$1\n\n # This function relies on set -e to exit early if any of the\n # conditions or programs fail.\n\n [[ -e $pem ]]\n\n expiration_line=\"$(\n set -euxo pipefail\n openssl x509 -noout -enddate <$pem \\\n | grep notAfter \\\n | sed -e 's/^notAfter=//'\n )\"\n [[ -n \"$expiration_line\" ]]\n\n expiration_date=\"$(date -d \"$expiration_line\" +%s)\"\n now=\"$(date +%s)\"\n expiration_s=$[expiration_date - now]\n expiration_days=$[expiration_s / (3600 * 24)] # rounds down\n\n [[ $expiration_days -gt ", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 361, column: 35, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 361, column: 37, }, end: Position { line: 361, column: 45, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 361, column: 46, }, end: Position { line: 361, column: 50, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "validMinDays", span: Span { start: Position { line: 361, column: 51, }, end: Position { line: 361, column: 63, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: " ]]\n}\n\n", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 364, column: 9, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 364, column: 11, }, end: Position { line: 364, column: 25, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 364, column: 27, }, end: Position { line: 364, column: 31, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "webroot", span: Span { start: Position { line: 364, column: 32, }, end: Position { line: 364, column: 39, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 364, column: 43, }, end: Position { line: 364, column: 47, }, }, }, ), }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "# Ensure the webroot exists. Fixing group is required in case configuration was changed between runs.\n# Lego will fail if the webroot does not exist at all.\n(\n mkdir -p ", span: Span { start: Position { line: 365, column: 1, }, end: Position { line: 368, column: 22, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 365, column: 1, }, end: Position { line: 368, column: 23, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 368, column: 25, }, end: Position { line: 368, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "webroot", span: Span { start: Position { line: 368, column: 30, }, end: Position { line: 368, column: 37, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/.well-known/acme-challenge' \\\n && chgrp ", span: Span { start: Position { line: 365, column: 1, }, end: Position { line: 369, column: 22, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 365, column: 1, }, end: Position { line: 369, column: 23, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 369, column: 25, }, end: Position { line: 369, column: 29, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 369, column: 30, }, end: Position { line: 369, column: 35, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "' ", span: Span { start: Position { line: 365, column: 1, }, end: Position { line: 369, column: 38, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 369, column: 40, }, end: Position { line: 369, column: 44, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "webroot", span: Span { start: Position { line: 369, column: 45, }, end: Position { line: 369, column: 52, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/.well-known/acme-challenge\n) || (\n echo 'Please ensure ", span: Span { start: Position { line: 365, column: 1, }, end: Position { line: 371, column: 33, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 371, column: 35, }, end: Position { line: 371, column: 39, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "webroot", span: Span { start: Position { line: 371, column: 40, }, end: Position { line: 371, column: 47, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "/.well-known/acme-challenge exists and is writable by acme:", span: Span { start: Position { line: 365, column: 1, }, end: Position { line: 371, column: 107, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 371, column: 109, }, end: Position { line: 371, column: 113, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 371, column: 114, }, end: Position { line: 371, column: 119, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "' \\\n && exit 1\n)\n", span: Span { start: Position { line: 365, column: 1, }, end: Position { line: 374, column: 9, }, }, }, ), ], span: Span { start: Position { line: 364, column: 49, }, end: Position { line: 374, column: 11, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n\necho ", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 376, column: 14, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 376, column: 15, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "domainHash", span: Span { start: Position { line: 376, column: 17, }, end: Position { line: 376, column: 27, }, }, }, ), }, ), Raw( PartRaw { content: "' > domainhash.txt\n\n# Check if we can renew.\n# We can only renew if the list of domains has not changed.\n# We also need an account key. Avoids #190493\nif cmp -s domainhash.txt certificates/domainhash.txt && [ -e 'certificates/", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 381, column: 84, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "keyName", span: Span { start: Position { line: 381, column: 86, }, end: Position { line: 381, column: 93, }, }, }, ), }, ), Raw( PartRaw { content: ".key' -a -e 'certificates/", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 381, column: 120, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "keyName", span: Span { start: Position { line: 381, column: 122, }, end: Position { line: 381, column: 129, }, }, }, ), }, ), Raw( PartRaw { content: ".crt' -a -n \"$(find accounts -name ", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 381, column: 165, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 381, column: 166, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 381, column: 168, }, end: Position { line: 381, column: 172, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "email", span: Span { start: Position { line: 381, column: 173, }, end: Position { line: 381, column: 178, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ".key')\" ]; then\n\n # Even if a cert is not expired, it may be revoked by the CA.\n # Try to renew, and silently fail if the cert is not expired.\n # Avoids #85794 and resolves #129838\n if ! lego ", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 386, column: 21, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "renewOpts", span: Span { start: Position { line: 386, column: 23, }, end: Position { line: 386, column: 32, }, }, }, ), }, ), Raw( PartRaw { content: " --days ", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 386, column: 41, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 386, column: 43, }, end: Position { line: 386, column: 51, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 386, column: 52, }, end: Position { line: 386, column: 56, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "validMinDays", span: Span { start: Position { line: 386, column: 57, }, end: Position { line: 386, column: 69, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: "; then\n if is_expiration_skippable out/full.pem; then\n echo 1>&2 \"nixos-acme: Ignoring failed renewal because expiration isn't within the coming ", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 388, column: 105, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "toString", span: Span { start: Position { line: 388, column: 107, }, end: Position { line: 388, column: 115, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 388, column: 116, }, end: Position { line: 388, column: 120, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "validMinDays", span: Span { start: Position { line: 388, column: 121, }, end: Position { line: 388, column: 133, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Raw( PartRaw { content: " days\"\n else\n # High number to avoid Systemd reserved codes.\n exit 11\n fi\n fi\n\n# Otherwise do a full run\nelif ! lego ", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 396, column: 21, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "runOpts", span: Span { start: Position { line: 396, column: 23, }, end: Position { line: 396, column: 30, }, }, }, ), }, ), Raw( PartRaw { content: "; then\n # Produce a nice error for those doing their first nixos-rebuild with these certs\n echo Failed to fetch certificates. \\\n This may mean your DNS records are set up incorrectly. \\\n ", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 400, column: 13, }, }, }, ), Interpolation( PartInterpolation { expression: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalString", span: Span { start: Position { line: 400, column: 15, }, end: Position { line: 400, column: 29, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 400, column: 31, }, end: Position { line: 400, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "preliminarySelfsigned", span: Span { start: Position { line: 400, column: 35, }, end: Position { line: 400, column: 56, }, }, }, ), ], default: None, }, ), String( String_ { parts: [ Raw( PartRaw { content: "Selfsigned certs are in place and dependant services will still start.", span: Span { start: Position { line: 400, column: 59, }, end: Position { line: 400, column: 129, }, }, }, ), ], span: Span { start: Position { line: 400, column: 58, }, end: Position { line: 400, column: 130, }, }, }, ), ], }, ), }, ), Raw( PartRaw { content: "\n # Exit 10 so that users can potentially amend SuccessExitStatus to ignore this error.\n # High number to avoid Systemd reserved codes.\n exit 10\nfi\n\nmv domainhash.txt certificates/\n\n# Group might change between runs, re-apply it\nchown ", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 409, column: 15, }, }, }, ), Raw( PartRaw { content: "'", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 409, column: 16, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "user", span: Span { start: Position { line: 409, column: 18, }, end: Position { line: 409, column: 22, }, }, }, ), }, ), Raw( PartRaw { content: ":", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 409, column: 24, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 409, column: 26, }, end: Position { line: 409, column: 30, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 409, column: 31, }, end: Position { line: 409, column: 36, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: "' certificates/*\n\n# Copy all certs to the \"real\" certs directory\nif ! cmp -s 'certificates/", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 412, column: 35, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "keyName", span: Span { start: Position { line: 412, column: 37, }, end: Position { line: 412, column: 44, }, }, }, ), }, ), Raw( PartRaw { content: ".crt' out/fullchain.pem; then\n touch out/renewed\n echo Installing new certificate\n cp -vp 'certificates/", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 415, column: 32, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "keyName", span: Span { start: Position { line: 415, column: 34, }, end: Position { line: 415, column: 41, }, }, }, ), }, ), Raw( PartRaw { content: ".crt' out/fullchain.pem\n cp -vp 'certificates/", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 416, column: 32, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "keyName", span: Span { start: Position { line: 416, column: 34, }, end: Position { line: 416, column: 41, }, }, }, ), }, ), Raw( PartRaw { content: ".key' out/key.pem\n cp -vp 'certificates/", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 417, column: 32, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "keyName", span: Span { start: Position { line: 417, column: 34, }, end: Position { line: 417, column: 41, }, }, }, ), }, ), Raw( PartRaw { content: ".issuer.crt' out/chain.pem\n ln -sf fullchain.pem out/cert.pem\n cat out/key.pem out/fullchain.pem > out/full.pem\nfi\n\n# By default group will have no access to the cert files.\n# This chmod will fix that.\nchmod 640 out/*\n", span: Span { start: Position { line: 333, column: 1, }, end: Position { line: 425, column: 7, }, }, }, ), ], span: Span { start: Position { line: 332, column: 16, }, end: Position { line: 425, column: 9, }, }, }, ), }, ), ], span: Span { start: Position { line: 280, column: 20, }, end: Position { line: 426, column: 6, }, }, }, ), }, ), ], span: Span { start: Position { line: 206, column: 6, }, end: Position { line: 427, column: 4, }, }, }, ), span: Span { start: Position { line: 131, column: 30, }, end: Position { line: 427, column: 4, }, }, }, ), span: Span { start: Position { line: 131, column: 24, }, end: Position { line: 427, column: 4, }, }, }, ), span: Span { start: Position { line: 131, column: 18, }, end: Position { line: 427, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "certConfigs", span: Span { start: Position { line: 429, column: 3, }, end: Position { line: 429, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrs", span: Span { start: Position { line: 429, column: 17, }, end: Position { line: 429, column: 25, }, }, }, ), arguments: [ Identifier( Identifier { id: "certToConfig", span: Span { start: Position { line: 429, column: 26, }, end: Position { line: 429, column: 38, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 429, column: 39, }, end: Position { line: 429, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "certs", span: Span { start: Position { line: 429, column: 43, }, end: Position { line: 429, column: 48, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "inheritableModule", span: Span { start: Position { line: 433, column: 3, }, end: Position { line: 433, column: 20, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "isDefaults", }, ), body: Function( Function { head: Destructured( FunctionHeadDestructured { ellipsis: true, identifier: None, arguments: [ FunctionHeadDestructuredArgument { identifier: "config", default: None, }, ], }, ), body: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultAndText", span: Span { start: Position { line: 434, column: 5, }, end: Position { line: 434, column: 19, }, }, }, ), ], to: Function( Function { head: Simple( FunctionHeadSimple { identifier: "name", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "default", }, ), body: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 438, column: 7, }, end: Position { line: 438, column: 14, }, }, }, ), ], to: IfThenElse( IfThenElse { predicate: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "isDefaults", span: Span { start: Position { line: 438, column: 20, }, end: Position { line: 438, column: 30, }, }, }, ), operator: LogicalOr, right: UnaryOperation( UnaryOperation { operator: Not, operand: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 438, column: 36, }, end: Position { line: 438, column: 42, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "inheritDefaults", span: Span { start: Position { line: 438, column: 43, }, end: Position { line: 438, column: 58, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 438, column: 34, }, end: Position { line: 438, column: 58, }, }, }, ), }, ), then: Identifier( Identifier { id: "default", span: Span { start: Position { line: 438, column: 64, }, end: Position { line: 438, column: 71, }, }, }, ), else_: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 438, column: 77, }, end: Position { line: 438, column: 80, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "defaults", span: Span { start: Position { line: 438, column: 81, }, end: Position { line: 438, column: 89, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "name", span: Span { start: Position { line: 438, column: 92, }, end: Position { line: 438, column: 96, }, }, }, ), }, ), ], default: None, }, ), span: Span { start: Position { line: 438, column: 17, }, end: Position { line: 438, column: 97, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 443, column: 7, }, end: Position { line: 443, column: 18, }, }, }, ), ], to: IfThenElse( IfThenElse { predicate: Identifier( Identifier { id: "isDefaults", span: Span { start: Position { line: 443, column: 24, }, end: Position { line: 443, column: 34, }, }, }, ), then: Identifier( Identifier { id: "default", span: Span { start: Position { line: 443, column: 40, }, end: Position { line: 443, column: 47, }, }, }, ), else_: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 443, column: 53, }, end: Position { line: 443, column: 70, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "config.security.acme.defaults.", span: Span { start: Position { line: 443, column: 72, }, end: Position { line: 443, column: 109, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "name", span: Span { start: Position { line: 443, column: 104, }, end: Position { line: 443, column: 108, }, }, }, ), }, ), ], span: Span { start: Position { line: 443, column: 71, }, end: Position { line: 443, column: 110, }, }, }, ), ], }, ), span: Span { start: Position { line: 443, column: 21, }, end: Position { line: 443, column: 110, }, }, }, ), }, ), ], span: Span { start: Position { line: 434, column: 37, }, end: Position { line: 444, column: 6, }, }, }, ), span: Span { start: Position { line: 434, column: 28, }, end: Position { line: 444, column: 6, }, }, }, ), span: Span { start: Position { line: 434, column: 22, }, end: Position { line: 444, column: 6, }, }, }, ), }, ), ], target: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 446, column: 5, }, end: Position { line: 446, column: 12, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "validMinDays", span: Span { start: Position { line: 447, column: 7, }, end: Position { line: 447, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 447, column: 22, }, end: Position { line: 447, column: 30, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 448, column: 9, }, end: Position { line: 448, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 448, column: 16, }, end: Position { line: 448, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "int", span: Span { start: Position { line: 448, column: 22, }, end: Position { line: 448, column: 25, }, }, }, ), ], default: None, }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 449, column: 18, }, end: Position { line: 449, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "validMinDays", span: Span { start: Position { line: 449, column: 34, }, end: Position { line: 449, column: 46, }, }, }, ), ], span: Span { start: Position { line: 449, column: 33, }, end: Position { line: 449, column: 47, }, }, }, ), Integer( Integer { value: "30", span: Span { start: Position { line: 449, column: 48, }, end: Position { line: 449, column: 50, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 449, column: 52, }, end: Position { line: 449, column: 59, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 449, column: 60, }, end: Position { line: 449, column: 71, }, }, }, ), ], span: Span { start: Position { line: 447, column: 32, }, end: Position { line: 449, column: 72, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 450, column: 9, }, end: Position { line: 450, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 450, column: 23, }, end: Position { line: 450, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 450, column: 27, }, end: Position { line: 450, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Minimum remaining validity before renewal in days.", span: Span { start: Position { line: 450, column: 34, }, end: Position { line: 450, column: 84, }, }, }, ), ], span: Span { start: Position { line: 450, column: 33, }, end: Position { line: 450, column: 85, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 447, column: 31, }, end: Position { line: 451, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "renewInterval", span: Span { start: Position { line: 453, column: 7, }, end: Position { line: 453, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 453, column: 23, }, end: Position { line: 453, column: 31, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 454, column: 9, }, end: Position { line: 454, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 454, column: 16, }, end: Position { line: 454, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 454, column: 22, }, end: Position { line: 454, column: 25, }, }, }, ), ], default: None, }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 455, column: 18, }, end: Position { line: 455, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "renewInterval", span: Span { start: Position { line: 455, column: 34, }, end: Position { line: 455, column: 47, }, }, }, ), ], span: Span { start: Position { line: 455, column: 33, }, end: Position { line: 455, column: 48, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "daily", span: Span { start: Position { line: 455, column: 50, }, end: Position { line: 455, column: 55, }, }, }, ), ], span: Span { start: Position { line: 455, column: 49, }, end: Position { line: 455, column: 56, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 455, column: 58, }, end: Position { line: 455, column: 65, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 455, column: 66, }, end: Position { line: 455, column: 77, }, }, }, ), ], span: Span { start: Position { line: 453, column: 33, }, end: Position { line: 455, column: 78, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 456, column: 9, }, end: Position { line: 456, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 456, column: 23, }, end: Position { line: 456, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 456, column: 27, }, end: Position { line: 456, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Systemd calendar expression when to check for renewal. See\n{manpage}`systemd.time(7)`.\n", span: Span { start: Position { line: 457, column: 1, }, end: Position { line: 459, column: 9, }, }, }, ), ], span: Span { start: Position { line: 456, column: 33, }, end: Position { line: 459, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 453, column: 32, }, end: Position { line: 460, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "enableDebugLogs", span: Span { start: Position { line: 462, column: 7, }, end: Position { line: 462, column: 22, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkEnableOption", span: Span { start: Position { line: 462, column: 25, }, end: Position { line: 462, column: 39, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 462, column: 41, }, end: Position { line: 462, column: 44, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 462, column: 45, }, end: Position { line: 462, column: 50, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "debug logging for this certificate", span: Span { start: Position { line: 462, column: 52, }, end: Position { line: 462, column: 86, }, }, }, ), ], span: Span { start: Position { line: 462, column: 51, }, end: Position { line: 462, column: 87, }, }, }, ), ], }, ), ], }, ), operator: Update, right: Map( Map { recursive: false, bindings: [ Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 463, column: 18, }, end: Position { line: 463, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "enableDebugLogs", span: Span { start: Position { line: 463, column: 34, }, end: Position { line: 463, column: 49, }, }, }, ), ], span: Span { start: Position { line: 463, column: 33, }, end: Position { line: 463, column: 50, }, }, }, ), Identifier( Identifier { id: "true", span: Span { start: Position { line: 463, column: 51, }, end: Position { line: 463, column: 55, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 463, column: 57, }, end: Position { line: 463, column: 64, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 463, column: 65, }, end: Position { line: 463, column: 76, }, }, }, ), ], span: Span { start: Position { line: 462, column: 93, }, end: Position { line: 463, column: 77, }, }, }, ), ], span: Span { start: Position { line: 462, column: 92, }, end: Position { line: 464, column: 8, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "webroot", span: Span { start: Position { line: 466, column: 7, }, end: Position { line: 466, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 466, column: 17, }, end: Position { line: 466, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 467, column: 9, }, end: Position { line: 467, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 467, column: 16, }, end: Position { line: 467, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nullOr", span: Span { start: Position { line: 467, column: 22, }, end: Position { line: 467, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 467, column: 29, }, end: Position { line: 467, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 467, column: 35, }, end: Position { line: 467, column: 38, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 468, column: 18, }, end: Position { line: 468, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "webroot", span: Span { start: Position { line: 468, column: 34, }, end: Position { line: 468, column: 41, }, }, }, ), ], span: Span { start: Position { line: 468, column: 33, }, end: Position { line: 468, column: 42, }, }, }, ), Identifier( Identifier { id: "null", span: Span { start: Position { line: 468, column: 43, }, end: Position { line: 468, column: 47, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 468, column: 49, }, end: Position { line: 468, column: 56, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 468, column: 57, }, end: Position { line: 468, column: 68, }, }, }, ), ], span: Span { start: Position { line: 466, column: 27, }, end: Position { line: 468, column: 69, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 469, column: 9, }, end: Position { line: 469, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/acme/acme-challenge", span: Span { start: Position { line: 469, column: 20, }, end: Position { line: 469, column: 48, }, }, }, ), ], span: Span { start: Position { line: 469, column: 19, }, end: Position { line: 469, column: 49, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 470, column: 9, }, end: Position { line: 470, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 470, column: 23, }, end: Position { line: 470, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 470, column: 27, }, end: Position { line: 470, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Where the webroot of the HTTP vhost is located.\n{file}`.well-known/acme-challenge/` directory\nwill be created below the webroot if it doesn't exist.\n`http://example.org/.well-known/acme-challenge/` must also\nbe available (notice unencrypted HTTP).\n", span: Span { start: Position { line: 471, column: 1, }, end: Position { line: 476, column: 9, }, }, }, ), ], span: Span { start: Position { line: 470, column: 33, }, end: Position { line: 476, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 466, column: 26, }, end: Position { line: 477, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "server", span: Span { start: Position { line: 479, column: 7, }, end: Position { line: 479, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 479, column: 16, }, end: Position { line: 479, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 480, column: 9, }, end: Position { line: 480, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 480, column: 16, }, end: Position { line: 480, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nullOr", span: Span { start: Position { line: 480, column: 22, }, end: Position { line: 480, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 480, column: 29, }, end: Position { line: 480, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 480, column: 35, }, end: Position { line: 480, column: 38, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 481, column: 18, }, end: Position { line: 481, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "server", span: Span { start: Position { line: 481, column: 34, }, end: Position { line: 481, column: 40, }, }, }, ), ], span: Span { start: Position { line: 481, column: 33, }, end: Position { line: 481, column: 41, }, }, }, ), Identifier( Identifier { id: "null", span: Span { start: Position { line: 481, column: 42, }, end: Position { line: 481, column: 46, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 481, column: 48, }, end: Position { line: 481, column: 55, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 481, column: 56, }, end: Position { line: 481, column: 67, }, }, }, ), ], span: Span { start: Position { line: 479, column: 26, }, end: Position { line: 481, column: 68, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 482, column: 9, }, end: Position { line: 482, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 482, column: 23, }, end: Position { line: 482, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 482, column: 27, }, end: Position { line: 482, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "ACME Directory Resource URI. Defaults to Let's Encrypt's\nproduction endpoint,\n, if unset.\n", span: Span { start: Position { line: 483, column: 1, }, end: Position { line: 486, column: 9, }, }, }, ), ], span: Span { start: Position { line: 482, column: 33, }, end: Position { line: 486, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 479, column: 25, }, end: Position { line: 487, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "email", span: Span { start: Position { line: 489, column: 7, }, end: Position { line: 489, column: 12, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 489, column: 15, }, end: Position { line: 489, column: 23, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 490, column: 9, }, end: Position { line: 490, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 490, column: 16, }, end: Position { line: 490, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 490, column: 22, }, end: Position { line: 490, column: 25, }, }, }, ), ], default: None, }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 491, column: 18, }, end: Position { line: 491, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "email", span: Span { start: Position { line: 491, column: 34, }, end: Position { line: 491, column: 39, }, }, }, ), ], span: Span { start: Position { line: 491, column: 33, }, end: Position { line: 491, column: 40, }, }, }, ), Identifier( Identifier { id: "null", span: Span { start: Position { line: 491, column: 41, }, end: Position { line: 491, column: 45, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 491, column: 47, }, end: Position { line: 491, column: 54, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 491, column: 55, }, end: Position { line: 491, column: 66, }, }, }, ), ], span: Span { start: Position { line: 489, column: 25, }, end: Position { line: 491, column: 67, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 492, column: 9, }, end: Position { line: 492, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 492, column: 23, }, end: Position { line: 492, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 492, column: 27, }, end: Position { line: 492, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Email address for account creation and correspondence from the CA.\nIt is recommended to use the same email for all certs to avoid account\ncreation limits.\n", span: Span { start: Position { line: 493, column: 1, }, end: Position { line: 496, column: 9, }, }, }, ), ], span: Span { start: Position { line: 492, column: 33, }, end: Position { line: 496, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 489, column: 24, }, end: Position { line: 497, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 499, column: 7, }, end: Position { line: 499, column: 12, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 499, column: 15, }, end: Position { line: 499, column: 23, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 500, column: 9, }, end: Position { line: 500, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 500, column: 16, }, end: Position { line: 500, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 500, column: 22, }, end: Position { line: 500, column: 25, }, }, }, ), ], default: None, }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 501, column: 18, }, end: Position { line: 501, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 501, column: 34, }, end: Position { line: 501, column: 39, }, }, }, ), ], span: Span { start: Position { line: 501, column: 33, }, end: Position { line: 501, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 501, column: 42, }, end: Position { line: 501, column: 46, }, }, }, ), ], span: Span { start: Position { line: 501, column: 41, }, end: Position { line: 501, column: 47, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 501, column: 49, }, end: Position { line: 501, column: 56, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 501, column: 57, }, end: Position { line: 501, column: 68, }, }, }, ), ], span: Span { start: Position { line: 499, column: 25, }, end: Position { line: 501, column: 69, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 502, column: 9, }, end: Position { line: 502, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 502, column: 23, }, end: Position { line: 502, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 502, column: 27, }, end: Position { line: 502, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Group running the ACME client.", span: Span { start: Position { line: 502, column: 34, }, end: Position { line: 502, column: 64, }, }, }, ), ], span: Span { start: Position { line: 502, column: 33, }, end: Position { line: 502, column: 65, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 499, column: 24, }, end: Position { line: 503, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "reloadServices", span: Span { start: Position { line: 505, column: 7, }, end: Position { line: 505, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 505, column: 24, }, end: Position { line: 505, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 506, column: 9, }, end: Position { line: 506, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 506, column: 16, }, end: Position { line: 506, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listOf", span: Span { start: Position { line: 506, column: 22, }, end: Position { line: 506, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 506, column: 29, }, end: Position { line: 506, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 506, column: 35, }, end: Position { line: 506, column: 38, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 507, column: 18, }, end: Position { line: 507, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "reloadServices", span: Span { start: Position { line: 507, column: 34, }, end: Position { line: 507, column: 48, }, }, }, ), ], span: Span { start: Position { line: 507, column: 33, }, end: Position { line: 507, column: 49, }, }, }, ), List( List { elements: [], span: Span { start: Position { line: 507, column: 50, }, end: Position { line: 507, column: 52, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 507, column: 54, }, end: Position { line: 507, column: 61, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 507, column: 62, }, end: Position { line: 507, column: 73, }, }, }, ), ], span: Span { start: Position { line: 505, column: 34, }, end: Position { line: 507, column: 74, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 508, column: 9, }, end: Position { line: 508, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 508, column: 23, }, end: Position { line: 508, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 508, column: 27, }, end: Position { line: 508, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "The list of systemd services to call `systemctl try-reload-or-restart`\non.\n", span: Span { start: Position { line: 509, column: 1, }, end: Position { line: 511, column: 9, }, }, }, ), ], span: Span { start: Position { line: 508, column: 33, }, end: Position { line: 511, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 505, column: 33, }, end: Position { line: 512, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "postRun", span: Span { start: Position { line: 514, column: 7, }, end: Position { line: 514, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 514, column: 17, }, end: Position { line: 514, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 515, column: 9, }, end: Position { line: 515, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 515, column: 16, }, end: Position { line: 515, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "lines", span: Span { start: Position { line: 515, column: 22, }, end: Position { line: 515, column: 27, }, }, }, ), ], default: None, }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 516, column: 18, }, end: Position { line: 516, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "postRun", span: Span { start: Position { line: 516, column: 34, }, end: Position { line: 516, column: 41, }, }, }, ), ], span: Span { start: Position { line: 516, column: 33, }, end: Position { line: 516, column: 42, }, }, }, ), String( String_ { parts: [], span: Span { start: Position { line: 516, column: 43, }, end: Position { line: 516, column: 45, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 516, column: 47, }, end: Position { line: 516, column: 54, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 516, column: 55, }, end: Position { line: 516, column: 66, }, }, }, ), ], span: Span { start: Position { line: 514, column: 27, }, end: Position { line: 516, column: 67, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 517, column: 9, }, end: Position { line: 517, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "cp full.pem backup.pem", span: Span { start: Position { line: 517, column: 20, }, end: Position { line: 517, column: 42, }, }, }, ), ], span: Span { start: Position { line: 517, column: 19, }, end: Position { line: 517, column: 43, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 518, column: 9, }, end: Position { line: 518, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 518, column: 23, }, end: Position { line: 518, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 518, column: 27, }, end: Position { line: 518, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Commands to run after new certificates go live. Note that\nthese commands run as the root user.\n\nExecuted in the same directory with the new certificate.\n", span: Span { start: Position { line: 519, column: 1, }, end: Position { line: 523, column: 9, }, }, }, ), ], span: Span { start: Position { line: 518, column: 33, }, end: Position { line: 523, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 514, column: 26, }, end: Position { line: 524, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "keyType", span: Span { start: Position { line: 526, column: 7, }, end: Position { line: 526, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 526, column: 17, }, end: Position { line: 526, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 527, column: 9, }, end: Position { line: 527, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 527, column: 16, }, end: Position { line: 527, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 527, column: 22, }, end: Position { line: 527, column: 25, }, }, }, ), ], default: None, }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 528, column: 18, }, end: Position { line: 528, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "keyType", span: Span { start: Position { line: 528, column: 34, }, end: Position { line: 528, column: 41, }, }, }, ), ], span: Span { start: Position { line: 528, column: 33, }, end: Position { line: 528, column: 42, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "ec256", span: Span { start: Position { line: 528, column: 44, }, end: Position { line: 528, column: 49, }, }, }, ), ], span: Span { start: Position { line: 528, column: 43, }, end: Position { line: 528, column: 50, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 528, column: 52, }, end: Position { line: 528, column: 59, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 528, column: 60, }, end: Position { line: 528, column: 71, }, }, }, ), ], span: Span { start: Position { line: 526, column: 27, }, end: Position { line: 528, column: 72, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 529, column: 9, }, end: Position { line: 529, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 529, column: 23, }, end: Position { line: 529, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 529, column: 27, }, end: Position { line: 529, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Key type to use for private keys.\nFor an up to date list of supported values check the --key-type option\nat .\n", span: Span { start: Position { line: 530, column: 1, }, end: Position { line: 533, column: 9, }, }, }, ), ], span: Span { start: Position { line: 529, column: 33, }, end: Position { line: 533, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 526, column: 26, }, end: Position { line: 534, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "dnsProvider", span: Span { start: Position { line: 536, column: 7, }, end: Position { line: 536, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 536, column: 21, }, end: Position { line: 536, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 537, column: 9, }, end: Position { line: 537, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 537, column: 16, }, end: Position { line: 537, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nullOr", span: Span { start: Position { line: 537, column: 22, }, end: Position { line: 537, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 537, column: 29, }, end: Position { line: 537, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 537, column: 35, }, end: Position { line: 537, column: 38, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 538, column: 18, }, end: Position { line: 538, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "dnsProvider", span: Span { start: Position { line: 538, column: 34, }, end: Position { line: 538, column: 45, }, }, }, ), ], span: Span { start: Position { line: 538, column: 33, }, end: Position { line: 538, column: 46, }, }, }, ), Identifier( Identifier { id: "null", span: Span { start: Position { line: 538, column: 47, }, end: Position { line: 538, column: 51, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 538, column: 53, }, end: Position { line: 538, column: 60, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 538, column: 61, }, end: Position { line: 538, column: 72, }, }, }, ), ], span: Span { start: Position { line: 536, column: 31, }, end: Position { line: 538, column: 73, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 539, column: 9, }, end: Position { line: 539, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "route53", span: Span { start: Position { line: 539, column: 20, }, end: Position { line: 539, column: 27, }, }, }, ), ], span: Span { start: Position { line: 539, column: 19, }, end: Position { line: 539, column: 28, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 540, column: 9, }, end: Position { line: 540, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 540, column: 23, }, end: Position { line: 540, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 540, column: 27, }, end: Position { line: 540, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "DNS Challenge provider. For a list of supported providers, see the \"code\"\nfield of the DNS providers listed at .\n", span: Span { start: Position { line: 541, column: 1, }, end: Position { line: 543, column: 9, }, }, }, ), ], span: Span { start: Position { line: 540, column: 33, }, end: Position { line: 543, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 536, column: 30, }, end: Position { line: 544, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "dnsResolver", span: Span { start: Position { line: 546, column: 7, }, end: Position { line: 546, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 546, column: 21, }, end: Position { line: 546, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 547, column: 9, }, end: Position { line: 547, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 547, column: 16, }, end: Position { line: 547, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nullOr", span: Span { start: Position { line: 547, column: 22, }, end: Position { line: 547, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 547, column: 29, }, end: Position { line: 547, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 547, column: 35, }, end: Position { line: 547, column: 38, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 548, column: 18, }, end: Position { line: 548, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "dnsResolver", span: Span { start: Position { line: 548, column: 34, }, end: Position { line: 548, column: 45, }, }, }, ), ], span: Span { start: Position { line: 548, column: 33, }, end: Position { line: 548, column: 46, }, }, }, ), Identifier( Identifier { id: "null", span: Span { start: Position { line: 548, column: 47, }, end: Position { line: 548, column: 51, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 548, column: 53, }, end: Position { line: 548, column: 60, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 548, column: 61, }, end: Position { line: 548, column: 72, }, }, }, ), ], span: Span { start: Position { line: 546, column: 31, }, end: Position { line: 548, column: 73, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 549, column: 9, }, end: Position { line: 549, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "1.1.1.1:53", span: Span { start: Position { line: 549, column: 20, }, end: Position { line: 549, column: 30, }, }, }, ), ], span: Span { start: Position { line: 549, column: 19, }, end: Position { line: 549, column: 31, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 550, column: 9, }, end: Position { line: 550, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 550, column: 23, }, end: Position { line: 550, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 550, column: 27, }, end: Position { line: 550, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Set the resolver to use for performing recursive DNS queries. Supported:\nhost:port. The default is to use the system resolvers, or Google's DNS\nresolvers if the system's cannot be determined.\n", span: Span { start: Position { line: 551, column: 1, }, end: Position { line: 554, column: 9, }, }, }, ), ], span: Span { start: Position { line: 550, column: 33, }, end: Position { line: 554, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 546, column: 30, }, end: Position { line: 555, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "credentialsFile", span: Span { start: Position { line: 557, column: 7, }, end: Position { line: 557, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 557, column: 25, }, end: Position { line: 557, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 558, column: 9, }, end: Position { line: 558, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 558, column: 16, }, end: Position { line: 558, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "path", span: Span { start: Position { line: 558, column: 22, }, end: Position { line: 558, column: 26, }, }, }, ), ], default: None, }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 559, column: 18, }, end: Position { line: 559, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "credentialsFile", span: Span { start: Position { line: 559, column: 34, }, end: Position { line: 559, column: 49, }, }, }, ), ], span: Span { start: Position { line: 559, column: 33, }, end: Position { line: 559, column: 50, }, }, }, ), Identifier( Identifier { id: "null", span: Span { start: Position { line: 559, column: 51, }, end: Position { line: 559, column: 55, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 559, column: 57, }, end: Position { line: 559, column: 64, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 559, column: 65, }, end: Position { line: 559, column: 76, }, }, }, ), ], span: Span { start: Position { line: 557, column: 35, }, end: Position { line: 559, column: 77, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 560, column: 9, }, end: Position { line: 560, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 560, column: 23, }, end: Position { line: 560, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 560, column: 27, }, end: Position { line: 560, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Path to an EnvironmentFile for the cert's service containing any required and\noptional environment variables for your selected dnsProvider.\nTo find out what values you need to set, consult the documentation at\n for the corresponding dnsProvider.\n", span: Span { start: Position { line: 561, column: 1, }, end: Position { line: 565, column: 9, }, }, }, ), ], span: Span { start: Position { line: 560, column: 33, }, end: Position { line: 565, column: 11, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 566, column: 9, }, end: Position { line: 566, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/src/secrets/example.org-route53-api-token", span: Span { start: Position { line: 566, column: 20, }, end: Position { line: 566, column: 66, }, }, }, ), ], span: Span { start: Position { line: 566, column: 19, }, end: Position { line: 566, column: 67, }, }, }, ), }, ), ], span: Span { start: Position { line: 557, column: 34, }, end: Position { line: 567, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "dnsPropagationCheck", span: Span { start: Position { line: 569, column: 7, }, end: Position { line: 569, column: 26, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 569, column: 29, }, end: Position { line: 569, column: 37, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 570, column: 9, }, end: Position { line: 570, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 570, column: 16, }, end: Position { line: 570, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 570, column: 22, }, end: Position { line: 570, column: 26, }, }, }, ), ], default: None, }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 571, column: 18, }, end: Position { line: 571, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "dnsPropagationCheck", span: Span { start: Position { line: 571, column: 34, }, end: Position { line: 571, column: 53, }, }, }, ), ], span: Span { start: Position { line: 571, column: 33, }, end: Position { line: 571, column: 54, }, }, }, ), Identifier( Identifier { id: "true", span: Span { start: Position { line: 571, column: 55, }, end: Position { line: 571, column: 59, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 571, column: 61, }, end: Position { line: 571, column: 68, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 571, column: 69, }, end: Position { line: 571, column: 80, }, }, }, ), ], span: Span { start: Position { line: 569, column: 39, }, end: Position { line: 571, column: 81, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 572, column: 9, }, end: Position { line: 572, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 572, column: 23, }, end: Position { line: 572, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 572, column: 27, }, end: Position { line: 572, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Toggles lego DNS propagation check, which is used alongside DNS-01\nchallenge to ensure the DNS entries required are available.\n", span: Span { start: Position { line: 573, column: 1, }, end: Position { line: 575, column: 9, }, }, }, ), ], span: Span { start: Position { line: 572, column: 33, }, end: Position { line: 575, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 569, column: 38, }, end: Position { line: 576, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "ocspMustStaple", span: Span { start: Position { line: 578, column: 7, }, end: Position { line: 578, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 578, column: 24, }, end: Position { line: 578, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 579, column: 9, }, end: Position { line: 579, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 579, column: 16, }, end: Position { line: 579, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 579, column: 22, }, end: Position { line: 579, column: 26, }, }, }, ), ], default: None, }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 580, column: 18, }, end: Position { line: 580, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "ocspMustStaple", span: Span { start: Position { line: 580, column: 34, }, end: Position { line: 580, column: 48, }, }, }, ), ], span: Span { start: Position { line: 580, column: 33, }, end: Position { line: 580, column: 49, }, }, }, ), Identifier( Identifier { id: "false", span: Span { start: Position { line: 580, column: 50, }, end: Position { line: 580, column: 55, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 580, column: 57, }, end: Position { line: 580, column: 64, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 580, column: 65, }, end: Position { line: 580, column: 76, }, }, }, ), ], span: Span { start: Position { line: 578, column: 34, }, end: Position { line: 580, column: 77, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 581, column: 9, }, end: Position { line: 581, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 581, column: 23, }, end: Position { line: 581, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 581, column: 27, }, end: Position { line: 581, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Turns on the OCSP Must-Staple TLS extension.\nMake sure you know what you're doing! See:\n\n- \n- \n", span: Span { start: Position { line: 582, column: 1, }, end: Position { line: 587, column: 9, }, }, }, ), ], span: Span { start: Position { line: 581, column: 33, }, end: Position { line: 587, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 578, column: 33, }, end: Position { line: 588, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraLegoFlags", span: Span { start: Position { line: 590, column: 7, }, end: Position { line: 590, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 590, column: 24, }, end: Position { line: 590, column: 32, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 591, column: 9, }, end: Position { line: 591, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 591, column: 16, }, end: Position { line: 591, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listOf", span: Span { start: Position { line: 591, column: 22, }, end: Position { line: 591, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 591, column: 29, }, end: Position { line: 591, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 591, column: 35, }, end: Position { line: 591, column: 38, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 592, column: 18, }, end: Position { line: 592, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "extraLegoFlags", span: Span { start: Position { line: 592, column: 34, }, end: Position { line: 592, column: 48, }, }, }, ), ], span: Span { start: Position { line: 592, column: 33, }, end: Position { line: 592, column: 49, }, }, }, ), List( List { elements: [], span: Span { start: Position { line: 592, column: 50, }, end: Position { line: 592, column: 52, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 592, column: 54, }, end: Position { line: 592, column: 61, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 592, column: 62, }, end: Position { line: 592, column: 73, }, }, }, ), ], span: Span { start: Position { line: 590, column: 34, }, end: Position { line: 592, column: 74, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 593, column: 9, }, end: Position { line: 593, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 593, column: 23, }, end: Position { line: 593, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 593, column: 27, }, end: Position { line: 593, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Additional global flags to pass to all lego commands.\n", span: Span { start: Position { line: 594, column: 1, }, end: Position { line: 595, column: 9, }, }, }, ), ], span: Span { start: Position { line: 593, column: 33, }, end: Position { line: 595, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 590, column: 33, }, end: Position { line: 596, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraLegoRenewFlags", span: Span { start: Position { line: 598, column: 7, }, end: Position { line: 598, column: 26, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 598, column: 29, }, end: Position { line: 598, column: 37, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 599, column: 9, }, end: Position { line: 599, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 599, column: 16, }, end: Position { line: 599, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listOf", span: Span { start: Position { line: 599, column: 22, }, end: Position { line: 599, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 599, column: 29, }, end: Position { line: 599, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 599, column: 35, }, end: Position { line: 599, column: 38, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 600, column: 18, }, end: Position { line: 600, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "extraLegoRenewFlags", span: Span { start: Position { line: 600, column: 34, }, end: Position { line: 600, column: 53, }, }, }, ), ], span: Span { start: Position { line: 600, column: 33, }, end: Position { line: 600, column: 54, }, }, }, ), List( List { elements: [], span: Span { start: Position { line: 600, column: 55, }, end: Position { line: 600, column: 57, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 600, column: 59, }, end: Position { line: 600, column: 66, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 600, column: 67, }, end: Position { line: 600, column: 78, }, }, }, ), ], span: Span { start: Position { line: 598, column: 39, }, end: Position { line: 600, column: 79, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 601, column: 9, }, end: Position { line: 601, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 601, column: 23, }, end: Position { line: 601, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 601, column: 27, }, end: Position { line: 601, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Additional flags to pass to lego renew.\n", span: Span { start: Position { line: 602, column: 1, }, end: Position { line: 603, column: 9, }, }, }, ), ], span: Span { start: Position { line: 601, column: 33, }, end: Position { line: 603, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 598, column: 38, }, end: Position { line: 604, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraLegoRunFlags", span: Span { start: Position { line: 606, column: 7, }, end: Position { line: 606, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 606, column: 27, }, end: Position { line: 606, column: 35, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 607, column: 9, }, end: Position { line: 607, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 607, column: 16, }, end: Position { line: 607, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listOf", span: Span { start: Position { line: 607, column: 22, }, end: Position { line: 607, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 607, column: 29, }, end: Position { line: 607, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 607, column: 35, }, end: Position { line: 607, column: 38, }, }, }, ), ], default: None, }, ), ], }, ), }, ), Inherit( BindingInherit { from: Some( FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "defaultAndText", span: Span { start: Position { line: 608, column: 18, }, end: Position { line: 608, column: 32, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "extraLegoRunFlags", span: Span { start: Position { line: 608, column: 34, }, end: Position { line: 608, column: 51, }, }, }, ), ], span: Span { start: Position { line: 608, column: 33, }, end: Position { line: 608, column: 52, }, }, }, ), List( List { elements: [], span: Span { start: Position { line: 608, column: 53, }, end: Position { line: 608, column: 55, }, }, }, ), ], }, ), ), attributes: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 608, column: 57, }, end: Position { line: 608, column: 64, }, }, }, ), Raw( PartRaw { content: "defaultText", span: Span { start: Position { line: 608, column: 65, }, end: Position { line: 608, column: 76, }, }, }, ), ], span: Span { start: Position { line: 606, column: 37, }, end: Position { line: 608, column: 77, }, }, }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 609, column: 9, }, end: Position { line: 609, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 609, column: 23, }, end: Position { line: 609, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 609, column: 27, }, end: Position { line: 609, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Additional flags to pass to lego run.\n", span: Span { start: Position { line: 610, column: 1, }, end: Position { line: 611, column: 9, }, }, }, ), ], span: Span { start: Position { line: 609, column: 33, }, end: Position { line: 611, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 606, column: 36, }, end: Position { line: 612, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 446, column: 15, }, end: Position { line: 613, column: 6, }, }, }, ), }, ), ], span: Span { start: Position { line: 445, column: 6, }, end: Position { line: 614, column: 4, }, }, }, ), span: Span { start: Position { line: 433, column: 52, }, end: Position { line: 614, column: 4, }, }, }, ), span: Span { start: Position { line: 433, column: 35, }, end: Position { line: 614, column: 4, }, }, }, ), span: Span { start: Position { line: 433, column: 23, }, end: Position { line: 614, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "certOpts", span: Span { start: Position { line: 616, column: 3, }, end: Position { line: 616, column: 11, }, }, }, ), ], to: Function( Function { head: Destructured( FunctionHeadDestructured { ellipsis: true, identifier: None, arguments: [ FunctionHeadDestructuredArgument { identifier: "name", default: None, }, FunctionHeadDestructuredArgument { identifier: "config", default: None, }, ], }, ), body: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 617, column: 5, }, end: Position { line: 617, column: 12, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "user", span: Span { start: Position { line: 619, column: 7, }, end: Position { line: 619, column: 11, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 619, column: 14, }, end: Position { line: 619, column: 22, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "visible", span: Span { start: Position { line: 620, column: 9, }, end: Position { line: 620, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 620, column: 19, }, end: Position { line: 620, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 621, column: 9, }, end: Position { line: 621, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "_mkRemovedOptionModule", span: Span { start: Position { line: 621, column: 20, }, end: Position { line: 621, column: 42, }, }, }, ), ], span: Span { start: Position { line: 621, column: 19, }, end: Position { line: 621, column: 43, }, }, }, ), }, ), ], span: Span { start: Position { line: 619, column: 23, }, end: Position { line: 622, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "allowKeysForGroup", span: Span { start: Position { line: 625, column: 7, }, end: Position { line: 625, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 625, column: 27, }, end: Position { line: 625, column: 35, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "visible", span: Span { start: Position { line: 626, column: 9, }, end: Position { line: 626, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 626, column: 19, }, end: Position { line: 626, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 627, column: 9, }, end: Position { line: 627, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "_mkRemovedOptionModule", span: Span { start: Position { line: 627, column: 20, }, end: Position { line: 627, column: 42, }, }, }, ), ], span: Span { start: Position { line: 627, column: 19, }, end: Position { line: 627, column: 43, }, }, }, ), }, ), ], span: Span { start: Position { line: 625, column: 36, }, end: Position { line: 628, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraDomains", span: Span { start: Position { line: 631, column: 7, }, end: Position { line: 631, column: 19, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 631, column: 22, }, end: Position { line: 631, column: 30, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "visible", span: Span { start: Position { line: 632, column: 9, }, end: Position { line: 632, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 632, column: 19, }, end: Position { line: 632, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 633, column: 9, }, end: Position { line: 633, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "_mkMergedOptionModule", span: Span { start: Position { line: 633, column: 20, }, end: Position { line: 633, column: 41, }, }, }, ), ], span: Span { start: Position { line: 633, column: 19, }, end: Position { line: 633, column: 42, }, }, }, ), }, ), ], span: Span { start: Position { line: 631, column: 31, }, end: Position { line: 634, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "directory", span: Span { start: Position { line: 636, column: 7, }, end: Position { line: 636, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 636, column: 19, }, end: Position { line: 636, column: 27, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 637, column: 9, }, end: Position { line: 637, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 637, column: 16, }, end: Position { line: 637, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 637, column: 22, }, end: Position { line: 637, column: 25, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "readOnly", span: Span { start: Position { line: 638, column: 9, }, end: Position { line: 638, column: 17, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 638, column: 20, }, end: Position { line: 638, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 639, column: 9, }, end: Position { line: 639, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/acme/", span: Span { start: Position { line: 639, column: 20, }, end: Position { line: 639, column: 41, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "name", span: Span { start: Position { line: 639, column: 36, }, end: Position { line: 639, column: 40, }, }, }, ), }, ), ], span: Span { start: Position { line: 639, column: 19, }, end: Position { line: 639, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 640, column: 9, }, end: Position { line: 640, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 640, column: 23, }, end: Position { line: 640, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 640, column: 27, }, end: Position { line: 640, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Directory where certificate and other state is stored.", span: Span { start: Position { line: 640, column: 34, }, end: Position { line: 640, column: 88, }, }, }, ), ], span: Span { start: Position { line: 640, column: 33, }, end: Position { line: 640, column: 89, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 636, column: 28, }, end: Position { line: 641, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "domain", span: Span { start: Position { line: 643, column: 7, }, end: Position { line: 643, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 643, column: 16, }, end: Position { line: 643, column: 24, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 644, column: 9, }, end: Position { line: 644, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 644, column: 16, }, end: Position { line: 644, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 644, column: 22, }, end: Position { line: 644, column: 25, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 645, column: 9, }, end: Position { line: 645, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "name", span: Span { start: Position { line: 645, column: 19, }, end: Position { line: 645, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 646, column: 9, }, end: Position { line: 646, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 646, column: 23, }, end: Position { line: 646, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 646, column: 27, }, end: Position { line: 646, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Domain to fetch certificate for (defaults to the entry name).", span: Span { start: Position { line: 646, column: 34, }, end: Position { line: 646, column: 95, }, }, }, ), ], span: Span { start: Position { line: 646, column: 33, }, end: Position { line: 646, column: 96, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 643, column: 25, }, end: Position { line: 647, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "extraDomainNames", span: Span { start: Position { line: 649, column: 7, }, end: Position { line: 649, column: 23, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 649, column: 26, }, end: Position { line: 649, column: 34, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 650, column: 9, }, end: Position { line: 650, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 650, column: 16, }, end: Position { line: 650, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listOf", span: Span { start: Position { line: 650, column: 22, }, end: Position { line: 650, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 650, column: 29, }, end: Position { line: 650, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 650, column: 35, }, end: Position { line: 650, column: 38, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 651, column: 9, }, end: Position { line: 651, column: 16, }, }, }, ), ], to: List( List { elements: [], span: Span { start: Position { line: 651, column: 19, }, end: Position { line: 651, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 652, column: 9, }, end: Position { line: 652, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 652, column: 19, }, end: Position { line: 652, column: 36, }, }, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "[\n \"example.org\"\n \"mydomain.org\"\n]\n", span: Span { start: Position { line: 653, column: 1, }, end: Position { line: 657, column: 9, }, }, }, ), ], span: Span { start: Position { line: 652, column: 37, }, end: Position { line: 657, column: 11, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 658, column: 9, }, end: Position { line: 658, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 658, column: 23, }, end: Position { line: 658, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 658, column: 27, }, end: Position { line: 658, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "A list of extra domain names, which are included in the one certificate to be issued.\n", span: Span { start: Position { line: 659, column: 1, }, end: Position { line: 660, column: 9, }, }, }, ), ], span: Span { start: Position { line: 658, column: 33, }, end: Position { line: 660, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 649, column: 35, }, end: Position { line: 661, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "listenHTTP", span: Span { start: Position { line: 666, column: 7, }, end: Position { line: 666, column: 17, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 666, column: 20, }, end: Position { line: 666, column: 28, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 667, column: 9, }, end: Position { line: 667, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 667, column: 16, }, end: Position { line: 667, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "nullOr", span: Span { start: Position { line: 667, column: 22, }, end: Position { line: 667, column: 28, }, }, }, ), ], default: None, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 667, column: 29, }, end: Position { line: 667, column: 34, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "str", span: Span { start: Position { line: 667, column: 35, }, end: Position { line: 667, column: 38, }, }, }, ), ], default: None, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 668, column: 9, }, end: Position { line: 668, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "null", span: Span { start: Position { line: 668, column: 19, }, end: Position { line: 668, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 669, column: 9, }, end: Position { line: 669, column: 16, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: ":1360", span: Span { start: Position { line: 669, column: 20, }, end: Position { line: 669, column: 25, }, }, }, ), ], span: Span { start: Position { line: 669, column: 19, }, end: Position { line: 669, column: 26, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 670, column: 9, }, end: Position { line: 670, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 670, column: 23, }, end: Position { line: 670, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 670, column: 27, }, end: Position { line: 670, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Interface and port to listen on to solve HTTP challenges\nin the form [INTERFACE]:PORT.\nIf you use a port other than 80, you must proxy port 80 to this port.\n", span: Span { start: Position { line: 671, column: 1, }, end: Position { line: 674, column: 9, }, }, }, ), ], span: Span { start: Position { line: 670, column: 33, }, end: Position { line: 674, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 666, column: 29, }, end: Position { line: 675, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "inheritDefaults", span: Span { start: Position { line: 677, column: 7, }, end: Position { line: 677, column: 22, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 677, column: 25, }, end: Position { line: 677, column: 33, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 678, column: 9, }, end: Position { line: 678, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 678, column: 19, }, end: Position { line: 678, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 679, column: 9, }, end: Position { line: 679, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 679, column: 19, }, end: Position { line: 679, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 680, column: 9, }, end: Position { line: 680, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 680, column: 23, }, end: Position { line: 680, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 680, column: 27, }, end: Position { line: 680, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "Whether to inherit values set in `security.acme.defaults` or not.", span: Span { start: Position { line: 680, column: 34, }, end: Position { line: 680, column: 99, }, }, }, ), ], span: Span { start: Position { line: 680, column: 33, }, end: Position { line: 680, column: 100, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 681, column: 9, }, end: Position { line: 681, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 681, column: 16, }, end: Position { line: 681, column: 19, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "types", span: Span { start: Position { line: 681, column: 20, }, end: Position { line: 681, column: 25, }, }, }, ), Raw( PartRaw { content: "bool", span: Span { start: Position { line: 681, column: 26, }, end: Position { line: 681, column: 30, }, }, }, ), ], default: None, }, ), }, ), ], span: Span { start: Position { line: 677, column: 34, }, end: Position { line: 682, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 617, column: 15, }, end: Position { line: 683, column: 6, }, }, }, ), }, ), ], span: Span { start: Position { line: 616, column: 37, }, end: Position { line: 684, column: 4, }, }, }, ), span: Span { start: Position { line: 616, column: 14, }, end: Position { line: 684, column: 4, }, }, }, ), }, ), ], target: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "options", span: Span { start: Position { line: 688, column: 3, }, end: Position { line: 688, column: 10, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 689, column: 5, }, end: Position { line: 689, column: 13, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 689, column: 14, }, end: Position { line: 689, column: 18, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "preliminarySelfsigned", span: Span { start: Position { line: 690, column: 7, }, end: Position { line: 690, column: 28, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 690, column: 31, }, end: Position { line: 690, column: 39, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 691, column: 9, }, end: Position { line: 691, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 691, column: 16, }, end: Position { line: 691, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 691, column: 22, }, end: Position { line: 691, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 692, column: 9, }, end: Position { line: 692, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 692, column: 19, }, end: Position { line: 692, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 693, column: 9, }, end: Position { line: 693, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 693, column: 23, }, end: Position { line: 693, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 693, column: 27, }, end: Position { line: 693, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Whether a preliminary self-signed certificate should be generated before\ndoing ACME requests. This can be useful when certificates are required in\na webserver, but ACME needs the webserver to make its requests.\n\nWith preliminary self-signed certificate the webserver can be started and\ncan later reload the correct ACME certificates.\n", span: Span { start: Position { line: 694, column: 1, }, end: Position { line: 700, column: 9, }, }, }, ), ], span: Span { start: Position { line: 693, column: 33, }, end: Position { line: 700, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 690, column: 40, }, end: Position { line: 701, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "acceptTerms", span: Span { start: Position { line: 703, column: 7, }, end: Position { line: 703, column: 18, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 703, column: 21, }, end: Position { line: 703, column: 29, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 704, column: 9, }, end: Position { line: 704, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 704, column: 16, }, end: Position { line: 704, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 704, column: 22, }, end: Position { line: 704, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 705, column: 9, }, end: Position { line: 705, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 705, column: 19, }, end: Position { line: 705, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 706, column: 9, }, end: Position { line: 706, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 706, column: 23, }, end: Position { line: 706, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 706, column: 27, }, end: Position { line: 706, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Accept the CA's terms of service. The default provider is Let's Encrypt,\nyou can find their ToS at .\n", span: Span { start: Position { line: 707, column: 1, }, end: Position { line: 709, column: 9, }, }, }, ), ], span: Span { start: Position { line: 706, column: 33, }, end: Position { line: 709, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 703, column: 30, }, end: Position { line: 710, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "useRoot", span: Span { start: Position { line: 712, column: 7, }, end: Position { line: 712, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 712, column: 17, }, end: Position { line: 712, column: 25, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 713, column: 9, }, end: Position { line: 713, column: 13, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 713, column: 16, }, end: Position { line: 713, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "bool", span: Span { start: Position { line: 713, column: 22, }, end: Position { line: 713, column: 26, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 714, column: 9, }, end: Position { line: 714, column: 16, }, }, }, ), ], to: Identifier( Identifier { id: "false", span: Span { start: Position { line: 714, column: 19, }, end: Position { line: 714, column: 24, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 715, column: 9, }, end: Position { line: 715, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 715, column: 23, }, end: Position { line: 715, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 715, column: 27, }, end: Position { line: 715, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Whether to use the root user when generating certs. This is not recommended\nfor security + compatiblity reasons. If a service requires root owned certificates\nconsider following the guide on \"Using ACME with services demanding root\nowned certificates\" in the NixOS manual, and only using this as a fallback\nor for testing.\n", span: Span { start: Position { line: 716, column: 1, }, end: Position { line: 721, column: 9, }, }, }, ), ], span: Span { start: Position { line: 715, column: 33, }, end: Position { line: 721, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 712, column: 26, }, end: Position { line: 722, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "defaults", span: Span { start: Position { line: 724, column: 7, }, end: Position { line: 724, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 724, column: 18, }, end: Position { line: 724, column: 26, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 725, column: 9, }, end: Position { line: 725, column: 13, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 725, column: 16, }, end: Position { line: 725, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "submodule", span: Span { start: Position { line: 725, column: 22, }, end: Position { line: 725, column: 31, }, }, }, ), ], default: None, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "inheritableModule", span: Span { start: Position { line: 725, column: 33, }, end: Position { line: 725, column: 50, }, }, }, ), arguments: [ Identifier( Identifier { id: "true", span: Span { start: Position { line: 725, column: 51, }, end: Position { line: 725, column: 55, }, }, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 726, column: 9, }, end: Position { line: 726, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 726, column: 23, }, end: Position { line: 726, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 726, column: 27, }, end: Position { line: 726, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Default values inheritable by all configured certs. You can\nuse this to define options shared by all your certs. These defaults\ncan also be ignored on a per-cert basis using the\n`security.acme.certs.", span: Span { start: Position { line: 727, column: 1, }, end: Position { line: 730, column: 32, }, }, }, ), Raw( PartRaw { content: "$", span: Span { start: Position { line: 727, column: 1, }, end: Position { line: 730, column: 35, }, }, }, ), Raw( PartRaw { content: "{cert}.inheritDefaults' option.\n", span: Span { start: Position { line: 727, column: 1, }, end: Position { line: 731, column: 9, }, }, }, ), ], span: Span { start: Position { line: 726, column: 33, }, end: Position { line: 731, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 724, column: 27, }, end: Position { line: 732, column: 8, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "certs", span: Span { start: Position { line: 734, column: 7, }, end: Position { line: 734, column: 12, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkOption", span: Span { start: Position { line: 734, column: 15, }, end: Position { line: 734, column: 23, }, }, }, ), arguments: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "default", span: Span { start: Position { line: 735, column: 9, }, end: Position { line: 735, column: 16, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 735, column: 19, }, end: Position { line: 735, column: 22, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "type", span: Span { start: Position { line: 736, column: 9, }, end: Position { line: 736, column: 13, }, }, }, ), ], to: With( With { expression: Identifier( Identifier { id: "types", span: Span { start: Position { line: 736, column: 21, }, end: Position { line: 736, column: 26, }, }, }, ), target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "attrsOf", span: Span { start: Position { line: 736, column: 28, }, end: Position { line: 736, column: 35, }, }, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "submodule", span: Span { start: Position { line: 736, column: 37, }, end: Position { line: 736, column: 46, }, }, }, ), arguments: [ List( List { elements: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "inheritableModule", span: Span { start: Position { line: 736, column: 50, }, end: Position { line: 736, column: 67, }, }, }, ), arguments: [ Identifier( Identifier { id: "false", span: Span { start: Position { line: 736, column: 68, }, end: Position { line: 736, column: 73, }, }, }, ), ], }, ), Identifier( Identifier { id: "certOpts", span: Span { start: Position { line: 736, column: 75, }, end: Position { line: 736, column: 83, }, }, }, ), ], span: Span { start: Position { line: 736, column: 47, }, end: Position { line: 736, column: 85, }, }, }, ), ], }, ), ], }, ), span: Span { start: Position { line: 736, column: 16, }, end: Position { line: 736, column: 86, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "description", span: Span { start: Position { line: 737, column: 9, }, end: Position { line: 737, column: 20, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 737, column: 23, }, end: Position { line: 737, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "mdDoc", span: Span { start: Position { line: 737, column: 27, }, end: Position { line: 737, column: 32, }, }, }, ), ], default: None, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Attribute set of certificates to get signed and renewed. Creates\n`acme-", span: Span { start: Position { line: 738, column: 1, }, end: Position { line: 739, column: 17, }, }, }, ), Raw( PartRaw { content: "$", span: Span { start: Position { line: 738, column: 1, }, end: Position { line: 739, column: 20, }, }, }, ), Raw( PartRaw { content: "{cert}.{service,timer}` systemd units for\neach certificate defined here. Other services can add dependencies\nto those units if they rely on the certificates being present,\nor trigger restarts of the service if certificates get renewed.\n", span: Span { start: Position { line: 738, column: 1, }, end: Position { line: 743, column: 9, }, }, }, ), ], span: Span { start: Position { line: 737, column: 33, }, end: Position { line: 743, column: 11, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "example", span: Span { start: Position { line: 744, column: 9, }, end: Position { line: 744, column: 16, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "literalExpression", span: Span { start: Position { line: 744, column: 19, }, end: Position { line: 744, column: 36, }, }, }, ), arguments: [ IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "{\n \"example.com\" = {\n webroot = \"/var/lib/acme/acme-challenge/\";\n email = \"foo@example.com\";\n extraDomainNames = [ \"www.example.com\" \"foo.example.com\" ];\n };\n \"bar.example.com\" = {\n webroot = \"/var/lib/acme/acme-challenge/\";\n email = \"bar@example.com\";\n };\n}\n", span: Span { start: Position { line: 745, column: 1, }, end: Position { line: 756, column: 9, }, }, }, ), ], span: Span { start: Position { line: 744, column: 37, }, end: Position { line: 756, column: 11, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 734, column: 24, }, end: Position { line: 757, column: 8, }, }, }, ), ], }, ), }, ), ], span: Span { start: Position { line: 689, column: 21, }, end: Position { line: 758, column: 6, }, }, }, ), }, ), ], span: Span { start: Position { line: 688, column: 13, }, end: Position { line: 759, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "imports", span: Span { start: Position { line: 761, column: 3, }, end: Position { line: 761, column: 10, }, }, }, ), ], to: List( List { elements: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkRemovedOptionModule", span: Span { start: Position { line: 762, column: 6, }, end: Position { line: 762, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 762, column: 31, }, end: Position { line: 762, column: 39, }, }, }, ), ], span: Span { start: Position { line: 762, column: 30, }, end: Position { line: 762, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 762, column: 42, }, end: Position { line: 762, column: 46, }, }, }, ), ], span: Span { start: Position { line: 762, column: 41, }, end: Position { line: 762, column: 47, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "production", span: Span { start: Position { line: 762, column: 49, }, end: Position { line: 762, column: 59, }, }, }, ), ], span: Span { start: Position { line: 762, column: 48, }, end: Position { line: 762, column: 60, }, }, }, ), ], span: Span { start: Position { line: 762, column: 28, }, end: Position { line: 762, column: 62, }, }, }, ), IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Use security.acme.server to define your staging ACME server URL instead.\n\nTo use the let's encrypt staging server, use security.acme.server =\n\"https://acme-staging-v02.api.letsencrypt.org/directory\".\n", span: Span { start: Position { line: 763, column: 1, }, end: Position { line: 767, column: 5, }, }, }, ), ], span: Span { start: Position { line: 762, column: 63, }, end: Position { line: 767, column: 7, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkRemovedOptionModule", span: Span { start: Position { line: 768, column: 6, }, end: Position { line: 768, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 768, column: 31, }, end: Position { line: 768, column: 39, }, }, }, ), ], span: Span { start: Position { line: 768, column: 30, }, end: Position { line: 768, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 768, column: 42, }, end: Position { line: 768, column: 46, }, }, }, ), ], span: Span { start: Position { line: 768, column: 41, }, end: Position { line: 768, column: 47, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "directory", span: Span { start: Position { line: 768, column: 49, }, end: Position { line: 768, column: 58, }, }, }, ), ], span: Span { start: Position { line: 768, column: 48, }, end: Position { line: 768, column: 59, }, }, }, ), ], span: Span { start: Position { line: 768, column: 28, }, end: Position { line: 768, column: 61, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "ACME Directory is now hardcoded to /var/lib/acme and its permisisons are managed by systemd. See https://github.com/NixOS/nixpkgs/issues/53852 for more info.", span: Span { start: Position { line: 768, column: 63, }, end: Position { line: 768, column: 220, }, }, }, ), ], span: Span { start: Position { line: 768, column: 62, }, end: Position { line: 768, column: 221, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkRemovedOptionModule", span: Span { start: Position { line: 769, column: 6, }, end: Position { line: 769, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 769, column: 31, }, end: Position { line: 769, column: 39, }, }, }, ), ], span: Span { start: Position { line: 769, column: 30, }, end: Position { line: 769, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 769, column: 42, }, end: Position { line: 769, column: 46, }, }, }, ), ], span: Span { start: Position { line: 769, column: 41, }, end: Position { line: 769, column: 47, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "preDelay", span: Span { start: Position { line: 769, column: 49, }, end: Position { line: 769, column: 57, }, }, }, ), ], span: Span { start: Position { line: 769, column: 48, }, end: Position { line: 769, column: 58, }, }, }, ), ], span: Span { start: Position { line: 769, column: 28, }, end: Position { line: 769, column: 60, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "This option has been removed. If you want to make sure that something executes before certificates are provisioned, add a RequiredBy=acme-${cert}.service to the service you want to execute before the cert renewal", span: Span { start: Position { line: 769, column: 62, }, end: Position { line: 769, column: 275, }, }, }, ), ], span: Span { start: Position { line: 769, column: 61, }, end: Position { line: 769, column: 276, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkRemovedOptionModule", span: Span { start: Position { line: 770, column: 6, }, end: Position { line: 770, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 770, column: 31, }, end: Position { line: 770, column: 39, }, }, }, ), ], span: Span { start: Position { line: 770, column: 30, }, end: Position { line: 770, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 770, column: 42, }, end: Position { line: 770, column: 46, }, }, }, ), ], span: Span { start: Position { line: 770, column: 41, }, end: Position { line: 770, column: 47, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "activationDelay", span: Span { start: Position { line: 770, column: 49, }, end: Position { line: 770, column: 64, }, }, }, ), ], span: Span { start: Position { line: 770, column: 48, }, end: Position { line: 770, column: 65, }, }, }, ), ], span: Span { start: Position { line: 770, column: 28, }, end: Position { line: 770, column: 67, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "This option has been removed. If you want to make sure that something executes before certificates are provisioned, add a RequiredBy=acme-${cert}.service to the service you want to execute before the cert renewal", span: Span { start: Position { line: 770, column: 69, }, end: Position { line: 770, column: 282, }, }, }, ), ], span: Span { start: Position { line: 770, column: 68, }, end: Position { line: 770, column: 283, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkChangedOptionModule", span: Span { start: Position { line: 771, column: 6, }, end: Position { line: 771, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 771, column: 31, }, end: Position { line: 771, column: 39, }, }, }, ), ], span: Span { start: Position { line: 771, column: 30, }, end: Position { line: 771, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 771, column: 42, }, end: Position { line: 771, column: 46, }, }, }, ), ], span: Span { start: Position { line: 771, column: 41, }, end: Position { line: 771, column: 47, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "validMin", span: Span { start: Position { line: 771, column: 49, }, end: Position { line: 771, column: 57, }, }, }, ), ], span: Span { start: Position { line: 771, column: 48, }, end: Position { line: 771, column: 58, }, }, }, ), ], span: Span { start: Position { line: 771, column: 28, }, end: Position { line: 771, column: 60, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 771, column: 64, }, end: Position { line: 771, column: 72, }, }, }, ), ], span: Span { start: Position { line: 771, column: 63, }, end: Position { line: 771, column: 73, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 771, column: 75, }, end: Position { line: 771, column: 79, }, }, }, ), ], span: Span { start: Position { line: 771, column: 74, }, end: Position { line: 771, column: 80, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "defaults", span: Span { start: Position { line: 771, column: 82, }, end: Position { line: 771, column: 90, }, }, }, ), ], span: Span { start: Position { line: 771, column: 81, }, end: Position { line: 771, column: 91, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "validMinDays", span: Span { start: Position { line: 771, column: 93, }, end: Position { line: 771, column: 105, }, }, }, ), ], span: Span { start: Position { line: 771, column: 92, }, end: Position { line: 771, column: 106, }, }, }, ), ], span: Span { start: Position { line: 771, column: 61, }, end: Position { line: 771, column: 108, }, }, }, ), Function( Function { head: Simple( FunctionHeadSimple { identifier: "config", }, ), body: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 771, column: 118, }, end: Position { line: 771, column: 124, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 771, column: 125, }, end: Position { line: 771, column: 133, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 771, column: 134, }, end: Position { line: 771, column: 138, }, }, }, ), Raw( PartRaw { content: "validMin", span: Span { start: Position { line: 771, column: 139, }, end: Position { line: 771, column: 147, }, }, }, ), ], default: None, }, ), operator: Division, right: BinaryOperation( BinaryOperation { left: Integer( Integer { value: "24", span: Span { start: Position { line: 771, column: 151, }, end: Position { line: 771, column: 153, }, }, }, ), operator: Multiplication, right: Integer( Integer { value: "3600", span: Span { start: Position { line: 771, column: 156, }, end: Position { line: 771, column: 160, }, }, }, ), }, ), }, ), span: Span { start: Position { line: 771, column: 110, }, end: Position { line: 771, column: 161, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkChangedOptionModule", span: Span { start: Position { line: 772, column: 6, }, end: Position { line: 772, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 772, column: 31, }, end: Position { line: 772, column: 39, }, }, }, ), ], span: Span { start: Position { line: 772, column: 30, }, end: Position { line: 772, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 772, column: 42, }, end: Position { line: 772, column: 46, }, }, }, ), ], span: Span { start: Position { line: 772, column: 41, }, end: Position { line: 772, column: 47, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "validMinDays", span: Span { start: Position { line: 772, column: 49, }, end: Position { line: 772, column: 61, }, }, }, ), ], span: Span { start: Position { line: 772, column: 48, }, end: Position { line: 772, column: 62, }, }, }, ), ], span: Span { start: Position { line: 772, column: 28, }, end: Position { line: 772, column: 64, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 772, column: 68, }, end: Position { line: 772, column: 76, }, }, }, ), ], span: Span { start: Position { line: 772, column: 67, }, end: Position { line: 772, column: 77, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 772, column: 79, }, end: Position { line: 772, column: 83, }, }, }, ), ], span: Span { start: Position { line: 772, column: 78, }, end: Position { line: 772, column: 84, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "defaults", span: Span { start: Position { line: 772, column: 86, }, end: Position { line: 772, column: 94, }, }, }, ), ], span: Span { start: Position { line: 772, column: 85, }, end: Position { line: 772, column: 95, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "validMinDays", span: Span { start: Position { line: 772, column: 97, }, end: Position { line: 772, column: 109, }, }, }, ), ], span: Span { start: Position { line: 772, column: 96, }, end: Position { line: 772, column: 110, }, }, }, ), ], span: Span { start: Position { line: 772, column: 65, }, end: Position { line: 772, column: 112, }, }, }, ), Function( Function { head: Simple( FunctionHeadSimple { identifier: "config", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 772, column: 122, }, end: Position { line: 772, column: 128, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 772, column: 129, }, end: Position { line: 772, column: 137, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 772, column: 138, }, end: Position { line: 772, column: 142, }, }, }, ), Raw( PartRaw { content: "validMinDays", span: Span { start: Position { line: 772, column: 143, }, end: Position { line: 772, column: 155, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 772, column: 114, }, end: Position { line: 772, column: 155, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkChangedOptionModule", span: Span { start: Position { line: 773, column: 6, }, end: Position { line: 773, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 773, column: 31, }, end: Position { line: 773, column: 39, }, }, }, ), ], span: Span { start: Position { line: 773, column: 30, }, end: Position { line: 773, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 773, column: 42, }, end: Position { line: 773, column: 46, }, }, }, ), ], span: Span { start: Position { line: 773, column: 41, }, end: Position { line: 773, column: 47, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "renewInterval", span: Span { start: Position { line: 773, column: 49, }, end: Position { line: 773, column: 62, }, }, }, ), ], span: Span { start: Position { line: 773, column: 48, }, end: Position { line: 773, column: 63, }, }, }, ), ], span: Span { start: Position { line: 773, column: 28, }, end: Position { line: 773, column: 65, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 773, column: 69, }, end: Position { line: 773, column: 77, }, }, }, ), ], span: Span { start: Position { line: 773, column: 68, }, end: Position { line: 773, column: 78, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 773, column: 80, }, end: Position { line: 773, column: 84, }, }, }, ), ], span: Span { start: Position { line: 773, column: 79, }, end: Position { line: 773, column: 85, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "defaults", span: Span { start: Position { line: 773, column: 87, }, end: Position { line: 773, column: 95, }, }, }, ), ], span: Span { start: Position { line: 773, column: 86, }, end: Position { line: 773, column: 96, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "renewInterval", span: Span { start: Position { line: 773, column: 98, }, end: Position { line: 773, column: 111, }, }, }, ), ], span: Span { start: Position { line: 773, column: 97, }, end: Position { line: 773, column: 112, }, }, }, ), ], span: Span { start: Position { line: 773, column: 66, }, end: Position { line: 773, column: 114, }, }, }, ), Function( Function { head: Simple( FunctionHeadSimple { identifier: "config", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 773, column: 124, }, end: Position { line: 773, column: 130, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 773, column: 131, }, end: Position { line: 773, column: 139, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 773, column: 140, }, end: Position { line: 773, column: 144, }, }, }, ), Raw( PartRaw { content: "renewInterval", span: Span { start: Position { line: 773, column: 145, }, end: Position { line: 773, column: 158, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 773, column: 116, }, end: Position { line: 773, column: 158, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkChangedOptionModule", span: Span { start: Position { line: 774, column: 6, }, end: Position { line: 774, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 774, column: 31, }, end: Position { line: 774, column: 39, }, }, }, ), ], span: Span { start: Position { line: 774, column: 30, }, end: Position { line: 774, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 774, column: 42, }, end: Position { line: 774, column: 46, }, }, }, ), ], span: Span { start: Position { line: 774, column: 41, }, end: Position { line: 774, column: 47, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "email", span: Span { start: Position { line: 774, column: 49, }, end: Position { line: 774, column: 54, }, }, }, ), ], span: Span { start: Position { line: 774, column: 48, }, end: Position { line: 774, column: 55, }, }, }, ), ], span: Span { start: Position { line: 774, column: 28, }, end: Position { line: 774, column: 57, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 774, column: 61, }, end: Position { line: 774, column: 69, }, }, }, ), ], span: Span { start: Position { line: 774, column: 60, }, end: Position { line: 774, column: 70, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 774, column: 72, }, end: Position { line: 774, column: 76, }, }, }, ), ], span: Span { start: Position { line: 774, column: 71, }, end: Position { line: 774, column: 77, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "defaults", span: Span { start: Position { line: 774, column: 79, }, end: Position { line: 774, column: 87, }, }, }, ), ], span: Span { start: Position { line: 774, column: 78, }, end: Position { line: 774, column: 88, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "email", span: Span { start: Position { line: 774, column: 90, }, end: Position { line: 774, column: 95, }, }, }, ), ], span: Span { start: Position { line: 774, column: 89, }, end: Position { line: 774, column: 96, }, }, }, ), ], span: Span { start: Position { line: 774, column: 58, }, end: Position { line: 774, column: 98, }, }, }, ), Function( Function { head: Simple( FunctionHeadSimple { identifier: "config", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 774, column: 108, }, end: Position { line: 774, column: 114, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 774, column: 115, }, end: Position { line: 774, column: 123, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 774, column: 124, }, end: Position { line: 774, column: 128, }, }, }, ), Raw( PartRaw { content: "email", span: Span { start: Position { line: 774, column: 129, }, end: Position { line: 774, column: 134, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 774, column: 100, }, end: Position { line: 774, column: 134, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkChangedOptionModule", span: Span { start: Position { line: 775, column: 6, }, end: Position { line: 775, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 775, column: 31, }, end: Position { line: 775, column: 39, }, }, }, ), ], span: Span { start: Position { line: 775, column: 30, }, end: Position { line: 775, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 775, column: 42, }, end: Position { line: 775, column: 46, }, }, }, ), ], span: Span { start: Position { line: 775, column: 41, }, end: Position { line: 775, column: 47, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "server", span: Span { start: Position { line: 775, column: 49, }, end: Position { line: 775, column: 55, }, }, }, ), ], span: Span { start: Position { line: 775, column: 48, }, end: Position { line: 775, column: 56, }, }, }, ), ], span: Span { start: Position { line: 775, column: 28, }, end: Position { line: 775, column: 58, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 775, column: 62, }, end: Position { line: 775, column: 70, }, }, }, ), ], span: Span { start: Position { line: 775, column: 61, }, end: Position { line: 775, column: 71, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 775, column: 73, }, end: Position { line: 775, column: 77, }, }, }, ), ], span: Span { start: Position { line: 775, column: 72, }, end: Position { line: 775, column: 78, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "defaults", span: Span { start: Position { line: 775, column: 80, }, end: Position { line: 775, column: 88, }, }, }, ), ], span: Span { start: Position { line: 775, column: 79, }, end: Position { line: 775, column: 89, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "server", span: Span { start: Position { line: 775, column: 91, }, end: Position { line: 775, column: 97, }, }, }, ), ], span: Span { start: Position { line: 775, column: 90, }, end: Position { line: 775, column: 98, }, }, }, ), ], span: Span { start: Position { line: 775, column: 59, }, end: Position { line: 775, column: 100, }, }, }, ), Function( Function { head: Simple( FunctionHeadSimple { identifier: "config", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 775, column: 110, }, end: Position { line: 775, column: 116, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 775, column: 117, }, end: Position { line: 775, column: 125, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 775, column: 126, }, end: Position { line: 775, column: 130, }, }, }, ), Raw( PartRaw { content: "server", span: Span { start: Position { line: 775, column: 131, }, end: Position { line: 775, column: 137, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 775, column: 102, }, end: Position { line: 775, column: 137, }, }, }, ), ], }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkChangedOptionModule", span: Span { start: Position { line: 776, column: 6, }, end: Position { line: 776, column: 27, }, }, }, ), arguments: [ List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 776, column: 31, }, end: Position { line: 776, column: 39, }, }, }, ), ], span: Span { start: Position { line: 776, column: 30, }, end: Position { line: 776, column: 40, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 776, column: 42, }, end: Position { line: 776, column: 46, }, }, }, ), ], span: Span { start: Position { line: 776, column: 41, }, end: Position { line: 776, column: 47, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "enableDebugLogs", span: Span { start: Position { line: 776, column: 49, }, end: Position { line: 776, column: 64, }, }, }, ), ], span: Span { start: Position { line: 776, column: 48, }, end: Position { line: 776, column: 65, }, }, }, ), ], span: Span { start: Position { line: 776, column: 28, }, end: Position { line: 776, column: 67, }, }, }, ), List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 776, column: 71, }, end: Position { line: 776, column: 79, }, }, }, ), ], span: Span { start: Position { line: 776, column: 70, }, end: Position { line: 776, column: 80, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 776, column: 82, }, end: Position { line: 776, column: 86, }, }, }, ), ], span: Span { start: Position { line: 776, column: 81, }, end: Position { line: 776, column: 87, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "defaults", span: Span { start: Position { line: 776, column: 89, }, end: Position { line: 776, column: 97, }, }, }, ), ], span: Span { start: Position { line: 776, column: 88, }, end: Position { line: 776, column: 98, }, }, }, ), String( String_ { parts: [ Raw( PartRaw { content: "enableDebugLogs", span: Span { start: Position { line: 776, column: 100, }, end: Position { line: 776, column: 115, }, }, }, ), ], span: Span { start: Position { line: 776, column: 99, }, end: Position { line: 776, column: 116, }, }, }, ), ], span: Span { start: Position { line: 776, column: 68, }, end: Position { line: 776, column: 118, }, }, }, ), Function( Function { head: Simple( FunctionHeadSimple { identifier: "config", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "config", span: Span { start: Position { line: 776, column: 128, }, end: Position { line: 776, column: 134, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "security", span: Span { start: Position { line: 776, column: 135, }, end: Position { line: 776, column: 143, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 776, column: 144, }, end: Position { line: 776, column: 148, }, }, }, ), Raw( PartRaw { content: "enableDebugLogs", span: Span { start: Position { line: 776, column: 149, }, end: Position { line: 776, column: 164, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 776, column: 120, }, end: Position { line: 776, column: 164, }, }, }, ), ], }, ), ], span: Span { start: Position { line: 761, column: 13, }, end: Position { line: 777, column: 4, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "config", span: Span { start: Position { line: 779, column: 3, }, end: Position { line: 779, column: 9, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkMerge", span: Span { start: Position { line: 779, column: 12, }, end: Position { line: 779, column: 19, }, }, }, ), arguments: [ List( List { elements: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mkIf", span: Span { start: Position { line: 780, column: 6, }, end: Position { line: 780, column: 10, }, }, }, ), arguments: [ BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 780, column: 12, }, end: Position { line: 780, column: 15, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "certs", span: Span { start: Position { line: 780, column: 16, }, end: Position { line: 780, column: 21, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 780, column: 25, }, end: Position { line: 780, column: 28, }, }, }, ), }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "warnings", span: Span { start: Position { line: 784, column: 7, }, end: Position { line: 784, column: 15, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "filter", span: Span { start: Position { line: 784, column: 18, }, end: Position { line: 784, column: 24, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "w", }, ), body: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "w", span: Span { start: Position { line: 784, column: 29, }, end: Position { line: 784, column: 30, }, }, }, ), operator: NotEqualTo, right: String( String_ { parts: [], span: Span { start: Position { line: 784, column: 34, }, end: Position { line: 784, column: 36, }, }, }, ), }, ), span: Span { start: Position { line: 784, column: 26, }, end: Position { line: 784, column: 36, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrsToList", span: Span { start: Position { line: 784, column: 39, }, end: Position { line: 784, column: 53, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cert", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "data", }, ), body: IfThenElse( IfThenElse { predicate: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 784, column: 70, }, end: Position { line: 784, column: 74, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "extraDomains", span: Span { start: Position { line: 784, column: 75, }, end: Position { line: 784, column: 87, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: String( String_ { parts: [ Raw( PartRaw { content: "_mkMergedOptionModule", span: Span { start: Position { line: 784, column: 92, }, end: Position { line: 784, column: 113, }, }, }, ), ], span: Span { start: Position { line: 784, column: 91, }, end: Position { line: 784, column: 114, }, }, }, ), }, ), then: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "The option definition `security.acme.certs.", span: Span { start: Position { line: 785, column: 1, }, end: Position { line: 785, column: 52, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 785, column: 54, }, end: Position { line: 785, column: 58, }, }, }, ), }, ), Raw( PartRaw { content: ".extraDomains` has changed\nto `security.acme.certs.", span: Span { start: Position { line: 785, column: 1, }, end: Position { line: 786, column: 33, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 786, column: 35, }, end: Position { line: 786, column: 39, }, }, }, ), }, ), Raw( PartRaw { content: ".extraDomainNames` and is now a list of strings.\nSetting a custom webroot for extra domains is not possible, instead use separate certs.\n", span: Span { start: Position { line: 785, column: 1, }, end: Position { line: 788, column: 7, }, }, }, ), ], span: Span { start: Position { line: 784, column: 120, }, end: Position { line: 788, column: 9, }, }, }, ), else_: String( String_ { parts: [], span: Span { start: Position { line: 788, column: 15, }, end: Position { line: 788, column: 17, }, }, }, ), span: Span { start: Position { line: 784, column: 67, }, end: Position { line: 788, column: 17, }, }, }, ), span: Span { start: Position { line: 784, column: 61, }, end: Position { line: 788, column: 17, }, }, }, ), span: Span { start: Position { line: 784, column: 55, }, end: Position { line: 788, column: 17, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 788, column: 19, }, end: Position { line: 788, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "certs", span: Span { start: Position { line: 788, column: 23, }, end: Position { line: 788, column: 28, }, }, }, ), ], default: None, }, ), ], }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertions", span: Span { start: Position { line: 790, column: 7, }, end: Position { line: 790, column: 17, }, }, }, ), ], to: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "certs", span: Span { start: Position { line: 791, column: 9, }, end: Position { line: 791, column: 14, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "attrValues", span: Span { start: Position { line: 791, column: 17, }, end: Position { line: 791, column: 27, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 791, column: 28, }, end: Position { line: 791, column: 31, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "certs", span: Span { start: Position { line: 791, column: 32, }, end: Position { line: 791, column: 37, }, }, }, ), ], default: None, }, ), ], }, ), }, ), ], target: BinaryOperation( BinaryOperation { left: List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 794, column: 11, }, end: Position { line: 794, column: 20, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 794, column: 23, }, end: Position { line: 794, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "email", span: Span { start: Position { line: 794, column: 27, }, end: Position { line: 794, column: 32, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 794, column: 36, }, end: Position { line: 794, column: 40, }, }, }, ), }, ), operator: LogicalOr, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "all", span: Span { start: Position { line: 794, column: 44, }, end: Position { line: 794, column: 47, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "certOpts", }, ), body: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "certOpts", span: Span { start: Position { line: 794, column: 59, }, end: Position { line: 794, column: 67, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "email", span: Span { start: Position { line: 794, column: 68, }, end: Position { line: 794, column: 73, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 794, column: 77, }, end: Position { line: 794, column: 81, }, }, }, ), }, ), span: Span { start: Position { line: 794, column: 49, }, end: Position { line: 794, column: 81, }, }, }, ), Identifier( Identifier { id: "certs", span: Span { start: Position { line: 794, column: 83, }, end: Position { line: 794, column: 88, }, }, }, ), ], }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 795, column: 11, }, end: Position { line: 795, column: 18, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "You must define `security.acme.certs..email` or\n`security.acme.email` to register with the CA. Note that using\nmany different addresses for certs may trigger account rate limits.\n", span: Span { start: Position { line: 796, column: 1, }, end: Position { line: 799, column: 11, }, }, }, ), ], span: Span { start: Position { line: 795, column: 21, }, end: Position { line: 799, column: 13, }, }, }, ), }, ), ], span: Span { start: Position { line: 793, column: 9, }, end: Position { line: 800, column: 10, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 802, column: 11, }, end: Position { line: 802, column: 20, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 802, column: 23, }, end: Position { line: 802, column: 26, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "acceptTerms", span: Span { start: Position { line: 802, column: 27, }, end: Position { line: 802, column: 38, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 803, column: 11, }, end: Position { line: 803, column: 18, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "You must accept the CA's terms of service before using\nthe ACME module by setting `security.acme.acceptTerms`\nto `true`. For Let's Encrypt's ToS see https://letsencrypt.org/repository/\n", span: Span { start: Position { line: 804, column: 1, }, end: Position { line: 807, column: 11, }, }, }, ), ], span: Span { start: Position { line: 803, column: 21, }, end: Position { line: 807, column: 13, }, }, }, ), }, ), ], span: Span { start: Position { line: 801, column: 9, }, end: Position { line: 808, column: 10, }, }, }, ), ], span: Span { start: Position { line: 792, column: 10, }, end: Position { line: 809, column: 8, }, }, }, ), operator: Concatenation, right: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 809, column: 13, }, end: Position { line: 809, column: 21, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "concatLists", span: Span { start: Position { line: 809, column: 22, }, end: Position { line: 809, column: 33, }, }, }, ), ], default: None, }, ), arguments: [ FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrsToList", span: Span { start: Position { line: 809, column: 35, }, end: Position { line: 809, column: 49, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cert", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "data", }, ), body: List( List { elements: [ Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 811, column: 11, }, end: Position { line: 811, column: 20, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 811, column: 23, }, end: Position { line: 811, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "user", span: Span { start: Position { line: 811, column: 28, }, end: Position { line: 811, column: 32, }, }, }, ), ], default: None, }, ), operator: EqualTo, right: String( String_ { parts: [ Raw( PartRaw { content: "_mkRemovedOptionModule", span: Span { start: Position { line: 811, column: 37, }, end: Position { line: 811, column: 59, }, }, }, ), ], span: Span { start: Position { line: 811, column: 36, }, end: Position { line: 811, column: 60, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 812, column: 11, }, end: Position { line: 812, column: 18, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "The option definition `security.acme.certs.", span: Span { start: Position { line: 813, column: 1, }, end: Position { line: 813, column: 56, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 813, column: 58, }, end: Position { line: 813, column: 62, }, }, }, ), }, ), Raw( PartRaw { content: ".user' no longer has any effect; Please remove it.\nCertificate user is now hard coded to the \"acme\" user. If you would\nlike another user to have access, consider adding them to the\n\"acme\" group or changing security.acme.certs.", span: Span { start: Position { line: 813, column: 1, }, end: Position { line: 816, column: 58, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 816, column: 60, }, end: Position { line: 816, column: 64, }, }, }, ), }, ), Raw( PartRaw { content: ".group.\n", span: Span { start: Position { line: 813, column: 1, }, end: Position { line: 817, column: 11, }, }, }, ), ], span: Span { start: Position { line: 812, column: 21, }, end: Position { line: 817, column: 13, }, }, }, ), }, ), ], span: Span { start: Position { line: 810, column: 9, }, end: Position { line: 818, column: 10, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 820, column: 11, }, end: Position { line: 820, column: 20, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 820, column: 23, }, end: Position { line: 820, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "allowKeysForGroup", span: Span { start: Position { line: 820, column: 28, }, end: Position { line: 820, column: 45, }, }, }, ), ], default: None, }, ), operator: EqualTo, right: String( String_ { parts: [ Raw( PartRaw { content: "_mkRemovedOptionModule", span: Span { start: Position { line: 820, column: 50, }, end: Position { line: 820, column: 72, }, }, }, ), ], span: Span { start: Position { line: 820, column: 49, }, end: Position { line: 820, column: 73, }, }, }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 821, column: 11, }, end: Position { line: 821, column: 18, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "The option definition `security.acme.certs.", span: Span { start: Position { line: 822, column: 1, }, end: Position { line: 822, column: 56, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 822, column: 58, }, end: Position { line: 822, column: 62, }, }, }, ), }, ), Raw( PartRaw { content: ".allowKeysForGroup' no longer has any effect; Please remove it.\nAll certs are readable by the configured group. If this is undesired,\nconsider changing security.acme.certs.", span: Span { start: Position { line: 822, column: 1, }, end: Position { line: 824, column: 51, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 824, column: 53, }, end: Position { line: 824, column: 57, }, }, }, ), }, ), Raw( PartRaw { content: ".group to an unused group.\n", span: Span { start: Position { line: 822, column: 1, }, end: Position { line: 825, column: 11, }, }, }, ), ], span: Span { start: Position { line: 821, column: 21, }, end: Position { line: 825, column: 13, }, }, }, ), }, ), ], span: Span { start: Position { line: 819, column: 9, }, end: Position { line: 826, column: 10, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 831, column: 11, }, end: Position { line: 831, column: 20, }, }, }, ), ], to: UnaryOperation( UnaryOperation { operator: Not, operand: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "hasInfix", span: Span { start: Position { line: 831, column: 25, }, end: Position { line: 831, column: 33, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "*", span: Span { start: Position { line: 831, column: 35, }, end: Position { line: 831, column: 36, }, }, }, ), ], span: Span { start: Position { line: 831, column: 34, }, end: Position { line: 831, column: 37, }, }, }, ), Identifier( Identifier { id: "cert", span: Span { start: Position { line: 831, column: 38, }, end: Position { line: 831, column: 42, }, }, }, ), ], }, ), span: Span { start: Position { line: 831, column: 23, }, end: Position { line: 831, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 832, column: 11, }, end: Position { line: 832, column: 18, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "The cert option path `security.acme.certs.", span: Span { start: Position { line: 833, column: 1, }, end: Position { line: 833, column: 55, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 833, column: 57, }, end: Position { line: 833, column: 61, }, }, }, ), }, ), Raw( PartRaw { content: ".dnsProvider`\ncannot contain a * character.\nInstead, set `security.acme.certs.", span: Span { start: Position { line: 833, column: 1, }, end: Position { line: 835, column: 47, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 835, column: 49, }, end: Position { line: 835, column: 53, }, }, }, ), }, ), Raw( PartRaw { content: ".domain = \"", span: Span { start: Position { line: 833, column: 1, }, end: Position { line: 835, column: 65, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 835, column: 67, }, end: Position { line: 835, column: 71, }, }, }, ), }, ), Raw( PartRaw { content: "\";`\nand remove the wildcard from the path.\n", span: Span { start: Position { line: 833, column: 1, }, end: Position { line: 837, column: 11, }, }, }, ), ], span: Span { start: Position { line: 832, column: 21, }, end: Position { line: 837, column: 13, }, }, }, ), }, ), ], span: Span { start: Position { line: 830, column: 9, }, end: Position { line: 838, column: 10, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 840, column: 11, }, end: Position { line: 840, column: 20, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 840, column: 23, }, end: Position { line: 840, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "dnsProvider", span: Span { start: Position { line: 840, column: 28, }, end: Position { line: 840, column: 39, }, }, }, ), ], default: None, }, ), operator: EqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 840, column: 43, }, end: Position { line: 840, column: 47, }, }, }, ), }, ), operator: LogicalOr, right: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 840, column: 51, }, end: Position { line: 840, column: 55, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "webroot", span: Span { start: Position { line: 840, column: 56, }, end: Position { line: 840, column: 63, }, }, }, ), ], default: None, }, ), operator: EqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 840, column: 67, }, end: Position { line: 840, column: 71, }, }, }, ), }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 841, column: 11, }, end: Position { line: 841, column: 18, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Options `security.acme.certs.", span: Span { start: Position { line: 842, column: 1, }, end: Position { line: 842, column: 42, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 842, column: 44, }, end: Position { line: 842, column: 48, }, }, }, ), }, ), Raw( PartRaw { content: ".dnsProvider` and\n`security.acme.certs.", span: Span { start: Position { line: 842, column: 1, }, end: Position { line: 843, column: 34, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 843, column: 36, }, end: Position { line: 843, column: 40, }, }, }, ), }, ), Raw( PartRaw { content: ".webroot` are mutually exclusive.\n", span: Span { start: Position { line: 842, column: 1, }, end: Position { line: 844, column: 11, }, }, }, ), ], span: Span { start: Position { line: 841, column: 21, }, end: Position { line: 844, column: 13, }, }, }, ), }, ), ], span: Span { start: Position { line: 839, column: 9, }, end: Position { line: 845, column: 10, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 847, column: 11, }, end: Position { line: 847, column: 20, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 847, column: 23, }, end: Position { line: 847, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "webroot", span: Span { start: Position { line: 847, column: 28, }, end: Position { line: 847, column: 35, }, }, }, ), ], default: None, }, ), operator: EqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 847, column: 39, }, end: Position { line: 847, column: 43, }, }, }, ), }, ), operator: LogicalOr, right: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 847, column: 47, }, end: Position { line: 847, column: 51, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenHTTP", span: Span { start: Position { line: 847, column: 52, }, end: Position { line: 847, column: 62, }, }, }, ), ], default: None, }, ), operator: EqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 847, column: 66, }, end: Position { line: 847, column: 70, }, }, }, ), }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 848, column: 11, }, end: Position { line: 848, column: 18, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Options `security.acme.certs.", span: Span { start: Position { line: 849, column: 1, }, end: Position { line: 849, column: 42, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 849, column: 44, }, end: Position { line: 849, column: 48, }, }, }, ), }, ), Raw( PartRaw { content: ".webroot` and\n`security.acme.certs.", span: Span { start: Position { line: 849, column: 1, }, end: Position { line: 850, column: 34, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 850, column: 36, }, end: Position { line: 850, column: 40, }, }, }, ), }, ), Raw( PartRaw { content: ".listenHTTP` are mutually exclusive.\n", span: Span { start: Position { line: 849, column: 1, }, end: Position { line: 851, column: 11, }, }, }, ), ], span: Span { start: Position { line: 848, column: 21, }, end: Position { line: 851, column: 13, }, }, }, ), }, ), ], span: Span { start: Position { line: 846, column: 9, }, end: Position { line: 852, column: 10, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 854, column: 11, }, end: Position { line: 854, column: 20, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 854, column: 23, }, end: Position { line: 854, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenHTTP", span: Span { start: Position { line: 854, column: 28, }, end: Position { line: 854, column: 38, }, }, }, ), ], default: None, }, ), operator: EqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 854, column: 42, }, end: Position { line: 854, column: 46, }, }, }, ), }, ), operator: LogicalOr, right: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 854, column: 50, }, end: Position { line: 854, column: 54, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "dnsProvider", span: Span { start: Position { line: 854, column: 55, }, end: Position { line: 854, column: 66, }, }, }, ), ], default: None, }, ), operator: EqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 854, column: 70, }, end: Position { line: 854, column: 74, }, }, }, ), }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 855, column: 11, }, end: Position { line: 855, column: 18, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "Options `security.acme.certs.", span: Span { start: Position { line: 856, column: 1, }, end: Position { line: 856, column: 42, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 856, column: 44, }, end: Position { line: 856, column: 48, }, }, }, ), }, ), Raw( PartRaw { content: ".listenHTTP` and\n`security.acme.certs.", span: Span { start: Position { line: 856, column: 1, }, end: Position { line: 857, column: 34, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 857, column: 36, }, end: Position { line: 857, column: 40, }, }, }, ), }, ), Raw( PartRaw { content: ".dnsProvider` are mutually exclusive.\n", span: Span { start: Position { line: 856, column: 1, }, end: Position { line: 858, column: 11, }, }, }, ), ], span: Span { start: Position { line: 855, column: 21, }, end: Position { line: 858, column: 13, }, }, }, ), }, ), ], span: Span { start: Position { line: 853, column: 9, }, end: Position { line: 859, column: 10, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "assertion", span: Span { start: Position { line: 861, column: 11, }, end: Position { line: 861, column: 20, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 861, column: 23, }, end: Position { line: 861, column: 27, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "dnsProvider", span: Span { start: Position { line: 861, column: 28, }, end: Position { line: 861, column: 39, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 861, column: 43, }, end: Position { line: 861, column: 47, }, }, }, ), }, ), operator: LogicalOr, right: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 861, column: 51, }, end: Position { line: 861, column: 55, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "webroot", span: Span { start: Position { line: 861, column: 56, }, end: Position { line: 861, column: 63, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 861, column: 67, }, end: Position { line: 861, column: 71, }, }, }, ), }, ), }, ), operator: LogicalOr, right: BinaryOperation( BinaryOperation { left: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "data", span: Span { start: Position { line: 861, column: 75, }, end: Position { line: 861, column: 79, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "listenHTTP", span: Span { start: Position { line: 861, column: 80, }, end: Position { line: 861, column: 90, }, }, }, ), ], default: None, }, ), operator: NotEqualTo, right: Identifier( Identifier { id: "null", span: Span { start: Position { line: 861, column: 94, }, end: Position { line: 861, column: 98, }, }, }, ), }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "message", span: Span { start: Position { line: 862, column: 11, }, end: Position { line: 862, column: 18, }, }, }, ), ], to: IndentedString( IndentedString { parts: [ Raw( PartRaw { content: "One of `security.acme.certs.", span: Span { start: Position { line: 863, column: 1, }, end: Position { line: 863, column: 41, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 863, column: 43, }, end: Position { line: 863, column: 47, }, }, }, ), }, ), Raw( PartRaw { content: ".dnsProvider`,\n`security.acme.certs.", span: Span { start: Position { line: 863, column: 1, }, end: Position { line: 864, column: 34, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 864, column: 36, }, end: Position { line: 864, column: 40, }, }, }, ), }, ), Raw( PartRaw { content: ".webroot`, or\n`security.acme.certs.", span: Span { start: Position { line: 863, column: 1, }, end: Position { line: 865, column: 34, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 865, column: 36, }, end: Position { line: 865, column: 40, }, }, }, ), }, ), Raw( PartRaw { content: ".listenHTTP` must be provided.\n", span: Span { start: Position { line: 863, column: 1, }, end: Position { line: 866, column: 11, }, }, }, ), ], span: Span { start: Position { line: 862, column: 21, }, end: Position { line: 866, column: 13, }, }, }, ), }, ), ], span: Span { start: Position { line: 860, column: 9, }, end: Position { line: 867, column: 10, }, }, }, ), ], span: Span { start: Position { line: 809, column: 63, }, end: Position { line: 868, column: 8, }, }, }, ), span: Span { start: Position { line: 809, column: 57, }, end: Position { line: 868, column: 8, }, }, }, ), span: Span { start: Position { line: 809, column: 51, }, end: Position { line: 868, column: 8, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 868, column: 10, }, end: Position { line: 868, column: 13, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "certs", span: Span { start: Position { line: 868, column: 14, }, end: Position { line: 868, column: 19, }, }, }, ), ], default: None, }, ), ], }, ), ], }, ), }, ), span: Span { start: Position { line: 790, column: 20, }, end: Position { line: 868, column: 21, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 870, column: 7, }, end: Position { line: 870, column: 12, }, }, }, ), Raw( PartRaw { content: "users", span: Span { start: Position { line: 870, column: 13, }, end: Position { line: 870, column: 18, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 870, column: 19, }, end: Position { line: 870, column: 23, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "home", span: Span { start: Position { line: 871, column: 9, }, end: Position { line: 871, column: 13, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "/var/lib/acme", span: Span { start: Position { line: 871, column: 17, }, end: Position { line: 871, column: 30, }, }, }, ), ], span: Span { start: Position { line: 871, column: 16, }, end: Position { line: 871, column: 31, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "group", span: Span { start: Position { line: 872, column: 9, }, end: Position { line: 872, column: 14, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "acme", span: Span { start: Position { line: 872, column: 18, }, end: Position { line: 872, column: 22, }, }, }, ), ], span: Span { start: Position { line: 872, column: 17, }, end: Position { line: 872, column: 23, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "isSystemUser", span: Span { start: Position { line: 873, column: 9, }, end: Position { line: 873, column: 21, }, }, }, ), ], to: Identifier( Identifier { id: "true", span: Span { start: Position { line: 873, column: 24, }, end: Position { line: 873, column: 28, }, }, }, ), }, ), ], span: Span { start: Position { line: 870, column: 26, }, end: Position { line: 874, column: 8, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "users", span: Span { start: Position { line: 876, column: 7, }, end: Position { line: 876, column: 12, }, }, }, ), Raw( PartRaw { content: "groups", span: Span { start: Position { line: 876, column: 13, }, end: Position { line: 876, column: 19, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 876, column: 20, }, end: Position { line: 876, column: 24, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [], span: Span { start: Position { line: 876, column: 27, }, end: Position { line: 876, column: 29, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 878, column: 7, }, end: Position { line: 878, column: 14, }, }, }, ), Raw( PartRaw { content: "services", span: Span { start: Position { line: 878, column: 15, }, end: Position { line: 878, column: 23, }, }, }, ), ], to: BinaryOperation( BinaryOperation { left: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "acme-fixperms", span: Span { start: Position { line: 879, column: 10, }, end: Position { line: 879, column: 23, }, }, }, ), ], span: Span { start: Position { line: 879, column: 9, }, end: Position { line: 879, column: 24, }, }, }, ), }, ), ], to: Identifier( Identifier { id: "userMigrationService", span: Span { start: Position { line: 879, column: 27, }, end: Position { line: 879, column: 47, }, }, }, ), }, ), ], span: Span { start: Position { line: 878, column: 26, }, end: Position { line: 880, column: 8, }, }, }, ), operator: Update, right: BinaryOperation( BinaryOperation { left: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrs'", span: Span { start: Position { line: 880, column: 13, }, end: Position { line: 880, column: 22, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cert", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "conf", }, ), body: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nameValuePair", span: Span { start: Position { line: 880, column: 36, }, end: Position { line: 880, column: 49, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "acme-", span: Span { start: Position { line: 880, column: 51, }, end: Position { line: 880, column: 63, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 880, column: 58, }, end: Position { line: 880, column: 62, }, }, }, ), }, ), ], span: Span { start: Position { line: 880, column: 50, }, end: Position { line: 880, column: 64, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "conf", span: Span { start: Position { line: 880, column: 65, }, end: Position { line: 880, column: 69, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "renewService", span: Span { start: Position { line: 880, column: 70, }, end: Position { line: 880, column: 82, }, }, }, ), ], default: None, }, ), ], }, ), span: Span { start: Position { line: 880, column: 30, }, end: Position { line: 880, column: 82, }, }, }, ), span: Span { start: Position { line: 880, column: 24, }, end: Position { line: 880, column: 82, }, }, }, ), Identifier( Identifier { id: "certConfigs", span: Span { start: Position { line: 880, column: 84, }, end: Position { line: 880, column: 95, }, }, }, ), ], }, ), operator: Update, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "optionalAttrs", span: Span { start: Position { line: 881, column: 13, }, end: Position { line: 881, column: 26, }, }, }, ), arguments: [ PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "cfg", span: Span { start: Position { line: 881, column: 28, }, end: Position { line: 881, column: 31, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "preliminarySelfsigned", span: Span { start: Position { line: 881, column: 32, }, end: Position { line: 881, column: 53, }, }, }, ), ], default: None, }, ), BinaryOperation( BinaryOperation { left: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Expression( PartExpression { expression: String( String_ { parts: [ Raw( PartRaw { content: "acme-selfsigned-ca", span: Span { start: Position { line: 882, column: 10, }, end: Position { line: 882, column: 28, }, }, }, ), ], span: Span { start: Position { line: 882, column: 9, }, end: Position { line: 882, column: 29, }, }, }, ), }, ), ], to: Identifier( Identifier { id: "selfsignCAService", span: Span { start: Position { line: 882, column: 32, }, end: Position { line: 882, column: 49, }, }, }, ), }, ), ], span: Span { start: Position { line: 881, column: 56, }, end: Position { line: 883, column: 8, }, }, }, ), operator: Update, right: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrs'", span: Span { start: Position { line: 883, column: 13, }, end: Position { line: 883, column: 22, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cert", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "conf", }, ), body: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nameValuePair", span: Span { start: Position { line: 883, column: 36, }, end: Position { line: 883, column: 49, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "acme-selfsigned-", span: Span { start: Position { line: 883, column: 51, }, end: Position { line: 883, column: 74, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 883, column: 69, }, end: Position { line: 883, column: 73, }, }, }, ), }, ), ], span: Span { start: Position { line: 883, column: 50, }, end: Position { line: 883, column: 75, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "conf", span: Span { start: Position { line: 883, column: 76, }, end: Position { line: 883, column: 80, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "selfsignService", span: Span { start: Position { line: 883, column: 81, }, end: Position { line: 883, column: 96, }, }, }, ), ], default: None, }, ), ], }, ), span: Span { start: Position { line: 883, column: 30, }, end: Position { line: 883, column: 96, }, }, }, ), span: Span { start: Position { line: 883, column: 24, }, end: Position { line: 883, column: 96, }, }, }, ), Identifier( Identifier { id: "certConfigs", span: Span { start: Position { line: 883, column: 98, }, end: Position { line: 883, column: 109, }, }, }, ), ], }, ), }, ), ], }, ), }, ), }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 885, column: 7, }, end: Position { line: 885, column: 14, }, }, }, ), Raw( PartRaw { content: "timers", span: Span { start: Position { line: 885, column: 15, }, end: Position { line: 885, column: 21, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrs'", span: Span { start: Position { line: 885, column: 24, }, end: Position { line: 885, column: 33, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cert", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "conf", }, ), body: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nameValuePair", span: Span { start: Position { line: 885, column: 47, }, end: Position { line: 885, column: 60, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "acme-", span: Span { start: Position { line: 885, column: 62, }, end: Position { line: 885, column: 74, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 885, column: 69, }, end: Position { line: 885, column: 73, }, }, }, ), }, ), ], span: Span { start: Position { line: 885, column: 61, }, end: Position { line: 885, column: 75, }, }, }, ), PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "conf", span: Span { start: Position { line: 885, column: 76, }, end: Position { line: 885, column: 80, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "renewTimer", span: Span { start: Position { line: 885, column: 81, }, end: Position { line: 885, column: 91, }, }, }, ), ], default: None, }, ), ], }, ), span: Span { start: Position { line: 885, column: 41, }, end: Position { line: 885, column: 91, }, }, }, ), span: Span { start: Position { line: 885, column: 35, }, end: Position { line: 885, column: 91, }, }, }, ), Identifier( Identifier { id: "certConfigs", span: Span { start: Position { line: 885, column: 93, }, end: Position { line: 885, column: 104, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "systemd", span: Span { start: Position { line: 887, column: 7, }, end: Position { line: 887, column: 14, }, }, }, ), Raw( PartRaw { content: "targets", span: Span { start: Position { line: 887, column: 15, }, end: Position { line: 887, column: 22, }, }, }, ), ], to: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "finishedTargets", span: Span { start: Position { line: 889, column: 9, }, end: Position { line: 889, column: 24, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrs'", span: Span { start: Position { line: 889, column: 27, }, end: Position { line: 889, column: 36, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "cert", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "conf", }, ), body: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nameValuePair", span: Span { start: Position { line: 889, column: 50, }, end: Position { line: 889, column: 63, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "acme-finished-", span: Span { start: Position { line: 889, column: 65, }, end: Position { line: 889, column: 86, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 889, column: 81, }, end: Position { line: 889, column: 85, }, }, }, ), }, ), ], span: Span { start: Position { line: 889, column: 64, }, end: Position { line: 889, column: 87, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "wantedBy", span: Span { start: Position { line: 890, column: 11, }, end: Position { line: 890, column: 19, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "default.target", span: Span { start: Position { line: 890, column: 25, }, end: Position { line: 890, column: 39, }, }, }, ), ], span: Span { start: Position { line: 890, column: 24, }, end: Position { line: 890, column: 40, }, }, }, ), ], span: Span { start: Position { line: 890, column: 22, }, end: Position { line: 890, column: 42, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "requires", span: Span { start: Position { line: 891, column: 11, }, end: Position { line: 891, column: 19, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "acme-", span: Span { start: Position { line: 891, column: 25, }, end: Position { line: 891, column: 37, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 891, column: 32, }, end: Position { line: 891, column: 36, }, }, }, ), }, ), Raw( PartRaw { content: ".service", span: Span { start: Position { line: 891, column: 25, }, end: Position { line: 891, column: 45, }, }, }, ), ], span: Span { start: Position { line: 891, column: 24, }, end: Position { line: 891, column: 46, }, }, }, ), ], span: Span { start: Position { line: 891, column: 22, }, end: Position { line: 891, column: 48, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "after", span: Span { start: Position { line: 892, column: 11, }, end: Position { line: 892, column: 16, }, }, }, ), ], to: List( List { elements: [ String( String_ { parts: [ Raw( PartRaw { content: "acme-", span: Span { start: Position { line: 892, column: 22, }, end: Position { line: 892, column: 34, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "cert", span: Span { start: Position { line: 892, column: 29, }, end: Position { line: 892, column: 33, }, }, }, ), }, ), Raw( PartRaw { content: ".service", span: Span { start: Position { line: 892, column: 22, }, end: Position { line: 892, column: 42, }, }, }, ), ], span: Span { start: Position { line: 892, column: 21, }, end: Position { line: 892, column: 43, }, }, }, ), ], span: Span { start: Position { line: 892, column: 19, }, end: Position { line: 892, column: 45, }, }, }, ), }, ), ], span: Span { start: Position { line: 889, column: 88, }, end: Position { line: 893, column: 10, }, }, }, ), ], }, ), span: Span { start: Position { line: 889, column: 44, }, end: Position { line: 893, column: 10, }, }, }, ), span: Span { start: Position { line: 889, column: 38, }, end: Position { line: 893, column: 10, }, }, }, ), Identifier( Identifier { id: "certConfigs", span: Span { start: Position { line: 893, column: 12, }, end: Position { line: 893, column: 23, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "accountTargets", span: Span { start: Position { line: 904, column: 9, }, end: Position { line: 904, column: 23, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "mapAttrs'", span: Span { start: Position { line: 904, column: 26, }, end: Position { line: 904, column: 35, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "hash", }, ), body: Function( Function { head: Simple( FunctionHeadSimple { identifier: "confs", }, ), body: LetIn( LetIn { bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "leader", span: Span { start: Position { line: 905, column: 11, }, end: Position { line: 905, column: 17, }, }, }, ), ], to: String( String_ { parts: [ Raw( PartRaw { content: "acme-", span: Span { start: Position { line: 905, column: 21, }, end: Position { line: 905, column: 55, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 905, column: 29, }, end: Position { line: 905, column: 37, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "head", span: Span { start: Position { line: 905, column: 38, }, end: Position { line: 905, column: 42, }, }, }, ), ], default: None, }, ), arguments: [ Identifier( Identifier { id: "confs", span: Span { start: Position { line: 905, column: 43, }, end: Position { line: 905, column: 48, }, }, }, ), ], }, ), attribute_path: [ Raw( PartRaw { content: "cert", span: Span { start: Position { line: 905, column: 50, }, end: Position { line: 905, column: 54, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ".service", span: Span { start: Position { line: 905, column: 21, }, end: Position { line: 905, column: 63, }, }, }, ), ], span: Span { start: Position { line: 905, column: 20, }, end: Position { line: 905, column: 64, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "dependantServices", span: Span { start: Position { line: 906, column: 11, }, end: Position { line: 906, column: 28, }, }, }, ), ], to: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "map", span: Span { start: Position { line: 906, column: 31, }, end: Position { line: 906, column: 34, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "conf", }, ), body: String( String_ { parts: [ Raw( PartRaw { content: "acme-", span: Span { start: Position { line: 906, column: 43, }, end: Position { line: 906, column: 60, }, }, }, ), Interpolation( PartInterpolation { expression: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "conf", span: Span { start: Position { line: 906, column: 50, }, end: Position { line: 906, column: 54, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "cert", span: Span { start: Position { line: 906, column: 55, }, end: Position { line: 906, column: 59, }, }, }, ), ], default: None, }, ), }, ), Raw( PartRaw { content: ".service", span: Span { start: Position { line: 906, column: 43, }, end: Position { line: 906, column: 68, }, }, }, ), ], span: Span { start: Position { line: 906, column: 42, }, end: Position { line: 906, column: 69, }, }, }, ), span: Span { start: Position { line: 906, column: 36, }, end: Position { line: 906, column: 69, }, }, }, ), FunctionApplication( FunctionApplication { function: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "builtins", span: Span { start: Position { line: 906, column: 72, }, end: Position { line: 906, column: 80, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "tail", span: Span { start: Position { line: 906, column: 81, }, end: Position { line: 906, column: 85, }, }, }, ), ], default: None, }, ), arguments: [ Identifier( Identifier { id: "confs", span: Span { start: Position { line: 906, column: 86, }, end: Position { line: 906, column: 91, }, }, }, ), ], }, ), ], }, ), }, ), ], target: FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "nameValuePair", span: Span { start: Position { line: 907, column: 12, }, end: Position { line: 907, column: 25, }, }, }, ), arguments: [ String( String_ { parts: [ Raw( PartRaw { content: "acme-account-", span: Span { start: Position { line: 907, column: 27, }, end: Position { line: 907, column: 47, }, }, }, ), Interpolation( PartInterpolation { expression: Identifier( Identifier { id: "hash", span: Span { start: Position { line: 907, column: 42, }, end: Position { line: 907, column: 46, }, }, }, ), }, ), ], span: Span { start: Position { line: 907, column: 26, }, end: Position { line: 907, column: 48, }, }, }, ), Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "requiredBy", span: Span { start: Position { line: 908, column: 11, }, end: Position { line: 908, column: 21, }, }, }, ), ], to: Identifier( Identifier { id: "dependantServices", span: Span { start: Position { line: 908, column: 24, }, end: Position { line: 908, column: 41, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "before", span: Span { start: Position { line: 909, column: 11, }, end: Position { line: 909, column: 17, }, }, }, ), ], to: Identifier( Identifier { id: "dependantServices", span: Span { start: Position { line: 909, column: 20, }, end: Position { line: 909, column: 37, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "requires", span: Span { start: Position { line: 910, column: 11, }, end: Position { line: 910, column: 19, }, }, }, ), ], to: List( List { elements: [ Identifier( Identifier { id: "leader", span: Span { start: Position { line: 910, column: 24, }, end: Position { line: 910, column: 30, }, }, }, ), ], span: Span { start: Position { line: 910, column: 22, }, end: Position { line: 910, column: 32, }, }, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "after", span: Span { start: Position { line: 911, column: 11, }, end: Position { line: 911, column: 16, }, }, }, ), ], to: List( List { elements: [ Identifier( Identifier { id: "leader", span: Span { start: Position { line: 911, column: 21, }, end: Position { line: 911, column: 27, }, }, }, ), ], span: Span { start: Position { line: 911, column: 19, }, end: Position { line: 911, column: 29, }, }, }, ), }, ), ], span: Span { start: Position { line: 907, column: 49, }, end: Position { line: 912, column: 10, }, }, }, ), ], }, ), span: Span { start: Position { line: 904, column: 50, }, end: Position { line: 912, column: 10, }, }, }, ), span: Span { start: Position { line: 904, column: 43, }, end: Position { line: 912, column: 10, }, }, }, ), span: Span { start: Position { line: 904, column: 37, }, end: Position { line: 912, column: 10, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "groupBy", span: Span { start: Position { line: 912, column: 13, }, end: Position { line: 912, column: 20, }, }, }, ), arguments: [ Function( Function { head: Simple( FunctionHeadSimple { identifier: "conf", }, ), body: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "conf", span: Span { start: Position { line: 912, column: 28, }, end: Position { line: 912, column: 32, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "accountHash", span: Span { start: Position { line: 912, column: 33, }, end: Position { line: 912, column: 44, }, }, }, ), ], default: None, }, ), span: Span { start: Position { line: 912, column: 22, }, end: Position { line: 912, column: 44, }, }, }, ), FunctionApplication( FunctionApplication { function: Identifier( Identifier { id: "attrValues", span: Span { start: Position { line: 912, column: 47, }, end: Position { line: 912, column: 57, }, }, }, ), arguments: [ Identifier( Identifier { id: "certConfigs", span: Span { start: Position { line: 912, column: 58, }, end: Position { line: 912, column: 69, }, }, }, ), ], }, ), ], }, ), ], }, ), }, ), ], target: BinaryOperation( BinaryOperation { left: Identifier( Identifier { id: "finishedTargets", span: Span { start: Position { line: 913, column: 10, }, end: Position { line: 913, column: 25, }, }, }, ), operator: Update, right: Identifier( Identifier { id: "accountTargets", span: Span { start: Position { line: 913, column: 29, }, end: Position { line: 913, column: 43, }, }, }, ), }, ), span: Span { start: Position { line: 887, column: 25, }, end: Position { line: 913, column: 43, }, }, }, ), }, ), ], span: Span { start: Position { line: 780, column: 30, }, end: Position { line: 914, column: 6, }, }, }, ), ], }, ), ], span: Span { start: Position { line: 779, column: 20, }, end: Position { line: 915, column: 4, }, }, }, ), ], }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "meta", span: Span { start: Position { line: 917, column: 3, }, end: Position { line: 917, column: 7, }, }, }, ), ], to: Map( Map { recursive: false, bindings: [ KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "maintainers", span: Span { start: Position { line: 918, column: 5, }, end: Position { line: 918, column: 16, }, }, }, ), ], to: PropertyAccess( PropertyAccess { expression: Identifier( Identifier { id: "lib", span: Span { start: Position { line: 918, column: 19, }, end: Position { line: 918, column: 22, }, }, }, ), attribute_path: [ Raw( PartRaw { content: "teams", span: Span { start: Position { line: 918, column: 23, }, end: Position { line: 918, column: 28, }, }, }, ), Raw( PartRaw { content: "acme", span: Span { start: Position { line: 918, column: 29, }, end: Position { line: 918, column: 33, }, }, }, ), Raw( PartRaw { content: "members", span: Span { start: Position { line: 918, column: 34, }, end: Position { line: 918, column: 41, }, }, }, ), ], default: None, }, ), }, ), KeyValue( BindingKeyValue { from: [ Raw( PartRaw { content: "doc", span: Span { start: Position { line: 919, column: 5, }, end: Position { line: 919, column: 8, }, }, }, ), ], to: Path( Path { parts: [ Raw( PartRaw { content: "./doc.xml", span: Span { start: Position { line: 919, column: 11, }, end: Position { line: 919, column: 20, }, }, }, ), ], span: Span { start: Position { line: 919, column: 11, }, end: Position { line: 919, column: 20, }, }, }, ), }, ), ], span: Span { start: Position { line: 917, column: 10, }, end: Position { line: 920, column: 4, }, }, }, ), }, ), ], span: Span { start: Position { line: 686, column: 4, }, end: Position { line: 921, column: 2, }, }, }, ), span: Span { start: Position { line: 3, column: 1, }, end: Position { line: 921, column: 2, }, }, }, ), span: Span { start: Position { line: 2, column: 1, }, end: Position { line: 921, column: 2, }, }, }, ), span: Span { start: Position { line: 1, column: 1, }, end: Position { line: 921, column: 2, }, }, }, )