192 lines
19 KiB
Plaintext
192 lines
19 KiB
Plaintext
[38;5;12m [39m[38;2;255;187;0m[1m[4mAwesome Ethereum Virtual Machine[0m
|
||
|
||
[38;5;12mA curated list of resources on the Ethereum Virtual Machine (EVM), which is the virtual machine executed on the [39m[38;5;14m[1mEthereum[0m[38;5;12m (https://ethereum.org/) network.[39m
|
||
|
||
[38;5;12mNot[39m[38;5;12m [39m[38;5;12mlisted[39m[38;5;12m [39m[38;5;12mthere[39m[38;5;12m [39m[38;5;12myet,[39m[38;5;12m [39m[38;5;12mbut[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mspirit[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;14m[1m![0m[38;5;12mAwesome[39m[38;5;14m[1m [0m[38;5;14m[1m(https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)[0m[38;5;12m [39m
|
||
[38;5;12m(https://github.com/sindresorhus/awesome)[39m
|
||
|
||
[38;5;12mHere is [39m[38;5;14m[1mhow to contribute[0m[38;5;12m (./contributing.md).[39m
|
||
|
||
|
||
|
||
[38;5;14m[1mTable of Contents[0m[38;5;12m [39m[48;2;30;30;40m[38;5;13m[3mgenerated with [0m[48;2;30;30;40m[38;5;14m[1m[3mDocToc[0m[48;2;30;30;40m[38;5;13m[3m (https://github.com/thlorenz/doctoc)[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mSpecification[0m[38;5;12m (#specification)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mIllustration[0m[38;5;12m (#illustration)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTutorials[0m[38;5;12m (#tutorials)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTests[0m[38;5;12m (#tests)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mEVM Implementations[0m[38;5;12m (#evm-implementations)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mProgramming Languages that Compile into EVM[0m[38;5;12m (#programming-languages-that-compile-into-evm)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDebuggers[0m[38;5;12m (#debuggers)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mCode Analyzers[0m[38;5;12m (#code-analyzers)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mImprovement Proposals[0m[38;5;12m (#improvement-proposals)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mRelated Resources[0m[38;5;12m (#related-resources)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mLicense of This List[0m[38;5;12m (#license-of-this-list)[39m
|
||
|
||
|
||
|
||
|
||
[38;2;255;187;0m[4mSpecification[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mYellow Paper[0m[38;5;12m (https://github.com/ethereum/yellowpaper)[39m
|
||
[48;5;235m[38;5;249m- A terse specification of EVM and Ethereum blocks[49m[39m
|
||
|
||
[38;2;255;187;0m[4mIllustration[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mA detailed illustration of the Ethereum Virtual Machine[0m[38;5;12m (https://ethereum.stackexchange.com/a/6413/280)[39m
|
||
[48;5;235m[38;5;249m- The illustration shows the contents of blocks and block headers faithfully[49m[39m
|
||
|
||
[38;2;255;187;0m[4mTutorials[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mCoinCulture's Guide to the EVM[0m[38;5;12m (https://github.com/CoinCulture/evm-tools/blob/master/analysis/guide.md)[39m
|
||
[48;5;235m[38;5;249m- A hands on guide to understanding how the EVM works, with examples written in raw byte-code and solidity[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mDiving Into The Ethereum Virtual Machine[0m[38;5;12m (https://medium.com/@hayeah/diving-into-the-ethereum-vm-6e8d5d2f3c30)[39m
|
||
[48;5;235m[38;5;249m- An article series examining different aspects of the EVM by walking you through Solidity's assembly output[49m[39m
|
||
|
||
[38;2;255;187;0m[4mTests[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mConsensus test suite[0m[38;5;12m (https://github.com/ethereum/tests)[39m
|
||
[48;5;235m[38;5;249m- EVM implementations can be tested against this test suite[49m[39m
|
||
|
||
[38;2;255;187;0m[4mEVM Implementations[0m
|
||
|
||
[38;2;255;187;0m[4mLive on Main Network[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mgo-ethereum[0m[38;5;12m (https://github.com/ethereum/go-ethereum)[39m
|
||
[48;5;235m[38;5;249m- A popular Ethereum client with its own EVM implementation (**core/vm** (https://github.com/ethereum/go-ethereum/tree/master/core/vm) directory)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mParity[0m[38;5;12m (https://github.com/paritytech/parity) in Rust[39m
|
||
[48;5;235m[38;5;249m- Another popular Ethereum client with its own EVM implementation (**ethcore** (https://github.com/paritytech/parity/tree/master/ethcore) directory)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mcpp-ethereum[0m[38;5;12m (https://github.com/ethereum/cpp-ethereum)[39m
|
||
[48;5;235m[38;5;249m- An Ethereum client that generates the consensus test suite (**libevm/VM.cpp** (https://github.com/ethereum/cpp-ethereum/blob/develop/libevm/VM.cpp))[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPyethereum[0m[38;5;12m (https://github.com/ethereum/pyethereum) in Python[39m
|
||
[48;5;235m[38;5;249m- A mostly deprecated client (**ethereum/vm.py** (https://github.com/ethereum/pyethereum/blob/develop/ethereum/vm.py))[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPy-EVM[0m[38;5;12m (https://github.com/pipermerriam/py-evm) in Python[39m
|
||
[48;5;235m[38;5;249m- A Python implementation designed to be highly configurable and modular and compliant with the Ethereum test suite, work is in progress on it to run a full node and develop sharding.[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEthereumJ[0m[38;5;12m (https://github.com/ethereum/ethereumj) in Java[39m
|
||
[48;5;235m[38;5;249m- A client with its own EVM implementation[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mFor more, see [39m[38;5;14m[1mhere[0m[38;5;12m (https://github.com/ethereum/wiki/wiki/Clients).[39m
|
||
|
||
[38;2;255;187;0m[4mOther Implementations[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSputnikVM[0m[38;5;12m (https://github.com/ethereumproject/sputnikvm) in Rust for Ethereum Classic[39m
|
||
[48;5;235m[38;5;249m- A standalone EVM featuring **a developer[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m environment** (https://github.com/ethereumproject/sputnikvm-dev),[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m a **browser through wasm32-unknown-emscripten[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m target** (https://github.com/sorpaas/sputnikvm-in-browser), and for[49m[39m
|
||
[48;5;235m[38;5;249m **embedded devices** (https://github.com/sorpaas/sputnikvm-on-rux)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mModeling EVM in the K framework[0m[38;5;12m (https://github.com/kframework/evm-semantics) ([39m[38;5;14m[1mwhitepaper[0m[38;5;12m (https://www.ideals.illinois.edu/handle/2142/97207))[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation for **K framework** (http://www.kframework.org/index.php/Main_Page)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mhevm[0m[38;5;12m (https://github.com/dapphub/hevm)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation written in Haskell with debugging in mind[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1meth-isabelle[0m[38;5;12m (https://github.com/pirapira/eth-isabelle)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation for theorem provers[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBurrow[0m[38;5;12m (https://github.com/hyperledger/burrow)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation in Go extended with a native name registry and permissioning layer[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEthereumjs-VM[0m[38;5;12m (https://github.com/ethereumjs/ethereumjs-vm)[39m
|
||
[48;5;235m[38;5;249m- Implements Ethereum's VM in JS[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mruby-ethereum[0m[38;5;12m (https://github.com/cryptape/ruby-ethereum)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation in Ruby (passed all tests in **ethereum tests** (https://github.com/ethereum/tests/tree/55a18b3ded93bf6083f23ea1f4bf7be4ba973016))[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msputter[0m[38;5;12m (https://github.com/nervous-systems/sputter)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation in Clojure (so far passes VM tests)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msolevm[0m[38;5;12m (https://github.com/Ohalo-Ltd/solevm)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation in Solidity[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1meth-acl2[0m[38;5;12m (https://github.com/zchn/eth-acl2)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation in ACL2 (work in progress)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mmana[0m[38;5;12m (https://github.com/poanetwork/mana/)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation in Elixir (work in progress)[49m[39m
|
||
|
||
[38;2;255;187;0m[4mProgramming Languages that Compile into EVM[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSolidity[0m[38;5;12m (https://github.com/ethereum/solidity)[39m
|
||
[48;5;235m[38;5;249m- The most popular programming language for Ethereum contracts[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- **Awesome Solidity** (https://github.com/bkrem/awesome-solidity)[49m[39m
|
||
[48;5;235m[38;5;249m- The LLL compiler is also in the same repository[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mVyper[0m[38;5;12m (https://github.com/ethereum/vyper)[39m
|
||
[48;5;235m[38;5;249m- A language with overflow-checking, numeric units but without unlimited loops[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPyramid Scheme[0m[38;5;12m (https://github.com/MichaelBurge/pyramid-scheme) (experimental)[39m
|
||
[48;5;235m[38;5;249m- A Scheme compiler into EVM that follows the **SICP compilation approach** (https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-35.html#%_sec_5.5)[49m[39m
|
||
[48;5;235m[38;5;249m- **ceagle** (https://github.com/MichaelBurge/ceagle) compiles C into Pyramid Scheme[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mFlint[0m[38;5;12m (https://github.com/franklinsch/flint)[39m
|
||
[48;5;235m[38;5;249m- A language with several security features: e.g. asset types with a restricted set of atomic operations[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mLLLL[0m[38;5;12m (https://github.com/mmalvarez/eth-isabelle/blob/master/example/LLLL.thy)[39m
|
||
[48;5;235m[38;5;249m- An LLL-like compiler being implemented in Isabelle/HOL[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mHAseembly-evm[0m[38;5;12m (https://github.com/takenobu-hs/haskell-ethereum-assembly)[39m
|
||
[48;5;235m[38;5;249m- An EVM assembly implemented as a Haskell DSL[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBamboo[0m[38;5;12m (https://github.com/pirapira/bamboo) (experimental)[39m
|
||
[38;5;12m - A language without loops but with explicit constructor invocation at the end of every call[39m
|
||
|
||
[38;2;255;187;0m[4mProgramming Languages that Compile zk-SNARK Circuits and Proofs[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mZokrates[0m[38;5;12m (https://github.com/JacobEberhardt/ZoKrates)[39m
|
||
[48;5;235m[38;5;249m- A toolbox for zkSNARKs on Ethereum[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- **a third-party tutorial** (https://github.com/jstoxrocky/zksnarks_example)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msnarky[0m[38;5;12m (https://github.com/o1-labs/snarky)[39m
|
||
[48;5;235m[38;5;249m- An OCaml front-end for writing R1CS SNARKs (parametrized over the backend SNARK libraries)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- Shallowly embedded DSL that can be compiled into SNARK circuits[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- The verifier is an OCaml function, so some more work is necessary before using it on Ethereum[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mjsnark[0m[38;5;12m (https://github.com/akosba/jsnark)[39m
|
||
[48;5;235m[38;5;249m- A Java front-end for writing R1CS SNARKs [49m[39m
|
||
|
||
[38;2;255;187;0m[4mDebuggers[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mREMIX[0m[38;5;12m (https://github.com/ethereum/remix)[39m
|
||
[48;5;235m[38;5;249m- An IDE containing an EVM code debugger[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mdebug\_traceTransaction method[0m[38;5;12m (https://github.com/ethereum/go-ethereum/wiki/Management-APIs#debug_tracetransaction)[39m
|
||
[48;5;235m[38;5;249m- An instruction-wise trace information provided by go-ethereum[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEthereum Function Signature Database[0m[38;5;12m (https://www.4byte.directory/)[39m
|
||
[48;5;235m[38;5;249m- A database for deciphering `0x165ffd10` into `restart(bytes32,bytes32)`.[49m[39m
|
||
|
||
[38;2;255;187;0m[4mCode Analyzers[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEchidna[0m[38;5;12m (https://github.com/trailofbits/echidna)[39m
|
||
[48;5;235m[38;5;249m- A fuzzer on EVM that also takes Solidity input[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- Able to fuzz a program with sequences of multiple transactions[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMAIAN[0m[38;5;12m (https://arxiv.org/abs/1802.06038)[39m
|
||
[48;5;235m[38;5;249m- An automatic tool that detects trace vulnerabilities (Greedy, Prodigal and Suicidal) with depth-first search of symbolic execution of multiple invocations[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMythril[0m[38;5;12m (https://github.com/b-mueller/mythril)[39m
|
||
[48;5;235m[38;5;249m- A blockchain exploration tool that indexes all contracts on the network, containing a disassembler, an ABI function detector and a control flow analyzer[49m[39m
|
||
[48;5;235m[38;5;249m- Comes with a **--fire-laser option** (https://hackernoon.com/crafting-ethereum-exploits-by-laser-fire-1c9acf25af4f)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- Powered by **laser-ethereum** (https://github.com/b-mueller/laser-ethereum)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mporosity[0m[38;5;12m (https://github.com/comaeio/porosity)[39m
|
||
[48;5;235m[38;5;249m- A reverse enginering tool, a disassembler, an ABI function detector and a decompiler that also highlights vulnerabilities[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mManticore[0m[38;5;12m (https://github.com/trailofbits/manticore)[39m
|
||
[48;5;235m[38;5;249m- A symtolic execution engine that can generate inputs to cover codepaths (**asciicast** (https://asciinema.org/a/154012)), which also comes with a Python API[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mevmdis[0m[38;5;12m (https://github.com/arachnid/evmdis)[39m
|
||
[48;5;235m[38;5;249m- A disassembler for EVM code[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1methersplay[0m[38;5;12m (https://github.com/trailofbits/ethersplay)[39m
|
||
[48;5;235m[38;5;249m- An EVM plugin for **Binary Ninja** (https://binary.ninja/)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSecurify[0m[38;5;12m (http://securify.ch/)[39m
|
||
[48;5;235m[38;5;249m- A tool that strives to achieve no false-negatives[49m[39m
|
||
[48;5;235m[38;5;249m- The implementation seems not public as of now[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mOyente[0m[38;5;12m (https://github.com/melonproject/oyente)[39m
|
||
[48;5;235m[38;5;249m- An automatic EVM code analyzer based on symbolic execution and **Z3** (https://github.com/Z3Prover/z3) SMT solver[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mDr. Y's Ethereum Contract Analyzer[0m[38;5;12m (http://dry.yoichihirai.com/)[39m
|
||
[48;5;235m[38;5;249m- A symbolic executor for EVM code[49m[39m
|
||
|
||
[38;2;255;187;0m[4mImprovement Proposals[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEthereum Improvement Proposals[0m[38;5;12m (https://github.com/ethereum/EIPs)[39m
|
||
[48;5;235m[38;5;249m- A portal for EVM & Ethereum improvements[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- The soonest changes are listed in the README[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEVM 1.5[0m[38;5;12m (https://github.com/ethereum/EIPs/blob/master/EIPS/eip-615.md)[39m
|
||
[48;5;235m[38;5;249m- A proposal to tame jumps so that a linear-time scan can determine stack layouts[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1meWASM[0m[38;5;12m (https://github.com/ewasm)[39m
|
||
[48;5;235m[38;5;249m- A proposal to use a **WebAssembly** (http://webassembly.org/) for Ethereum contract execution[49m[39m
|
||
|
||
[38;2;255;187;0m[4mRelated Resources[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mAwesome Ethereum[0m[38;5;12m (http://awesome-ethereum.com/)[39m
|
||
|
||
[38;2;255;187;0m[4mLicense of This List[0m
|
||
|
||
[38;5;12mAwesome Ethereum Virtual Machine[39m
|
||
|
||
[38;5;12mWritten in 2017 by Yoichi Hirai [39m
|
||
|
||
[38;5;14m[1mother author/contributor lines as appropriate[0m[38;5;12m [39m
|
||
|
||
[38;5;12mTo[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mextent[39m[38;5;12m [39m[38;5;12mpossible[39m[38;5;12m [39m[38;5;12munder[39m[38;5;12m [39m[38;5;12mlaw,[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mauthor(s)[39m[38;5;12m [39m[38;5;12mhave[39m[38;5;12m [39m[38;5;12mdedicated[39m[38;5;12m [39m[38;5;12mall[39m[38;5;12m [39m[38;5;12mcopyright[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mrelated[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mneighboring[39m[38;5;12m [39m[38;5;12mrights[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mthis[39m[38;5;12m [39m[38;5;12msoftware[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mpublic[39m[38;5;12m [39m[38;5;12mdomain[39m[38;5;12m [39m[38;5;12mworldwide.[39m[38;5;12m [39m[38;5;12mThis[39m[38;5;12m [39m[38;5;12msoftware[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12mdistributed[39m[38;5;12m [39m
|
||
[38;5;12mwithout[39m[38;5;12m [39m[38;5;12many[39m[38;5;12m [39m[38;5;12mwarranty.[39m
|
||
|
||
[38;5;12mYou should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see .[39m
|