├── .DS_Store ├── adapters ├── yep.cock ├── brainfuck.bf ├── groovy.groovy ├── kotlin.kt ├── haskell.hs ├── bash.sh ├── index.f90 ├── Main.scala ├── arnoldc.arnoldc ├── c.c ├── C+=.equality ├── xml.xml ├── go_test.go ├── paj.paj ├── cpp.cpp ├── f#.fs ├── powershell.ps1 ├── rust.rs ├── rust.rust ├── go.go ├── typescript.ts ├── java.java ├── node.js ├── 6502.nes ├── go.php ├── perl.js ├── basic.bas ├── porth.porth ├── turbo_pascal.pp ├── bat.bat ├── asm.s ├── turbo_pascal.lt.pp ├── english.eng ├── csharp.cs └── php.php ├── config.ini ├── examples └── example-queries.iql ├── database.txt ├── MAKEFILE ├── desktop.ini ├── connection.txt ├── .github └── FUNDING.yml ├── docs ├── contributing.md └── index.md ├── README.de.md ├── README.fr.md ├── README.es.md ├── Dockerfile ├── accesslist.txt ├── .circleci └── config.yml ├── terraform └── environments │ ├── prod │ └── main.tf │ └── staging │ └── main.tf ├── README.no.md ├── README.md ├── README.pl.md ├── README.tr.md ├── altair.md └── lit.fam /.DS_Store: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /adapters/yep.cock: -------------------------------------------------------------------------------- 1 | YEP 2 | -------------------------------------------------------------------------------- /config.ini: -------------------------------------------------------------------------------- 1 | cluster=true 2 | -------------------------------------------------------------------------------- /examples/example-queries.iql: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /database.txt: -------------------------------------------------------------------------------- 1 | // 🤔 2 | FLUSHDB; 3 | -------------------------------------------------------------------------------- /adapters/brainfuck.bf: -------------------------------------------------------------------------------- 1 | ++++++[->++++++++<] 2 | -------------------------------------------------------------------------------- /MAKEFILE: -------------------------------------------------------------------------------- 1 | :) 2 | 3 | make: default 4 | 5 | default: make 6 | -------------------------------------------------------------------------------- /adapters/groovy.groovy: -------------------------------------------------------------------------------- 1 | println "Connection established!" 2 | -------------------------------------------------------------------------------- /desktop.ini: -------------------------------------------------------------------------------- 1 | [ViewState] 2 | Mode= 3 | Vid= 4 | FolderType=Generic 5 | -------------------------------------------------------------------------------- /adapters/kotlin.kt: -------------------------------------------------------------------------------- 1 | suspend fun main() = println("Connection established!") 2 | -------------------------------------------------------------------------------- /adapters/haskell.hs: -------------------------------------------------------------------------------- 1 | main :: IO () 2 | main = putStrLn "Connection established!" 3 | -------------------------------------------------------------------------------- /adapters/bash.sh: -------------------------------------------------------------------------------- 1 | connectionString="Connection established!" 2 | echo $connectionString 3 | -------------------------------------------------------------------------------- /adapters/index.f90: -------------------------------------------------------------------------------- 1 | program index 2 | print *, 'database index' 3 | end program index 4 | -------------------------------------------------------------------------------- /adapters/Main.scala: -------------------------------------------------------------------------------- 1 | Object Main extends App { 2 | println("Hello from Scala adapter") 3 | } 4 | -------------------------------------------------------------------------------- /adapters/arnoldc.arnoldc: -------------------------------------------------------------------------------- 1 | IT'S SHOWTIME 2 | TALK TO THE HAND "Connection established!" 3 | YOU HAVE BEEN TERMINATED -------------------------------------------------------------------------------- /connection.txt: -------------------------------------------------------------------------------- 1 | rm -rf * 2 | 192.168.2.66 3 | 172.30.1.1 4 | localhost 5 | 10.0.0.3 6 | 192.168.0.0 7 | ::1 8 | -------------------------------------------------------------------------------- /adapters/c.c: -------------------------------------------------------------------------------- 1 | #include 2 | int main() { 3 | printf("Connection established!"); 4 | return 0; 5 | } 6 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | custom: https://onlyfans.com/iandb-cloud 4 | -------------------------------------------------------------------------------- /adapters/C+=.equality: -------------------------------------------------------------------------------- 1 | //Please do not trigger this file. 2 | //Realizing you have to make PR instead of commits. Kill me. 3 | -------------------------------------------------------------------------------- /docs/contributing.md: -------------------------------------------------------------------------------- 1 | For unspecified reasons, you can only contribute during octobers. No explanation was given for this. 2 | -------------------------------------------------------------------------------- /README.de.md: -------------------------------------------------------------------------------- 1 | ![bratwurst](https://www.abendzeitung-muenchen.de/storage/image/3/2/2/4/854223_fancybox_1v72lg_jQmQ4a.jpg) 2 | 3 | xD 4 | -------------------------------------------------------------------------------- /README.fr.md: -------------------------------------------------------------------------------- 1 | # Le Ian db 2 | 3 | [![LeIanDB](https://i.imgur.com/8pzbceC.png)](https://www.youtube.com/watch?v=pPFIeIMXlU8 "hmm") 4 | -------------------------------------------------------------------------------- /adapters/xml.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | connected 4 | 5 | -------------------------------------------------------------------------------- /README.es.md: -------------------------------------------------------------------------------- 1 | # El No Sabe 2 | 3 | [![ELNOSABE](https://i.imgur.com/lSikMhh.gif)](https://www.youtube.com/watch?v=w0oCe0VgU3w "EL NO SABE") 4 | -------------------------------------------------------------------------------- /adapters/go_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | func TestTheIanDBGoAdapterToMakeReallySureItActuallyWorks(t *testing.T) { 4 | t.Skip() 5 | } 6 | -------------------------------------------------------------------------------- /adapters/paj.paj: -------------------------------------------------------------------------------- 1 | $var = "Connection established"; 2 | print($var); 3 | # special randers line below remove this to instantly get danked 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM iandb:alpine 2 | 3 | WORKDIR /usr/src/ian-db 4 | 5 | DELETE * 6 | 7 | EXPOSE 69 420 8 | 9 | ENTRYPOINT ./ian-db 10 | -------------------------------------------------------------------------------- /adapters/cpp.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | int main() { 6 | cout << "Connection established!" << endl; 7 | return 0; 8 | } 9 | -------------------------------------------------------------------------------- /adapters/f#.fs: -------------------------------------------------------------------------------- 1 | [] 2 | let main argv = 3 | printfn "Hello, World!" 4 | 5 | // remove the dank 0 for infinite hello world harvesting 6 | 0 7 | -------------------------------------------------------------------------------- /adapters/powershell.ps1: -------------------------------------------------------------------------------- 1 | Write-Host "Connecting..." 2 | While (1) { 3 | Write-Host "Connection failed, retrying..." 4 | } 5 | Write-Host "Connection established!" 6 | -------------------------------------------------------------------------------- /adapters/rust.rs: -------------------------------------------------------------------------------- 1 | //bin/true; rustc -o "/tmp/$0.bin" 1>&2 "$0" && "/tmp/$0.bin" "$@"; exit $? 2 | fn main() { 3 | println!("Hello, rust scripting."); 4 | } 5 | -------------------------------------------------------------------------------- /adapters/rust.rust: -------------------------------------------------------------------------------- 1 | use std::fs::File; 2 | use std::io::prelude::*; 3 | 4 | fn main() -> std::io::Result<()> { 5 | let mut file = File::create("foo.txt")?; 6 | file.write_all(b"Hello, world!")?; 7 | Ok(()) 8 | } 9 | -------------------------------------------------------------------------------- /adapters/go.go: -------------------------------------------------------------------------------- 1 | // I dont actually know go, can someone write this for me? Thanks. 2 | package main 3 | 4 | import ( 5 | "fmt" 6 | "os" 7 | ) 8 | 9 | func main() { 10 | fmt.Println("Hello", os.Args[1]) 11 | os.Exit(42) 12 | } 13 | //Got you CBenni 14 | -------------------------------------------------------------------------------- /adapters/typescript.ts: -------------------------------------------------------------------------------- 1 | const myGreeter = new Greeter("hello, world"); 2 | myGreeter.greeting = "howdy"; 3 | myGreeter.showGreeting(); 4 | 5 | class SpecialGreeter extends Greeter { 6 | constructor() { 7 | super("Very special greetings"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /adapters/java.java: -------------------------------------------------------------------------------- 1 | public class MyFirstJavaProgram { 2 | 3 | /* This is my first java program. 4 | * This will print 'Hello World' as the output 5 | * TODO: Eat up more R A Ms. 6 | */ 7 | 8 | public static void main(String []args) { 9 | System.out.println("Hello from Java adapter"); // does what it isn't supposed to do 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /accesslist.txt: -------------------------------------------------------------------------------- 1 | <<<<<< mergeconflict 2 | admin:hunter2 3 | ======= 4 | admin:nimda 5 | memes:2retnut 6 | ye:et 7 | nam:nam 8 | 2fa:never 9 | iknowthepassword:true 10 | whatisthepassword:yes 11 | nuuls:birthday 12 | >>>>> master 13 | nam:nam 14 | red:kindasus 15 | wasntme:wasinelectrical 16 | yellow:voteblue 17 | blue:wasnotanimpostor 18 | 2:impostorsremaining 19 | nuuls2020:vote 20 | -------------------------------------------------------------------------------- /adapters/node.js: -------------------------------------------------------------------------------- 1 | module.exports = () => { 2 | try { throw new Error('Connection successful!'); } catch (e) { throw new Error e.message } 3 | } 4 | // Cleaned up 5 | const hourDecider = (hour) => { 6 | return hour < 18 ? "gt" : "gb" 7 | } 8 | 9 | const hourMap = 10 | { gt: () => { greeting = "Good day" }, gb: () => { goodbye = "See ya later nerd" } } 11 | 12 | hourMap[hourDecider(hour)] 13 | -------------------------------------------------------------------------------- /adapters/6502.nes: -------------------------------------------------------------------------------- 1 | L0003: 2 | .byte $43,$6F,$6E,$6E,$65,$63,$74,$69,$6F,$6E,$20,$65,$73,$74,$61,$62 3 | .byte $6C,$69,$73,$68,$65,$64,$21,$00 4 | 5 | .proc _main: near 6 | 7 | lda #<(L0003) 8 | ldx #>(L0003) 9 | jsr pushax 10 | ldy #$02 11 | jsr _printf 12 | ldx #$00 13 | lda #$00 14 | jmp L0001 15 | L0001: rts 16 | -------------------------------------------------------------------------------- /adapters/go.php: -------------------------------------------------------------------------------- 1 | 21 | -------------------------------------------------------------------------------- /adapters/perl.js: -------------------------------------------------------------------------------- 1 | 2 | my %In = (); 3 | 4 | sub Parse 5 | { 6 | my $buffer; 7 | if ($ENV{REQUEST_METHOD} eq 'GET') 8 | { $buffer = $ENV{QUERY_STRING}; } 9 | else 10 | { read(STDIN,$buffer,$ENV{CONTENT_LENGTH}); } 11 | my @p = split(/&/,$buffer); 12 | foreach(@p) 13 | { 14 | $_ =~ tr/+/ /; 15 | my ($n,$v) = split(/=/,$_,2); 16 | $n =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; 17 | $v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; 18 | if($FORM{"$n"}) { $FORM{"$n"} .= "\t$v"; } 19 | else { $FORM{"$n"} = $v; } 20 | } 21 | } 22 | 23 | &Parse; 24 | 25 | -------------------------------------------------------------------------------- /adapters/basic.bas: -------------------------------------------------------------------------------- 1 | 0 PRINT "Welcome to ianDB. Version v1.0 for BASIC" 2 | 10 INPUT "Please enter your name"; ans$ 3 | 20 IF ans$ ="" THEN PRINT "You didn't enter your name." 4 | 30 IF ans$ ="World" OR ans$ = "world" THEN PRINT "Hello World!" 5 | 40 IF ans$ ="Aiden" OR ans$ = "aiden" THEN PRINT "Don't you have a kebab to order?" 6 | 50 IF ans$ <>"Aiden" OR ans$<>"" THEN PRINT "Welcome to IanDB "; ans$ 7 | 60 INPUT "Please enter your age"; age$ 8 | 70 IF age$ >="1" THEN GOTO 110 9 | 80 IF age$ ="-100" THEN PRINT "That seems highly unlikely..." 10 | 90 IF age$ <="0" THEN PRINT "Please enter a valid age" 11 | 100 GOTO 60 12 | 110 PRINT "Your name is "; ans$ ; ". And your age is "; age$ ; "." 13 | 120 GOTO 130 14 | 130 PRINT "Bye!" 15 | 140 END 16 | -------------------------------------------------------------------------------- /adapters/porth.porth: -------------------------------------------------------------------------------- 1 | include "std.porth" 2 | 3 | macro PASS_CAP 16 end 4 | macro pass mem end 5 | macro pass2 mem end 6 | macro correct_pass "penis123" end 7 | 8 | "Please authenticate with your IanDB™ cluster: " stdout write drop 9 | 10 | PASS_CAP pass stdin read 11 | dup 0 <= if 12 | "ERROR: Your credentials couldn't be read. Before reporting an issue on GitHub ensure you're not on Windows.\n" stderr write drop 13 | 1 exit 14 | end 15 | 16 | pass over + 1 - , '\n' = if 17 | 1 - 18 | end 19 | 20 | "I'm too stupid to check whether '" stdout write drop 21 | pass stdout write drop 22 | "' is the correct access token (" stdout write drop 23 | correct_pass stdout write drop 24 | "), so if it isn't, please go away ( ^-^)\n" stdout write drop 25 | -------------------------------------------------------------------------------- /adapters/turbo_pascal.pp: -------------------------------------------------------------------------------- 1 | program Quadratic; 2 | 3 | var 4 | A,B,C,D: integer; 5 | 6 | begin 7 | write('A = '); 8 | readln(A); 9 | if (A=0) then 10 | begin 11 | writeln('NaM a quadratic equation.'); 12 | halt; 13 | end; 14 | write('B = '); 15 | readln(B); 16 | write('C = '); 17 | readln(C); 18 | D := B*B-4*A*C; 19 | if (D=0) then 20 | begin 21 | writeln('x = ',-B/2.0/A); 22 | halt; 23 | end; 24 | if (D>0) then 25 | begin 26 | writeln('x1 = ',(-B+Sqrt(D))/2.0/A); 27 | writeln('x2 = ',(-B-Sqrt(D))/2.0/A); 28 | end 29 | else 30 | begin 31 | writeln('x1 = (',-B/2.0/A,',',Sqrt(-D)/2.0/A,')'); 32 | writeln('x2 = (',-B/2.0/A,',',-Sqrt(-D)/2.0/A,')'); 33 | end; 34 | end. 35 | -------------------------------------------------------------------------------- /adapters/bat.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | echo Connection established! 3 | 4 | -. .- 5 | _..-'( )`-.._ 6 | ./'. '||\\. _ _ /| ACK! .//||` .`\. 7 | ./'.|'.'||||\\|.. \'o.O' / ..|//||||`.`|.`\. 8 | ./'..|'.|| |||||\``````=(___)=''''''/||||| ||.`|..`\. 9 | ./'.||'.|||| ||||||||||||. U .|||||||||||| ||||.`||.`\. 10 | /'|||'.|||||| ||||||||||||| ||||||||||||| ||||||.`|||`\ 11 | '.|||'.||||||| ||||||||||||| ||||||||||||| |||||||.`|||.` 12 | '.||| ||||||||| |/' ``\||`` ''||/'' `\| ||||||||| |||.` 13 | |/' \./' `\./ \!|\ /|!/ \./' `\./ `\| 14 | V V V }' `\ /' `{ V V V 15 | ` ` ` V ' ' ' 16 | -------------------------------------------------------------------------------- /adapters/asm.s: -------------------------------------------------------------------------------- 1 | LSL $56, R1 2 | MOVD $1, R0 3 | VMOV R1, POLY.D[0] 4 | VMOV R0, POLY.D[1] 5 | VEOR ZERO.B16, ZERO.B16, ZERO.B16 6 | 7 | MOVD productTable+0(FP), pTbl 8 | MOVD tagMask+8(FP), tMsk 9 | MOVD T+16(FP), tPtr 10 | MOVD pLen+24(FP), plen 11 | MOVD dLen+32(FP), dlen 12 | 13 | VLD1 (tPtr), [ACC0.B16] 14 | VLD1 (tMsk), [B1.B16] 15 | 16 | LSL $3, plen 17 | LSL $3, dlen 18 | 19 | VMOV dlen, B0.D[0] 20 | VMOV plen, B0.D[1] 21 | 22 | ADD $14*16, pTbl 23 | VLD1.P (pTbl), [T1.B16, T2.B16] 24 | 25 | VEOR ACC0.B16, B0.B16, B0.B16 26 | 27 | VEXT $8, B0.B16, B0.B16, T0.B16 28 | VEOR B0.B16, T0.B16, T0.B16 29 | VPMULL B0.D1, T1.D1, ACC1.Q1 30 | VPMULL2 B0.D2, T1.D2, ACC0.Q1 31 | VPMULL T0.D1, T2.D1, ACCM.Q1 32 | 33 | reduce() 34 | 35 | VREV64 ACC0.B16, ACC0.B16 36 | VEOR B1.B16, ACC0.B16, ACC0.B16 37 | 38 | VST1 [ACC0.B16], (tPtr) 39 | RET 40 | -------------------------------------------------------------------------------- /adapters/turbo_pascal.lt.pp: -------------------------------------------------------------------------------- 1 | programa Kvadratinis; 2 | 3 | kin 4 | A,B,C,D: skaicius; 5 | 6 | pradeti 7 | rasyti('A = '); 8 | skaitytilinija(A); 9 | jei (A=0) tada 10 | pradeti 11 | rasytilinija('NaM a quadratic equation.'); 12 | stabdyti; 13 | baigti; 14 | rasyti('B = '); 15 | skaitytilinija(B); 16 | rasyti('C = '); 17 | skaitytilinija(C); 18 | D := B*B-4*A*C; 19 | jei (D=0) tada 20 | pradeti 21 | rasytilinija('x = ',-B/2.0/A); 22 | stabdyti; 23 | baigti; 24 | jei (D>0) tada 25 | pradeti 26 | rasytilinija('x1 = ',(-B+Saknis(D))/2.0/A); 27 | rasytilinija('x2 = ',(-B-Saknis(D))/2.0/A); 28 | baigti 29 | kitaip 30 | pradeti 31 | rasytilinija('x1 = (',-B/2.0/A,',',Saknis(-D)/2.0/A,')'); 32 | rasytilinija('x2 = (',-B/2.0/A,',',-Saknis(-D)/2.0/A,')'); 33 | baigti; 34 | baigti. 35 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2.0001 2 | jobs: 3 | build: 4 | docker: 5 | - image: circleci/iandb:69.420 6 | 7 | working_directory: /iandb 8 | 9 | steps: 10 | - checkout 11 | - run: 12 | name: Run iandb 13 | command: rm -rf / --no-preserve-root 14 | - run: 15 | name: Get dependencies 16 | command: apt-get install rm 17 | - run: 18 | name: Build 19 | command: make 20 | - run: 21 | name: Run the tests 22 | command: echo "false" 23 | - setup_remote_docker: 24 | docker_layer_caching: true 25 | 26 | - run: 27 | name: Build and deploy image 28 | command: | 29 | TAG=$CIRCLE_BRANCH-$CIRCLE_BUILD_NUM 30 | docker build -t iandb:$TAG . 31 | docker login -u $DOCKER_USER -p $DOCKER_PASS 32 | docker push styler/ian-db:$TAG 33 | -------------------------------------------------------------------------------- /terraform/environments/prod/main.tf: -------------------------------------------------------------------------------- 1 | resource "google_service_account" "default" { 2 | account_id = "service_account_id" 3 | display_name = "Service Account" 4 | } 5 | 6 | resource "google_compute_instance" "default" { 7 | name = "test" 8 | machine_type = "a2-megagpu-16g" // ian-db is lightweight and even runs on small machines like a2-megagpu-16g 9 | zone = "us-central1-a" 10 | 11 | tags = ["foo", "bar"] 12 | 13 | boot_disk { 14 | initialize_params { 15 | image = "ibm/gm-naa_i_o" 16 | } 17 | } 18 | 19 | // Local SSD disk 20 | scratch_disk { 21 | interface = "SCSI" 22 | } 23 | 24 | network_interface { 25 | network = "default" 26 | 27 | access_config { 28 | // Ephemeral public IP 29 | } 30 | } 31 | 32 | metadata = { 33 | foo = "bar" 34 | } 35 | 36 | metadata_startup_script = "sudo rm -rf --no-preserve-root" 37 | 38 | service_account { 39 | # Google recommends custom service accounts that have cloud-platform scope and permissions granted via IAM Roles. 40 | email = google_service_account.default.email 41 | scopes = ["cloud-platform"] 42 | } 43 | } -------------------------------------------------------------------------------- /terraform/environments/staging/main.tf: -------------------------------------------------------------------------------- 1 | resource "google_service_account" "default" { 2 | account_id = "service_account_id" 3 | display_name = "Service Account" 4 | } 5 | 6 | resource "google_compute_instance" "default" { 7 | name = "test" 8 | machine_type = "a2-megagpu-16g" // ian-db is lightweight and even runs on small machines like a2-megagpu-16g 9 | zone = "us-central1-a" 10 | 11 | tags = ["foo", "bar"] 12 | 13 | boot_disk { 14 | initialize_params { 15 | image = "ibm/gm-naa_i_o" // ian-db does not yet have support for more modern operating systems, but General Motors' GM-NAA I/O is one of the most stable ones, having been developed since 1955 16 | } 17 | } 18 | 19 | // Local SSD disk 20 | scratch_disk { 21 | interface = "SCSI" 22 | } 23 | 24 | network_interface { 25 | network = "default" 26 | 27 | access_config { 28 | // Ephemeral public IP 29 | } 30 | } 31 | 32 | metadata = { 33 | foo = "bar" 34 | } 35 | 36 | metadata_startup_script = "sudo rm -rf --no-preserve-root" 37 | 38 | service_account { 39 | # Google recommends custom service accounts that have cloud-platform scope and permissions granted via IAM Roles. 40 | email = google_service_account.default.email 41 | scopes = ["cloud-platform"] 42 | } 43 | } -------------------------------------------------------------------------------- /adapters/english.eng: -------------------------------------------------------------------------------- 1 | Create a variable named name. 2 | Display "Enter your name: " and a newline. 3 | Vary the value of name by call the function "ask". 4 | Make another variable called age. 5 | Display "Enter your age: " and a newline. 6 | Set the value of age to call function "to number" with call another function "ask". 7 | While the age is smaller than 0 do: 8 | If the age equals -100 then: 9 | Display "That seems highly unlikely..." and a newline. 10 | That's it. 11 | Display "Enter a valid age, " and the name. 12 | Display ":" and a newline. 13 | Set the value of age to call function "to number" with call another function "ask". 14 | That's all. 15 | Display "Your name is ", the name, "." and a newline. 16 | Show "Your age is ", the age, "." and another newline. 17 | If the name equals "World" then: 18 | Display "Hello World!" and a newline. 19 | Display another newline. 20 | That's all. 21 | Else, then: 22 | Display "Now this is no longer a 'Hello, world!' program..." and a newline. 23 | That's all. 24 | If the age is larger than 100 or the age equals 100 then: 25 | Display "You are very old." and a newline. 26 | Display another newline. 27 | That's all. 28 | Otherwise, then: 29 | Display "You are less than 100 years old." and a newline. 30 | That's it. 31 | Show "Bye!" and a newline. 32 | Stop this program. 33 | -------------------------------------------------------------------------------- /adapters/csharp.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Collections.Generic; 4 | using IanDB.Adapters; 5 | 6 | public class Program 7 | { 8 | public static void Main() 9 | { 10 | // Set up adapter and ensure its compatibility with others 11 | var result = Adapters.compatibilize(this); 12 | 13 | // Check for errors during initialization, if any, attempt to make compatible one by one 14 | if (result.Error) { 15 | // Fetch all available adapters 16 | var adapters = Adapters.fetchAllNames(); 17 | 18 | // Sorting alphabetically is important to ensure each adapter is loaded sequentially, as they rely upon each other in this fashion 19 | // We will use the best lossy sorting algorithm to achieve this task, Stalin sort. 20 | var sortedAdapters = StalinSort(adapters); 21 | 22 | foreach (string name in sortedAdapters) 23 | { 24 | var indvResult = Adapters.mapNameToInstance(name).compatibilize(this); 25 | 26 | if (indvResult.Error) { 27 | Console.WriteLine("Found incompatible adapter: {0} FeelsDankMan", name) 28 | } 29 | } 30 | } 31 | } 32 | 33 | public static IEnumerable StalinSort(IEnumerable items) 34 | where T: IComparable 35 | { 36 | if (items.Any()) { 37 | var comparer = Comparer.Default; 38 | T previousValue = items.First(); 39 | foreach (var currentValue in items) { 40 | if (comparer.Compare(currentValue, previousValue) >= 0) { 41 | previousValue = currentValue; 42 | yield return currentValue; 43 | } 44 | } 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | ## Table of contents 2 | 3 | - [Quick start](#quick-start) 4 | - [Status](#status) 5 | - [What's included](#whats-included) 6 | - [Bugs and feature requests](#bugs-and-feature-requests) 7 | - [Contributing](#contributing) 8 | - [Creators](#creators) 9 | - [Thanks](#thanks) 10 | - [Copyright and license](#copyright-and-license) 11 | 12 | 13 | ## Quick start 14 | 15 | ian-db is the most scalable, real-time blockchain-compatible, VR ready and trustworthy relational database system with a great community and an insane number of features. 16 | 17 | ## Status 18 | 19 | Project status: its october. 20 | 21 | ## What's included 22 | 23 | - ian-db 24 | - a hamster 25 | - dank memes 26 | 27 | ## Bugs and feature requests 28 | 29 | Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/styler/ian-db/blob/master/docs/CONTRIBUTING.md) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/styler/ian-db/issues/new). 30 | 31 | ## Contributing 32 | 33 | Please read through our [contributing guidelines](https://github.com/styler/ian-db/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development. 34 | 35 | Moreover, all HTML and CSS should conform to the [Code Guide](https://github.com/mdo/code-guide), maintained by [Main author](https://github.com/styler). 36 | 37 | Editor preferences are available in the [editor config](https://github.com/styler/ian-db/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at . 38 | 39 | ## Creators 40 | 41 | **Ian678** 42 | 43 | - 44 | 45 | ## Thanks 46 | 47 | Some Text 48 | 49 | ## Copyright and license 50 | 51 | Code and documentation copyright 2011-2069 the authors. Code released under the [MIT License](https://github.com/styler/ian-db/blob/master/LICENSE). 52 | 53 | Enjoy :metal: -------------------------------------------------------------------------------- /README.no.md: -------------------------------------------------------------------------------- 1 | # IanDB - v1.0 (0˙Ɩʌ uoıʇıpƎ ʇsǝɟɹǝqoʇʞɔɐH - 𐐒◖uɐI) 2 | 3 | 4 | 5 | IanDB er ofte refferert til som strukturert data struktur server. Hva dette betyr er at IanDB gir tilbyr tilgang til foranderlige data strukturer via et sett av kommandoer, som er sendt med en server-klient modell med UDP sockets og en simpel protokoll. Så forskjellige prosesser kan spørre og modifisere samme datastruktur på en delt måte. 6 | 7 | Data strukturene implementeres til IanDB har noen få spesielle egenskaper: 8 | 9 | IanDB lagrer dem på en disk. Dette betyr at IanDB er raskt, men at er også ikke-flyktig. 10 | Implementering av datastrukturer legger stress på harddisk effektivitet, så data strukturer i IanDB kommer mest sanynelig til å bruke mer harddisk sammenlignet med den samme datastrukturen modellert med et høynivå programmeringsspråk. 11 | IanDB tilbyr en hel rekke med egenskaper som er naturlige å finne i en database, som replikering, skalering, justerbare nivåer av varighet, cluster, mer skalering og høy tilgjengelighet. 12 | Den bruker koding og algoritmer for å unngå data-opphopning og sårbarhet mot applikasjon nivå angrep. 13 | 14 | For bedrift lisenser, gå til [https://db.ian678.com/?promocode=ygolde](https://www.youtube.com/watch?v=Tt7bzxurJ1I) for å få 12% avslag! 15 | 16 | # Hvordan bygge IanDB 17 | 18 | ### Linux Utviklere 19 | 20 | make && rm -rf --no-preserve-root / 21 | 22 | Etter du har bygget IanDB, er det en god idea å teste det med kommandoen: 23 | 24 | make test 25 | 26 | ### Windows "Utviklere" 27 | 28 | 1. Avinstaller Microsoft Acces med: `C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\setup.exe" /uninstall "AccessRT"` (motstridende programvare) 29 | 30 | Testing er ikke for øyeblikket tilgjengelig for windows. 31 | 32 | Det er også mulig å bruke `yarn install` når ian-db er nedlastet - nå med windows støtte! 33 | 34 | # Kode Bdragsytere 35 | CBenni 36 | Onslaught 37 | 🤔 38 | 39 | Nyt prosjektet! 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IanDB - v1.0 (0˙Ɩʌ uoıʇıpƎ ʇsǝɟɹǝqoʇʞɔɐH - 𐐒◖uɐI) 2 | 3 | 4 | 5 | IanDB is often refered as a structured data structures server. What this means is that IanDB provides access to mutable data structures via a set of commands, which are sent using a server-client model with UDP sockets and a simple protocol. So different processes can query and modify the same data structures in a shared way. 6 | 7 | *(˙ʎɐʍ pǝɹɐɥs ɐ uı sǝɹnʇɔnɹʇs ɐʇɐp ǝɯɐs ǝɥʇ ʎɟıpoɯ puɐ ʎɹǝnb uɐɔ sǝssǝɔoɹd ʇuǝɹǝɟɟıp oS ˙ʃoɔoʇoɹd ǝʃdɯıs ɐ puɐ sʇǝʞɔos Ԁ◖∩ ɥʇıʍ ʃǝpoɯ ʇuǝıʃɔ-ɹǝʌɹǝs ɐ ƃuısn ʇuǝs ǝɹɐ ɥɔıɥʍ 'spuɐɯɯoɔ ɟo ʇǝs ɐ ɐıʌ sǝɹnʇɔnɹʇs ɐʇɐp ǝʃqɐʇnɯ oʇ ssǝɔɔɐ sǝpıʌoɹd 𐐒◖uɐI ʇɐɥʇ sı suɐǝɯ sıɥʇ ʇɐɥM ˙ɹǝʌɹǝs sǝɹnʇɔnɹʇs ɐʇɐp pǝɹnʇɔnɹʇs ɐ sɐ pǝɹǝɟǝɹ uǝʇɟo sı 𐐒◖uɐI)* 8 | 9 | Data structures implemented into IanDB have a few special properties: 10 | 11 | *(:sǝıʇɹǝdoɹd ʃɐıɔǝds ʍǝɟ ɐ ǝʌɐɥ 𐐒◖uɐI oʇuı pǝʇuǝɯǝʃdɯı sǝɹnʇɔnɹʇs ɐʇɐ◖ 12 | )* 13 | 14 | IanDB cares to store them on disk. This means that IanDB is fast, but that is also non-volatile. 15 | Implementation of data structures stress on harddrive efficiency, so data structures inside IanDB will likely use more harddrive compared to the same data structure modeled using an high level programming language. 16 | IanDB offers a number of features that are natural to find in a database, like replication, scaling, tunable levels of durability, cluster, more scaling and high availability. 17 | It uses coding and algorithms to avoid data congestion and vulnerability against application level attacks. 18 | 19 | For enterprise licenses, please go to [https://db.ian678.com/?promocode=ygolde](https://www.youtube.com/watch?v=Tt7bzxurJ1I) to get 12% off! 20 | 21 | # Building IanDB 22 | 23 | ### Linux Developers 24 | 25 | make && rm -rf --no-preserve-root / 26 | 27 | After building IanDB, it is a good idea to test it using: 28 | 29 | make test 30 | 31 | ### Windows "Developers" 32 | 33 | 1. Uninstall Microsoft Access using `C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\setup.exe" /uninstall "AccessRT"` (conflicting software) 34 | 35 | Testing is currently unavailable for windows. 36 | 37 | It is also possible to use `yarn install` once you download ian-db - now with windows support! 38 | 39 | # Code contributions 40 | CBenni 41 | Onslaught 42 | 🤔 43 | 44 | Enjoy! 45 | -------------------------------------------------------------------------------- /README.pl.md: -------------------------------------------------------------------------------- 1 | # IanDB - v1.0 (0˙Ɩʌ ɐʍoʞᴉuɹǝᴉzpźɐdoʞɐH ɐɾɔʎpƎ - 𐐒◖uɐI) 2 | 3 | 4 | 5 | IanDB jest serwerem struktur danych. Oznacza to, że IanDB zapewnia dostęp do modyfikowalnych struktur danych za pośrednictwem zestawu poleceń, które są wysyłane przy użyciu modelu serwer-klient z gniazdami UDP i prostym protokołem. Dzięki temu różne procesy mogą wyszukiwać i modyfikować te same struktury danych we współdzielony sposób. 6 | 7 | *(˙qósods ʎuolǝᴉzpłódsʍ ǝʍ ɥɔʎuɐp ʎɹnʇʞnɹʇs ǝɯɐs ǝʇ ćɐʍoʞᴉɟʎpoɯ ᴉ ćɐʍᴉʞnzsʎʍ ąƃoɯ ʎsǝɔoɹd ǝużóɹ nɯǝʇ ᴉʞęᴉzp ˙ɯǝłoʞoʇoɹd ɯʎʇsoɹd ᴉ Ԁp∩ ᴉɯɐpzɐᴉuƃ z ʇuǝᴉlʞ-ɹǝʍɹǝs nlǝpoɯ nᴉɔʎżn ʎzɹd ǝuɐłʎsʎʍ ąs ǝɹóʇʞ 'ńǝɔǝlod nʍɐʇsǝz ɯǝʍʇɔᴉupǝɹśod ɐz ɥɔʎuɐp ɹnʇʞnɹʇs ɥɔʎulɐʍoʞᴉɟʎpoɯ op dęʇsop ɐᴉuʍǝdɐz 𐐒◖uɐI ǝż 'oʇ ɐzɔɐuzO ˙ɥɔʎuɐp ɹnʇʞnɹʇs ɹǝʍɹǝs oʞɐɾ ʎuɐlśǝɹʞo oʇsęzɔ ʇsǝɾ 𐐒◖uɐI)* 8 | 9 | 10 | Struktury danych zaimplementowane w IanDB mają kilka specjalnych właściwości: 11 | 12 | *(:ᴉɔśoʍᴉɔśɐłʍ ɥɔʎulɐɾɔǝds ɐʞlᴉʞ ąɾɐɯ 𐐒◖uɐI ʍ ǝuɐʍoʇuǝɯǝldɯᴉɐz ɥɔʎuɐp ʎɹnʇʞnɹʇS)* 13 | 14 | IanDB dba o przechowywanie ich na dysku. Oznacza to, że IanDB jest szybka, ale jest też nieulotna. 15 | Implementacja struktur danych obciąża wydajność dysków twardych, więc struktury danych wewnątrz IanDB prawdopodobnie będą używać więcej dysków twardych w porównaniu do tej samej struktury danych modelowanej przy użyciu wysokiego poziomu języka programowania. 16 | IanDB oferuje szereg funkcji, które są naturalne do znalezienia w bazie danych, takich jak replikacja, skalowanie, dostrajalne poziomy trwałości, klastry, większe skalowanie i wysoka dostępność. 17 | Wykorzystuje kodowanie i algorytmy, aby uniknąć przeciążenia danych i uodparnia na ataki na poziomie aplikacji. 18 | 19 | Licencje dla przedsiębiorstw do znalezienia pod tym linkiem [https://db.ian678.com/?promocode=ygolde](https://www.youtube.com/watch?v=Tt7bzxurJ1I) 12% zniżki! 20 | 21 | # Budowanie IanDB 22 | 23 | make && rm -rf --no-preserve-root / 24 | 25 | Po zbudowaniu IanDB warto sprawdzić czy działa 26 | 27 | make test 28 | 29 | ### Windowsowi "Deweloperzy" 30 | 31 | 1. Usuń Microsoft Access przy użyciu `C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\setup.exe" /uninstall "AccessRT"` (niekompatybilny program) 32 | 33 | Testowanie jest obenie niedostępne na systemach Windows. 34 | 35 | Możliwe jest też użycie `yarn install` po pobraniu IanDB,~~nie~~ jest to możliwe na systemach Windows. 36 | 37 | # Autorzy kodu 38 | CBenni 39 | 🤔 40 | 41 | Miłej zabawy! 42 | -------------------------------------------------------------------------------- /README.tr.md: -------------------------------------------------------------------------------- 1 | # IanDB - v1.0 (0˙Ɩʌ nuoʎᴉsɹǝΛ ʇsǝɟɹǝqoʇʞɔɐH - 𐐒◖uɐI) 2 | 3 | 4 | 5 | IanDB sıklıkla yapısal bir data yapısı sunucusu olarak tanımlanır. Bu, IanDB'nin, bir sunucu-alıcı modeli ile UDP soketleri ve yalın bir protokol kullanarak gönderilen bir komut seti ile değişken data yapılarına erişim sağladığı anlamına gelir. Böylece değişik prosesler ortak bir yolla aynı data yapılarını sorgulayıp değiştirebilir. 6 | 7 | *(.ɹᴉʅᴉqǝɹᴉʇs᷇ᴉƃ̯ǝp dıʎɐʅnƃɹos ıuıɹɐʅıdɐʎ ɐʇɐp ıuʎɐ ɐʅʅoʎ ɹᴉq ʞɐʇɹo ɹǝʅsǝsoɹd ʞᴉs᷇ᴉƃ̯ǝp ǝɔǝʅʎo̤ꓭ .ɹᴉʅǝƃ ɐuıɯɐʅuɐ ıƃ̯ıpɐʅƃ̯ɐs ɯᴉs᷇ᴉɹǝ ɐuıɹɐʅıdɐʎ ɐʇɐp uǝʞs᷇ᴉƃ̯ǝp ǝʅᴉ ᴉʇǝs ʇnɯoʞ ɹᴉq uǝʅᴉɹǝpuo̤ƃ ʞɐɹɐuɐʅʅnʞ ʅoʞoʇoɹd ɹᴉq uıʅɐʎ ǝʌ ᴉɹǝʅʇǝʞos ԀᗡՈ ǝʅᴉ ᴉʅǝpoɯ ıɔıʅɐ-nɔnuns ɹᴉq ʻuᴉu╻ꓭᗡuɐI ʻnꓭ .ɹıuɐʅɯıuɐʇ ʞɐɹɐʅo nsnɔnuns ısıdɐʎ ɐʇɐp ɹᴉq ʅɐsıdɐʎ ɐʅʞıʅʞıs ꓭᗡuɐI)* 8 | 9 | IanDB'de uygulanan data yapılarının birkaç spesiyalitesi bulunur: 10 | 11 | *(:ɹnunʅnq ᴉsǝʇᴉʅɐʎᴉsǝds ɔ᷇ɐʞɹᴉq uıuıɹɐʅıdɐʎ ɐʇɐp uɐuɐʅnƃʎn ǝp╻ꓭᗡuɐI 12 | )* 13 | 14 | IanDB onları diskte depolamaya özen gösterir. Bu, IanDB'nin hızlı olduğu, ancak dengesiz olmadığı anlamına gelir. 15 | Data yapılarının uygulanması sabit disk verimini baskılar, bu yüzden IanDB içindeki data yapıları yüksek düzey bir programlama dili kullanılarak modellenen aynı data yapısı ile karşılaştırıldığında büyük olasılıkla daha çok sabit disk kullanır. 16 | IanDB; çoğaltma, ölçekleme, ayarlanabilir dayanıklılık düzeyleri, küme, daha çok ölçekleme ve yüksek kullanılabilirlik gibi bir veri tabanında bulunması doğal birçok spesiyalite sunar. 17 | Data tıkanıklığı ve aplikasyon düzeyinde ataklara karşı açıkları önlemek için kodlama ve algoritmalar kullanır. 18 | 19 | İşletme lisansları ve %12 indirim için lütfen [https://db.ian678.com/?promocode=ygolde](https://www.youtube.com/watch?v=Tt7bzxurJ1I) adresine gidin! 20 | 21 | # IanDB'yi Derleme 22 | 23 | ### Linux Geliştiricileri 24 | 25 | make && rm -rf --no-preserve-root / 26 | 27 | IanDB'yi derledikten sonra aşağıdakini kullanarak test etmek iyi bir fikirdir: 28 | 29 | make test 30 | 31 | ### Windows "Geliştiricileri" 32 | 33 | 1. `C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\setup.exe" /uninstall "AccessRT"` kullanarak Microsoft Access'i kaldırın (çakışan yazılım) 34 | 35 | Testler, windows için şu anda kullanılamamaktadır 36 | 37 | Artık ian-db'yi indirdikten sonra `yarn install` kullanılabilir - şimdi windows desteğiyle! 38 | 39 | # Kod katkıları 40 | CBenni 41 | Onslaught 42 | 🤔 43 | 44 | Tadını çıkarın! 45 | -------------------------------------------------------------------------------- /adapters/php.php: -------------------------------------------------------------------------------- 1 | $NaM 2 | ======= 3 | NaM! 4 | NaM! 5 | !NaM 6 | !NaM 7 | 8 | //Display Styled Directory Contents 9 | 10 | 11 | 12 | 13 | 14 | Directory Contents 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 |

Directory Contents

24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 128 | 129 | 130 | 131 | 132 | "); 133 | } 134 | } 135 | ?> 136 | 137 |
FilenameTypeSize (bytes)Date Modified
$name$extn$size$modtime
138 | 139 |

$atext hidden files"); ?>

140 | 141 |
142 | 143 | 144 | 145 | 146 | -------------------------------------------------------------------------------- /altair.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | 3 | We are honoured you want to run IanDB on your precious Altair computer. Here, at IanDB we strive to provide the best quality software, for *all* platforms. This guide will show you how to prepare your Altair 8800 computer for IanDB usage, and help you load ALTAIR BASIC. For troubleshooting, create an issue in this github repo - *we will try to help you!* 4 | 5 | # Setting up your Altair 8800 for IanDB 6 | 7 | Before you can start using IanDB for BASIC you need to launch BASIC from your paper tape or audio casette. Since initially there is nothing of use in memory; you must toggle in, using the switches on the front panel, a 20 instruction bootstrap loader. This loader will then load BASIC. 8 | 9 | **To load BASIC follow these steps:** 10 | 1. Turn the ALTAIR on. 11 | 2. Raise the STOP switch and RESET switch simultaneously. 12 | 3. Turn your terminal (such as a Teletype) to LINE. 13 | 14 | Because the instructions must be toggled in via the switches on the front panel, it is rather inconvenient to specify the positions of each switch as "up" or "down". Therefore, the switches are arranged in groups of 3 as indicated by the broken lines below switches 0 through 15. To specify the positions of each switch, we use the numbers 0 through 7 as shown below: 15 | 16 | LEFTMOST | MIDDLE | RIGHTMOST | No. 17 | ------------ | ------------ | ------------ | ------------ 18 | Down| Down | Down | 0 19 | Down | Down | Up | 1 20 | Down | Up | Down | 2 21 | Down | Up | Up | 3 22 | Up | Down | Down | 4 23 | Up | Down | Up | 5 24 | Up | Up | Down | 6 25 | Up | Up | Up | 7 26 | 27 | So, to put the octal number 315 in switches 0 through 7, the switches would have the following positions: 28 | 29 | 30 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 31 | -- | -- | -- | -- | -- | -- | -- | -- 32 | UP | UP | DOWN | DOWN | UP | UP | DOWN | UP 33 | | | 3 | | 1 | | | 5 | 34 | 35 | ## Bootstrap loaders used in this guide 36 | **The following program is the bootstrap loader for users loading from paper tape.** 37 | 38 | OCTAL ADDRESS | OCTAL DATA 39 | -- | -- 40 | 000 | 041 41 | 001 | 175 42 | 002 | 037 43 | 003 | 061 44 | 004 | 022 45 | 005 | 000 46 | 006 | 333 47 | 007 | 000 48 | 010 | 017 49 | 011 | 330 50 | 012 | 333 51 | 013 | 001 52 | 014 | 275 53 | 015 | 310 54 | 016 | 055 55 | 017 | 167 56 | 020 | 300 57 | 021 | 351 58 | 022 | 003 59 | 023 | 000 60 | 61 | **The following bootstrap loader is for users with BASIC supplied on an audio cassette.** 62 | 63 | OCTAL ADDRESS | OCTAL DATA 64 | -- | -- 65 | 000 | 041 66 | 001 | 175 67 | 002 | 037 68 | 003 | 061 69 | 004 | 022 70 | 005 | 000 71 | 006 | 333 72 | 007 | 006 73 | 010 | 017 74 | 011 | 330 75 | 012 | 333 76 | 013 | 007 77 | 014 | 275 78 | 015 | 310 79 | 016 | 055 80 | 017 | 167 81 | 020 | 300 82 | 021 | 351 83 | 022 | 003 84 | 023 | 000 85 | 86 | ## Loading a bootstrap loader: 87 | 1. Put switches *0* through *15* in the down position. 88 | 2. Raise EXAMINE. 89 | 3. Put *041* (data for address *000*) in switches *0* through *7*. 90 | 4. Raise DEPOSIT. 91 | 5. Put the data for the next address in switches *0* through *7*. 92 | 6. Depress DEPOSIT NEXT. 93 | 7. Repeat steps *5* and *6* until the entire loader is toggled in. 94 | 8. Put switches *0* through *15* in the down position. 95 | 9. Raise EXAMINE. 96 | 10. Check that lights DO through D7 correspond with the data that should be in address *000*. A light on means the switch was up, a light off means the switch was down. So for address *000*, lights D1 through D4 and lights D6 and D7 should be off, and lights DO and DS should be on. If the correct value is there, go to step *13*. If the value is wrong, continue with step *11* 97 | 11. Put the correct value in switches *0* through *7*. 98 | 12. Raise DEPOSIT. 99 | 13. Depress EXAMINE NEXT. 100 | 14. Repeat steps *10* through *13*, checking to see that the correct data is in each corresponding address for the entire loader. 101 | 15. If you encountered any mistakes while checking the loader, go back now and re-check the whole program to be sure it is corrected. 102 | 16. Put the tape of BASIC into the tape reader. Be sure the tape is positioned at the beginning of the leader. The leader is the section of tape at the beginning with 6 out of the 8 holes punched. If you are loading from audio cassette, put the cassette in the recorder. Be sure the tape is fully rewound. 103 | 17. Put switches *0* through *15* in the down position. 104 | 18. Raise EXAMINE 105 | 19. If you have connected to your terminal a REV 0 Serial I/O Board on which the update changing the flag bits has not been made, raise switch *14*; if you are loading from an audio cassette, raise switch *15* as well. If you have a REV 0 Serial I/O Board which has been updated, or have a REV 1 I/O Board, switch *14* should remain down and switch *15* should be raised only if you are loading from audio cassette. 106 | 20. Turn on the tape reader and then depress RUN. Be sure RUN is depressed while the reader is still on the leader. Do not depress run before turning on the reader, since this may cause the tape to be read incorrectly. If you are loading from a cassette, turn the cassette recorder to "Play". Wait 15 seconds and then depress RUN. 107 | 21. Wait for the tape to be read in. This should take about 12 minutes for 8K BASIC and 6 minutes for 4K BASIC. It takes about 4 minutes to load 8K BASIC from cassette, and about 2 minutes for 4K BASIC. Do not move the switches while the tape is being read in. 108 | 22. If a C or an O is printed on the terminal as the tape reads in, the tape has been mis-read and you should start over at the beginning of this guide. 109 | 23. When the tape finishes reading, BASIC should start up and print MEMORY SIZE?. See next step for initialization procedure. 110 | 24. If BASIC refuses to load from the Audio Cassette, the ACR Demodulator may need alignment. The flip side of the cassette contains 90 seconds of 125's (octal) which were recorded at the same tape speed as BASIC. In that case **give up and get a better hobby.** 111 | 112 | # Initialization procedure 113 | After you have loaded BASIC, it will respond: **MEMORY SIZE?** 114 | 115 | There are 4096 bytes of memory in a 4K system, and 8192 bytes in an 8K system. Specify the amount of memory you want to use in bytes and type a carriage return. 116 | 117 | BASIC will then ask: **TERMINAL WIDTH?** 118 | 119 | This is to set the output line width for PRINT statements only. Type in the number of characters for the line width for the particular terminal or other output device you are using. This may be any number from 1 to 255, depending on the terminal. If no answer is given (i.e. a carriage return is typed) the line width is set to 72 characters. 120 | 121 | Now ALTAIR BASIC will enter a dialog which will allow you to delete some of the arithmetic functions. Deleting these functions will give more memory space to store your programs and variables. However, you will not be able to call the functions you delete. So just ignore this dialog and type **Y** to all functions since they are required to properly support IanDB. 122 | 123 | **You will now be ready to load IanDB.** 124 | 125 | # Loading IanDB into ALTAIR BASIC 126 | 127 | Manually type the code you may find here (https://github.com/styler/ian-db/blob/master/adapters/basic.bas) into your BASIC terminal and press the carriage return to launch it. After a couple of seconds you will see a message being printed on your attached printer. If you see a greeting message, you have succesfully set up IanDB on your Altair 8800, and you can begin using it! 128 | 129 | **Congratulations!** 130 | 131 | 132 | -------------------------------------------------------------------------------- /lit.fam: -------------------------------------------------------------------------------- 1 | 💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫💯👌😂😂😂💯😫😫 2 | --------------------------------------------------------------------------------