Leonardo Alt
|
9893cae27a
|
[SMTChecker] Make mergeVariables deterministic
|
2019-05-08 20:46:01 +02:00 |
|
chriseth
|
4d460915f3
|
Merge pull request #6655 from ethereum/storageMappings
[SolYul] Storage mappings
|
2019-05-08 20:38:46 +02:00 |
|
Leonardo
|
241b6b4bae
|
Merge pull request #6702 from ethereum/smt_fix_asgn_unsupported_type
[SMTChecker] Fix unsupported type assignment
|
2019-05-08 16:12:46 +02:00 |
|
chriseth
|
595544645e
|
Mappings.
|
2019-05-08 15:54:52 +02:00 |
|
Leonardo Alt
|
0b046897ae
|
[SMTChecker] Fix unsupported type assignment
|
2019-05-08 14:28:23 +02:00 |
|
chriseth
|
b4d6f847b4
|
Events.
|
2019-05-08 13:29:11 +02:00 |
|
chriseth
|
5fb85a6118
|
Merge pull request #6662 from ethereum/msgSender
Implement most trivial members.
|
2019-05-08 13:28:43 +02:00 |
|
chriseth
|
6c9c54a657
|
Merge pull request #6657 from ethereum/smt_tuple_multi_decl
[SMTChecker] Support tuples as multi var decl
|
2019-05-07 17:55:36 +02:00 |
|
chriseth
|
acca390ef5
|
Most trivial members.
|
2019-05-07 17:19:45 +02:00 |
|
chriseth
|
b99ad2aaa3
|
Merge pull request #6639 from ethereum/yul-require-assert
Yul generation of "require" and "assert"
|
2019-05-07 16:59:37 +02:00 |
|
Leonardo Alt
|
3c7540ceb2
|
[SMTChecker] Support tuples with multiple var decls
|
2019-05-07 16:57:27 +02:00 |
|
chriseth
|
f68c09272b
|
Simple tuple expressions.
|
2019-05-07 15:59:56 +02:00 |
|
chriseth
|
c604481cef
|
Logical operators.
|
2019-05-07 15:59:35 +02:00 |
|
chriseth
|
785b369b89
|
Add type helper function.
|
2019-05-07 12:36:54 +02:00 |
|
chriseth
|
3fa4c3da1e
|
Comparison operations.
|
2019-05-07 12:35:05 +02:00 |
|
chriseth
|
4069b19734
|
Unary operation for literals.
|
2019-05-07 12:35:04 +02:00 |
|
Mathias Baumann
|
7f14352bbf
|
Yul generation of require and assert
|
2019-05-07 12:19:41 +02:00 |
|
chriseth
|
e6f8aaafa5
|
Conversion for string literals.
|
2019-05-07 11:55:17 +02:00 |
|
Leonardo Alt
|
2139c20776
|
[SMTChecker] Support delete
|
2019-05-06 18:32:10 +02:00 |
|
Leonardo
|
e99efec085
|
Merge pull request #6652 from ethereum/smt_tuple_function
[SMTChecker] Support tuples as function calls with multiple return values
|
2019-05-06 15:19:24 +02:00 |
|
chriseth
|
3365cb9b4a
|
Add type helper function.
|
2019-05-06 12:01:13 +02:00 |
|
chriseth
|
7c62193524
|
Change some AST elements to post visit.
|
2019-05-06 11:43:18 +02:00 |
|
chriseth
|
dee1c1109c
|
Merge pull request #6668 from ethereum/smt_fix_short_circuit
Fix short circuit with assignments
|
2019-05-06 11:40:07 +02:00 |
|
chriseth
|
36c78baa41
|
Merge pull request #6646 from ethereum/storageAccess
[Yul] Storage access for sol -> yul
|
2019-05-06 11:33:36 +02:00 |
|
Leonardo Alt
|
80712f44cb
|
Fix short circuit with assignments
|
2019-05-06 11:04:43 +02:00 |
|
Leonardo Alt
|
5440a53d4d
|
[SMTChecker] Support tuples as function calls with multiple return values
|
2019-05-03 06:10:22 +02:00 |
|
chriseth
|
5bd3ed97bd
|
Merge pull request #6649 from ethereum/smt_tuple_asgn
[SMTChecker] Support tuple assignment
|
2019-05-02 18:43:16 +02:00 |
|
chriseth
|
e9f41d1148
|
Merge pull request #6604 from ethereum/library-self-delegatecall
Error on library calling itself externally
|
2019-05-02 17:25:25 +02:00 |
|
chriseth
|
aa4d4afcdc
|
LValues and state variables of value type.
|
2019-05-02 17:03:22 +02:00 |
|
chriseth
|
cbc1b97760
|
Merge pull request #6648 from ethereum/moveStorageFunctions
Move storage access functions to yul utils.
|
2019-05-02 12:58:03 +02:00 |
|
Leonardo Alt
|
204dcf1771
|
[SMTChecker] Support tuple assignments
|
2019-05-02 12:55:34 +02:00 |
|
chriseth
|
54775a7880
|
Merge pull request #6647 from ethereum/smt_tuple_decl
[SMTChecker] Support tuple type declaration
|
2019-05-02 12:49:50 +02:00 |
|
Erik Kundt
|
07744dbd12
|
Throws error on library calling itself externally.
|
2019-05-02 12:41:07 +02:00 |
|
chriseth
|
d4c4a473d8
|
Merge pull request #6622 from ethereum/warn-this-super
Issue warning for variables called `super` or `this`
|
2019-05-02 12:38:53 +02:00 |
|
chriseth
|
31b7037749
|
Move storage access functions to utils.
|
2019-05-02 12:11:41 +02:00 |
|
Leonardo Alt
|
6c7527ac90
|
[SMTChecker] Support tuple type declaration
|
2019-05-02 12:05:21 +02:00 |
|
Mathias Baumann
|
cf35e5ba02
|
Issue warning for variables called super or this
|
2019-05-02 11:30:24 +02:00 |
|
Leonardo Alt
|
66655b87b0
|
[SMTChecker] Fix ICE in fixed point operations
|
2019-05-02 10:59:23 +02:00 |
|
Leonardo Alt
|
dd4e938265
|
[SMTChecker] Fix ICE in inherited state var
|
2019-05-02 10:03:12 +02:00 |
|
Leonardo Alt
|
a6db37ac9c
|
[SMTChecker] Fix bad cast in base constructor modifier.
|
2019-04-30 18:48:13 +02:00 |
|
chriseth
|
dc13469593
|
Merge pull request #6589 from ethereum/addReturn
[Yul] Add code generation for "return" and for loops.
|
2019-04-30 17:07:45 +02:00 |
|
chriseth
|
e66ab6c036
|
Helper function to define the value of expressions.
|
2019-04-30 13:10:37 +02:00 |
|
chriseth
|
0eef51ffa4
|
Conversion during binary operation.
|
2019-04-30 13:10:37 +02:00 |
|
chriseth
|
597d37b731
|
Implement for loops.
|
2019-04-30 13:10:37 +02:00 |
|
chriseth
|
c1ca16cd33
|
Implement return.
|
2019-04-30 13:10:36 +02:00 |
|
Leonardo Alt
|
e4989369d0
|
Refactor cast from identifier ref decl to var decl
|
2019-04-30 11:08:36 +02:00 |
|
Leonardo Alt
|
762f79f84d
|
Refactor assignment handling
|
2019-04-30 11:08:36 +02:00 |
|
chriseth
|
39d153b7a1
|
Merge pull request #6570 from ethereum/fixMetaSettings
Move metadata settings into its own object.
|
2019-04-29 15:09:27 +02:00 |
|
chriseth
|
e8ba10bfaa
|
Merge pull request #6612 from ethereum/abi-functions-assertion
Unifies behaviour for member access of ABI functions
|
2019-04-29 15:02:40 +02:00 |
|
chriseth
|
3a19d83671
|
Merge pull request #6578 from ethereum/fix_base_overload
Fix call to base class overloaded functions
|
2019-04-29 14:33:52 +02:00 |
|
Erik Kundt
|
381ed5a302
|
Unifies behavior for member access of ABI functions.
|
2019-04-29 14:27:10 +02:00 |
|
chriseth
|
eef3f95724
|
Move metadata settings into its own object.
|
2019-04-29 14:19:27 +02:00 |
|
Erik Kundt
|
c02257207b
|
Removes assert on magic ABI functions during codegen.
|
2019-04-26 15:01:35 +02:00 |
|
Leonardo Alt
|
371b37b660
|
Fix direct call to base class overloaded functions
|
2019-04-26 09:34:15 +02:00 |
|
chriseth
|
169b555a22
|
Merge pull request #6507 from ethereum/smt_address_members
[SMTChecker] Address members
|
2019-04-25 17:29:42 +02:00 |
|
chriseth
|
309d3e65cf
|
Merge pull request #6585 from ethereum/fixInvalidFunctionTags
Fix invalid function tags
|
2019-04-25 16:30:37 +02:00 |
|
Leonardo Alt
|
fc482de695
|
[SMTChecker] Support address members
|
2019-04-25 16:24:36 +02:00 |
|
chriseth
|
5b991c1e59
|
Fix use of uninitialized functions stored in storage.
|
2019-04-25 15:40:48 +02:00 |
|
Mathias Baumann
|
1ef213cc15
|
Sol -> Yul: Implement explicit cast
|
2019-04-24 22:52:17 +02:00 |
|
Mathias Baumann
|
441369d5f1
|
Sol -> Yul Generator: Mark "return" as unimplemented
|
2019-04-24 22:52:17 +02:00 |
|
Mathias Baumann
|
944ac6fb6d
|
Sol -> Yul Generation: Implicit conversions
|
2019-04-24 22:52:17 +02:00 |
|
Leonardo Alt
|
dd1afeba52
|
[SMTChecker] Support this as address
|
2019-04-18 17:56:52 +02:00 |
|
chriseth
|
b02fbc5d02
|
Merge pull request #6503 from ethereum/inlineAsm-yul
Inline asm yul
|
2019-04-18 17:15:09 +02:00 |
|
Mathias Baumann
|
3d061c83d7
|
IR: Generate inline asm blocks
|
2019-04-18 16:49:19 +02:00 |
|
chriseth
|
fce19bde58
|
Merge pull request #6545 from ethereum/smt_contracts
[SMTChecker] Support contract type
|
2019-04-18 13:01:18 +02:00 |
|
chriseth
|
0bfd587363
|
Merge pull request #6527 from rocky/move-SemVerHandler
Move SemVerHandler to analysis to parsing to increase modularity...
|
2019-04-18 13:00:45 +02:00 |
|
chriseth
|
fb302c1c4f
|
Merge pull request #6473 from ethereum/libeventhash-6435
Fix external ABI type name for contracts
|
2019-04-18 12:53:34 +02:00 |
|
Mathias Baumann
|
0f4b53e9a0
|
Fix external ABI type name for contracts
|
2019-04-18 11:39:48 +02:00 |
|
Leonardo Alt
|
ecd89393ee
|
[SMTChecker] Support contract type
|
2019-04-17 16:30:11 +02:00 |
|
Leonardo Alt
|
03d18f1b98
|
[SMTChecker] Add note about not inlining external function calls
|
2019-04-17 16:14:07 +02:00 |
|
rocky
|
b424446c5f
|
Move SemVerHandler to analysis to parsing to increase modularity...
If ever you want to separate building analysis from scanning/parsing/ast, this will help.
|
2019-04-17 10:13:42 -04:00 |
|
chriseth
|
4509e8efbb
|
Merge pull request #6543 from ethereum/typeprovider-bits
TypeProvider bits
|
2019-04-17 15:50:08 +02:00 |
|
chriseth
|
922ab0d72d
|
Merge pull request #6534 from ethereum/reuseLiteralContent-6472
Re-produce the original 'useLiteralContent' setting
|
2019-04-17 15:41:55 +02:00 |
|
Mathias Baumann
|
b24dd42e47
|
Re-produce the original 'useLiteralContent' setting
|
2019-04-17 14:54:51 +02:00 |
|
Christian Parpart
|
9733ae7483
|
[libsolidity] TypeProvider: cleanup unnecessary std:: qualifiers
|
2019-04-17 14:45:29 +02:00 |
|
Christian Parpart
|
721bf367a3
|
[libsolidity] TypeProvider: eliminate redundant "Type" suffix in provider function signatures.
|
2019-04-17 14:42:07 +02:00 |
|
Grant Wuerker
|
69b4ce36de
|
Some move semantics improvements.
|
2019-04-17 14:19:48 +02:00 |
|
Christian Parpart
|
862b65d6e3
|
[libsolidity] remove ReferenceType::copyForLocationIfReference (use TypeProvider instead)
|
2019-04-17 13:25:03 +02:00 |
|
Christian Parpart
|
b83097bdc6
|
[libsolidity] Types: eliminate redundant MagicType::metaType() (use TypeProvider instead)
|
2019-04-17 12:59:48 +02:00 |
|
Christian Parpart
|
a99a460c79
|
[libsolidity] Types: remove some old comments
|
2019-04-17 12:00:33 +02:00 |
|
chriseth
|
4e2d4f02b0
|
Make data location explicit.
|
2019-04-16 23:22:08 +02:00 |
|
chriseth
|
2761aed1d3
|
Lazy-initialize string and bytes types.
|
2019-04-16 23:22:08 +02:00 |
|
chriseth
|
4656d7ca7d
|
Change pre-created types to unique_ptr to avoid copying and moving.
|
2019-04-16 23:22:08 +02:00 |
|
Christian Parpart
|
58a45f2cb6
|
[libsolidity] TypeProvider: adds explicit uint256() accessor and removes default params in integerType(...).
|
2019-04-16 18:28:40 +02:00 |
|
Christian Parpart
|
59d4f54729
|
libsolidity: Be more restrictive to not allow any copy constructors at all in Type system.
This enforces us to be a little bit more historical in how to initialize
our std::array<>'s in TypeProvider.
|
2019-04-16 18:26:46 +02:00 |
|
Christian Parpart
|
a2a3b007f3
|
TypeProvider: storageType() to make all parameters explicit
|
2019-04-16 18:26:46 +02:00 |
|
Christian Parpart
|
bf43eebea9
|
libsolidity: Introducing TypeProvider API, for clear type system ownership.
|
2019-04-16 18:26:45 +02:00 |
|
chriseth
|
a61931c5da
|
Merge pull request #6512 from ethereum/smt_refactor_symbvars
[SMTChecker] Allow SymbolicVariable from smt::Sort
|
2019-04-16 15:45:08 +02:00 |
|
Mathias Baumann
|
efc8d79d53
|
Fix wrong location for inline asm blocks
|
2019-04-15 16:40:07 +02:00 |
|
Leonardo Alt
|
07fac9e381
|
[SMTChecker] Allow SymbolicVariable from smt::Sort
|
2019-04-15 14:52:46 +02:00 |
|
chriseth
|
bf5792f7ca
|
Merge pull request #6483 from ethereum/smt_support_mod
[SMTChecker] Support mod
|
2019-04-15 13:42:18 +02:00 |
|
chriseth
|
73ac8f6220
|
Merge pull request #6421 from ethereum/smt_fix_variable_usage
[SMTChecker] Refactor VariableUsage
|
2019-04-15 13:39:10 +02:00 |
|
Leonardo Alt
|
af9f16e014
|
[SMTChecker] Support mod
|
2019-04-12 12:39:25 +02:00 |
|
Daniel Kirchner
|
65991c0922
|
Merge pull request #6481 from ethereum/smt_inline_asm_warning
[SMTChecker] Show unsupported warning for asm blocks
|
2019-04-12 12:36:26 +02:00 |
|
Leonardo
|
dbc9442f9c
|
Merge pull request #6484 from sifmelcara/create-SourceReferenceFormatter-shortcut
Add a shortcut for formatting error information
|
2019-04-12 12:34:08 +02:00 |
|
chriseth
|
565d9837e4
|
Virtual function calls.
|
2019-04-11 15:45:43 +02:00 |
|
chriseth
|
18ab8aeb85
|
Overflow-checked addition.
|
2019-04-11 15:45:14 +02:00 |
|
mingchuan
|
f1374066af
|
Add shortcuts for formatting error information
|
2019-04-10 18:44:45 +08:00 |
|
Mathias Baumann
|
b4380a2137
|
Move convert functions to Yul module
|
2019-04-09 15:31:46 +02:00 |
|
Leonardo Alt
|
4fe303530a
|
[SMTChecker] Show unsupported warning for asm blocks
|
2019-04-05 16:41:15 +02:00 |
|
Leonardo Alt
|
79d8a4e13a
|
[SMTChecker] Refactor VariableUsage
|
2019-04-05 11:38:37 +02:00 |
|
chriseth
|
3df4936b6f
|
Merge pull request #6179 from ethereum/solidity-yul1
Solidity to Yul compiler
|
2019-04-04 16:33:39 +02:00 |
|
chriseth
|
420a7dc3d6
|
Initial IR generator.
|
2019-04-04 15:02:42 +02:00 |
|
Daniel Kirchner
|
d0fda7ca7c
|
Merge pull request #6262 from ethereum/abiEncodeCalldataArray
ABIEncoderV2: implement encoding of calldata arrays and structs.
|
2019-04-04 14:51:45 +02:00 |
|
Daniel Kirchner
|
91a2a9a9c3
|
Implement ABI encoding of calldata arrays and structs.
|
2019-04-04 13:05:32 +02:00 |
|
chriseth
|
8c570f31c5
|
Merge pull request #6442 from ethereum/smt_unary_inc_dec
[SMTChecker] Support unary inc/dec for array/mapping access
|
2019-04-04 11:45:13 +02:00 |
|
Daniel Kirchner
|
d82157d46a
|
Refactor abi encoding functions to prepare implementing calldata arrays and structs.
|
2019-04-04 11:18:03 +02:00 |
|
Daniel Kirchner
|
b0cb330397
|
Allow encoding calldata arrays for base types that do not require cleanup.
|
2019-04-04 11:18:03 +02:00 |
|
Alex Beregszaszi
|
43008dd08e
|
Validate value types in decoder of ABIEncoderV2.
|
2019-04-03 11:32:02 +02:00 |
|
Leonardo Alt
|
aa9b9aa87e
|
[SMTChecker] Support unary inc/dec for array/mapping access
|
2019-04-02 16:53:19 +02:00 |
|
Daniel Kirchner
|
ab8dfed144
|
Implement copying recursive structs from storage to memory.
|
2019-04-02 16:01:44 +02:00 |
|
chriseth
|
f9820adb5e
|
Merge pull request #6396 from ethereum/optSetForAsmStack
Make optimiser settings available to assembly stack.
|
2019-03-28 19:03:23 +01:00 |
|
chriseth
|
84251e5a22
|
Merge pull request #6405 from ethereum/smt_compound_assignment
[SMTChecker] Support arithmetic compound assignment operators.
|
2019-03-28 18:27:25 +01:00 |
|
chriseth
|
3264e9abf0
|
Make optimiser settings available to assembly stack.
|
2019-03-28 18:24:13 +01:00 |
|
Leonardo Alt
|
a7e826a224
|
[SMTChecker] Implement short circuit
|
2019-03-28 16:08:30 +01:00 |
|
Leonardo Alt
|
15269067b5
|
Support arithmetic compound assignment operators
|
2019-03-28 15:27:52 +01:00 |
|
Leonardo Alt
|
ecbf36f271
|
Refactor computing symbolic arithmetic operation
|
2019-03-28 15:27:36 +01:00 |
|
Leonardo Alt
|
1d63b97857
|
Take inlined function calls into account when collecting touched variables
|
2019-03-28 14:32:47 +01:00 |
|
Leonardo Alt
|
6f9b69ebc3
|
Refactor function that retrieves FunctionDefinition from FunctionCall
|
2019-03-28 14:32:47 +01:00 |
|
chriseth
|
529aca5cbd
|
Merge pull request #6407 from ethereum/changeNamespace
Remove "using namespace" from header and move Instruction to dev::eth.
|
2019-03-28 14:32:07 +01:00 |
|
chriseth
|
2308904f68
|
Remove "using namespace" from header and move Instruction to dev::eth.
|
2019-03-28 13:48:11 +01:00 |
|
chriseth
|
a1fe2562c4
|
Move suffixedVariableNameList to utils.
|
2019-03-27 17:14:17 +01:00 |
|
Alex Beregszaszi
|
d6dda7279c
|
Change CompilerStack.reset to have keepSettings flag instead of keepSources
|
2019-03-26 14:46:13 +00:00 |
|
Alex Beregszaszi
|
cca73f9354
|
Remove deprecated CompilerStack.addSources
|
2019-03-26 14:46:02 +00:00 |
|
chriseth
|
72c0e44907
|
Merge pull request #6338 from ethereum/compilerstack-setsource
Introduce setSources in CompilerStack
|
2019-03-26 15:31:57 +01:00 |
|
chriseth
|
d079cdbfaa
|
Merge pull request #6362 from ethereum/fixABIEncoderV2StorageRead
Fix abi encoder v2 storage read
|
2019-03-26 10:23:08 +01:00 |
|
Alex Beregszaszi
|
a894ab4462
|
Merge pull request #6368 from ethereum/yul-standard-warnings
Add warning that Yul is still experimental
|
2019-03-25 22:48:46 +00:00 |
|
Alex Beregszaszi
|
d2185bf529
|
Remove obsolete identifer for the identity precompile
|
2019-03-25 20:57:59 +00:00 |
|
Alex Beregszaszi
|
e211b5b1e1
|
Add warning that Yul is still experimental
|
2019-03-25 20:17:11 +00:00 |
|
Alex Beregszaszi
|
0432401e20
|
Emit warning when using the Yul optimiser
|
2019-03-25 18:38:06 +01:00 |
|
chriseth
|
6b69c31703
|
Fix ABIEncoderV2 array overwrite bug.
|
2019-03-25 18:28:43 +01:00 |
|
chriseth
|
68d4a85575
|
Properly read and clean value types read from storage.
|
2019-03-25 18:28:43 +01:00 |
|
Alex Beregszaszi
|
0d6d0f476c
|
Use setSources
|
2019-03-25 15:11:00 +00:00 |
|
Alex Beregszaszi
|
66a977d999
|
Introduce setSources in CompilerStack
|
2019-03-25 15:11:00 +00:00 |
|
chriseth
|
ffe3a60301
|
Merge pull request #6367 from ethereum/yul-standard
Allow warnings in AssemblyStack
|
2019-03-25 14:59:29 +01:00 |
|
Alex Beregszaszi
|
642d4b9217
|
Abort if parseAndAnalyze failed but no errors are reported in compileYul
|
2019-03-25 13:19:33 +00:00 |
|
Daniel Kirchner
|
66d6711364
|
ABIFunctions: Split out a function for generating a comma separated list of variable names.
|
2019-03-25 10:58:18 +01:00 |
|
Alex Beregszaszi
|
3bc2c35cc4
|
Support compiling Yul within StandardCompiler
|
2019-03-22 01:35:16 +00:00 |
|
Leonardo Alt
|
a207d7f44c
|
[SMTChecker] Add callstack model to overflow checks
|
2019-03-21 16:25:33 +01:00 |
|
Leonardo Alt
|
de89733bd6
|
[SMTChecker] Fix nullptr deref
|
2019-03-21 15:46:54 +01:00 |
|
chriseth
|
d381e26fc8
|
Rename "enabled" optimizer setting stage to "standard".
|
2019-03-21 11:04:40 +01:00 |
|
Mathias Baumann
|
4c2b1c1f29
|
ArrayType::interfaceType(): Rename local variable to make more sense
|
2019-03-21 07:25:59 +01:00 |
|
Mathias Baumann
|
7d809df91a
|
Add back StructType::recursive()
|
2019-03-21 07:25:59 +01:00 |
|
Mathias Baumann
|
8e899a0d32
|
Disallow internal function types as parameters for public/external library function
|
2019-03-21 07:25:57 +01:00 |
|
Mathias Baumann
|
0fbea8a1a0
|
Change return type for interfaceType() to ResultType
|
2019-03-21 07:25:28 +01:00 |
|
Alex Beregszaszi
|
ea1944bb2d
|
Removed unused isLibrary from flag addSource in CompilerStack
|
2019-03-20 17:41:51 +00:00 |
|
chriseth
|
9aab2329ed
|
Merge pull request #6244 from ethereum/smt_modifiers
[SMTChecker] Support modifiers
|
2019-03-20 18:04:28 +01:00 |
|
chriseth
|
54e00b930d
|
Merge pull request #6331 from ethereum/pragma-parser-location-reporting-fix
Fixes wrong source location when reporting pragma solidity version conflicts
|
2019-03-20 16:07:56 +01:00 |
|
chriseth
|
8468dca0bb
|
Merge pull request #6323 from ethereum/bug-637
Fix function calls with named arguments for overloaded functions
|
2019-03-20 16:07:09 +01:00 |
|
chriseth
|
38cbf8d230
|
Pass "optimize stack allocation" flag down to the stack compressor.
|
2019-03-20 15:03:27 +01:00 |
|